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