52 ctx->
H[0] = 0x6a09e667UL;
53 ctx->
H[1] = 0xbb67ae85UL;
54 ctx->
H[2] = 0x3c6ef372UL;
55 ctx->
H[3] = 0xa54ff53aUL;
56 ctx->
H[4] = 0x510e527fUL;
57 ctx->
H[5] = 0x9b05688cUL;
58 ctx->
H[6] = 0x1f83d9abUL;
59 ctx->
H[7] = 0x5be0cd19UL;
70 #define SHA256_BYTES_IN_WORD 4
100 #define Ch(x,y,z) ( (z) ^ ((x) & ((y) ^ (z))) )
101 #define Maj(x,y,z) ( ((x) & (y)) ^ ((z) & ((x) ^ (y))) )
108 #define SIG0(x) (_MHD_ROTR32 ((x),2) ^ _MHD_ROTR32 ((x),13) ^ _MHD_ROTR32 ((x), \
110 #define SIG1(x) (_MHD_ROTR32 ((x),6) ^ _MHD_ROTR32 ((x),11) ^ _MHD_ROTR32 ((x), \
112 #define sig0(x) (_MHD_ROTR32 ((x),7) ^ _MHD_ROTR32 ((x),18) ^ ((x) >> 3) )
113 #define sig1(x) (_MHD_ROTR32 ((x),17) ^ _MHD_ROTR32 ((x),19) ^ ((x) >> 10) )
127 #define SHA2STEP32(vA,vB,vC,vD,vE,vF,vG,vH,kt,wt) do { \
128 (vD) += ((vH) += SIG1 ((vE)) + Ch ((vE),(vF),(vG)) + (kt) + (wt)); \
129 (vH) += SIG0 ((vA)) + Maj ((vA),(vB),(vC)); } while (0)
135 #define GET_W_FROM_DATA(buf,t) \
136 _MHD_GET_32BIT_BE (((const uint8_t*) (buf)) + (t) * SHA256_BYTES_IN_WORD)
181 #define Wgen(w,t) ( (w)[(t - 16) & 0xf] + sig1 ((w)[((t) - 2) & 0xf]) \
182 + (w)[((t) - 7) & 0xf] + sig0 ((w)[((t) - 15) & 0xf]) )
189 SHA2STEP32 (a, b, c, d, e, f, g, h, 0xe49b69c1UL, W[16 & 0xf] =
Wgen (W,16));
190 SHA2STEP32 (h, a, b, c, d, e, f, g, 0xefbe4786UL, W[17 & 0xf] =
Wgen (W,17));
191 SHA2STEP32 (g, h, a, b, c, d, e, f, 0x0fc19dc6UL, W[18 & 0xf] =
Wgen (W,18));
192 SHA2STEP32 (f, g, h, a, b, c, d, e, 0x240ca1ccUL, W[19 & 0xf] =
Wgen (W,19));
193 SHA2STEP32 (e, f, g, h, a, b, c, d, 0x2de92c6fUL, W[20 & 0xf] =
Wgen (W,20));
194 SHA2STEP32 (d, e, f, g, h, a, b, c, 0x4a7484aaUL, W[21 & 0xf] =
Wgen (W,21));
195 SHA2STEP32 (c, d, e, f, g, h, a, b, 0x5cb0a9dcUL, W[22 & 0xf] =
Wgen (W,22));
196 SHA2STEP32 (b, c, d, e, f, g, h, a, 0x76f988daUL, W[23 & 0xf] =
Wgen (W,23));
197 SHA2STEP32 (a, b, c, d, e, f, g, h, 0x983e5152UL, W[24 & 0xf] =
Wgen (W,24));
198 SHA2STEP32 (h, a, b, c, d, e, f, g, 0xa831c66dUL, W[25 & 0xf] =
Wgen (W,25));
199 SHA2STEP32 (g, h, a, b, c, d, e, f, 0xb00327c8UL, W[26 & 0xf] =
Wgen (W,26));
200 SHA2STEP32 (f, g, h, a, b, c, d, e, 0xbf597fc7UL, W[27 & 0xf] =
Wgen (W,27));
201 SHA2STEP32 (e, f, g, h, a, b, c, d, 0xc6e00bf3UL, W[28 & 0xf] =
Wgen (W,28));
202 SHA2STEP32 (d, e, f, g, h, a, b, c, 0xd5a79147UL, W[29 & 0xf] =
Wgen (W,29));
203 SHA2STEP32 (c, d, e, f, g, h, a, b, 0x06ca6351UL, W[30 & 0xf] =
Wgen (W,30));
204 SHA2STEP32 (b, c, d, e, f, g, h, a, 0x14292967UL, W[31 & 0xf] =
Wgen (W,31));
205 SHA2STEP32 (a, b, c, d, e, f, g, h, 0x27b70a85UL, W[32 & 0xf] =
Wgen (W,32));
206 SHA2STEP32 (h, a, b, c, d, e, f, g, 0x2e1b2138UL, W[33 & 0xf] =
Wgen (W,33));
207 SHA2STEP32 (g, h, a, b, c, d, e, f, 0x4d2c6dfcUL, W[34 & 0xf] =
Wgen (W,34));
208 SHA2STEP32 (f, g, h, a, b, c, d, e, 0x53380d13UL, W[35 & 0xf] =
Wgen (W,35));
209 SHA2STEP32 (e, f, g, h, a, b, c, d, 0x650a7354UL, W[36 & 0xf] =
Wgen (W,36));
210 SHA2STEP32 (d, e, f, g, h, a, b, c, 0x766a0abbUL, W[37 & 0xf] =
Wgen (W,37));
211 SHA2STEP32 (c, d, e, f, g, h, a, b, 0x81c2c92eUL, W[38 & 0xf] =
Wgen (W,38));
212 SHA2STEP32 (b, c, d, e, f, g, h, a, 0x92722c85UL, W[39 & 0xf] =
Wgen (W,39));
213 SHA2STEP32 (a, b, c, d, e, f, g, h, 0xa2bfe8a1UL, W[40 & 0xf] =
Wgen (W,40));
214 SHA2STEP32 (h, a, b, c, d, e, f, g, 0xa81a664bUL, W[41 & 0xf] =
Wgen (W,41));
215 SHA2STEP32 (g, h, a, b, c, d, e, f, 0xc24b8b70UL, W[42 & 0xf] =
Wgen (W,42));
216 SHA2STEP32 (f, g, h, a, b, c, d, e, 0xc76c51a3UL, W[43 & 0xf] =
Wgen (W,43));
217 SHA2STEP32 (e, f, g, h, a, b, c, d, 0xd192e819UL, W[44 & 0xf] =
Wgen (W,44));
218 SHA2STEP32 (d, e, f, g, h, a, b, c, 0xd6990624UL, W[45 & 0xf] =
Wgen (W,45));
219 SHA2STEP32 (c, d, e, f, g, h, a, b, 0xf40e3585UL, W[46 & 0xf] =
Wgen (W,46));
220 SHA2STEP32 (b, c, d, e, f, g, h, a, 0x106aa070UL, W[47 & 0xf] =
Wgen (W,47));
221 SHA2STEP32 (a, b, c, d, e, f, g, h, 0x19a4c116UL, W[48 & 0xf] =
Wgen (W,48));
222 SHA2STEP32 (h, a, b, c, d, e, f, g, 0x1e376c08UL, W[49 & 0xf] =
Wgen (W,49));
223 SHA2STEP32 (g, h, a, b, c, d, e, f, 0x2748774cUL, W[50 & 0xf] =
Wgen (W,50));
224 SHA2STEP32 (f, g, h, a, b, c, d, e, 0x34b0bcb5UL, W[51 & 0xf] =
Wgen (W,51));
225 SHA2STEP32 (e, f, g, h, a, b, c, d, 0x391c0cb3UL, W[52 & 0xf] =
Wgen (W,52));
226 SHA2STEP32 (d, e, f, g, h, a, b, c, 0x4ed8aa4aUL, W[53 & 0xf] =
Wgen (W,53));
227 SHA2STEP32 (c, d, e, f, g, h, a, b, 0x5b9cca4fUL, W[54 & 0xf] =
Wgen (W,54));
228 SHA2STEP32 (b, c, d, e, f, g, h, a, 0x682e6ff3UL, W[55 & 0xf] =
Wgen (W,55));
229 SHA2STEP32 (a, b, c, d, e, f, g, h, 0x748f82eeUL, W[56 & 0xf] =
Wgen (W,56));
230 SHA2STEP32 (h, a, b, c, d, e, f, g, 0x78a5636fUL, W[57 & 0xf] =
Wgen (W,57));
231 SHA2STEP32 (g, h, a, b, c, d, e, f, 0x84c87814UL, W[58 & 0xf] =
Wgen (W,58));
232 SHA2STEP32 (f, g, h, a, b, c, d, e, 0x8cc70208UL, W[59 & 0xf] =
Wgen (W,59));
233 SHA2STEP32 (e, f, g, h, a, b, c, d, 0x90befffaUL, W[60 & 0xf] =
Wgen (W,60));
234 SHA2STEP32 (d, e, f, g, h, a, b, c, 0xa4506cebUL, W[61 & 0xf] =
Wgen (W,61));
235 SHA2STEP32 (c, d, e, f, g, h, a, b, 0xbef9a3f7UL, W[62 & 0xf] =
Wgen (W,62));
236 SHA2STEP32 (b, c, d, e, f, g, h, a, 0xc67178f2UL, W[63 & 0xf] =
Wgen (W,63));
274 ctx->
count += length;
279 if (length >= bytes_left)
282 memcpy (ctx->
buffer + bytes_have,
286 length -= bytes_left;
303 memcpy (ctx->
buffer + bytes_have,
data, length);
312 #define SHA256_SIZE_OF_LEN_ADD (64 / 8)
328 num_bits = ctx->
count << 3;
339 ctx->
buffer[bytes_have++] = 0x80;
345 ctx->
buffer[bytes_have++] = 0;
353 memset (ctx->
buffer + bytes_have, 0,
macros for bits manipulations
#define _MHD_PUT_64BIT_BE(addr, value64)
#define _MHD_PUT_32BIT_BE(addr, value32)
#define SHA256_BYTES_IN_WORD
#define SHA256_SIZE_OF_LEN_ADD
static void sha256_transform(uint32_t H[_SHA256_DIGEST_LENGTH], const uint8_t data[SHA256_BLOCK_SIZE])
void sha256_finish(void *ctx_, uint8_t digest[SHA256_DIGEST_SIZE])
#define SHA2STEP32(vA, vB, vC, vD, vE, vF, vG, vH, kt, wt)
#define GET_W_FROM_DATA(buf, t)
void MHD_SHA256_init(void *ctx_)
void MHD_SHA256_update(void *ctx_, const uint8_t *data, size_t length)
Calculation of SHA-256 digest.
#define _SHA256_DIGEST_LENGTH
#define SHA256_DIGEST_SIZE
#define SHA256_BLOCK_SIZE
uint8_t buffer[SHA256_BLOCK_SIZE]
uint32_t H[_SHA256_DIGEST_LENGTH]