Zeth - Zerocash on Ethereum  0.8
Reference implementation of the Zeth protocol by Clearmatics
hash_stream.tcc
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_TCC__
6 #define __ZETH_CORE_HASH_STREAM_TCC__
7 
8 #include "libzeth/core/hash_stream.hpp"
9 
10 namespace libzeth
11 {
12 
13 template<typename HashT> hash_streambuf<HashT>::hash_streambuf() : hash_state()
14 {
15 }
16 
17 template<typename HashT>
18 std::streamsize hash_streambuf<HashT>::xsputn(const char *s, std::streamsize n)
19 {
20  hash_state.update(s, n);
21  return n;
22 }
23 
24 template<typename HashT>
25 hash_streambuf_wrapper<HashT>::hash_streambuf_wrapper(std::ostream *inner)
26  : hash_state(), inner_out(inner), inner_in(nullptr)
27 {
28 }
29 
30 template<typename HashT>
31 hash_streambuf_wrapper<HashT>::hash_streambuf_wrapper(std::istream *inner)
32  : hash_state(), inner_out(nullptr), inner_in(inner)
33 {
34 }
35 
36 template<typename HashT>
37 std::streamsize hash_streambuf_wrapper<HashT>::xsputn(
38  const char *s, std::streamsize n)
39 {
40  inner_out->write(s, n);
41  hash_state.update(s, n);
42  return n;
43 }
44 
45 template<typename HashT>
46 std::streamsize hash_streambuf_wrapper<HashT>::xsgetn(
47  char *s, std::streamsize n)
48 {
49  inner_in->read(s, n);
50  hash_state.update(s, n);
51  return n;
52 }
53 
54 template<typename HashT>
55 hash_ostream<HashT>::hash_ostream() : std::ostream(&hsb), hsb()
56 {
57 }
58 
59 template<typename HashT>
60 void hash_ostream<HashT>::get_hash(typename HashT::OutBuffer out_hash)
61 {
62  hsb.hash_state.final(out_hash);
63 }
64 
65 template<typename HashT>
66 hash_ostream_wrapper<HashT>::hash_ostream_wrapper(std::ostream &inner_stream)
67  : std::ostream(&hsb), hsb(&inner_stream)
68 {
69 }
70 
71 template<typename HashT>
72 void hash_ostream_wrapper<HashT>::get_hash(typename HashT::OutBuffer out_hash)
73 {
74  hsb.hash_state.final(out_hash);
75 }
76 
77 template<typename HashT>
78 hash_istream_wrapper<HashT>::hash_istream_wrapper(std::istream &inner_stream)
79  : std::istream(&hsb), hsb(&inner_stream)
80 {
81 }
82 
83 template<typename HashT>
84 void hash_istream_wrapper<HashT>::get_hash(typename HashT::OutBuffer out_hash)
85 {
86  hsb.hash_state.final(out_hash);
87 }
88 
89 } // namespace libzeth
90 
91 #endif // __ZETH_CORE_HASH_STREAM_TCC__