zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp
Go to the documentation of this file.
1 //---------------------------------------------------------------------------//
2 // Copyright (c) 2018-2021 Mikhail Komarov <nemo@nil.foundation>
3 // Copyright (c) 2020-2021 Nikita Kaskov <nbering@nil.foundation>
4 // Copyright (c) 2020-2021 Ilias Khairullin <ilias@nil.foundation>
5 //
6 // MIT License
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to deal
10 // in the Software without restriction, including without limitation the rights
11 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 // copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // The above copyright notice and this permission notice shall be included in all
16 // copies or substantial portions of the Software.
17 //
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 // SOFTWARE.
25 //---------------------------------------------------------------------------//
26 // @file Declaration of interfaces for a ppzkSNARK for R1CS with a security proof
27 // in the generic group (GG) model.
28 //
29 // This includes:
30 //- class for proving key
31 //- class for verification key
32 //- class for processed verification key
33 //- class for key pair (proving key & verification key)
34 //- class for proof
35 //- generator algorithm
36 //- prover algorithm
37 //- verifier algorithm (with strong or weak input consistency)
38 //- online verifier algorithm (with strong or weak input consistency)
39 //
40 // The implementation instantiates the protocol of \[Gro16].
41 //
42 //
43 // Acronyms:
44 //
45 //- R1CS = "Rank-1 Constraint Systems"
46 //- ppzkSNARK = "PreProcessing Zero-Knowledge Succinct Non-interactive ARgument of Knowledge"
47 //
48 // References:
49 //
50 //\[Gro16]:
51 // "On the Size of Pairing-based Non-interactive Arguments",
52 // Jens Groth,
53 // EUROCRYPT 2016,
54 // <https://eprint.iacr.org/2016/260>
55 //---------------------------------------------------------------------------//
56 
57 #ifndef CRYPTO3_R1CS_GG_PPZKSNARK_BASIC_POLICY_HPP
58 #define CRYPTO3_R1CS_GG_PPZKSNARK_BASIC_POLICY_HPP
59 
68 
69 namespace nil {
70  namespace crypto3 {
71  namespace zk {
72  namespace snark {
73  namespace detail {
74  template<typename CurveType, ProvingMode mode = ProvingMode::Basic>
76 
77  template<typename CurveType>
79  typedef CurveType curve_type;
80  static constexpr ProvingMode mode = ProvingMode::Basic;
81 
82  /******************************** Params ********************************/
83 
89 
91 
93 
94  /******************************** Proving key ********************************/
95 
100 
101  /******************************* Verification key ****************************/
102 
107 
108  /************************ Processed verification key *************************/
109 
119 
120  /************************ Extended verification key *************************/
121 
129 
130  /********************************** Key pair *********************************/
131 
136 
137  /********************************** Key pair *********************************/
138 
145 
146  /********************************** Extended key pair *********************************/
147 
154 
155  /*********************************** Proof ***********************************/
156 
165  };
166 
167  template<typename CurveType>
169  typedef CurveType curve_type;
170  static constexpr ProvingMode mode = ProvingMode::Aggregate;
171 
172  /******************************** Params ********************************/
173 
179 
181 
183 
184  /******************************** Proving key ********************************/
185 
186  // TODO: remove
191 
192  /******************************* Verification key ****************************/
193 
198 
199  /********************************** Key pair *********************************/
200 
205 
206  /********************************** Aggregation SRS *********************************/
207 
212 
213  /******************************** Proving SRS for aggregation ********************************/
214 
219 
220  /**************************** Verification SRS for aggregation ********************************/
221 
226 
227  /********************************** Aggregation SRS pair *********************************/
228 
234 
235  /*********************************** Proof ***********************************/
236 
245  };
246 
247  template<typename CurveType>
250 
251  public:
252  typedef CurveType curve_type;
253  static constexpr ProvingMode mode = ProvingMode::EncryptedInput;
254 
255  /******************************** Params ********************************/
256 
262 
264 
266 
267  /******************************** Proving key ********************************/
268 
273 
274  /******************************* Verification key ****************************/
275 
280 
281  /********************************** Key pair *********************************/
282 
289 
290  /*********************************** Proof ***********************************/
291 
300  };
301  } // namespace detail
302  } // namespace snark
303  } // namespace zk
304  } // namespace crypto3
305 } // namespace nil
306 
307 #endif // CRYPTO3_R1CS_GG_PPZKSNARK_TYPES_POLICY_HPP
basic_policy::extended_verification_key_type verification_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:279
basic_policy::primary_input_type primary_input_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:263
basic_policy::extended_keypair_type keypair_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:288
basic_policy::constraint_system_type constraint_system_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:261
CurveType curve_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:252
basic_policy::proving_key_type proving_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:272
basic_policy::proof_type proof_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:299
basic_policy::auxiliary_input_type auxiliary_input_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:265
std::pair< ProvingKey, VerificationKey > r1cs_gg_ppzksnark_keypair
Definition: systems/ppzksnark/r1cs_gg_ppzksnark/keypair.hpp:36
std::vector< typename FieldType::value_type > r1cs_auxiliary_input
Definition: r1cs.hpp:104
ProvingMode
Definition: modes.hpp:33
std::vector< typename FieldType::value_type > r1cs_primary_input
Definition: r1cs.hpp:101
Definition: pair.hpp:31
r1cs_gg_ppzksnark_keypair< proving_key_type, verification_key_type > keypair_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:204
r1cs_auxiliary_input< typename curve_type::scalar_field_type > auxiliary_input_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:182
r1cs_gg_ppzksnark_aggregate_proof< CurveType > proof_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:244
srs_type::verification_srs_type verification_srs_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:225
r1cs_primary_input< typename curve_type::scalar_field_type > primary_input_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:180
r1cs_gg_ppzksnark_proving_key< curve_type, constraint_system_type > proving_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:190
r1cs_constraint_system< typename curve_type::scalar_field_type > constraint_system_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:178
CurveType curve_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:169
srs_type::proving_srs_type proving_srs_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:218
r1cs_gg_ppzksnark_aggregate_srs< CurveType > srs_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:211
r1cs_gg_ppzksnark_aggregate_verification_key< curve_type > verification_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:197
srs_type::srs_pair_type srs_pair_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:233
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:78
r1cs_gg_ppzksnark_keypair< proving_key_type, verification_key_type > keypair_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:135
r1cs_gg_ppzksnark_proof< CurveType > proof_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:164
r1cs_auxiliary_input< typename curve_type::scalar_field_type > auxiliary_input_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:92
r1cs_primary_input< typename curve_type::scalar_field_type > primary_input_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:90
CurveType curve_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:79
r1cs_gg_ppzksnark_keypair< proving_key_type, extended_verification_key_type > extended_keypair_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:153
r1cs_gg_ppzksnark_extended_verification_key< curve_type > extended_verification_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:128
r1cs_gg_ppzksnark_keypair< proving_key_type, processed_verification_key_type > processed_keypair_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:144
r1cs_gg_ppzksnark_verification_key< curve_type > verification_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:106
r1cs_gg_ppzksnark_proving_key< curve_type, constraint_system_type > proving_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:99
r1cs_constraint_system< typename curve_type::scalar_field_type > constraint_system_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:88
r1cs_gg_ppzksnark_processed_verification_key< curve_type > processed_verification_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:118
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/detail/basic_policy.hpp:75
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/ipp2/proof.hpp:96
std::pair< proving_srs_type, verification_srs_type > srs_pair_type
Definition: srs.hpp:133
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/ipp2/verification_key.hpp:38
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:121
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:102
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:40
Definition: systems/ppzksnark/r1cs_gg_ppzksnark/proving_key.hpp:39
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:47