15 #include <openssl/ripemd.h>
16 #include <openssl/sha.h>
21 static unsigned char pblank[1];
23 SHA256((pbegin == pend ? pblank : (
unsigned char*)&pbegin[0]), (pend - pbegin) *
sizeof(pbegin[0]), (
unsigned char*)&hash1);
25 SHA256((
unsigned char*)&hash1,
sizeof(hash1), (
unsigned char*)&hash2);
42 CHashWriter(
int nTypeIn,
int nVersionIn) : nType(nTypeIn), nVersion(nVersionIn) {
47 SHA256_Update(&ctx, pch, size);
54 SHA256_Final((
unsigned char*)&hash1, &ctx);
56 SHA256((
unsigned char*)&hash1,
sizeof(hash1), (
unsigned char*)&hash2);
69 template<
typename T1,
typename T2>
71 const T2 p2begin,
const T2 p2end)
73 static unsigned char pblank[1];
77 SHA256_Update(&ctx, (p1begin == p1end ? pblank : (
unsigned char*)&p1begin[0]), (p1end - p1begin) *
sizeof(p1begin[0]));
78 SHA256_Update(&ctx, (p2begin == p2end ? pblank : (
unsigned char*)&p2begin[0]), (p2end - p2begin) *
sizeof(p2begin[0]));
79 SHA256_Final((
unsigned char*)&hash1, &ctx);
81 SHA256((
unsigned char*)&hash1,
sizeof(hash1), (
unsigned char*)&hash2);
85 template<
typename T1,
typename T2,
typename T3>
87 const T2 p2begin,
const T2 p2end,
88 const T3 p3begin,
const T3 p3end)
90 static unsigned char pblank[1];
94 SHA256_Update(&ctx, (p1begin == p1end ? pblank : (
unsigned char*)&p1begin[0]), (p1end - p1begin) *
sizeof(p1begin[0]));
95 SHA256_Update(&ctx, (p2begin == p2end ? pblank : (
unsigned char*)&p2begin[0]), (p2end - p2begin) *
sizeof(p2begin[0]));
96 SHA256_Update(&ctx, (p3begin == p3end ? pblank : (
unsigned char*)&p3begin[0]), (p3end - p3begin) *
sizeof(p3begin[0]));
97 SHA256_Final((
unsigned char*)&hash1, &ctx);
99 SHA256((
unsigned char*)&hash1,
sizeof(hash1), (
unsigned char*)&hash2);
111 template<
typename T1>
114 static unsigned char pblank[1];
116 SHA256((pbegin == pend ? pblank : (
unsigned char*)&pbegin[0]), (pend - pbegin) *
sizeof(pbegin[0]), (
unsigned char*)&hash1);
118 RIPEMD160((
unsigned char*)&hash1,
sizeof(hash1), (
unsigned char*)&hash2);
124 return Hash160(vch.begin(), vch.end());
127 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)
int HMAC_SHA512_Init(HMAC_SHA512_CTX *pctx, const void *pkey, size_t len)
uint256 SerializeHash(const T &obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION)
int HMAC_SHA512_Update(HMAC_SHA512_CTX *pctx, const void *pdata, size_t len)
uint256 Hash(const T1 pbegin, const T1 pend)
CHashWriter(int nTypeIn, int nVersionIn)
static const int PROTOCOL_VERSION
CHashWriter & operator<<(const T &obj)
int HMAC_SHA512_Final(unsigned char *pmd, HMAC_SHA512_CTX *pctx)