xref: /aosp_15_r20/external/anonymous-counting-tokens/act/fake_act.cc (revision a26f13018b999b025c962678da434c0a5aec4dae)
1 /*
2  * Copyright 2023 Google LLC.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     https://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "act/fake_act.h"
17 
18 #include <memory>
19 #include <string>
20 #include <tuple>
21 #include <utility>
22 #include <vector>
23 
24 #include "act/act.pb.h"
25 #include "private_join_and_compute/crypto/context.h"
26 
27 namespace private_join_and_compute {
28 namespace anonymous_counting_tokens {
29 
30 // Returns an instance of FakeAnonymousCountingTokens.
Create()31 std::unique_ptr<AnonymousCountingTokens> FakeAnonymousCountingTokens::Create() {
32   return absl::WrapUnique<FakeAnonymousCountingTokens>(
33       new FakeAnonymousCountingTokens());
34 }
35 
36 // Returns empty Server parameters.
37 StatusOr<ServerParameters>
GenerateServerParameters(const SchemeParameters & scheme_parameters)38 FakeAnonymousCountingTokens::GenerateServerParameters(
39     const SchemeParameters& scheme_parameters) {
40   return ServerParameters::default_instance();
41 }
42 
43 // Returns empty Client parameters.
44 StatusOr<ClientParameters>
GenerateClientParameters(const SchemeParameters & scheme_parameters,const ServerPublicParameters & server_public_parameters)45 FakeAnonymousCountingTokens::GenerateClientParameters(
46     const SchemeParameters& scheme_parameters,
47     const ServerPublicParameters& server_public_parameters) {
48   return ClientParameters::default_instance();
49 }
50 
51 // Always returns "Ok".
CheckClientParameters(const SchemeParameters & scheme_parameters,const ClientPublicParameters & client_public_parameters,const ServerPublicParameters & server_public_parameters,const ServerPrivateParameters & server_private_parameters)52 Status FakeAnonymousCountingTokens::CheckClientParameters(
53     const SchemeParameters& scheme_parameters,
54     const ClientPublicParameters& client_public_parameters,
55     const ServerPublicParameters& server_public_parameters,
56     const ServerPrivateParameters& server_private_parameters) {
57   return absl::OkStatus();
58 }
59 
60 // For this fake implementation, the client fingerprints are the same as the
61 // messages (this is insecure).
62 StatusOr<std::tuple<std::vector<std::string>, TokensRequest,
63                     TokensRequestPrivateState>>
GenerateTokensRequest(absl::Span<const std::string> messages,const SchemeParameters & scheme_parameters,const ClientPublicParameters & client_public_parameters,const ClientPrivateParameters & client_private_parameters,const ServerPublicParameters & server_public_parameters)64 FakeAnonymousCountingTokens::GenerateTokensRequest(
65     absl::Span<const std::string> messages,
66     const SchemeParameters& scheme_parameters,
67     const ClientPublicParameters& client_public_parameters,
68     const ClientPrivateParameters& client_private_parameters,
69     const ServerPublicParameters& server_public_parameters) {
70   return std::make_tuple(
71       std::vector<std::string>(messages.begin(), messages.end()),
72       TokensRequest::default_instance(),
73       TokensRequestPrivateState::default_instance());
74 }
75 
76 // Always returns "Ok".
CheckTokensRequest(absl::Span<const std::string> client_fingerprints,const TokensRequest & tokens_request,const SchemeParameters & scheme_parameters,const ClientPublicParameters & client_public_parameters,const ServerPublicParameters & server_public_parameters,const ServerPrivateParameters & server_private_parameters)77 Status FakeAnonymousCountingTokens::CheckTokensRequest(
78     absl::Span<const std::string> client_fingerprints,
79     const TokensRequest& tokens_request,
80     const SchemeParameters& scheme_parameters,
81     const ClientPublicParameters& client_public_parameters,
82     const ServerPublicParameters& server_public_parameters,
83     const ServerPrivateParameters& server_private_parameters) {
84   return absl::OkStatus();
85 }
86 
87 // Returns an empty TokensResponse.
GenerateTokensResponse(const TokensRequest & tokens_request,const SchemeParameters & scheme_parameters,const ClientPublicParameters & client_public_parameters,const ServerPublicParameters & server_public_parameters,const ServerPrivateParameters & server_private_parameters)88 StatusOr<TokensResponse> FakeAnonymousCountingTokens::GenerateTokensResponse(
89     const TokensRequest& tokens_request,
90     const SchemeParameters& scheme_parameters,
91     const ClientPublicParameters& client_public_parameters,
92     const ServerPublicParameters& server_public_parameters,
93     const ServerPrivateParameters& server_private_parameters) {
94   return TokensResponse::default_instance();
95 }
96 
97 // Always returns "Ok".
VerifyTokensResponse(absl::Span<const std::string> messages,const TokensRequest & tokens_request,const TokensRequestPrivateState & tokens_request_private_state,const TokensResponse & tokens_response,const SchemeParameters & scheme_parameters,const ClientPublicParameters & client_public_parameters,const ClientPrivateParameters & client_private_parameters,const ServerPublicParameters & server_public_parameters)98 Status FakeAnonymousCountingTokens::VerifyTokensResponse(
99     absl::Span<const std::string> messages, const TokensRequest& tokens_request,
100     const TokensRequestPrivateState& tokens_request_private_state,
101     const TokensResponse& tokens_response,
102     const SchemeParameters& scheme_parameters,
103     const ClientPublicParameters& client_public_parameters,
104     const ClientPrivateParameters& client_private_parameters,
105     const ServerPublicParameters& server_public_parameters) {
106   return absl::OkStatus();
107 }
108 
109 // Returns a set of tokens containing randomly generated "nonce"  values, and
110 // all other fields empty.
RecoverTokens(absl::Span<const std::string> messages,const TokensRequest & tokens_request,const TokensRequestPrivateState & tokens_request_private_state,const TokensResponse & tokens_response,const SchemeParameters & scheme_parameters,const ClientPublicParameters & client_public_parameters,const ClientPrivateParameters & client_private_parameters,const ServerPublicParameters & server_public_parameters)111 StatusOr<std::vector<Token>> FakeAnonymousCountingTokens::RecoverTokens(
112     absl::Span<const std::string> messages, const TokensRequest& tokens_request,
113     const TokensRequestPrivateState& tokens_request_private_state,
114     const TokensResponse& tokens_response,
115     const SchemeParameters& scheme_parameters,
116     const ClientPublicParameters& client_public_parameters,
117     const ClientPrivateParameters& client_private_parameters,
118     const ServerPublicParameters& server_public_parameters) {
119   Context context;
120   BigNum nonce_bound = context.One().Lshift(kFakeTokenNonceLengthBits);
121 
122   std::vector<Token> result;
123   result.reserve(messages.size());
124   for (size_t i = 0; i < messages.size(); ++i) {
125     Token fake_token;
126     fake_token.set_nonce_bytes(
127         context.GenerateRandLessThan(nonce_bound).ToBytes());
128     result.push_back(fake_token);
129   }
130 
131   return std::move(result);
132 }
133 
134 // Always returns "Ok".
VerifyToken(std::string m,const Token & token,const SchemeParameters & scheme_parameters,const ServerPublicParameters & server_public_parameters,const ServerPrivateParameters & server_private_parameters)135 Status FakeAnonymousCountingTokens::VerifyToken(
136     std::string m, const Token& token,
137     const SchemeParameters& scheme_parameters,
138     const ServerPublicParameters& server_public_parameters,
139     const ServerPrivateParameters& server_private_parameters) {
140   return absl::OkStatus();
141 }
142 
143 }  // namespace anonymous_counting_tokens
144 }  // namespace private_join_and_compute
145