zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_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 //
5 // MIT License
6 //
7 // Permission is hereby granted, free of charge, to any person obtaining a copy
8 // of this software and associated documentation files (the "Software"), to deal
9 // in the Software without restriction, including without limitation the rights
10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 // copies of the Software, and to permit persons to whom the Software is
12 // furnished to do so, subject to the following conditions:
13 //
14 // The above copyright notice and this permission notice shall be included in all
15 // copies or substantial portions of the Software.
16 //
17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 // SOFTWARE.
24 //---------------------------------------------------------------------------//
25 // @file Declaration of interfaces for a SEppzkSNARK for R1CS.
26 //
27 // This includes:
28 // - class for proving key
29 // - class for verification key
30 // - class for processed verification key
31 // - class for key pair (proving key & verification key)
32 // - class for proof
33 // - generator algorithm
34 // - prover algorithm
35 // - verifier algorithm (with strong or weak input consistency)
36 // - online verifier algorithm (with strong or weak input consistency)
37 //
38 // The implementation instantiates (a modification of) the protocol of \[GM17],
39 // by following extending, and optimizing the approach described in \[BCTV14].
40 //
41 //
42 // Acronyms:
43 //
44 // - R1CS = "Rank-1 Constraint Systems"
45 // - SEppzkSNARK = "Simulation-Extractable PreProcessing Zero-Knowledge Succinct
46 // Non-interactive ARgument of Knowledge"
47 //
48 // References:
49 //
50 // \[BCTV14]:
51 // "Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture",
52 // Eli Ben-Sasson, Alessandro Chiesa, Eran Tromer, Madars Virza,
53 // USENIX Security 2014,
54 // <http://eprint.iacr.org/2013/879>
55 //
56 // \[GM17]:
57 // "Snarky Signatures: Minimal Signatures of Knowledge from
58 // Simulation-Extractable SNARKs",
59 // Jens Groth and Mary Maller,
60 // IACR-CRYPTO-2017,
61 // <https://eprint.iacr.org/2017/540>
62 //---------------------------------------------------------------------------//
63 
64 #ifndef CRYPTO3_R1CS_SE_PPZKSNARK_TYPES_POLICY_HPP
65 #define CRYPTO3_R1CS_SE_PPZKSNARK_TYPES_POLICY_HPP
66 
69 
70 #include <nil/crypto3/zk/snark/schemes/ppzksnark/r1cs_se_ppzksnark/proving_key.hpp>
71 #include <nil/crypto3/zk/snark/schemes/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp>
72 #include <nil/crypto3/zk/snark/schemes/ppzksnark/r1cs_se_ppzksnark/proof.hpp>
73 #include <nil/crypto3/zk/snark/schemes/ppzksnark/r1cs_se_ppzksnark/keypair.hpp>
74 
75 namespace nil {
76  namespace crypto3 {
77  namespace zk {
78  namespace snark {
79  namespace detail {
80 
81  template<typename CurveType>
83 
84  /******************************** Params ********************************/
85 
91 
93 
95 
96  /******************************** Proving key ********************************/
97 
102 
103  /******************************* Verification key ****************************/
104 
109 
110  /************************ Processed verification key *************************/
111 
120 
121  /********************************** Key pair *********************************/
122 
127 
128  /*********************************** Proof ***********************************/
129 
138  };
139  } // namespace detail
140  } // namespace snark
141  } // namespace zk
142  } // namespace crypto3
143 } // namespace nil
144 
145 #endif // CRYPTO3_R1CS_SE_PPZKSNARK_TYPES_POLICY_HPP
Definition: snark/systems/ppzksnark/r1cs_se_ppzksnark/proof.hpp:41
Definition: systems/ppzksnark/r1cs_se_ppzksnark/proving_key.hpp:39
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:40
std::vector< typename FieldType::value_type > r1cs_auxiliary_input
Definition: r1cs.hpp:104
std::pair< ProvingKey, VerificationKey > r1cs_se_ppzksnark_keypair
Definition: systems/ppzksnark/r1cs_se_ppzksnark/keypair.hpp:36
std::vector< typename FieldType::value_type > r1cs_primary_input
Definition: r1cs.hpp:101
Definition: pair.hpp:31
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/detail/basic_policy.hpp:82
r1cs_auxiliary_input< typename CurveType::scalar_field_type > auxiliary_input_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/detail/basic_policy.hpp:94
r1cs_se_ppzksnark_proof< CurveType > proof_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/detail/basic_policy.hpp:137
r1cs_primary_input< typename CurveType::scalar_field_type > primary_input_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/detail/basic_policy.hpp:92
r1cs_se_ppzksnark_keypair< proving_key_type, verification_key_type > keypair_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/detail/basic_policy.hpp:126
r1cs_se_ppzksnark_processed_verification_key< CurveType > processed_verification_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/detail/basic_policy.hpp:119
r1cs_se_ppzksnark_verification_key< CurveType > verification_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/detail/basic_policy.hpp:108
r1cs_constraint_system< typename CurveType::scalar_field_type > constraint_system_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/detail/basic_policy.hpp:90
r1cs_se_ppzksnark_proving_key< CurveType, constraint_system_type > proving_key_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/detail/basic_policy.hpp:101
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:104