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 #include "act/act_v0/parameters.h"
17
18 #include <string>
19 #include "absl/strings/str_cat.h"
20 #include "act/act_v0/act_v0.pb.h"
21
22 namespace private_join_and_compute {
23 namespace anonymous_counting_tokens {
24
ActV0TestSchemeParameters()25 SchemeParameters ActV0TestSchemeParameters() {
26 int test_modulus_length = 1536;
27 int batch_size = 3;
28 std::string random_oracle_prefix = "ActV0TestSchemeParameters";
29
30 SchemeParameters scheme_parameters;
31 SchemeParametersV0* scheme_parameters_v0 =
32 scheme_parameters.mutable_scheme_parameters_v0();
33 scheme_parameters_v0->set_security_parameter(kDefaultSecurityParameter);
34 scheme_parameters_v0->set_challenge_length_bits(kDefaultChallengeLength);
35 scheme_parameters_v0->set_modulus_length_bits(test_modulus_length);
36 scheme_parameters_v0->set_camenisch_shoup_s(kDefaultCamenischShoupS);
37 scheme_parameters_v0->set_vector_encryption_length(batch_size);
38 scheme_parameters_v0->set_pedersen_batch_size(batch_size);
39 scheme_parameters_v0->set_prf_ec_group(kDefaultCurveId);
40 scheme_parameters_v0->set_random_oracle_prefix(random_oracle_prefix);
41
42 return scheme_parameters;
43 }
44
ActV0Batch16SchemeParameters()45 SchemeParameters ActV0Batch16SchemeParameters() {
46 int batch_size = 16;
47 std::string random_oracle_prefix = "ActV0Batch16SchemeParameters";
48
49 SchemeParameters scheme_parameters;
50 SchemeParametersV0* scheme_parameters_v0 =
51 scheme_parameters.mutable_scheme_parameters_v0();
52 scheme_parameters_v0->set_security_parameter(kDefaultSecurityParameter);
53 scheme_parameters_v0->set_challenge_length_bits(kDefaultChallengeLength);
54 scheme_parameters_v0->set_modulus_length_bits(kDefaultModulusLengthBits);
55 scheme_parameters_v0->set_camenisch_shoup_s(kDefaultCamenischShoupS);
56 scheme_parameters_v0->set_vector_encryption_length(batch_size);
57 scheme_parameters_v0->set_pedersen_batch_size(batch_size);
58 scheme_parameters_v0->set_prf_ec_group(kDefaultCurveId);
59 scheme_parameters_v0->set_random_oracle_prefix(random_oracle_prefix);
60
61 return scheme_parameters;
62 }
63
ActV0Batch32SchemeParameters()64 SchemeParameters ActV0Batch32SchemeParameters() {
65 int batch_size = 32;
66 std::string random_oracle_prefix = "ActV0Batch32SchemeParameters";
67
68 SchemeParameters scheme_parameters;
69 SchemeParametersV0* scheme_parameters_v0 =
70 scheme_parameters.mutable_scheme_parameters_v0();
71 scheme_parameters_v0->set_security_parameter(kDefaultSecurityParameter);
72 scheme_parameters_v0->set_challenge_length_bits(kDefaultChallengeLength);
73 scheme_parameters_v0->set_modulus_length_bits(kDefaultModulusLengthBits);
74 scheme_parameters_v0->set_camenisch_shoup_s(kDefaultCamenischShoupS);
75 scheme_parameters_v0->set_vector_encryption_length(batch_size);
76 scheme_parameters_v0->set_pedersen_batch_size(batch_size);
77 scheme_parameters_v0->set_prf_ec_group(kDefaultCurveId);
78 scheme_parameters_v0->set_random_oracle_prefix(random_oracle_prefix);
79
80 return scheme_parameters;
81 }
82
83 // Returns parameters supporting 32 messages in a batch, with CS vector
84 // encryption length set to 2, and modulus length 2048.
85 SchemeParameters
ActV0SchemeParametersPedersen32Modulus2048CamenischShoupVector2()86 ActV0SchemeParametersPedersen32Modulus2048CamenischShoupVector2() {
87 int pedersen_batch_size = 32;
88 int modulus_length = 2048;
89 int camensich_shoup_vector_encryption_length = 2;
90
91 return ActV0SchemeParameters(pedersen_batch_size, modulus_length,
92 camensich_shoup_vector_encryption_length);
93 }
94
95 // Returns custom parameters.
ActV0SchemeParameters(int pedersen_batch_size,int modulus_length_bits,int camenisch_shoup_vector_length)96 SchemeParameters ActV0SchemeParameters(int pedersen_batch_size,
97 int modulus_length_bits,
98 int camenisch_shoup_vector_length) {
99 std::string random_oracle_prefix = absl::StrCat(
100 "ActV0SchemeParametersPedersenBatchSize", pedersen_batch_size,
101 "ModulusLengthBits", modulus_length_bits, "CamenischShoupVectorLength",
102 camenisch_shoup_vector_length);
103
104 SchemeParameters scheme_parameters;
105 SchemeParametersV0* scheme_parameters_v0 =
106 scheme_parameters.mutable_scheme_parameters_v0();
107 scheme_parameters_v0->set_security_parameter(kDefaultSecurityParameter);
108 scheme_parameters_v0->set_challenge_length_bits(kDefaultChallengeLength);
109 scheme_parameters_v0->set_modulus_length_bits(modulus_length_bits);
110 scheme_parameters_v0->set_camenisch_shoup_s(kDefaultCamenischShoupS);
111 scheme_parameters_v0->set_vector_encryption_length(
112 camenisch_shoup_vector_length);
113 scheme_parameters_v0->set_pedersen_batch_size(pedersen_batch_size);
114 scheme_parameters_v0->set_prf_ec_group(kDefaultCurveId);
115 scheme_parameters_v0->set_random_oracle_prefix(random_oracle_prefix);
116
117 return scheme_parameters;
118 }
119
120 } // namespace anonymous_counting_tokens
121 } // namespace private_join_and_compute
122