11 #include <openssl/sha.h>
12 #include <openssl/ripemd.h>
18 static unsigned char pblank[1];
20 SHA256((pbegin == pend ? pblank : (
unsigned char*)&pbegin[0]), (pend - pbegin) *
sizeof(pbegin[0]), (
unsigned char*)&hash1);
22 SHA256((
unsigned char*)&hash1,
sizeof(hash1), (
unsigned char*)&hash2);
39 CHashWriter(
int nTypeIn,
int nVersionIn) : nType(nTypeIn), nVersion(nVersionIn) {
44 SHA256_Update(&ctx, pch, size);
51 SHA256_Final((
unsigned char*)&hash1, &ctx);
53 SHA256((
unsigned char*)&hash1,
sizeof(hash1), (
unsigned char*)&hash2);
66 template<
typename T1,
typename T2>
68 const T2 p2begin,
const T2 p2end)
70 static unsigned char pblank[1];
74 SHA256_Update(&ctx, (p1begin == p1end ? pblank : (
unsigned char*)&p1begin[0]), (p1end - p1begin) *
sizeof(p1begin[0]));
75 SHA256_Update(&ctx, (p2begin == p2end ? pblank : (
unsigned char*)&p2begin[0]), (p2end - p2begin) *
sizeof(p2begin[0]));
76 SHA256_Final((
unsigned char*)&hash1, &ctx);
78 SHA256((
unsigned char*)&hash1,
sizeof(hash1), (
unsigned char*)&hash2);
82 template<
typename T1,
typename T2,
typename T3>
84 const T2 p2begin,
const T2 p2end,
85 const T3 p3begin,
const T3 p3end)
87 static unsigned char pblank[1];
91 SHA256_Update(&ctx, (p1begin == p1end ? pblank : (
unsigned char*)&p1begin[0]), (p1end - p1begin) *
sizeof(p1begin[0]));
92 SHA256_Update(&ctx, (p2begin == p2end ? pblank : (
unsigned char*)&p2begin[0]), (p2end - p2begin) *
sizeof(p2begin[0]));
93 SHA256_Update(&ctx, (p3begin == p3end ? pblank : (
unsigned char*)&p3begin[0]), (p3end - p3begin) *
sizeof(p3begin[0]));
94 SHA256_Final((
unsigned char*)&hash1, &ctx);
96 SHA256((
unsigned char*)&hash1,
sizeof(hash1), (
unsigned char*)&hash2);
108 template<
typename T1>
111 static unsigned char pblank[1];
113 SHA256((pbegin == pend ? pblank : (
unsigned char*)&pbegin[0]), (pend - pbegin) *
sizeof(pbegin[0]), (
unsigned char*)&hash1);
115 RIPEMD160((
unsigned char*)&hash1,
sizeof(hash1), (
unsigned char*)&hash2);
121 return Hash160(vch.begin(), vch.end());
124 unsigned int MurmurHash3(
unsigned int nHashSeed,
const std::vector<unsigned char>& vDataToHash);
unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector< unsigned char > &vDataToHash)
void Serialize(Stream &s, char a, int, int=0)
CHashWriter & write(const char *pch, size_t size)
uint160 Hash160(const T1 pbegin, const T1 pend)
uint256 SerializeHash(const T &obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION)
uint256 Hash(const T1 pbegin, const T1 pend)
CHashWriter(int nTypeIn, int nVersionIn)
CHashWriter & operator<<(const T &obj)