Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
bls12_377_membership_check_gadgets.hpp
Go to the documentation of this file.
1 
9 #ifndef LIBSNARK_GADGETLIB1_GADGETS_PAIRING_BW6_761_BLS12_377_BLS12_377_MEMBERSHIP_CHECK_GADGETS_HPP_
10 #define LIBSNARK_GADGETLIB1_GADGETS_PAIRING_BW6_761_BLS12_377_BLS12_377_MEMBERSHIP_CHECK_GADGETS_HPP_
11 
15 
16 #include <libff/algebra/curves/bls12_377/bls12_377_pp.hpp>
17 
18 namespace libsnark
19 {
20 
23 template<typename wppT>
24 class bls12_377_G1_membership_check_gadget : public gadget<libff::Fr<wppT>>
25 {
26 public:
30 
31  // Point P to check
33  // P' s.t. [h]P' = P
35  // Check that P' \in E(Fq)
37  // [h]P' = P condition
39 
41  protoboard<libff::Fr<wppT>> &pb,
42  const G1_variable<wppT> &P,
43  const std::string &annotation_prefix);
45  void generate_r1cs_witness();
46 };
47 
51 template<typename wppT>
53  protoboard<libff::Fr<wppT>> &pb,
54  const G2_variable<wppT> &g2,
55  size_t exp,
56  const std::string &annotation_prefix);
57 
60 template<typename wppT>
61 class bls12_377_G2_membership_check_gadget : public gadget<libff::Fr<wppT>>
62 {
63 public:
64  // Follows libff implementation of bls12_377_G2::is_in_safe_subgroup().
65  // See: libff/algebra/curves/bls12_377/bls12_377_g2.cpp.
66 
67  // Check that[h1.r] P == 0, where
68  // [h1.r]P is P + [t](\psi(P) - P) - \psi^2(P)
69  // (See bls12_377.sage).
70  // Note that in this case we check that:
71  // P + [t](\psi(P) - P) = \psi^2(P)
72  // since G2_variable cannot represent 0 (in G2).
73 
74  // Check P is well-formed
76  // \psi(P) - P
78  // [t](\psi(P) - P)
81  // P + [t](\psi(P) - P)
83  // P + [t](\psi(P) - P) = \psi^2(P)
85 
87  protoboard<libff::Fr<wppT>> &pb,
89  const std::string &annotation_prefix);
91  void generate_r1cs_witness();
92 };
93 
94 } // namespace libsnark
95 
97 
98 #endif // LIBSNARK_GADGETLIB1_GADGETS_PAIRING_BW6_761_BLS12_377_BLS12_377_MEMBERSHIP_CHECK_GADGETS_HPP_
libsnark::bls12_377_G1_membership_check_gadget::nppT
other_curve< wppT > nppT
Definition: bls12_377_membership_check_gadgets.hpp:27
libsnark::gadget< libff::Fr< wppT > >::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::G2_variable< wppT >
libsnark::G1_checker_gadget< wppT >
libsnark
Definition: accumulation_vector.hpp:18
libsnark::bls12_377_G2_membership_check_gadget::_psi_P_minus_P
G2_add_gadget< wppT > _psi_P_minus_P
Definition: bls12_377_membership_check_gadgets.hpp:77
libsnark::bls12_377_G1_membership_check_gadget::_P_primed_mul_cofactor
G1_mul_by_cofactor_gadget _P_primed_mul_cofactor
Definition: bls12_377_membership_check_gadgets.hpp:38
libsnark::bls12_377_G2_membership_check_gadget::_h1_r_P_equals_zero
G2_equality_gadget< wppT > _h1_r_P_equals_zero
Definition: bls12_377_membership_check_gadgets.hpp:84
libsnark::gadget< libff::Fr< wppT > >::pb
protoboard< libff::Fr< wppT > > & pb
Definition: gadget.hpp:19
libsnark::bls12_377_G1_membership_check_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
bls12_377_membership_check_gadgets.tcc
libsnark::bls12_377_G2_membership_check_gadget::_t_times_psi_P_minus_P
G2_mul_by_const_scalar_gadget< wppT, libff::bls12_377_r_limbs > _t_times_psi_P_minus_P
Definition: bls12_377_membership_check_gadgets.hpp:80
libsnark::bls12_377_G2_membership_check_gadget::_P_checker
G2_checker_gadget< wppT > _P_checker
Definition: bls12_377_membership_check_gadgets.hpp:75
libsnark::bls12_377_G2_membership_check_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libsnark::gadget
Definition: gadget.hpp:16
libsnark::bls12_377_G1_membership_check_gadget::bls12_377_G1_membership_check_gadget
bls12_377_G1_membership_check_gadget(protoboard< libff::Fr< wppT >> &pb, const G1_variable< wppT > &P, const std::string &annotation_prefix)
libsnark::bls12_377_G2_membership_check_gadget::_P_plus_t_times_psi_P_minus_P
G2_add_gadget< wppT > _P_plus_t_times_psi_P_minus_P
Definition: bls12_377_membership_check_gadgets.hpp:82
libsnark::bls12_377_G1_membership_check_gadget::_P_primed_checker
G1_checker_gadget< wppT > _P_primed_checker
Definition: bls12_377_membership_check_gadgets.hpp:36
fp12_2over3over2_gadgets.hpp
weierstrass_g2_gadget.hpp
libsnark::bls12_377_G2_membership_check_gadget
Definition: bls12_377_membership_check_gadgets.hpp:61
libsnark::bls12_377_G1_membership_check_gadget::_P
G1_variable< wppT > _P
Definition: bls12_377_membership_check_gadgets.hpp:32
libsnark::bls12_377_G2_membership_check_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::bls12_377_G1_membership_check_gadget::_P_primed
G1_variable< wppT > _P_primed
Definition: bls12_377_membership_check_gadgets.hpp:34
libsnark::G1_variable< wppT >
libsnark::bls12_377_G1_membership_check_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libsnark::G2_checker_gadget< wppT >
libsnark::bls12_377_G1_membership_check_gadget
Definition: bls12_377_membership_check_gadgets.hpp:24
libsnark::bls12_377_g2_untwist_frobenius_twist
G2_variable< wppT > bls12_377_g2_untwist_frobenius_twist(protoboard< libff::Fr< wppT >> &pb, const G2_variable< wppT > &g2, size_t exp, const std::string &annotation_prefix)
libsnark::other_curve
typename pairing_selector< ppT >::other_curve_type other_curve
Definition: pairing_params.hpp:117
libsnark::G2_add_gadget
Gadget to add 2 G2 points.
Definition: weierstrass_g2_gadget.hpp:123
libsnark::bls12_377_G2_membership_check_gadget::bls12_377_G2_membership_check_gadget
bls12_377_G2_membership_check_gadget(protoboard< libff::Fr< wppT >> &pb, G2_variable< wppT > &g2, const std::string &annotation_prefix)
weierstrass_g1_gadget.hpp
libsnark::G2_equality_gadget
Check equality of 2 G2 points.
Definition: weierstrass_g2_gadget.hpp:205
libsnark::point_mul_by_const_scalar_gadget
Definition: scalar_multiplication.hpp:310
libsnark::protoboard
Definition: pb_variable.hpp:22