xref: /aosp_15_r20/external/anonymous-counting-tokens/act/act_v0/act_v0.h (revision a26f13018b999b025c962678da434c0a5aec4dae)
1*a26f1301SXin Li /*
2*a26f1301SXin Li  * Copyright 2023 Google LLC.
3*a26f1301SXin Li  * Licensed under the Apache License, Version 2.0 (the "License");
4*a26f1301SXin Li  * you may not use this file except in compliance with the License.
5*a26f1301SXin Li  * You may obtain a copy of the License at
6*a26f1301SXin Li  *
7*a26f1301SXin Li  *     https://www.apache.org/licenses/LICENSE-2.0
8*a26f1301SXin Li  *
9*a26f1301SXin Li  * Unless required by applicable law or agreed to in writing, software
10*a26f1301SXin Li  * distributed under the License is distributed on an "AS IS" BASIS,
11*a26f1301SXin Li  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*a26f1301SXin Li  * See the License for the specific language governing permissions and
13*a26f1301SXin Li  * limitations under the License.
14*a26f1301SXin Li  */
15*a26f1301SXin Li 
16*a26f1301SXin Li #ifndef PRIVATE_JOIN_AND_COMPUTE_ANONYMOUS_COUNTING_TOKENS_ACT_V0_ACT_V0_H_
17*a26f1301SXin Li #define PRIVATE_JOIN_AND_COMPUTE_ANONYMOUS_COUNTING_TOKENS_ACT_V0_ACT_V0_H_
18*a26f1301SXin Li 
19*a26f1301SXin Li #include <memory>
20*a26f1301SXin Li #include <string>
21*a26f1301SXin Li #include <tuple>
22*a26f1301SXin Li #include <vector>
23*a26f1301SXin Li 
24*a26f1301SXin Li #include "act/act.h"
25*a26f1301SXin Li #include "act/act.pb.h"
26*a26f1301SXin Li #include "private_join_and_compute/util/status.inc"
27*a26f1301SXin Li 
28*a26f1301SXin Li namespace private_join_and_compute {
29*a26f1301SXin Li namespace anonymous_counting_tokens {
30*a26f1301SXin Li 
31*a26f1301SXin Li // An implementation of vO Anonymous Counting Tokens.
32*a26f1301SXin Li class AnonymousCountingTokensV0 : public AnonymousCountingTokens {
33*a26f1301SXin Li  public:
34*a26f1301SXin Li   static std::unique_ptr<AnonymousCountingTokens> Create();
35*a26f1301SXin Li 
36*a26f1301SXin Li   // Returns a fresh set of Server parameters corresponding to these
37*a26f1301SXin Li   // SchemeParameters. Fails with InvalidArgument if the parameters don't
38*a26f1301SXin Li   // correspond to ACT v0.
39*a26f1301SXin Li   StatusOr<ServerParameters> GenerateServerParameters(
40*a26f1301SXin Li       const SchemeParameters& scheme_parameters) override;
41*a26f1301SXin Li 
42*a26f1301SXin Li   // Returns a fresh set of Client parameters corresponding to these
43*a26f1301SXin Li   // SchemeParameters and ServerPublicParameters. Fails with InvalidArgument if
44*a26f1301SXin Li   // the parameters don't correspond to ACT v0.
45*a26f1301SXin Li   StatusOr<ClientParameters> GenerateClientParameters(
46*a26f1301SXin Li       const SchemeParameters& scheme_parameters,
47*a26f1301SXin Li       const ServerPublicParameters& server_public_parameters) override;
48*a26f1301SXin Li 
49*a26f1301SXin Li   // Verifies the consistency of the  ClientPublicParameters with the Server and
50*a26f1301SXin Li   // scheme parameters. Fails with InvalidArgument if the parameters don't
51*a26f1301SXin Li   // correspond to ACT v0.
52*a26f1301SXin Li   Status CheckClientParameters(
53*a26f1301SXin Li       const SchemeParameters& scheme_parameters,
54*a26f1301SXin Li       const ClientPublicParameters& client_public_parameters,
55*a26f1301SXin Li       const ServerPublicParameters& server_public_parameters,
56*a26f1301SXin Li       const ServerPrivateParameters& server_private_parameters) override;
57*a26f1301SXin Li 
58*a26f1301SXin Li   // Returns a tuple of client_fingerprints, TokensRequest and
59*a26f1301SXin Li   // TokensRequestPrivateState for the given set of messages. Fails with
60*a26f1301SXin Li   // InvalidArgument if the parameters don't correspond to ACT v0.
61*a26f1301SXin Li   StatusOr<std::tuple<std::vector<std::string>, TokensRequest,
62*a26f1301SXin Li                       TokensRequestPrivateState>>
63*a26f1301SXin Li   GenerateTokensRequest(
64*a26f1301SXin Li       absl::Span<const std::string> messages,
65*a26f1301SXin Li       const SchemeParameters& scheme_parameters,
66*a26f1301SXin Li       const ClientPublicParameters& client_public_parameters,
67*a26f1301SXin Li       const ClientPrivateParameters& client_private_parameters,
68*a26f1301SXin Li       const ServerPublicParameters& server_public_parameters) override;
69*a26f1301SXin Li 
70*a26f1301SXin Li   // Returns OkStatus on a valid request. Fails with InvalidArgument if the
71*a26f1301SXin Li   // parameters don't correspond to ACT v0.
72*a26f1301SXin Li   Status CheckTokensRequest(
73*a26f1301SXin Li       absl::Span<const std::string> client_fingerprints,
74*a26f1301SXin Li       const TokensRequest& tokens_request,
75*a26f1301SXin Li       const SchemeParameters& scheme_parameters,
76*a26f1301SXin Li       const ClientPublicParameters& client_public_parameters,
77*a26f1301SXin Li       const ServerPublicParameters& server_public_parameters,
78*a26f1301SXin Li       const ServerPrivateParameters& server_private_parameters) override;
79*a26f1301SXin Li 
80*a26f1301SXin Li   // Returns the TokensResponse. Fails with InvalidArgument if the parameters
81*a26f1301SXin Li   // don't correspond to ACT v0.
82*a26f1301SXin Li   StatusOr<TokensResponse> GenerateTokensResponse(
83*a26f1301SXin Li       const TokensRequest& tokens_request,
84*a26f1301SXin Li       const SchemeParameters& scheme_parameters,
85*a26f1301SXin Li       const ClientPublicParameters& client_public_parameters,
86*a26f1301SXin Li       const ServerPublicParameters& server_public_parameters,
87*a26f1301SXin Li       const ServerPrivateParameters& server_private_parameters) override;
88*a26f1301SXin Li 
89*a26f1301SXin Li   // Returns OkStatus on a valid response. Fails with InvalidArgument if the
90*a26f1301SXin Li   // parameters don't correspond to ACT v0.
91*a26f1301SXin Li   Status VerifyTokensResponse(
92*a26f1301SXin Li       absl::Span<const std::string> messages,
93*a26f1301SXin Li       const TokensRequest& tokens_request,
94*a26f1301SXin Li       const TokensRequestPrivateState& tokens_request_private_state,
95*a26f1301SXin Li       const TokensResponse& tokens_response,
96*a26f1301SXin Li       const SchemeParameters& scheme_parameters,
97*a26f1301SXin Li       const ClientPublicParameters& client_public_parameters,
98*a26f1301SXin Li       const ClientPrivateParameters& client_private_parameters,
99*a26f1301SXin Li       const ServerPublicParameters& server_public_parameters) override;
100*a26f1301SXin Li 
101*a26f1301SXin Li   // Returns a vector of tokens corresponding to the supplied messages. Fails
102*a26f1301SXin Li   // with InvalidArgument if the parameters don't correspond to ACT v0.
103*a26f1301SXin Li   StatusOr<std::vector<Token>> RecoverTokens(
104*a26f1301SXin Li       absl::Span<const std::string> messages,
105*a26f1301SXin Li       const TokensRequest& tokens_request,
106*a26f1301SXin Li       const TokensRequestPrivateState& tokens_request_private_state,
107*a26f1301SXin Li       const TokensResponse& tokens_response,
108*a26f1301SXin Li       const SchemeParameters& scheme_parameters,
109*a26f1301SXin Li       const ClientPublicParameters& client_public_parameters,
110*a26f1301SXin Li       const ClientPrivateParameters& client_private_parameters,
111*a26f1301SXin Li       const ServerPublicParameters& server_public_parameters) override;
112*a26f1301SXin Li 
113*a26f1301SXin Li   // Returns OkStatus on valid tokens. Fails with InvalidArgument if the
114*a26f1301SXin Li   // parameters don't correspond to ACT v0.
115*a26f1301SXin Li   Status VerifyToken(
116*a26f1301SXin Li       std::string m, const Token& token,
117*a26f1301SXin Li       const SchemeParameters& scheme_parameters,
118*a26f1301SXin Li       const ServerPublicParameters& server_public_parameters,
119*a26f1301SXin Li       const ServerPrivateParameters& server_private_parameters) override;
120*a26f1301SXin Li 
121*a26f1301SXin Li  protected:
122*a26f1301SXin Li   AnonymousCountingTokensV0() = default;
123*a26f1301SXin Li };
124*a26f1301SXin Li 
125*a26f1301SXin Li }  // namespace anonymous_counting_tokens
126*a26f1301SXin Li }  // namespace private_join_and_compute
127*a26f1301SXin Li 
128*a26f1301SXin Li #endif  // PRIVATE_JOIN_AND_COMPUTE_ANONYMOUS_COUNTING_TOKENS_ACT_V0_ACT_V0_H_
129