Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
Public Types | Public Member Functions | Public Attributes | List of all members
libsnark::Fp12_2over3over2_square_gadget< Fp12T > Class Template Reference

#include <fp12_2over3over2_gadgets.hpp>

Inheritance diagram for libsnark::Fp12_2over3over2_square_gadget< Fp12T >:
Inheritance graph
[legend]
Collaboration diagram for libsnark::Fp12_2over3over2_square_gadget< Fp12T >:
Collaboration graph
[legend]

Public Types

using FieldT = typename Fp12T::my_Fp
 
using Fp6T = typename Fp12T::my_Fp6
 

Public Member Functions

 Fp12_2over3over2_square_gadget (protoboard< FieldT > &pb, const Fp12_2over3over2_variable< Fp12T > &A, const Fp12_2over3over2_variable< Fp12T > &result, const std::string &annotation_prefix)
 
const Fp12_2over3over2_variable< Fp12T > & result () const
 
void generate_r1cs_constraints ()
 
void generate_r1cs_witness ()
 
- Public Member Functions inherited from libsnark::gadget< Fp12T::my_Fp >
 gadget (protoboard< Fp12T::my_Fp > &pb, const std::string &annotation_prefix)
 

Public Attributes

Fp12_2over3over2_variable< Fp12T > _A
 
Fp12_2over3over2_variable< Fp12T > _result
 
Fp6_3over2_mul_gadget< Fp6T_compute_alpha
 
Fp6_3over2_mul_gadget< Fp6T_compute_beta
 

Additional Inherited Members

- Protected Attributes inherited from libsnark::gadget< Fp12T::my_Fp >
protoboard< Fp12T::my_Fp > & pb
 
const std::string annotation_prefix
 

Detailed Description

template<typename Fp12T>
class libsnark::Fp12_2over3over2_square_gadget< Fp12T >

Follows implementation in libff::Fp12_2over3over2_model, which is based on Section 3 of [DOSD06].

Let (a0, a1) = a0 + a1 * w be an element of Fp12, where a0, a1 in Fp6 and w = v^2 for v in Fp6. By simple expansion of terms: (a0, a1)^2 = (a0^2 + a1^2 * v, 2 * a0 * a1) However, since a0^2 + a1^2 * v = (a0 + a1)*(a0 + a1 * v) - (a0 * a1) * v - a0 * a1, it follows that (a0, a1)^2 can be computed with just 2 full multiplications in Fp6. (Note that multiplications by v are free in an arithmetic circuit - see mul_by_non_residue).

Definition at line 92 of file fp12_2over3over2_gadgets.hpp.

Member Typedef Documentation

◆ FieldT

template<typename Fp12T >
using libsnark::Fp12_2over3over2_square_gadget< Fp12T >::FieldT = typename Fp12T::my_Fp

Definition at line 95 of file fp12_2over3over2_gadgets.hpp.

◆ Fp6T

template<typename Fp12T >
using libsnark::Fp12_2over3over2_square_gadget< Fp12T >::Fp6T = typename Fp12T::my_Fp6

Definition at line 96 of file fp12_2over3over2_gadgets.hpp.

Constructor & Destructor Documentation

◆ Fp12_2over3over2_square_gadget()

template<typename Fp12T >
libsnark::Fp12_2over3over2_square_gadget< Fp12T >::Fp12_2over3over2_square_gadget ( protoboard< FieldT > &  pb,
const Fp12_2over3over2_variable< Fp12T > &  A,
const Fp12_2over3over2_variable< Fp12T > &  result,
const std::string &  annotation_prefix 
)

Member Function Documentation

◆ generate_r1cs_constraints()

template<typename Fp12T >
void libsnark::Fp12_2over3over2_square_gadget< Fp12T >::generate_r1cs_constraints ( )

◆ generate_r1cs_witness()

template<typename Fp12T >
void libsnark::Fp12_2over3over2_square_gadget< Fp12T >::generate_r1cs_witness ( )

◆ result()

template<typename Fp12T >
const Fp12_2over3over2_variable<Fp12T>& libsnark::Fp12_2over3over2_square_gadget< Fp12T >::result ( ) const

Member Data Documentation

◆ _A

template<typename Fp12T >
Fp12_2over3over2_variable<Fp12T> libsnark::Fp12_2over3over2_square_gadget< Fp12T >::_A

Definition at line 110 of file fp12_2over3over2_gadgets.hpp.

◆ _compute_alpha

template<typename Fp12T >
Fp6_3over2_mul_gadget<Fp6T> libsnark::Fp12_2over3over2_square_gadget< Fp12T >::_compute_alpha

Definition at line 112 of file fp12_2over3over2_gadgets.hpp.

◆ _compute_beta

template<typename Fp12T >
Fp6_3over2_mul_gadget<Fp6T> libsnark::Fp12_2over3over2_square_gadget< Fp12T >::_compute_beta

Definition at line 113 of file fp12_2over3over2_gadgets.hpp.

◆ _result

template<typename Fp12T >
Fp12_2over3over2_variable<Fp12T> libsnark::Fp12_2over3over2_square_gadget< Fp12T >::_result

Definition at line 111 of file fp12_2over3over2_gadgets.hpp.


The documentation for this class was generated from the following file: