Zeth - Zerocash on Ethereum  0.8
Reference implementation of the Zeth protocol by Clearmatics
mpc_hash.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_MPC_GROTH16_MPC_HASH_HPP__
6 #define __ZETH_MPC_GROTH16_MPC_HASH_HPP__
7 
9 
10 #include <sodium/crypto_generichash_blake2b.h>
11 #include <string>
12 
13 namespace libzeth
14 {
15 
16 // Hashing for MPC. Streaming and whole-buffer interfaces.
17 static const size_t MPC_HASH_SIZE_BYTES = 64;
18 static const size_t MPC_HASH_ARRAY_LENGTH =
19  MPC_HASH_SIZE_BYTES / sizeof(size_t);
20 
21 using mpc_hash_t = size_t[MPC_HASH_ARRAY_LENGTH];
22 using mpc_hash_state_t = crypto_generichash_blake2b_state;
23 
25 void mpc_hash_update(mpc_hash_state_t &, const void *, size_t);
27 void mpc_compute_hash(mpc_hash_t out_hash, const void *data, size_t data_size);
28 void mpc_compute_hash(mpc_hash_t out_hash, const std::string &data);
29 
32 void mpc_hash_write(const mpc_hash_t hash, std::ostream &out);
33 
36 bool mpc_hash_read(mpc_hash_t out_hash, std::istream &in);
37 
40 class mpc_hash
41 {
42 private:
43  mpc_hash_state_t state;
44 
45 public:
47 
48  mpc_hash();
49  void update(const void *, size_t);
50  void final(OutBuffer out_buffer);
51 };
52 
56 
57 } // namespace libzeth
58 
59 #endif // __ZETH_MPC_GROTH16_MPC_HASH_HPP__
libzeth::mpc_hash
Definition: mpc_hash.hpp:40
libzeth::hash_ostream_wrapper
Wrap some ostream, hashing data as it is written.
Definition: hash_stream.hpp:31
libzeth::mpc_hash_final
void mpc_hash_final(mpc_hash_state_t &state, mpc_hash_t out_hash)
Definition: mpc_hash.cpp:34
libzeth::mpc_hash_state_t
crypto_generichash_blake2b_state mpc_hash_state_t
Definition: mpc_hash.hpp:22
libzeth
Definition: binary_operation.hpp:15
hash_stream.hpp
libzeth::mpc_hash::mpc_hash
mpc_hash()
Definition: mpc_hash.cpp:86
libzeth::mpc_hash_t
size_t[MPC_HASH_ARRAY_LENGTH] mpc_hash_t
Definition: mpc_hash.hpp:21
libzeth::mpc_hash_update
void mpc_hash_update(mpc_hash_state_t &state, const void *in, size_t size)
Definition: mpc_hash.cpp:29
libzeth::mpc_hash::update
void update(const void *, size_t)
Definition: mpc_hash.cpp:88
libzeth::mpc_hash_read
bool mpc_hash_read(mpc_hash_t out_hash, std::istream &in)
Definition: mpc_hash.cpp:63
libzeth::mpc_hash_write
void mpc_hash_write(const mpc_hash_t hash, std::ostream &out)
Definition: mpc_hash.cpp:53
libzeth::hash_ostream
Simple ostream which hashes any incoming data and discards it.
Definition: hash_stream.hpp:30
libzeth::mpc_compute_hash
void mpc_compute_hash(mpc_hash_t out_hash, const void *data, size_t data_size)
Definition: mpc_hash.cpp:40
libzeth::hash_istream_wrapper
Wrap some istream, hashing all data as it is read.
Definition: hash_stream.hpp:32
libzeth::mpc_hash::OutBuffer
mpc_hash_t OutBuffer
Definition: mpc_hash.hpp:46
analyzer.parse_r1cs.data
data
Definition: parse_r1cs.py:116
libzeth::mpc_hash_init
void mpc_hash_init(mpc_hash_state_t &state)
Definition: mpc_hash.cpp:24