xref: /aosp_15_r20/external/anonymous-counting-tokens/act/fake_act.h (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 #ifndef PRIVATE_JOIN_AND_COMPUTE_ANONYMOUS_COUNTING_TOKENS_FAKE_ACT_H_
17 #define PRIVATE_JOIN_AND_COMPUTE_ANONYMOUS_COUNTING_TOKENS_FAKE_ACT_H_
18 
19 #include <memory>
20 #include <string>
21 #include <tuple>
22 #include <vector>
23 
24 #include "act/act.h"
25 #include "act/act.pb.h"
26 #include "private_join_and_compute/util/status.inc"
27 
28 namespace private_join_and_compute {
29 namespace anonymous_counting_tokens {
30 
31 // A fake, insecure implementation of Anonymous Counting Tokens for
32 // testing/stubbing purposes only. This should NOT be used in production: it
33 // doesn't have any of the desired security properties.
34 class FakeAnonymousCountingTokens : public AnonymousCountingTokens {
35  public:
36   static const size_t kFakeTokenNonceLengthBits = 256;
37 
38   // Returns an instance of FakeAnonymousCountingTokens.
39   static std::unique_ptr<AnonymousCountingTokens> Create();
40 
41   ~FakeAnonymousCountingTokens() override = default;
42 
43   // Returns empty Server parameters.
44   StatusOr<ServerParameters> GenerateServerParameters(
45       const SchemeParameters& scheme_parameters) override;
46 
47   // Returns empty Client parameters.
48   StatusOr<ClientParameters> GenerateClientParameters(
49       const SchemeParameters& scheme_parameters,
50       const ServerPublicParameters& server_public_parameters) override;
51 
52   // Always returns "Ok".
53   Status CheckClientParameters(
54       const SchemeParameters& scheme_parameters,
55       const ClientPublicParameters& client_public_parameters,
56       const ServerPublicParameters& server_public_parameters,
57       const ServerPrivateParameters& server_private_parameters) override;
58 
59   // For this fake implementation, the client fingerprints are the same as the
60   // messages (this is insecure).
61   StatusOr<std::tuple<std::vector<std::string>, TokensRequest,
62                       TokensRequestPrivateState>>
63   GenerateTokensRequest(
64       absl::Span<const std::string> messages,
65       const SchemeParameters& scheme_parameters,
66       const ClientPublicParameters& client_public_parameters,
67       const ClientPrivateParameters& client_private_parameters,
68       const ServerPublicParameters& server_public_parameters) override;
69 
70   // Always returns "Ok".
71   Status CheckTokensRequest(
72       absl::Span<const std::string> client_fingerprints,
73       const TokensRequest& tokens_request,
74       const SchemeParameters& scheme_parameters,
75       const ClientPublicParameters& client_public_parameters,
76       const ServerPublicParameters& server_public_parameters,
77       const ServerPrivateParameters& server_private_parameters) override;
78 
79   // Returns an empty TokensResponse.
80   StatusOr<TokensResponse> GenerateTokensResponse(
81       const TokensRequest& tokens_request,
82       const SchemeParameters& scheme_parameters,
83       const ClientPublicParameters& client_public_parameters,
84       const ServerPublicParameters& server_public_parameters,
85       const ServerPrivateParameters& server_private_parameters) override;
86 
87   // Always returns "Ok".
88   Status VerifyTokensResponse(
89       absl::Span<const std::string> messages,
90       const TokensRequest& tokens_request,
91       const TokensRequestPrivateState& tokens_request_private_state,
92       const TokensResponse& tokens_response,
93       const SchemeParameters& scheme_parameters,
94       const ClientPublicParameters& client_public_parameters,
95       const ClientPrivateParameters& client_private_parameters,
96       const ServerPublicParameters& server_public_parameters) override;
97 
98   // Returns a set of tokens containing randomly generated "nonce"  values, and
99   // all other fields empty.
100   StatusOr<std::vector<Token>> RecoverTokens(
101       absl::Span<const std::string> messages,
102       const TokensRequest& tokens_request,
103       const TokensRequestPrivateState& tokens_request_private_state,
104       const TokensResponse& tokens_response,
105       const SchemeParameters& scheme_parameters,
106       const ClientPublicParameters& client_public_parameters,
107       const ClientPrivateParameters& client_private_parameters,
108       const ServerPublicParameters& server_public_parameters) override;
109 
110   // Always returns "Ok".
111   Status VerifyToken(
112       std::string m, const Token& token,
113       const SchemeParameters& scheme_parameters,
114       const ServerPublicParameters& server_public_parameters,
115       const ServerPrivateParameters& server_private_parameters) override;
116 
117  protected:
118   FakeAnonymousCountingTokens() = default;
119 };
120 
121 }  // namespace anonymous_counting_tokens
122 }  // namespace private_join_and_compute
123 
124 #endif  // PRIVATE_JOIN_AND_COMPUTE_ANONYMOUS_COUNTING_TOKENS_FAKE_ACT_H_
125