Zecale - Reconciling Privacy and Scalability on Smart-Contract Chains  0.5
Reference implementation of the Zecale protocol by Clearmatics
verification_key_hash_gadget.hpp
Go to the documentation of this file.
1 // Copyright (c) 2015-2022 Clearmatics Technologies Ltd
2 //
3 // SPDX-License-Identifier: LGPL-3.0+
4 
5 #ifndef __ZECALE_CIRCUITS_VERIFICATION_KEY_HASH_GADGET_HPP__
6 #define __ZECALE_CIRCUITS_VERIFICATION_KEY_HASH_GADGET_HPP__
7 
9 
10 #include <libsnark/gadgetlib1/gadgets/basic_gadgets.hpp>
11 #include <libsnark/gadgetlib1/gadgets/hashes/hash_io.hpp>
12 #include <libzeth/circuits/mimc/mimc_input_hasher.hpp>
13 
14 namespace libzecale
15 {
16 
20 template<typename wppT, typename nverifierT>
21 class verification_key_hash_gadget : public libsnark::gadget<libff::Fr<wppT>>
22 {
23 public:
24  using FieldT = libff::Fr<wppT>;
26  using scalarHasherT = libzeth::mimc_input_hasher<FieldT, compFnT>;
27 
28  using nsnark = typename nverifierT::snark;
30  typename nverifierT::verification_key_variable_gadget;
31 
34 
36  libsnark::protoboard<FieldT> &pb,
37  verification_key_variable &verifcation_key,
38  libsnark::pb_variable<FieldT> &verification_key_hash,
39  const std::string &annotation);
41  void generate_r1cs_witness();
42 
43  // TODO: should not require the second parameter, but there is no generic
44  // method to extract the number of inputs from the verification key.
45  static FieldT compute_hash(
46  const typename nsnark::verification_key &vk, size_t num_inputs);
47 };
48 
49 } // namespace libzecale
50 
52 
53 #endif // __ZECALE_CIRCUITS_VERIFICATION_KEY_HASH_GADGET_HPP__
verification_key_hash_gadget.tcc
libzecale::verification_key_hash_gadget::FieldT
libff::Fr< wppT > FieldT
Definition: verification_key_hash_gadget.hpp:24
libzecale::verification_key_hash_gadget::compFnT
compression_function_gadget< wppT > compFnT
Definition: verification_key_hash_gadget.hpp:25
libzecale::verification_key_hash_gadget::scalarHasherT
libzeth::mimc_input_hasher< FieldT, compFnT > scalarHasherT
Definition: verification_key_hash_gadget.hpp:26
libzecale::verification_key_hash_gadget::_hash_gadget
scalarHasherT _hash_gadget
Gadget to hash vk bits.
Definition: verification_key_hash_gadget.hpp:33
libzecale::verification_key_hash_gadget::compute_hash
static FieldT compute_hash(const typename nsnark::verification_key &vk, size_t num_inputs)
libzecale::verification_key_hash_gadget::generate_r1cs_witness
void generate_r1cs_witness()
libzecale
Definition: aggregator_circuit.hpp:15
libzecale::verification_key_hash_gadget::generate_r1cs_constraints
void generate_r1cs_constraints()
libzecale::verification_key_hash_gadget
Definition: verification_key_hash_gadget.hpp:21
libzecale::verification_key_hash_gadget::verification_key_variable
typename nverifierT::verification_key_variable_gadget verification_key_variable
Definition: verification_key_hash_gadget.hpp:30
libzecale::verification_key_hash_gadget::verification_key_hash_gadget
verification_key_hash_gadget(libsnark::protoboard< FieldT > &pb, verification_key_variable &verifcation_key, libsnark::pb_variable< FieldT > &verification_key_hash, const std::string &annotation)
libzecale::compression_function_gadget
typename compression_function_selector< ppT >::compression_function compression_function_gadget
Definition: compression_function_selector.hpp:55
libzecale::verification_key_hash_gadget::nsnark
typename nverifierT::snark nsnark
Definition: verification_key_hash_gadget.hpp:28
compression_function_selector.hpp