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

#include <alu_arithmetic.hpp>

Inheritance diagram for libsnark::ALU_shr_shl_gadget< FieldT >:
Inheritance graph
[legend]
Collaboration diagram for libsnark::ALU_shr_shl_gadget< FieldT >:
Collaboration graph
[legend]

Public Member Functions

 ALU_shr_shl_gadget (tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &shr_result, const pb_variable< FieldT > &shr_flag, const pb_variable< FieldT > &shl_result, const pb_variable< FieldT > &shl_flag, const std::string &annotation_prefix="")
 
void generate_r1cs_constraints ()
 
void generate_r1cs_witness ()
 
- Public Member Functions inherited from libsnark::ALU_arithmetic_gadget< FieldT >
 ALU_arithmetic_gadget (tinyram_protoboard< FieldT > &pb, const pb_variable_array< FieldT > &opcode_indicators, const word_variable_gadget< FieldT > &desval, const word_variable_gadget< FieldT > &arg1val, const word_variable_gadget< FieldT > &arg2val, const pb_variable< FieldT > &flag, const pb_variable< FieldT > &result, const pb_variable< FieldT > &result_flag, const std::string &annotation_prefix="")
 
- Public Member Functions inherited from libsnark::tinyram_standard_gadget< FieldT >
 tinyram_standard_gadget (tinyram_protoboard< FieldT > &pb, const std::string &annotation_prefix="")
 
- Public Member Functions inherited from libsnark::tinyram_gadget< FieldT >
 tinyram_gadget (tinyram_protoboard< FieldT > &pb, const std::string &annotation_prefix="")
 
- Public Member Functions inherited from libsnark::gadget< FieldT >
 gadget (protoboard< FieldT > &pb, const std::string &annotation_prefix)
 

Public Attributes

pb_variable< FieldT > shr_result
 
pb_variable< FieldT > shr_flag
 
pb_variable< FieldT > shl_result
 
pb_variable< FieldT > shl_flag
 
size_t logw
 
- Public Attributes inherited from libsnark::ALU_arithmetic_gadget< FieldT >
const pb_variable_array< FieldT > opcode_indicators
 
const word_variable_gadget< FieldT > desval
 
const word_variable_gadget< FieldT > arg1val
 
const word_variable_gadget< FieldT > arg2val
 
const pb_variable< FieldT > flag
 
const pb_variable< FieldT > result
 
const pb_variable< FieldT > result_flag
 

Additional Inherited Members

- Protected Attributes inherited from libsnark::tinyram_gadget< FieldT >
tinyram_protoboard< FieldT > & pb
 
- Protected Attributes inherited from libsnark::gadget< FieldT >
protoboard< FieldT > & pb
 
const std::string annotation_prefix
 

Detailed Description

template<typename FieldT>
class libsnark::ALU_shr_shl_gadget< FieldT >

Definition at line 857 of file alu_arithmetic.hpp.

Constructor & Destructor Documentation

◆ ALU_shr_shl_gadget()

template<typename FieldT >
libsnark::ALU_shr_shl_gadget< FieldT >::ALU_shr_shl_gadget ( tinyram_protoboard< FieldT > &  pb,
const pb_variable_array< FieldT > &  opcode_indicators,
const word_variable_gadget< FieldT > &  desval,
const word_variable_gadget< FieldT > &  arg1val,
const word_variable_gadget< FieldT > &  arg2val,
const pb_variable< FieldT > &  flag,
const pb_variable< FieldT > &  shr_result,
const pb_variable< FieldT > &  shr_flag,
const pb_variable< FieldT > &  shl_result,
const pb_variable< FieldT > &  shl_flag,
const std::string &  annotation_prefix = "" 
)
inline

Definition at line 883 of file alu_arithmetic.hpp.

895  : ALU_arithmetic_gadget<FieldT>(
896  pb,
898  desval,
899  arg1val,
900  arg2val,
901  flag,
902  shr_result,
903  shr_flag,
906  , shr_flag(shr_flag)
908  , shl_flag(shl_flag)
909  {
910  logw = libff::log2(pb.ap.w);
911 
912  reversed_input.allocate(
913  pb, FMT(this->annotation_prefix, " reversed_input"));
914  pack_reversed_input.reset(new packing_gadget<FieldT>(
915  pb,
916  pb_variable_array<FieldT>(
917  arg1val.bits.rbegin(), arg1val.bits.rend()),
918  reversed_input,
919  FMT(this->annotation_prefix, " pack_reversed_input")));
920 
921  barrel_right_internal.allocate(
922  pb,
923  logw + 1,
924  FMT(this->annotation_prefix, " barrel_right_internal"));
925 
926  shifted_out_bits.resize(logw);
927  for (size_t i = 0; i < logw; ++i) {
928  shifted_out_bits[i].allocate(
929  pb,
930  1ul << i,
931  FMT(this->annotation_prefix, " shifted_out_bits_%zu", i));
932  }
933 
934  is_oversize_shift.allocate(
935  pb, FMT(this->annotation_prefix, " is_oversize_shift"));
936  check_oversize_shift.reset(new disjunction_gadget<FieldT>(
937  pb,
938  pb_variable_array<FieldT>(
939  arg2val.bits.begin() + logw, arg2val.bits.end()),
940  is_oversize_shift,
941  FMT(this->annotation_prefix, " check_oversize_shift")));
942  result.allocate(pb, FMT(this->annotation_prefix, " result"));
943 
944  result_bits.allocate(
945  pb, pb.ap.w, FMT(this->annotation_prefix, " result_bits"));
946  unpack_result.reset(new packing_gadget<FieldT>(
947  pb,
948  result_bits,
949  result, // barrel_right_internal[logw],
950  FMT(this->annotation_prefix, " unpack_result")));
951 
952  reversed_result.allocate(
953  pb, FMT(this->annotation_prefix, " reversed_result"));
954  pack_reversed_result.reset(new packing_gadget<FieldT>(
955  pb,
956  pb_variable_array<FieldT>(result_bits.rbegin(), result_bits.rend()),
957  reversed_result,
958  FMT(this->annotation_prefix, " pack_reversed_result")));
959  }
Here is the call graph for this function:

Member Function Documentation

◆ generate_r1cs_constraints()

template<typename FieldT >
void libsnark::ALU_shr_shl_gadget< FieldT >::generate_r1cs_constraints ( )
virtual

◆ generate_r1cs_witness()

template<typename FieldT >
void libsnark::ALU_shr_shl_gadget< FieldT >::generate_r1cs_witness ( )
virtual

Member Data Documentation

◆ logw

template<typename FieldT >
size_t libsnark::ALU_shr_shl_gadget< FieldT >::logw

Definition at line 881 of file alu_arithmetic.hpp.

◆ shl_flag

template<typename FieldT >
pb_variable<FieldT> libsnark::ALU_shr_shl_gadget< FieldT >::shl_flag

Definition at line 879 of file alu_arithmetic.hpp.

◆ shl_result

template<typename FieldT >
pb_variable<FieldT> libsnark::ALU_shr_shl_gadget< FieldT >::shl_result

Definition at line 878 of file alu_arithmetic.hpp.

◆ shr_flag

template<typename FieldT >
pb_variable<FieldT> libsnark::ALU_shr_shl_gadget< FieldT >::shr_flag

Definition at line 877 of file alu_arithmetic.hpp.

◆ shr_result

template<typename FieldT >
pb_variable<FieldT> libsnark::ALU_shr_shl_gadget< FieldT >::shr_result

Definition at line 876 of file alu_arithmetic.hpp.


The documentation for this class was generated from the following file:
libsnark::ALU_arithmetic_gadget::arg2val
const word_variable_gadget< FieldT > arg2val
Definition: alu_arithmetic.hpp:32
libsnark::gadget::annotation_prefix
const std::string annotation_prefix
Definition: gadget.hpp:20
libsnark::ALU_arithmetic_gadget::desval
const word_variable_gadget< FieldT > desval
Definition: alu_arithmetic.hpp:30
libsnark::ALU_arithmetic_gadget::opcode_indicators
const pb_variable_array< FieldT > opcode_indicators
Definition: alu_arithmetic.hpp:29
libsnark::ALU_shr_shl_gadget::shr_flag
pb_variable< FieldT > shr_flag
Definition: alu_arithmetic.hpp:877
libsnark::ALU_shr_shl_gadget::shr_result
pb_variable< FieldT > shr_result
Definition: alu_arithmetic.hpp:876
libsnark::tinyram_gadget::pb
tinyram_protoboard< FieldT > & pb
Definition: tinyram_protoboard.hpp:34
libsnark::ALU_arithmetic_gadget::arg1val
const word_variable_gadget< FieldT > arg1val
Definition: alu_arithmetic.hpp:31
libsnark::ALU_shr_shl_gadget::shl_result
pb_variable< FieldT > shl_result
Definition: alu_arithmetic.hpp:878
libsnark::ALU_arithmetic_gadget::flag
const pb_variable< FieldT > flag
Definition: alu_arithmetic.hpp:33
libsnark::ALU_shr_shl_gadget::shl_flag
pb_variable< FieldT > shl_flag
Definition: alu_arithmetic.hpp:879
libsnark::ALU_shr_shl_gadget::logw
size_t logw
Definition: alu_arithmetic.hpp:881