Changeset View
Changeset View
Standalone View
Standalone View
src/hash.h
Show First 20 Lines • Show All 207 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
uint32_t MurmurHash3(uint32_t nHashSeed, | uint32_t MurmurHash3(uint32_t nHashSeed, | ||||
const std::vector<uint8_t> &vDataToHash); | const std::vector<uint8_t> &vDataToHash); | ||||
void BIP32Hash(const ChainCode &chainCode, uint32_t nChild, uint8_t header, | void BIP32Hash(const ChainCode &chainCode, uint32_t nChild, uint8_t header, | ||||
const uint8_t data[32], uint8_t output[64]); | const uint8_t data[32], uint8_t output[64]); | ||||
/** SipHash-2-4 */ | |||||
class CSipHasher { | |||||
private: | |||||
uint64_t v[4]; | |||||
uint64_t tmp; | |||||
int count; | |||||
public: | |||||
/** Construct a SipHash calculator initialized with 128-bit key (k0, k1) */ | |||||
CSipHasher(uint64_t k0, uint64_t k1); | |||||
/** | |||||
* Hash a 64-bit integer worth of data. | |||||
* It is treated as if this was the little-endian interpretation of 8 bytes. | |||||
* This function can only be used when a multiple of 8 bytes have been | |||||
* written so far. | |||||
*/ | |||||
CSipHasher &Write(uint64_t data); | |||||
/** Hash arbitrary bytes. */ | |||||
CSipHasher &Write(const uint8_t *data, size_t size); | |||||
/** Compute the 64-bit SipHash-2-4 of the data written so far. The object | |||||
* remains untouched. */ | |||||
uint64_t Finalize() const; | |||||
}; | |||||
/** Optimized SipHash-2-4 implementation for uint256. | |||||
* | |||||
* It is identical to: | |||||
* SipHasher(k0, k1) | |||||
* .Write(val.GetUint64(0)) | |||||
* .Write(val.GetUint64(1)) | |||||
* .Write(val.GetUint64(2)) | |||||
* .Write(val.GetUint64(3)) | |||||
* .Finalize() | |||||
*/ | |||||
uint64_t SipHashUint256(uint64_t k0, uint64_t k1, const uint256 &val); | |||||
uint64_t SipHashUint256Extra(uint64_t k0, uint64_t k1, const uint256 &val, | |||||
uint32_t extra); | |||||
#endif // BITCOIN_HASH_H | #endif // BITCOIN_HASH_H |