aboutsummaryrefslogtreecommitdiff
path: root/act/fake_act.cc
diff options
context:
space:
mode:
Diffstat (limited to 'act/fake_act.cc')
-rw-r--r--act/fake_act.cc144
1 files changed, 144 insertions, 0 deletions
diff --git a/act/fake_act.cc b/act/fake_act.cc
new file mode 100644
index 0000000..48cf40f
--- /dev/null
+++ b/act/fake_act.cc
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2023 Google LLC.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "act/fake_act.h"
+
+#include <memory>
+#include <string>
+#include <tuple>
+#include <utility>
+#include <vector>
+
+#include "act/act.pb.h"
+#include "private_join_and_compute/crypto/context.h"
+
+namespace private_join_and_compute {
+namespace anonymous_counting_tokens {
+
+// Returns an instance of FakeAnonymousCountingTokens.
+std::unique_ptr<AnonymousCountingTokens> FakeAnonymousCountingTokens::Create() {
+ return absl::WrapUnique<FakeAnonymousCountingTokens>(
+ new FakeAnonymousCountingTokens());
+}
+
+// Returns empty Server parameters.
+StatusOr<ServerParameters>
+FakeAnonymousCountingTokens::GenerateServerParameters(
+ const SchemeParameters& scheme_parameters) {
+ return ServerParameters::default_instance();
+}
+
+// Returns empty Client parameters.
+StatusOr<ClientParameters>
+FakeAnonymousCountingTokens::GenerateClientParameters(
+ const SchemeParameters& scheme_parameters,
+ const ServerPublicParameters& server_public_parameters) {
+ return ClientParameters::default_instance();
+}
+
+// Always returns "Ok".
+Status FakeAnonymousCountingTokens::CheckClientParameters(
+ const SchemeParameters& scheme_parameters,
+ const ClientPublicParameters& client_public_parameters,
+ const ServerPublicParameters& server_public_parameters,
+ const ServerPrivateParameters& server_private_parameters) {
+ return absl::OkStatus();
+}
+
+// For this fake implementation, the client fingerprints are the same as the
+// messages (this is insecure).
+StatusOr<std::tuple<std::vector<std::string>, TokensRequest,
+ TokensRequestPrivateState>>
+FakeAnonymousCountingTokens::GenerateTokensRequest(
+ absl::Span<const std::string> messages,
+ const SchemeParameters& scheme_parameters,
+ const ClientPublicParameters& client_public_parameters,
+ const ClientPrivateParameters& client_private_parameters,
+ const ServerPublicParameters& server_public_parameters) {
+ return std::make_tuple(
+ std::vector<std::string>(messages.begin(), messages.end()),
+ TokensRequest::default_instance(),
+ TokensRequestPrivateState::default_instance());
+}
+
+// Always returns "Ok".
+Status FakeAnonymousCountingTokens::CheckTokensRequest(
+ absl::Span<const std::string> client_fingerprints,
+ const TokensRequest& tokens_request,
+ const SchemeParameters& scheme_parameters,
+ const ClientPublicParameters& client_public_parameters,
+ const ServerPublicParameters& server_public_parameters,
+ const ServerPrivateParameters& server_private_parameters) {
+ return absl::OkStatus();
+}
+
+// Returns an empty TokensResponse.
+StatusOr<TokensResponse> FakeAnonymousCountingTokens::GenerateTokensResponse(
+ const TokensRequest& tokens_request,
+ const SchemeParameters& scheme_parameters,
+ const ClientPublicParameters& client_public_parameters,
+ const ServerPublicParameters& server_public_parameters,
+ const ServerPrivateParameters& server_private_parameters) {
+ return TokensResponse::default_instance();
+}
+
+// Always returns "Ok".
+Status FakeAnonymousCountingTokens::VerifyTokensResponse(
+ absl::Span<const std::string> messages, const TokensRequest& tokens_request,
+ const TokensRequestPrivateState& tokens_request_private_state,
+ const TokensResponse& tokens_response,
+ const SchemeParameters& scheme_parameters,
+ const ClientPublicParameters& client_public_parameters,
+ const ClientPrivateParameters& client_private_parameters,
+ const ServerPublicParameters& server_public_parameters) {
+ return absl::OkStatus();
+}
+
+// Returns a set of tokens containing randomly generated "nonce" values, and
+// all other fields empty.
+StatusOr<std::vector<Token>> FakeAnonymousCountingTokens::RecoverTokens(
+ absl::Span<const std::string> messages, const TokensRequest& tokens_request,
+ const TokensRequestPrivateState& tokens_request_private_state,
+ const TokensResponse& tokens_response,
+ const SchemeParameters& scheme_parameters,
+ const ClientPublicParameters& client_public_parameters,
+ const ClientPrivateParameters& client_private_parameters,
+ const ServerPublicParameters& server_public_parameters) {
+ Context context;
+ BigNum nonce_bound = context.One().Lshift(kFakeTokenNonceLengthBits);
+
+ std::vector<Token> result;
+ result.reserve(messages.size());
+ for (size_t i = 0; i < messages.size(); ++i) {
+ Token fake_token;
+ fake_token.set_nonce_bytes(
+ context.GenerateRandLessThan(nonce_bound).ToBytes());
+ result.push_back(fake_token);
+ }
+
+ return std::move(result);
+}
+
+// Always returns "Ok".
+Status FakeAnonymousCountingTokens::VerifyToken(
+ std::string m, const Token& token,
+ const SchemeParameters& scheme_parameters,
+ const ServerPublicParameters& server_public_parameters,
+ const ServerPrivateParameters& server_private_parameters) {
+ return absl::OkStatus();
+}
+
+} // namespace anonymous_counting_tokens
+} // namespace private_join_and_compute