zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.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 
26 #ifndef CRYPTO3_R1CS_SE_PPZKSNARK_VERIFICATION_KEY_HPP
27 #define CRYPTO3_R1CS_SE_PPZKSNARK_VERIFICATION_KEY_HPP
28 
29 namespace nil {
30  namespace crypto3 {
31  namespace zk {
32  namespace snark {
33 
34  using namespace algebra;
35 
39  template<typename CurveType>
41  typedef CurveType curve_type;
42 
43  using g1_type = typename curve_type::template g1_type<>;
44  using g2_type = typename curve_type::template g2_type<>;
45  public:
46  // H
47  typename g2_type::value_type H;
48 
49  // G^{alpha}
50  typename g1_type::value_type G_alpha;
51 
52  // H^{beta}
53  typename g2_type::value_type H_beta;
54 
55  // G^{gamma}
56  typename g1_type::value_type G_gamma;
57 
58  // H^{gamma}
59  typename g2_type::value_type H_gamma;
60 
61  // G^{gamma * A_i(t) + (alpha + beta) * A_i(t)}
62  // for 0 <= i <= sap.num_inputs()
63  std::vector<typename g1_type::value_type> query;
64 
66  r1cs_se_ppzksnark_verification_key(const typename g2_type::value_type &H,
67  const typename g1_type::value_type &G_alpha,
68  const typename g2_type::value_type &H_beta,
69  const typename g1_type::value_type &G_gamma,
70  const typename g2_type::value_type &H_gamma,
71  std::vector<typename g1_type::value_type> &&query) :
72  H(H),
73  G_alpha(G_alpha), H_beta(H_beta), G_gamma(G_gamma), H_gamma(H_gamma),
74  query(std::move(query)) {};
75 
76  std::size_t G1_size() const {
77  return 2 + query.size();
78  }
79 
80  std::size_t G2_size() const {
81  return 3;
82  }
83 
84  std::size_t size_in_bits() const {
85  return (G1_size() * g1_type::value_bits +
86  G2_size() * g2_type::value_bits);
87  }
88 
90  return (this->H == other.H && this->G_alpha == other.G_alpha && this->H_beta == other.H_beta &&
91  this->G_gamma == other.G_gamma && this->H_gamma == other.H_gamma &&
92  this->query == other.query);
93  }
94  };
95 
103  template<typename CurveType>
105 
106  typename CurveType::template g1_type<>::value_type G_alpha;
107  typename CurveType::template g2_type<>::value_type H_beta;
108  typename CurveType::gt_type::value_type G_alpha_H_beta_ml;
112 
113  std::vector<typename CurveType::template g1_type<>::value_type> query;
114 
116  return (this->G_alpha == other.G_alpha && this->H_beta == other.H_beta &&
117  this->G_alpha_H_beta_ml == other.G_alpha_H_beta_ml &&
118  this->G_gamma_pc == other.G_gamma_pc && this->H_gamma_pc == other.H_gamma_pc &&
119  this->H_pc == other.H_pc && this->query == other.query);
120  }
121  };
122  } // namespace snark
123  } // namespace zk
124  } // namespace crypto3
125 } // namespace nil
126 
127 #endif // CRYPTO3_R1CS_PPZKSNARK_BASIC_PROVER_HPP
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:40
std::size_t G1_size() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:76
g2_type::value_type H_beta
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:53
bool operator==(const r1cs_se_ppzksnark_verification_key &other) const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:89
g2_type::value_type H_gamma
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:59
std::size_t G2_size() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:80
g2_type::value_type H
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:47
r1cs_se_ppzksnark_verification_key(const typename g2_type::value_type &H, const typename g1_type::value_type &G_alpha, const typename g2_type::value_type &H_beta, const typename g1_type::value_type &G_gamma, const typename g2_type::value_type &H_gamma, std::vector< typename g1_type::value_type > &&query)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:66
std::size_t size_in_bits() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:84
std::vector< typename g1_type::value_type > query
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:63
g1_type::value_type G_alpha
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:50
g1_type::value_type G_gamma
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:56
OutputIterator move(const SinglePassRange &rng, OutputIterator result)
Definition: move.hpp:45
Definition: pair.hpp:31
Definition: pairing_policy.hpp:35
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:104
bool operator==(const r1cs_se_ppzksnark_processed_verification_key &other) const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:115
CurveType::gt_type::value_type G_alpha_H_beta_ml
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:108
pairing::pairing_policy< CurveType >::g2_precomputed_type H_gamma_pc
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:110
pairing::pairing_policy< CurveType >::g1_precomputed_type G_gamma_pc
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:109
CurveType::template g2_type ::value_type H_beta
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:107
std::vector< typename CurveType::template g1_type<>::value_type > query
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:113
CurveType::template g1_type ::value_type G_alpha
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:106
pairing::pairing_policy< CurveType >::g2_precomputed_type H_pc
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_se_ppzksnark/verification_key.hpp:111