46 ctx->
H[0] =
UINT64_C (0x22312194FC2BF72C);
47 ctx->
H[1] =
UINT64_C (0x9F555FA3C84C64C2);
48 ctx->
H[2] =
UINT64_C (0x2393B86B6F53B151);
49 ctx->
H[3] =
UINT64_C (0x963877195940EABD);
50 ctx->
H[4] =
UINT64_C (0x96283EE2A88EFFE3);
51 ctx->
H[5] =
UINT64_C (0xBE5E1E2553863992);
52 ctx->
H[6] =
UINT64_C (0x2B0199FC2C85B8AA);
53 ctx->
H[7] =
UINT64_C (0x0EB72DDC81C52CA2);
88#ifndef _MHD_GET_64BIT_BE_ALLOW_UNALIGNED
96 data = (
const void *)
W;
103#define Ch(x,y,z) ( (z) ^ ((x) & ((y) ^ (z))) )
104#define Maj(x,y,z) ( ((x) & (y)) ^ ((z) & ((x) ^ (y))) )
112 ( _MHD_ROTR64 ((x), 28) ^ _MHD_ROTR64 ((x), 34) ^ _MHD_ROTR64 ((x), 39) )
114 ( _MHD_ROTR64 ((x), 14) ^ _MHD_ROTR64 ((x), 18) ^ _MHD_ROTR64 ((x), 41) )
116 ( _MHD_ROTR64 ((x), 1) ^ _MHD_ROTR64 ((x), 8) ^ ((x) >> 7) )
118 ( _MHD_ROTR64 ((x), 19) ^ _MHD_ROTR64 ((x), 61) ^ ((x) >> 6) )
129#define SHA2STEP64(vA,vB,vC,vD,vE,vF,vG,vH,kt,wt) do { \
130 (vD) += ((vH) += SIG1 ((vE)) + Ch ((vE),(vF),(vG)) + (kt) + (wt)); \
131 (vH) += SIG0 ((vA)) + Maj ((vA),(vB),(vC)); } while (0)
137#define GET_W_FROM_DATA(buf,t) \
138 _MHD_GET_64BIT_BE (((const uint64_t*) (buf)) + (t))
145#define Wgen(w,t) ( (w)[(t - 16) & 15] + sig1 ((w)[((t) - 2) & 15]) \
146 + (w)[((t) - 7) & 15] + sig0 ((w)[((t) - 15) & 15]) )
148#ifndef MHD_FAVOR_SMALL_CODE
159#if _MHD_BYTE_ORDER == _MHD_BIG_ENDIAN
160 if ((
const void *)
W ==
data)
229 W[16 & 15] =
Wgen (
W,16));
231 W[17 & 15] =
Wgen (
W,17));
233 W[18 & 15] =
Wgen (
W,18));
235 W[19 & 15] =
Wgen (
W,19));
237 W[20 & 15] =
Wgen (
W,20));
239 W[21 & 15] =
Wgen (
W,21));
241 W[22 & 15] =
Wgen (
W,22));
243 W[23 & 15] =
Wgen (
W,23));
245 W[24 & 15] =
Wgen (
W,24));
247 W[25 & 15] =
Wgen (
W,25));
249 W[26 & 15] =
Wgen (
W,26));
251 W[27 & 15] =
Wgen (
W,27));
253 W[28 & 15] =
Wgen (
W,28));
255 W[29 & 15] =
Wgen (
W,29));
257 W[30 & 15] =
Wgen (
W,30));
259 W[31 & 15] =
Wgen (
W,31));
261 W[32 & 15] =
Wgen (
W,32));
263 W[33 & 15] =
Wgen (
W,33));
265 W[34 & 15] =
Wgen (
W,34));
267 W[35 & 15] =
Wgen (
W,35));
269 W[36 & 15] =
Wgen (
W,36));
271 W[37 & 15] =
Wgen (
W,37));
273 W[38 & 15] =
Wgen (
W,38));
275 W[39 & 15] =
Wgen (
W,39));
277 W[40 & 15] =
Wgen (
W,40));
279 W[41 & 15] =
Wgen (
W,41));
281 W[42 & 15] =
Wgen (
W,42));
283 W[43 & 15] =
Wgen (
W,43));
285 W[44 & 15] =
Wgen (
W,44));
287 W[45 & 15] =
Wgen (
W,45));
289 W[46 & 15] =
Wgen (
W,46));
291 W[47 & 15] =
Wgen (
W,47));
293 W[48 & 15] =
Wgen (
W,48));
295 W[49 & 15] =
Wgen (
W,49));
297 W[50 & 15] =
Wgen (
W,50));
299 W[51 & 15] =
Wgen (
W,51));
301 W[52 & 15] =
Wgen (
W,52));
303 W[53 & 15] =
Wgen (
W,53));
305 W[54 & 15] =
Wgen (
W,54));
307 W[55 & 15] =
Wgen (
W,55));
309 W[56 & 15] =
Wgen (
W,56));
311 W[57 & 15] =
Wgen (
W,57));
313 W[58 & 15] =
Wgen (
W,58));
315 W[59 & 15] =
Wgen (
W,59));
317 W[60 & 15] =
Wgen (
W,60));
319 W[61 & 15] =
Wgen (
W,61));
321 W[62 & 15] =
Wgen (
W,62));
323 W[63 & 15] =
Wgen (
W,63));
325 W[64 & 15] =
Wgen (
W,64));
327 W[65 & 15] =
Wgen (
W,65));
329 W[66 & 15] =
Wgen (
W,66));
331 W[67 & 15] =
Wgen (
W,67));
333 W[68 & 15] =
Wgen (
W,68));
335 W[69 & 15] =
Wgen (
W,69));
337 W[70 & 15] =
Wgen (
W,70));
339 W[71 & 15] =
Wgen (
W,71));
341 W[72 & 15] =
Wgen (
W,72));
343 W[73 & 15] =
Wgen (
W,73));
345 W[74 & 15] =
Wgen (
W,74));
347 W[75 & 15] =
Wgen (
W,75));
349 W[76 & 15] =
Wgen (
W,76));
351 W[77 & 15] =
Wgen (
W,77));
353 W[78 & 15] =
Wgen (
W,78));
355 W[79 & 15] =
Wgen (
W,79));
408#define SHA2STEP64RV(vA,vB,vC,vD,vE,vF,vG,vH,kt,wt) do { \
409 uint64_t tmp_h_ = (vH); \
410 SHA2STEP64((vA),(vB),(vC),(vD),(vE),(vF),(vG),tmp_h_,(kt),(wt)); \
418 (vA) = tmp_h_; } while (0)
423 for (
t = 0;
t < 16; ++
t)
431 for (
t = 16;
t < 80; ++
t)
469#ifndef MHD_FAVOR_SMALL_CODE
525#define SHA512_256_SIZE_OF_LEN_ADD_BITS 128
530#define SHA512_256_SIZE_OF_LEN_ADD (SHA512_256_SIZE_OF_LEN_ADD_BITS / 8)
594#ifndef _MHD_PUT_64BIT_BE_UNALIGNED
613#ifndef MHD_FAVOR_SMALL_CODE
617#if ! defined(MHD_FAVOR_SMALL_CODE) || defined(_MHD_PUT_64BIT_BE_UNALIGNED)
#define _MHD_UINT64_ALIGN
macros for bits manipulations
#define _MHD_PUT_64BIT_BE(addr, value64)
#define MHD_DATA_TRUNCATION_RUNTIME_CHECK_DISABLE_
#define MHD_DATA_TRUNCATION_RUNTIME_CHECK_RESTORE_
#define SHA2STEP64(vA, vB, vC, vD, vE, vF, vG, vH, kt, wt)
void MHD_SHA512_256_finish(struct Sha512_256Ctx *ctx, uint8_t digest[SHA512_256_DIGEST_SIZE])
void MHD_SHA512_256_init(struct Sha512_256Ctx *ctx)
void MHD_SHA512_256_update(struct Sha512_256Ctx *ctx, const uint8_t *data, size_t length)
static MHD_DATA_TRUNCATION_RUNTIME_CHECK_DISABLE_ void sha512_256_transform(uint64_t H[SHA512_256_HASH_SIZE_WORDS], const void *data)
#define SHA512_256_SIZE_OF_LEN_ADD
#define GET_W_FROM_DATA(buf, t)
Calculation of SHA-512/256 digest.
#define SHA512_256_BLOCK_SIZE
#define SHA512_256_BLOCK_SIZE_WORDS
#define SHA512_256_HASH_SIZE_WORDS
#define SHA512_256_DIGEST_SIZE_WORDS
#define SHA512_256_DIGEST_SIZE
#define SHA512_256_BYTES_IN_WORD
uint64_t H[SHA512_256_HASH_SIZE_WORDS]
uint64_t buffer[SHA512_256_BLOCK_SIZE_WORDS]