11 inline uint32_t
ROTL32(uint32_t x, int8_t r)
13 return (x << r) | (x >> (32 - r));
16 unsigned int MurmurHash3(
unsigned int nHashSeed,
const std::vector<unsigned char>& vDataToHash)
19 uint32_t h1 = nHashSeed;
20 if (vDataToHash.size() > 0)
22 const uint32_t c1 = 0xcc9e2d51;
23 const uint32_t c2 = 0x1b873593;
25 const int nblocks = vDataToHash.size() / 4;
29 const uint8_t* blocks = &vDataToHash[0] + nblocks * 4;
31 for (
int i = -nblocks; i; i++) {
32 uint32_t k1 = ReadLE32(blocks + i*4);
40 h1 = h1 * 5 + 0xe6546b64;
45 const uint8_t* tail = (
const uint8_t*)(&vDataToHash[0] + nblocks * 4);
49 switch (vDataToHash.size() & 3) {
65 h1 ^= vDataToHash.size();
75 void BIP32Hash(
const ChainCode &chainCode,
unsigned int nChild,
unsigned char header,
const unsigned char data[32],
unsigned char output[64])
78 num[0] = (nChild >> 24) & 0xFF;
79 num[1] = (nChild >> 16) & 0xFF;
80 num[2] = (nChild >> 8) & 0xFF;
81 num[3] = (nChild >> 0) & 0xFF;
85 #define ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b))))
87 #define SIPROUND do { \
88 v0 += v1; v1 = ROTL(v1, 13); v1 ^= v0; \
90 v2 += v3; v3 = ROTL(v3, 16); v3 ^= v2; \
91 v0 += v3; v3 = ROTL(v3, 21); v3 ^= v0; \
92 v2 += v1; v1 = ROTL(v1, 17); v1 ^= v2; \
98 v[0] = 0x736f6d6570736575ULL ^ k0;
99 v[1] = 0x646f72616e646f6dULL ^ k1;
100 v[2] = 0x6c7967656e657261ULL ^ k0;
101 v[3] = 0x7465646279746573ULL ^ k1;
108 uint64_t v0 =
v[0], v1 =
v[1], v2 =
v[2], v3 =
v[3];
110 assert(
count % 8 == 0);
128 uint64_t v0 =
v[0], v1 =
v[1], v2 =
v[2], v3 =
v[3];
133 t |= ((uint64_t)(*(data++))) << (8 * (c % 8));
156 uint64_t v0 =
v[0], v1 =
v[1], v2 =
v[2], v3 =
v[3];
158 uint64_t t =
tmp | (((uint64_t)
count) << 56);
169 return v0 ^ v1 ^ v2 ^ v3;
177 uint64_t v0 = 0x736f6d6570736575ULL ^ k0;
178 uint64_t v1 = 0x646f72616e646f6dULL ^ k1;
179 uint64_t v2 = 0x6c7967656e657261ULL ^ k0;
180 uint64_t v3 = 0x7465646279746573ULL ^ k1 ^ d;
200 v3 ^= ((uint64_t)4) << 59;
203 v0 ^= ((uint64_t)4) << 59;
209 return v0 ^ v1 ^ v2 ^ v3;
A hasher class for HMAC-SHA-512.
void Finalize(unsigned char hash[OUTPUT_SIZE])
CHMAC_SHA512 & Write(const unsigned char *data, size_t len)
uint64_t Finalize() const
Compute the 64-bit SipHash-2-4 of the data written so far.
CSipHasher(uint64_t k0, uint64_t k1)
Construct a SipHash calculator initialized with 128-bit key (k0, k1)
CSipHasher & Write(uint64_t data)
Hash a 64-bit integer worth of data It is treated as if this was the little-endian interpretation of ...
unsigned int size() const
uint64_t GetUint64(int pos) const
void BIP32Hash(const ChainCode &chainCode, unsigned int nChild, unsigned char header, const unsigned char data[32], unsigned char output[64])
unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector< unsigned char > &vDataToHash)
uint32_t ROTL32(uint32_t x, int8_t r)
uint64_t SipHashUint256(uint64_t k0, uint64_t k1, const uint256 &val)
Optimized SipHash-2-4 implementation for uint256.