108 sph_blake512_init(&z_blake); \
109 sph_bmw512_init(&z_bmw); \
110 sph_groestl512_init(&z_groestl); \
111 sph_jh512_init(&z_jh); \
112 sph_keccak512_init(&z_keccak); \
113 sph_skein512_init(&z_skein); \
116 #define ZBLAKE (memcpy(&ctx_blake, &z_blake, sizeof(z_blake)))
117 #define ZBMW (memcpy(&ctx_bmw, &z_bmw, sizeof(z_bmw)))
118 #define ZGROESTL (memcpy(&ctx_groestl, &z_groestl, sizeof(z_groestl)))
119 #define ZJH (memcpy(&ctx_jh, &z_jh, sizeof(z_jh)))
120 #define ZKECCAK (memcpy(&ctx_keccak, &z_keccak, sizeof(z_keccak)))
121 #define ZSKEIN (memcpy(&ctx_skein, &z_skein, sizeof(z_skein)))
154 template <
typename T1>
157 static const unsigned char pblank[1] = {};
159 CHash512().
Write(pbegin == pend ? pblank : (
const unsigned char*)&pbegin[0], (pend - pbegin) *
sizeof(pbegin[0])).
Finalize((
unsigned char*)&result);
162 template <
typename T1,
typename T2>
163 inline uint512 Hash512(
const T1 p1begin,
const T1 p1end,
const T2 p2begin,
const T2 p2end)
165 static const unsigned char pblank[1] = {};
167 CHash512().
Write(p1begin == p1end ? pblank : (
const unsigned char*)&p1begin[0], (p1end - p1begin) *
sizeof(p1begin[0])).
Write(p2begin == p2end ? pblank : (
const unsigned char*)&p2begin[0], (p2end - p2begin) *
sizeof(p2begin[0])).
Finalize((
unsigned char*)&result);
172 template <
typename T1>
175 static const unsigned char pblank[1] = {};
177 CHash256().
Write(pbegin == pend ? pblank : (
const unsigned char*)&pbegin[0], (pend - pbegin) *
sizeof(pbegin[0])).
Finalize((
unsigned char*)&result);
182 template <
typename T1,
typename T2>
183 inline uint256 Hash(
const T1 p1begin,
const T1 p1end,
const T2 p2begin,
const T2 p2end)
185 static const unsigned char pblank[1] = {};
187 CHash256().
Write(p1begin == p1end ? pblank : (
const unsigned char*)&p1begin[0], (p1end - p1begin) *
sizeof(p1begin[0])).
Write(p2begin == p2end ? pblank : (
const unsigned char*)&p2begin[0], (p2end - p2begin) *
sizeof(p2begin[0])).
Finalize((
unsigned char*)&result);
192 template <
typename T1>
195 static unsigned char pblank[1] = {};
197 CHash160().
Write(pbegin == pend ? pblank : (
const unsigned char*)&pbegin[0], (pend - pbegin) *
sizeof(pbegin[0])).
Finalize((
unsigned char*)&result);
204 return Hash160(vch.begin(), vch.end());
208 template<
unsigned int N>
230 void write(
const char* pch,
size_t size)
232 ctx.
Write((
const unsigned char*)pch, size);
243 template <
typename T>
253 template<
typename Source>
262 void read(
char* pch,
size_t nSize)
265 this->
write(pch, nSize);
272 size_t now = std::min<size_t>(nSize, 1024);
288 template <
typename T>
300 crypto_generichash_blake2b_state
state;
307 assert(crypto_generichash_blake2b_init_salt_personal(
316 crypto_generichash_blake2b_update(&
state, (
const unsigned char*)pch, size);
323 crypto_generichash_blake2b_final(&
state, (
unsigned char*)&result, 32);
335 unsigned int MurmurHash3(
unsigned int nHashSeed,
const std::vector<unsigned char>& vDataToHash);
337 void BIP32Hash(
const ChainCode chainCode,
unsigned int nChild,
unsigned char header,
const unsigned char data[32],
unsigned char output[64]);
344 template <
typename T1>
348 sph_blake512_context ctx_blake;
349 sph_bmw512_context ctx_bmw;
353 sph_skein512_context ctx_skein;
354 static unsigned char pblank[1];
361 sph_blake512_init(&ctx_blake);
363 sph_blake512(&ctx_blake, (pbegin == pend ? pblank :
static_cast<const void*
>(&pbegin[0])), (pend - pbegin) *
sizeof(pbegin[0]));
364 sph_blake512_close(&ctx_blake,
static_cast<void*
>(&hash[0]));
366 sph_bmw512_init(&ctx_bmw);
368 sph_bmw512(&ctx_bmw,
static_cast<const void*
>(&hash[0]), 64);
369 sph_bmw512_close(&ctx_bmw,
static_cast<void*
>(&hash[1]));
371 if ((hash[1] & mask) != zero) {
374 sph_groestl512(&ctx_groestl,
static_cast<const void*
>(&hash[1]), 64);
377 sph_skein512_init(&ctx_skein);
379 sph_skein512(&ctx_skein,
static_cast<const void*
>(&hash[1]), 64);
380 sph_skein512_close(&ctx_skein,
static_cast<void*
>(&hash[2]));
385 sph_groestl512(&ctx_groestl,
static_cast<const void*
>(&hash[2]), 64);
390 sph_jh512(&ctx_jh,
static_cast<const void*
>(&hash[3]), 64);
393 if ((hash[4] & mask) != zero) {
394 sph_blake512_init(&ctx_blake);
396 sph_blake512(&ctx_blake,
static_cast<const void*
>(&hash[4]), 64);
397 sph_blake512_close(&ctx_blake,
static_cast<void*
>(&hash[5]));
399 sph_bmw512_init(&ctx_bmw);
401 sph_bmw512(&ctx_bmw,
static_cast<const void*
>(&hash[4]), 64);
402 sph_bmw512_close(&ctx_bmw,
static_cast<void*
>(&hash[5]));
407 sph_keccak512(&ctx_keccak,
static_cast<const void*
>(&hash[5]), 64);
410 sph_skein512_init(&ctx_skein);
412 sph_skein512(&ctx_skein,
static_cast<const void*
>(&hash[6]), 64);
413 sph_skein512_close(&ctx_skein,
static_cast<void*
>(&hash[7]));
415 if ((hash[7] & mask) != zero) {
418 sph_keccak512(&ctx_keccak,
static_cast<const void*
>(&hash[7]), 64);
423 sph_jh512(&ctx_jh,
static_cast<const void*
>(&hash[7]), 64);
429 void scrypt_hash(
const char* pass,
unsigned int pLen,
const char* salt,
unsigned int sLen,
char* output,
unsigned int N,
unsigned int r,
unsigned int p,
unsigned int dkLen);
A writer stream (for serialization) that computes a 256-bit BLAKE2b hash.
CBLAKE2bWriter & write(const char *pch, size_t size)
CBLAKE2bWriter & operator<<(const T &obj)
CBLAKE2bWriter(int nTypeIn, int nVersionIn, const unsigned char *personal)
crypto_generichash_blake2b_state state
A hasher class for Bitcoin's 160-bit hash (SHA-256 + RIPEMD-160).
static const size_t OUTPUT_SIZE
void Finalize(unsigned char hash[OUTPUT_SIZE])
CHash160 & Write(const unsigned char *data, size_t len)
A hasher class for Bitcoin's 256-bit hash (double SHA-256).
static const size_t OUTPUT_SIZE
CHash256 & Write(const unsigned char *data, size_t len)
void Finalize(unsigned char hash[OUTPUT_SIZE])
void Finalize(unsigned char hash[OUTPUT_SIZE])
CHash512 & Write(const unsigned char *data, size_t len)
static const size_t OUTPUT_SIZE
Reads data from an underlying stream, while hashing the read data.
CHashVerifier(Source *source_)
CHashVerifier< Source > & operator>>(T &&obj)
void ignore(size_t nSize)
void read(char *pch, size_t nSize)
A writer stream (for serialization) that computes a 256-bit hash.
CHashWriter & operator<<(const T &obj)
CHashWriter(int nTypeIn, int nVersionIn)
void write(const char *pch, size_t size)
A hasher class for RIPEMD-160.
CRIPEMD160 & Write(const unsigned char *data, size_t len)
void Finalize(unsigned char hash[OUTPUT_SIZE])
static const size_t OUTPUT_SIZE
A hasher class for SHA-256.
static const size_t OUTPUT_SIZE
void Finalize(unsigned char hash[OUTPUT_SIZE])
CSHA256 & Write(const unsigned char *data, size_t len)
A hasher class for SHA-512.
static constexpr size_t OUTPUT_SIZE
void Finalize(unsigned char hash[OUTPUT_SIZE])
CSHA512 & Write(const unsigned char *data, size_t len)
512-bit unsigned big integer.
Implements a drop-in replacement for std::vector<T> which stores up to N elements directly (without h...
void sph_groestl512_close(void *cc, void *dst)
Terminate the current Groestl-512 computation and output the result into the provided buffer.
void sph_groestl512(void *cc, const void *data, size_t len)
Process some data bytes.
void sph_groestl512_init(void *cc)
Initialize a Groestl-512 context.
uint512 Hash512(const T1 pbegin, const T1 pend)
Compute the 512-bit hash of an object.
GLOBAL sph_skein512_context z_skein
void BIP32Hash(const ChainCode chainCode, unsigned int nChild, unsigned char header, const unsigned char data[32], unsigned char output[64])
GLOBAL sph_bmw512_context z_bmw
GLOBAL sph_jh512_context z_jh
unsigned int MurmurHash3(unsigned int nHashSeed, const std::vector< unsigned char > &vDataToHash)
uint160 Hash160(const T1 pbegin, const T1 pend)
Compute the 160-bit hash an object.
uint256 HashQuark(const T1 pbegin, const T1 pend)
uint256 SerializeHash(const T &obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION)
Compute the 256-bit hash of an object's serialization.
GLOBAL sph_blake512_context z_blake
GLOBAL sph_keccak512_context z_keccak
uint256 Hash(const T1 pbegin, const T1 pend)
Compute the 256-bit hash of an object.
void scrypt_hash(const char *pass, unsigned int pLen, const char *salt, unsigned int sLen, char *output, unsigned int N, unsigned int r, unsigned int p, unsigned int dkLen)
GLOBAL sph_groestl512_context z_groestl
#define T(expected, seed, data)
void sph_jh512(void *cc, const void *data, size_t len)
Process some data bytes.
void sph_jh512_init(void *cc)
Initialize a JH-512 context.
void sph_jh512_close(void *cc, void *dst)
Terminate the current JH-512 computation and output the result into the provided buffer.
void sph_keccak512(void *cc, const void *data, size_t len)
Process some data bytes.
void sph_keccak512_init(void *cc)
Initialize a Keccak-512 context.
void sph_keccak512_close(void *cc, void *dst)
Terminate the current Keccak-512 computation and output the result into the provided buffer.
void Serialize(Stream &s, char a)
void Unserialize(Stream &s, char &a)
This structure is a context for Groestl-384 and Groestl-512 computations: it contains the intermediat...
This structure is a context for JH computations: it contains the intermediate values and some data fr...
This structure is a context for Keccak computations: it contains the intermediate values and some dat...