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 const uint32_t c1 = 0xcc9e2d51;
21 const uint32_t c2 = 0x1b873593;
23 const int nblocks = vDataToHash.size() / 4;
27 const uint8_t* blocks = vDataToHash.data();
29 for (
int i = 0; i < nblocks; ++i) {
30 uint32_t
k1 = ReadLE32(blocks + i*4);
38 h1 = h1 * 5 + 0xe6546b64;
43 const uint8_t* tail = vDataToHash.data() + nblocks * 4;
47 switch (vDataToHash.size() & 3) {
62 h1 ^= vDataToHash.size();
72 void BIP32Hash(
const ChainCode &chainCode,
unsigned int nChild,
unsigned char header,
const unsigned char data[32],
unsigned char output[64])
75 num[0] = (nChild >> 24) & 0xFF;
76 num[1] = (nChild >> 16) & 0xFF;
77 num[2] = (nChild >> 8) & 0xFF;
78 num[3] = (nChild >> 0) & 0xFF;
82 #define ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b)))) 84 #define SIPROUND do { \ 85 v0 += v1; v1 = ROTL(v1, 13); v1 ^= v0; \ 87 v2 += v3; v3 = ROTL(v3, 16); v3 ^= v2; \ 88 v0 += v3; v3 = ROTL(v3, 21); v3 ^= v0; \ 89 v2 += v1; v1 = ROTL(v1, 17); v1 ^= v2; \ 95 v[0] = 0x736f6d6570736575ULL ^
k0;
96 v[1] = 0x646f72616e646f6dULL ^
k1;
97 v[2] = 0x6c7967656e657261ULL ^
k0;
98 v[3] = 0x7465646279746573ULL ^
k1;
105 uint64_t v0 =
v[0], v1 =
v[1], v2 =
v[2], v3 =
v[3];
125 uint64_t v0 =
v[0], v1 =
v[1], v2 =
v[2], v3 =
v[3];
130 t |= ((uint64_t)(*(data++))) << (8 * (c % 8));
153 uint64_t v0 =
v[0], v1 =
v[1], v2 =
v[2], v3 =
v[3];
155 uint64_t t =
tmp | (((uint64_t)
count) << 56);
166 return v0 ^ v1 ^ v2 ^ v3;
174 uint64_t v0 = 0x736f6d6570736575ULL ^
k0;
175 uint64_t v1 = 0x646f72616e646f6dULL ^
k1;
176 uint64_t v2 = 0x6c7967656e657261ULL ^
k0;
177 uint64_t v3 = 0x7465646279746573ULL ^ k1 ^
d;
197 v3 ^= ((uint64_t)4) << 59;
200 v0 ^= ((uint64_t)4) << 59;
206 return v0 ^ v1 ^ v2 ^ v3;
214 uint64_t v0 = 0x736f6d6570736575ULL ^
k0;
215 uint64_t v1 = 0x646f72616e646f6dULL ^
k1;
216 uint64_t v2 = 0x6c7967656e657261ULL ^
k0;
217 uint64_t v3 = 0x7465646279746573ULL ^ k1 ^
d;
237 d = (((uint64_t)36) << 56) | extra;
247 return v0 ^ v1 ^ v2 ^ v3;
void Finalize(unsigned char hash[OUTPUT_SIZE])
CHMAC_SHA512 & Write(const unsigned char *data, size_t len)
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 ...
assert(len-trim+(2 *lenIndices)<=WIDTH)
CSipHasher(uint64_t k0, uint64_t k1)
Construct a SipHash calculator initialized with 128-bit key (k0, k1)
uint64_t GetUint64(int pos) const
unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector< unsigned char > &vDataToHash)
void BIP32Hash(const ChainCode &chainCode, unsigned int nChild, unsigned char header, const unsigned char data[32], unsigned char output[64])
uint64_t Finalize() const
Compute the 64-bit SipHash-2-4 of the data written so far.
uint8_t const size_t const size
uint64_t SipHashUint256(uint64_t k0, uint64_t k1, const uint256 &val)
Optimized SipHash-2-4 implementation for uint256.
uint64_t SipHashUint256Extra(uint64_t k0, uint64_t k1, const uint256 &val, uint32_t extra)
unsigned int size() const
uint32_t ROTL32(uint32_t x, int8_t r)
A hasher class for HMAC-SHA-512.