xref: /aosp_15_r20/external/anonymous-counting-tokens/act/act_v0/act_v0.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_ACT_V0_ACT_V0_H_
17 #define PRIVATE_JOIN_AND_COMPUTE_ANONYMOUS_COUNTING_TOKENS_ACT_V0_ACT_V0_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 // An implementation of vO Anonymous Counting Tokens.
32 class AnonymousCountingTokensV0 : public AnonymousCountingTokens {
33  public:
34   static std::unique_ptr<AnonymousCountingTokens> Create();
35 
36   // Returns a fresh set of Server parameters corresponding to these
37   // SchemeParameters. Fails with InvalidArgument if the parameters don't
38   // correspond to ACT v0.
39   StatusOr<ServerParameters> GenerateServerParameters(
40       const SchemeParameters& scheme_parameters) override;
41 
42   // Returns a fresh set of Client parameters corresponding to these
43   // SchemeParameters and ServerPublicParameters. Fails with InvalidArgument if
44   // the parameters don't correspond to ACT v0.
45   StatusOr<ClientParameters> GenerateClientParameters(
46       const SchemeParameters& scheme_parameters,
47       const ServerPublicParameters& server_public_parameters) override;
48 
49   // Verifies the consistency of the  ClientPublicParameters with the Server and
50   // scheme parameters. Fails with InvalidArgument if the parameters don't
51   // correspond to ACT v0.
52   Status CheckClientParameters(
53       const SchemeParameters& scheme_parameters,
54       const ClientPublicParameters& client_public_parameters,
55       const ServerPublicParameters& server_public_parameters,
56       const ServerPrivateParameters& server_private_parameters) override;
57 
58   // Returns a tuple of client_fingerprints, TokensRequest and
59   // TokensRequestPrivateState for the given set of messages. Fails with
60   // InvalidArgument if the parameters don't correspond to ACT v0.
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   // Returns OkStatus on a valid request. Fails with InvalidArgument if the
71   // parameters don't correspond to ACT v0.
72   Status CheckTokensRequest(
73       absl::Span<const std::string> client_fingerprints,
74       const TokensRequest& tokens_request,
75       const SchemeParameters& scheme_parameters,
76       const ClientPublicParameters& client_public_parameters,
77       const ServerPublicParameters& server_public_parameters,
78       const ServerPrivateParameters& server_private_parameters) override;
79 
80   // Returns the TokensResponse. Fails with InvalidArgument if the parameters
81   // don't correspond to ACT v0.
82   StatusOr<TokensResponse> GenerateTokensResponse(
83       const TokensRequest& tokens_request,
84       const SchemeParameters& scheme_parameters,
85       const ClientPublicParameters& client_public_parameters,
86       const ServerPublicParameters& server_public_parameters,
87       const ServerPrivateParameters& server_private_parameters) override;
88 
89   // Returns OkStatus on a valid response. Fails with InvalidArgument if the
90   // parameters don't correspond to ACT v0.
91   Status VerifyTokensResponse(
92       absl::Span<const std::string> messages,
93       const TokensRequest& tokens_request,
94       const TokensRequestPrivateState& tokens_request_private_state,
95       const TokensResponse& tokens_response,
96       const SchemeParameters& scheme_parameters,
97       const ClientPublicParameters& client_public_parameters,
98       const ClientPrivateParameters& client_private_parameters,
99       const ServerPublicParameters& server_public_parameters) override;
100 
101   // Returns a vector of tokens corresponding to the supplied messages. Fails
102   // with InvalidArgument if the parameters don't correspond to ACT v0.
103   StatusOr<std::vector<Token>> RecoverTokens(
104       absl::Span<const std::string> messages,
105       const TokensRequest& tokens_request,
106       const TokensRequestPrivateState& tokens_request_private_state,
107       const TokensResponse& tokens_response,
108       const SchemeParameters& scheme_parameters,
109       const ClientPublicParameters& client_public_parameters,
110       const ClientPrivateParameters& client_private_parameters,
111       const ServerPublicParameters& server_public_parameters) override;
112 
113   // Returns OkStatus on valid tokens. Fails with InvalidArgument if the
114   // parameters don't correspond to ACT v0.
115   Status VerifyToken(
116       std::string m, const Token& token,
117       const SchemeParameters& scheme_parameters,
118       const ServerPublicParameters& server_public_parameters,
119       const ServerPrivateParameters& server_private_parameters) override;
120 
121  protected:
122   AnonymousCountingTokensV0() = default;
123 };
124 
125 }  // namespace anonymous_counting_tokens
126 }  // namespace private_join_and_compute
127 
128 #endif  // PRIVATE_JOIN_AND_COMPUTE_ANONYMOUS_COUNTING_TOKENS_ACT_V0_ACT_V0_H_
129