Zeth - Zerocash on Ethereum  0.8
Reference implementation of the Zeth protocol by Clearmatics
mimc_input_hasher.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 __ZETH_CIRCUITS_MIMC_MIMC_INPUT_HASHER_HPP__
6 #define __ZETH_CIRCUITS_MIMC_MIMC_INPUT_HASHER_HPP__
7 
8 #include <libsnark/gadgetlib1/gadget.hpp>
9 #include <memory>
10 
11 namespace libzeth
12 {
13 
16 template<typename FieldT, typename compFnT>
17 class mimc_input_hasher : public libsnark::gadget<FieldT>
18 {
19 private:
20  // Output variable
21  libsnark::pb_variable<FieldT> _result;
22 
23  // Compression function constraints
24  std::vector<std::shared_ptr<compFnT>> _compression_functions;
25 
26  // Intermediate values
27  libsnark::pb_variable_array<FieldT> _intermediate_values;
28 
29 public:
31  libsnark::protoboard<FieldT> &pb,
32  const libsnark::pb_linear_combination_array<FieldT> &inputs,
33  const libsnark::pb_variable<FieldT> hash_output,
34  const std::string &annotation_prefix);
35 
37  void generate_r1cs_witness() const;
38 
39  static FieldT get_iv();
40  static FieldT compute_hash(const std::vector<FieldT> &values);
41 };
42 
43 } // namespace libzeth
44 
45 #include "mimc_input_hasher.tcc"
46 
47 #endif // __ZETH_CIRCUITS_MIMC_MIMC_INPUT_HASHER_HPP__
libzeth::mimc_input_hasher::compute_hash
static FieldT compute_hash(const std::vector< FieldT > &values)
libzeth
Definition: binary_operation.hpp:15
mimc_input_hasher.tcc
libzeth::mimc_input_hasher::mimc_input_hasher
mimc_input_hasher(libsnark::protoboard< FieldT > &pb, const libsnark::pb_linear_combination_array< FieldT > &inputs, const libsnark::pb_variable< FieldT > hash_output, const std::string &annotation_prefix)
libzeth::mimc_input_hasher::generate_r1cs_witness
void generate_r1cs_witness() const
libzeth::mimc_input_hasher
Definition: mimc_input_hasher.hpp:17
libzeth::mimc_input_hasher::get_iv
static FieldT get_iv()
libzeth::mimc_input_hasher::generate_r1cs_constraints
void generate_r1cs_constraints()