zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_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 // 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 
27 #ifndef CRYPTO3_R1CS_GG_PPZKSNARK_VERIFICATION_KEY_HPP
28 #define CRYPTO3_R1CS_GG_PPZKSNARK_VERIFICATION_KEY_HPP
29 
31 
35 
38 
39 namespace nil {
40  namespace crypto3 {
41  namespace zk {
42  namespace snark {
43  template<typename CurveType>
44  struct r1cs_gg_ppzksnark_processed_verification_key;
45 
46  template<typename CurveType>
48  typedef CurveType curve_type;
49 
50  typename CurveType::gt_type::value_type alpha_g1_beta_g2;
51  typename CurveType::template g2_type<>::value_type gamma_g2;
52  typename CurveType::template g2_type<>::value_type delta_g2;
53 
55 
58  const typename CurveType::gt_type::value_type &alpha_g1_beta_g2,
59  const typename CurveType::template g2_type<>::value_type &gamma_g2,
60  const typename CurveType::template g2_type<>::value_type &delta_g2,
61  const accumulation_vector<typename CurveType::template g1_type<>> &gamma_ABC_g1) :
64  }
65 
66  std::size_t G1_size() const {
67  return gamma_ABC_g1.size();
68  }
69 
70  std::size_t G2_size() const {
71  return 2;
72  }
73 
74  std::size_t GT_size() const {
75  return 1;
76  }
77 
78  std::size_t size_in_bits() const {
79  using g2_type = typename CurveType::template g2_type<>;
80 
81  // TODO: include GT size
82  return (gamma_ABC_g1.size_in_bits() + 2 * g2_type::value_bits);
83  }
84 
86  return (this->alpha_g1_beta_g2 == other.alpha_g1_beta_g2 && this->gamma_g2 == other.gamma_g2 &&
87  this->delta_g2 == other.delta_g2 && this->gamma_ABC_g1 == other.gamma_ABC_g1);
88  }
89 
92  processed_verification_key.vk_alpha_g1_beta_g2 = alpha_g1_beta_g2;
93  processed_verification_key.vk_gamma_g2_precomp = precompute_g2<CurveType>(gamma_g2);
94  processed_verification_key.vk_delta_g2_precomp = precompute_g2<CurveType>(delta_g2);
95  processed_verification_key.gamma_ABC_g1 = gamma_ABC_g1;
96 
97  return processed_verification_key;
98  }
99  };
100 
101  template<typename CurveType>
103  typedef CurveType curve_type;
105 
106  typename CurveType::gt_type::value_type vk_alpha_g1_beta_g2;
107  typename pairing_policy::g2_precomputed_type vk_gamma_g2_precomp;
108  typename pairing_policy::g2_precomputed_type vk_delta_g2_precomp;
109 
111 
113  return (this->vk_alpha_g1_beta_g2 == other.vk_alpha_g1_beta_g2 &&
114  this->vk_gamma_g2_precomp == other.vk_gamma_g2_precomp &&
115  this->vk_delta_g2_precomp == other.vk_delta_g2_precomp &&
116  this->gamma_ABC_g1 == other.gamma_ABC_g1);
117  }
118  };
119 
120  template<typename CurveType>
122  typedef CurveType curve_type;
123 
124  typedef typename CurveType::template g1_type<> g1_type;
125  typedef typename CurveType::template g2_type<> g2_type;
126  typedef typename CurveType::gt_type gt_type;
127 
128  typename gt_type::value_type alpha_g1_beta_g2;
129  typename g2_type::value_type gamma_g2;
130  typename g2_type::value_type delta_g2;
131  typename g1_type::value_type delta_g1;
133  typename g1_type::value_type gamma_g1;
134 
137  const typename g2_type::value_type &gamma_g2,
138  const typename g2_type::value_type &delta_g2,
139  const typename g1_type::value_type &delta_g1,
141  const typename g1_type::value_type &gamma_g1) :
144  gamma_g1(gamma_g1) {
145  }
146 
147  std::size_t G1_size() const {
148  return gamma_ABC_g1.size() + 2;
149  }
150 
151  std::size_t G2_size() const {
152  return 2;
153  }
154 
155  std::size_t GT_size() const {
156  return 1;
157  }
158 
159  std::size_t size_in_bits() const {
160  // TODO: include GT size
161  return (gamma_ABC_g1.size_in_bits() + 2 * g2_type::value_bits + 2 * g1_type::value_bits);
162  }
163 
165  return alpha_g1_beta_g2 == other.alpha_g1_beta_g2 && gamma_g2 == other.gamma_g2 &&
166  delta_g2 == other.delta_g2 && delta_g1 == other.delta_g1 &&
167  gamma_ABC_g1 == other.gamma_ABC_g1;
168  }
169  };
170  } // namespace snark
171  } // namespace zk
172  } // namespace crypto3
173 } // namespace nil
174 
175 #endif // CRYPTO3_R1CS_GG_PPZKSNARK_TYPES_POLICY_HPP
Definition: accumulation_vector.hpp:46
std::size_t size() const
Definition: accumulation_vector.hpp:83
std::size_t size_in_bits() const
Definition: accumulation_vector.hpp:87
Definition: pair.hpp:31
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:121
std::size_t GT_size() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:155
g1_type::value_type gamma_g1
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:133
g1_type::value_type delta_g1
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:131
r1cs_gg_ppzksnark_extended_verification_key(const typename gt_type::value_type &alpha_g1_beta_g2, const typename g2_type::value_type &gamma_g2, const typename g2_type::value_type &delta_g2, const typename g1_type::value_type &delta_g1, const accumulation_vector< g1_type > &gamma_ABC_g1, const typename g1_type::value_type &gamma_g1)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:136
CurveType::template g2_type g2_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:125
CurveType::gt_type gt_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:126
CurveType curve_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:122
g2_type::value_type gamma_g2
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:129
accumulation_vector< g1_type > gamma_ABC_g1
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:132
gt_type::value_type alpha_g1_beta_g2
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:128
bool operator==(const r1cs_gg_ppzksnark_extended_verification_key &other) const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:164
g2_type::value_type delta_g2
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:130
std::size_t size_in_bits() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:159
CurveType::template g1_type g1_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:124
std::size_t G2_size() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:151
std::size_t G1_size() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:147
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:102
pairing_policy::g2_precomputed_type vk_gamma_g2_precomp
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:107
accumulation_vector< typename CurveType::template g1_type<> > gamma_ABC_g1
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:110
CurveType::gt_type::value_type vk_alpha_g1_beta_g2
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:106
bool operator==(const r1cs_gg_ppzksnark_processed_verification_key &other) const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:112
CurveType curve_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:103
pairing_policy::g2_precomputed_type vk_delta_g2_precomp
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:108
algebra::pairing::pairing_policy< CurveType > pairing_policy
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:104
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:47
CurveType::template g2_type ::value_type delta_g2
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:52
std::size_t size_in_bits() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:78
std::size_t G1_size() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:66
CurveType::gt_type::value_type alpha_g1_beta_g2
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:50
bool operator==(const r1cs_gg_ppzksnark_verification_key &other) const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:85
CurveType::template g2_type ::value_type gamma_g2
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:51
std::size_t GT_size() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:74
std::size_t G2_size() const
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:70
CurveType curve_type
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:48
accumulation_vector< typename CurveType::template g1_type<> > gamma_ABC_g1
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:54
r1cs_gg_ppzksnark_verification_key(const typename CurveType::gt_type::value_type &alpha_g1_beta_g2, const typename CurveType::template g2_type<>::value_type &gamma_g2, const typename CurveType::template g2_type<>::value_type &delta_g2, const accumulation_vector< typename CurveType::template g1_type<>> &gamma_ABC_g1)
Definition: zk/include/nil/crypto3/zk/snark/systems/ppzksnark/r1cs_gg_ppzksnark/verification_key.hpp:57