Zeth - Zerocash on Ethereum  0.8
Reference implementation of the Zeth protocol by Clearmatics
hash_stream.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_CORE_HASH_STREAM_HPP__
6 #define __ZETH_CORE_HASH_STREAM_HPP__
7 
8 #include <ios>
9 #include <iostream>
10 
11 namespace libzeth
12 {
13 
27 
28 // Forward declare the main public classes in order to declare them as friends
29 // of the internal classes.
30 template<typename HashT> class hash_ostream;
31 template<typename HashT> class hash_ostream_wrapper;
32 template<typename HashT> class hash_istream_wrapper;
33 
35 template<typename HashT> class hash_streambuf : public std::streambuf
36 {
37 protected:
39  virtual std::streamsize xsputn(const char *s, std::streamsize n) override;
40 
42 
43  friend class hash_ostream<HashT>;
44 };
45 
47 template<typename HashT> class hash_streambuf_wrapper : public std::streambuf
48 {
49 protected:
50  explicit hash_streambuf_wrapper(std::ostream *inner);
51  explicit hash_streambuf_wrapper(std::istream *inner);
52  virtual std::streamsize xsputn(const char *s, std::streamsize n) override;
53  virtual std::streamsize xsgetn(char *s, std::streamsize n) override;
54 
56  std::ostream *inner_out;
57  std::istream *inner_in;
58 
59  friend class hash_ostream_wrapper<HashT>;
60  friend class hash_istream_wrapper<HashT>;
61 };
62 
64 template<typename HashT> class hash_ostream : public std::ostream
65 {
66 public:
67  hash_ostream();
68  void get_hash(typename HashT::OutBuffer out_hash);
69 
70 private:
72 };
73 
75 template<typename HashT> class hash_ostream_wrapper : public std::ostream
76 {
77 public:
78  explicit hash_ostream_wrapper(std::ostream &inner_stream);
79  void get_hash(typename HashT::OutBuffer out_hash);
80 
81 private:
82  hash_streambuf_wrapper<HashT> hsb;
83 };
84 
86 template<typename HashT> class hash_istream_wrapper : public std::istream
87 {
88 public:
89  explicit hash_istream_wrapper(std::istream &inner_stream);
90  void get_hash(typename HashT::OutBuffer out_hash);
91 
92 private:
93  hash_streambuf_wrapper<HashT> hsb;
94 };
95 
96 } // namespace libzeth
97 
99 
100 #endif // __ZETH_CORE_HASH_STREAM_HPP__
libzeth::hash_streambuf::xsputn
virtual std::streamsize xsputn(const char *s, std::streamsize n) override
libzeth::hash_streambuf_wrapper::xsgetn
virtual std::streamsize xsgetn(char *s, std::streamsize n) override
libzeth::hash_istream_wrapper::hash_istream_wrapper
hash_istream_wrapper(std::istream &inner_stream)
libzeth::hash_ostream_wrapper
Wrap some ostream, hashing data as it is written.
Definition: hash_stream.hpp:31
libzeth::hash_ostream_wrapper::hash_ostream_wrapper
hash_ostream_wrapper(std::ostream &inner_stream)
libzeth
Definition: binary_operation.hpp:15
libzeth::hash_streambuf
Internal streambuf for hash_ostream. Hash and discard all written data.
Definition: hash_stream.hpp:35
libzeth::hash_streambuf_wrapper::xsputn
virtual std::streamsize xsputn(const char *s, std::streamsize n) override
libzeth::hash_streambuf_wrapper::inner_in
std::istream * inner_in
Definition: hash_stream.hpp:57
libzeth::BLAKE2s_256
Definition: blake2s.hpp:24
libzeth::hash_streambuf::hash_state
HashT hash_state
Definition: hash_stream.hpp:41
libzeth::hash_streambuf::hash_streambuf
hash_streambuf()
libzeth::hash_streambuf_wrapper::hash_state
HashT hash_state
Definition: hash_stream.hpp:55
libzeth::hash_ostream::hash_ostream
hash_ostream()
libzeth::hash_ostream_wrapper::get_hash
void get_hash(typename HashT::OutBuffer out_hash)
libzeth::hash_istream_wrapper::get_hash
void get_hash(typename HashT::OutBuffer out_hash)
libzeth::hash_streambuf_wrapper::inner_out
std::ostream * inner_out
Definition: hash_stream.hpp:56
libzeth::hash_ostream::get_hash
void get_hash(typename HashT::OutBuffer out_hash)
libzeth::hash_ostream
Simple ostream which hashes any incoming data and discards it.
Definition: hash_stream.hpp:30
libzeth::hash_istream_wrapper
Wrap some istream, hashing all data as it is read.
Definition: hash_stream.hpp:32
libzeth::hash_streambuf_wrapper
Internal streambuf for wrapped streams. Hash data and forward.
Definition: hash_stream.hpp:47
libzeth::hash_streambuf_wrapper::hash_streambuf_wrapper
hash_streambuf_wrapper(std::ostream *inner)
hash_stream.tcc