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