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