xref: /aosp_15_r20/external/anonymous-counting-tokens/act/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_ACT_H_
17 #define PRIVATE_JOIN_AND_COMPUTE_ANONYMOUS_COUNTING_TOKENS_ACT_H_
18 
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/util/status.inc"
26 
27 namespace private_join_and_compute {
28 namespace anonymous_counting_tokens {
29 
30 // Abstract class for methods related to Anonymous Counting Tokens.
31 class AnonymousCountingTokens {
32  public:
33   virtual ~AnonymousCountingTokens() = default;
34 
35   // Implementations should return a fresh set of Server parameters
36   // corresponding to these SchemeParameters.
37   virtual StatusOr<ServerParameters> GenerateServerParameters(
38       const SchemeParameters& scheme_parameters) = 0;
39 
40   // Implementations should return a fresh set of Client parameters
41   // corresponding to these SchemeParameters and ServerPublicParameters.
42   virtual StatusOr<ClientParameters> GenerateClientParameters(
43       const SchemeParameters& scheme_parameters,
44       const ServerPublicParameters& server_public_parameters) = 0;
45 
46   // Implementations should verify the consistency of these
47   // ClientPublicParameters with the Server and scheme parameters.
48   virtual Status CheckClientParameters(
49       const SchemeParameters& scheme_parameters,
50       const ClientPublicParameters& client_public_parameters,
51       const ServerPublicParameters& server_public_parameters,
52       const ServerPrivateParameters& server_private_parameters) = 0;
53 
54   // Implementations should generate a tuple of client_fingerprints,
55   // TokensRequest and TokensRequestPrivateState for the given set of messages.
56   virtual StatusOr<std::tuple<std::vector<std::string>, TokensRequest,
57                               TokensRequestPrivateState>>
58   GenerateTokensRequest(
59       absl::Span<const std::string> messages,
60       const SchemeParameters& scheme_parameters,
61       const ClientPublicParameters& client_public_parameters,
62       const ClientPrivateParameters& client_private_parameters,
63       const ServerPublicParameters& server_public_parameters) = 0;
64 
65   // Implementations should return OkStatus on a valid request.
66   virtual Status CheckTokensRequest(
67       absl::Span<const std::string> client_fingerprints,
68       const TokensRequest& tokens_request,
69       const SchemeParameters& scheme_parameters,
70       const ClientPublicParameters& client_public_parameters,
71       const ServerPublicParameters& server_public_parameters,
72       const ServerPrivateParameters& server_private_parameters) = 0;
73 
74   // Implementations should return the TokensResponse.
75   virtual StatusOr<TokensResponse> GenerateTokensResponse(
76       const TokensRequest& tokens_request,
77       const SchemeParameters& scheme_parameters,
78       const ClientPublicParameters& client_public_parameters,
79       const ServerPublicParameters& server_public_parameters,
80       const ServerPrivateParameters& server_private_parameters) = 0;
81 
82   // Implementations should return OkStatus on a valid response.
83   virtual Status VerifyTokensResponse(
84       absl::Span<const std::string> messages,
85       const TokensRequest& tokens_request,
86       const TokensRequestPrivateState& tokens_request_private_state,
87       const TokensResponse& tokens_response,
88       const SchemeParameters& scheme_parameters,
89       const ClientPublicParameters& client_public_parameters,
90       const ClientPrivateParameters& client_private_parameters,
91       const ServerPublicParameters& server_public_parameters) = 0;
92 
93   // Implementations should return a vector of tokens corresponding to the
94   // supplied messages.
95   virtual StatusOr<std::vector<Token>> RecoverTokens(
96       absl::Span<const std::string> messages,
97       const TokensRequest& tokens_request,
98       const TokensRequestPrivateState& tokens_request_private_state,
99       const TokensResponse& tokens_response,
100       const SchemeParameters& scheme_parameters,
101       const ClientPublicParameters& client_public_parameters,
102       const ClientPrivateParameters& client_private_parameters,
103       const ServerPublicParameters& server_public_parameters) = 0;
104 
105   // Implementations should return OkStatus on valid tokens.
106   virtual Status VerifyToken(
107       std::string m, const Token& token,
108       const SchemeParameters& scheme_parameters,
109       const ServerPublicParameters& server_public_parameters,
110       const ServerPrivateParameters& server_private_parameters) = 0;
111 
112  protected:
113   AnonymousCountingTokens() = default;
114 };
115 
116 }  // namespace anonymous_counting_tokens
117 }  // namespace private_join_and_compute
118 
119 #endif  // PRIVATE_JOIN_AND_COMPUTE_ANONYMOUS_COUNTING_TOKENS_ACT_H_
120