snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.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) 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_PROOF_HPP
28 #define CRYPTO3_R1CS_GG_PPZKSNARK_PROOF_HPP
29 
34 
35 namespace nil {
36  namespace crypto3 {
37  namespace zk {
38  namespace snark {
39  template<typename CurveType>
41  typedef CurveType curve_type;
42 
43  typename CurveType::template g1_type<>::value_type g_A;
44  typename CurveType::template g2_type<>::value_type g_B;
45  typename CurveType::template g1_type<>::value_type g_C;
46 
48  using g1_type = typename CurveType::template g1_type<>;
49  using g2_type = typename CurveType::template g2_type<>;
50 
51  // invalid proof with valid curve points
52  this->g_A = g1_type::value_type::one();
53  this->g_B = g2_type::value_type::one();
54  this->g_C = g1_type::value_type::one();
55  }
56  r1cs_gg_ppzksnark_proof(const typename CurveType::template g1_type<>::value_type &g_A,
57  const typename CurveType::template g2_type<>::value_type &g_B,
58  const typename CurveType::template g1_type<>::value_type &g_C) :
59  g_A(g_A),
60  g_B(g_B), g_C(g_C) {};
61  r1cs_gg_ppzksnark_proof(typename CurveType::template g1_type<>::value_type &&g_A,
62  typename CurveType::template g2_type<>::value_type &&g_B,
63  typename CurveType::template g1_type<>::value_type &&g_C) :
64  g_A(std::move(g_A)),
65  g_B(std::move(g_B)), g_C(std::move(g_C)) {};
66 
67  std::size_t G1_size() const {
68  return 2;
69  }
70 
71  std::size_t G2_size() const {
72  return 1;
73  }
74 
75  std::size_t size_in_bits() const {
76  using g1_type = typename CurveType::template g1_type<>;
77  using g2_type = typename CurveType::template g2_type<>;
78 
79  return G1_size() * g1_type::value_bits + G2_size() * g2_type::value_bits;
80  }
81 
82  bool is_well_formed() const {
83  return (g_A.is_well_formed() && g_B.is_well_formed() && g_C.is_well_formed());
84  }
85 
86  bool operator==(const r1cs_gg_ppzksnark_proof &other) const {
87  return (this->g_A == other.g_A && this->g_B == other.g_B && this->g_C == other.g_C);
88  }
89  };
90  } // namespace snark
91  } // namespace zk
92  } // namespace crypto3
93 } // namespace nil
94 
95 #endif // CRYPTO3_R1CS_GG_PPZKSNARK_TYPES_POLICY_HPP
OutputIterator move(const SinglePassRange &rng, OutputIterator result)
Definition: move.hpp:45
Definition: pair.hpp:31
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:40
CurveType curve_type
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:41
std::size_t G2_size() const
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:71
bool operator==(const r1cs_gg_ppzksnark_proof &other) const
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:86
CurveType::template g1_type ::value_type g_A
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:43
CurveType::template g1_type ::value_type g_C
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:45
r1cs_gg_ppzksnark_proof()
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:47
r1cs_gg_ppzksnark_proof(typename CurveType::template g1_type<>::value_type &&g_A, typename CurveType::template g2_type<>::value_type &&g_B, typename CurveType::template g1_type<>::value_type &&g_C)
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:61
bool is_well_formed() const
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:82
r1cs_gg_ppzksnark_proof(const typename CurveType::template g1_type<>::value_type &g_A, const typename CurveType::template g2_type<>::value_type &g_B, const typename CurveType::template g1_type<>::value_type &g_C)
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:56
std::size_t size_in_bits() const
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:75
CurveType::template g2_type ::value_type g_B
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:44
std::size_t G1_size() const
Definition: snark/systems/ppzksnark/r1cs_gg_ppzksnark/proof.hpp:67