51 #define fillz() do { \ 52 sph_blake512_init(&z_blake); \ 53 sph_bmw512_init(&z_bmw); \ 54 sph_groestl512_init(&z_groestl); \ 55 sph_jh512_init(&z_jh); \ 56 sph_keccak512_init(&z_keccak); \ 57 sph_skein512_init(&z_skein); \ 58 sph_luffa512_init(&z_luffa); \ 59 sph_cubehash512_init(&z_cubehash); \ 60 sph_shavite512_init(&z_shavite); \ 61 sph_simd512_init(&z_simd); \ 62 sph_echo512_init(&z_echo); \ 65 #define ZBLAKE (memcpy(&ctx_blake, &z_blake, sizeof(z_blake))) 66 #define ZBMW (memcpy(&ctx_bmw, &z_bmw, sizeof(z_bmw))) 67 #define ZGROESTL (memcpy(&ctx_groestl, &z_groestl, sizeof(z_groestl))) 68 #define ZJH (memcpy(&ctx_jh, &z_jh, sizeof(z_jh))) 69 #define ZKECCAK (memcpy(&ctx_keccak, &z_keccak, sizeof(z_keccak))) 70 #define ZSKEIN (memcpy(&ctx_skein, &z_skein, sizeof(z_skein))) 122 template<
typename T1>
125 static const unsigned char pblank[1] = {};
127 CHash256().
Write(pbegin == pend ? pblank : (
const unsigned char*)&pbegin[0], (pend - pbegin) *
sizeof(pbegin[0]))
133 template<
typename T1,
typename T2>
135 const T2 p2begin,
const T2 p2end) {
136 static const unsigned char pblank[1] = {};
138 CHash256().
Write(p1begin == p1end ? pblank : (
const unsigned char*)&p1begin[0], (p1end - p1begin) *
sizeof(p1begin[0]))
139 .
Write(p2begin == p2end ? pblank : (
const unsigned char*)&p2begin[0], (p2end - p2begin) *
sizeof(p2begin[0]))
145 template<
typename T1,
typename T2,
typename T3>
147 const T2 p2begin,
const T2 p2end,
148 const T3 p3begin,
const T3 p3end) {
149 static const unsigned char pblank[1] = {};
151 CHash256().
Write(p1begin == p1end ? pblank : (
const unsigned char*)&p1begin[0], (p1end - p1begin) *
sizeof(p1begin[0]))
152 .
Write(p2begin == p2end ? pblank : (
const unsigned char*)&p2begin[0], (p2end - p2begin) *
sizeof(p2begin[0]))
153 .
Write(p3begin == p3end ? pblank : (
const unsigned char*)&p3begin[0], (p3end - p3begin) *
sizeof(p3begin[0]))
159 template<
typename T1,
typename T2,
typename T3,
typename T4>
161 const T2 p2begin,
const T2 p2end,
162 const T3 p3begin,
const T3 p3end,
163 const T4 p4begin,
const T4 p4end) {
164 static const unsigned char pblank[1] = {};
166 CHash256().
Write(p1begin == p1end ? pblank : (
const unsigned char*)&p1begin[0], (p1end - p1begin) *
sizeof(p1begin[0]))
167 .
Write(p2begin == p2end ? pblank : (
const unsigned char*)&p2begin[0], (p2end - p2begin) *
sizeof(p2begin[0]))
168 .
Write(p3begin == p3end ? pblank : (
const unsigned char*)&p3begin[0], (p3end - p3begin) *
sizeof(p3begin[0]))
169 .
Write(p4begin == p4end ? pblank : (
const unsigned char*)&p4begin[0], (p4end - p4begin) *
sizeof(p4begin[0]))
175 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
177 const T2 p2begin,
const T2 p2end,
178 const T3 p3begin,
const T3 p3end,
179 const T4 p4begin,
const T4 p4end,
180 const T5 p5begin,
const T5 p5end) {
181 static const unsigned char pblank[1] = {};
183 CHash256().
Write(p1begin == p1end ? pblank : (
const unsigned char*)&p1begin[0], (p1end - p1begin) *
sizeof(p1begin[0]))
184 .
Write(p2begin == p2end ? pblank : (
const unsigned char*)&p2begin[0], (p2end - p2begin) *
sizeof(p2begin[0]))
185 .
Write(p3begin == p3end ? pblank : (
const unsigned char*)&p3begin[0], (p3end - p3begin) *
sizeof(p3begin[0]))
186 .
Write(p4begin == p4end ? pblank : (
const unsigned char*)&p4begin[0], (p4end - p4begin) *
sizeof(p4begin[0]))
187 .
Write(p5begin == p5end ? pblank : (
const unsigned char*)&p5begin[0], (p5end - p5begin) *
sizeof(p5begin[0]))
193 template<
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
195 const T2 p2begin,
const T2 p2end,
196 const T3 p3begin,
const T3 p3end,
197 const T4 p4begin,
const T4 p4end,
198 const T5 p5begin,
const T5 p5end,
199 const T6 p6begin,
const T6 p6end) {
200 static const unsigned char pblank[1] = {};
202 CHash256().
Write(p1begin == p1end ? pblank : (
const unsigned char*)&p1begin[0], (p1end - p1begin) *
sizeof(p1begin[0]))
203 .
Write(p2begin == p2end ? pblank : (
const unsigned char*)&p2begin[0], (p2end - p2begin) *
sizeof(p2begin[0]))
204 .
Write(p3begin == p3end ? pblank : (
const unsigned char*)&p3begin[0], (p3end - p3begin) *
sizeof(p3begin[0]))
205 .
Write(p4begin == p4end ? pblank : (
const unsigned char*)&p4begin[0], (p4end - p4begin) *
sizeof(p4begin[0]))
206 .
Write(p5begin == p5end ? pblank : (
const unsigned char*)&p5begin[0], (p5end - p5begin) *
sizeof(p5begin[0]))
207 .
Write(p6begin == p6end ? pblank : (
const unsigned char*)&p6begin[0], (p6end - p6begin) *
sizeof(p6begin[0]))
213 template<
typename T1>
216 static unsigned char pblank[1] = {};
218 CHash160().
Write(pbegin == pend ? pblank : (
const unsigned char*)&pbegin[0], (pend - pbegin) *
sizeof(pbegin[0]))
226 return Hash160(vch.begin(), vch.end());
230 template<
unsigned int N>
249 ctx.
Write((
const unsigned char*)pch, size);
277 unsigned int MurmurHash3(
unsigned int nHashSeed,
const std::vector<unsigned char>& vDataToHash);
279 void BIP32Hash(
const ChainCode &chainCode,
unsigned int nChild,
unsigned char header,
const unsigned char data[32],
unsigned char output[64]);
282 template<
typename T1>
286 sph_blake512_context ctx_blake;
287 sph_bmw512_context ctx_bmw;
291 sph_skein512_context ctx_skein;
297 static unsigned char pblank[1];
301 sph_blake512_init(&ctx_blake);
302 sph_blake512 (&ctx_blake, (pbegin == pend ? pblank : static_cast<const void*>(&pbegin[0])), (pend - pbegin) *
sizeof(pbegin[0]));
303 sph_blake512_close(&ctx_blake, static_cast<void*>(&hash[0]));
305 sph_bmw512_init(&ctx_bmw);
306 sph_bmw512 (&ctx_bmw, static_cast<const void*>(&hash[0]), 64);
307 sph_bmw512_close(&ctx_bmw, static_cast<void*>(&hash[1]));
310 sph_groestl512 (&ctx_groestl, static_cast<const void*>(&hash[1]), 64);
313 sph_skein512_init(&ctx_skein);
314 sph_skein512 (&ctx_skein, static_cast<const void*>(&hash[2]), 64);
315 sph_skein512_close(&ctx_skein, static_cast<void*>(&hash[3]));
318 sph_jh512 (&ctx_jh, static_cast<const void*>(&hash[3]), 64);
322 sph_keccak512 (&ctx_keccak, static_cast<const void*>(&hash[4]), 64);
326 sph_luffa512 (&ctx_luffa, static_cast<void*>(&hash[5]), 64);
330 sph_cubehash512 (&ctx_cubehash, static_cast<const void*>(&hash[6]), 64);
334 sph_shavite512(&ctx_shavite, static_cast<const void*>(&hash[7]), 64);
338 sph_simd512 (&ctx_simd, static_cast<const void*>(&hash[8]), 64);
342 sph_echo512 (&ctx_echo, static_cast<const void*>(&hash[9]), 64);
348 #endif // BITCOIN_HASH_H
GLOBAL sph_blake512_context z_blake
static const size_t OUTPUT_SIZE
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)
CHashWriter(int nTypeIn, int nVersionIn)
GLOBAL sph_shavite512_context z_shavite
void sph_echo512(void *cc, const void *data, size_t len)
void sph_simd512(void *cc, const void *data, size_t len)
void sph_simd512_close(void *cc, void *dst)
void Serialize(Stream &s, char a, int, int=0)
GLOBAL sph_cubehash512_context z_cubehash
static const size_t OUTPUT_SIZE
void sph_echo512_init(void *cc)
void sph_jh512_init(void *cc)
uint160 Hash160(const T1 pbegin, const T1 pend)
GLOBAL sph_keccak512_context z_keccak
CRIPEMD160 & Write(const unsigned char *data, size_t len)
void sph_luffa512_close(void *cc, void *dst)
void Finalize(unsigned char hash[OUTPUT_SIZE])
void sph_luffa512(void *cc, const void *data, size_t len)
void sph_shavite512_init(void *cc)
void sph_cubehash512(void *cc, const void *data, size_t len)
uint256 SerializeHash(const T &obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION)
void sph_jh512_close(void *cc, void *dst)
void sph_cubehash512_close(void *cc, void *dst)
GLOBAL sph_echo512_context z_echo
static const size_t OUTPUT_SIZE
GLOBAL sph_luffa512_context z_luffa
uint256 Hash(const T1 pbegin, const T1 pend)
void Finalize(unsigned char hash[OUTPUT_SIZE])
void sph_shavite512(void *cc, const void *data, size_t len)
void sph_echo512_close(void *cc, void *dst)
GLOBAL sph_simd512_context z_simd
void sph_keccak512_init(void *cc)
CSHA256 & Write(const unsigned char *data, size_t len)
CHash160 & Write(const unsigned char *data, size_t len)
static const int PROTOCOL_VERSION
static const size_t OUTPUT_SIZE
void sph_keccak512(void *cc, const void *data, size_t len)
GLOBAL sph_groestl512_context z_groestl
GLOBAL sph_bmw512_context z_bmw
void Finalize(unsigned char hash[OUTPUT_SIZE])
void sph_shavite512_close(void *cc, void *dst)
void Finalize(unsigned char hash[OUTPUT_SIZE])
CHashWriter & operator<<(const T &obj)
GLOBAL sph_jh512_context z_jh
void sph_groestl512(void *cc, const void *data, size_t len)
void sph_keccak512_close(void *cc, void *dst)
void sph_groestl512_init(void *cc)
void sph_simd512_init(void *cc)
void sph_jh512(void *cc, const void *data, size_t len)
void sph_groestl512_close(void *cc, void *dst)
CHashWriter & write(const char *pch, size_t size)
void sph_cubehash512_init(void *cc)
uint256 HashX11(const T1 pbegin, const T1 pend)
CHash256 & Write(const unsigned char *data, size_t len)
GLOBAL sph_skein512_context z_skein
void sph_luffa512_init(void *cc)