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;
69 #define SHA256_BYTES_IN_WORD 4 99 #define Ch(x,y,z) ( (z) ^ ((x) & ((y) ^ (z))) ) 100 #define Maj(x,y,z) ( ((x) & (y)) ^ ((z) & ((x) ^ (y))) ) 107 #define SIG0(x) ( _MHD_ROTR32((x),2) ^ _MHD_ROTR32((x),13) ^ _MHD_ROTR32((x),22) ) 108 #define SIG1(x) ( _MHD_ROTR32((x),6) ^ _MHD_ROTR32((x),11) ^ _MHD_ROTR32((x),25) ) 109 #define sig0(x) ( _MHD_ROTR32((x),7) ^ _MHD_ROTR32((x),18) ^ ((x) >> 3) ) 110 #define sig1(x) ( _MHD_ROTR32((x),17) ^ _MHD_ROTR32((x),19) ^ ((x) >> 10) ) 124 #define SHA2STEP32(vA,vB,vC,vD,vE,vF,vG,vH,kt,wt) do { \ 125 (vD) += ((vH) += SIG1((vE)) + Ch((vE),(vF),(vG)) + (kt) + (wt)); \ 126 (vH) += SIG0((vA)) + Maj((vA),(vB),(vC)); } while (0) 132 #define GET_W_FROM_DATA(buf,t) \ 133 _MHD_GET_32BIT_BE(((const uint8_t*)(buf)) + (t) * SHA256_BYTES_IN_WORD) 140 SHA2STEP32(a, b, c, d, e, f, g, h, 0x428a2f98UL, W[0] =
GET_W_FROM_DATA(
data,0));
141 SHA2STEP32(h, a, b, c, d, e, f, g, 0x71374491UL, W[1] =
GET_W_FROM_DATA(
data,1));
142 SHA2STEP32(g, h, a, b, c, d, e, f, 0xb5c0fbcfUL, W[2] =
GET_W_FROM_DATA(
data,2));
143 SHA2STEP32(f, g, h, a, b, c, d, e, 0xe9b5dba5UL, W[3] =
GET_W_FROM_DATA(
data,3));
144 SHA2STEP32(e, f, g, h, a, b, c, d, 0x3956c25bUL, W[4] =
GET_W_FROM_DATA(
data,4));
145 SHA2STEP32(d, e, f, g, h, a, b, c, 0x59f111f1UL, W[5] =
GET_W_FROM_DATA(
data,5));
146 SHA2STEP32(c, d, e, f, g, h, a, b, 0x923f82a4UL, W[6] =
GET_W_FROM_DATA(
data,6));
147 SHA2STEP32(b, c, d, e, f, g, h, a, 0xab1c5ed5UL, W[7] =
GET_W_FROM_DATA(
data,7));
148 SHA2STEP32(a, b, c, d, e, f, g, h, 0xd807aa98UL, W[8] =
GET_W_FROM_DATA(
data,8));
149 SHA2STEP32(h, a, b, c, d, e, f, g, 0x12835b01UL, W[9] =
GET_W_FROM_DATA(
data,9));
150 SHA2STEP32(g, h, a, b, c, d, e, f, 0x243185beUL, W[10] =
GET_W_FROM_DATA(
data,10));
151 SHA2STEP32(f, g, h, a, b, c, d, e, 0x550c7dc3UL, W[11] =
GET_W_FROM_DATA(
data,11));
152 SHA2STEP32(e, f, g, h, a, b, c, d, 0x72be5d74UL, W[12] =
GET_W_FROM_DATA(
data,12));
153 SHA2STEP32(d, e, f, g, h, a, b, c, 0x80deb1feUL, W[13] =
GET_W_FROM_DATA(
data,13));
154 SHA2STEP32(c, d, e, f, g, h, a, b, 0x9bdc06a7UL, W[14] =
GET_W_FROM_DATA(
data,14));
155 SHA2STEP32(b, c, d, e, f, g, h, a, 0xc19bf174UL, W[15] =
GET_W_FROM_DATA(
data,15));
162 #define Wgen(w,t) ( (w)[(t-16)&0xf] + sig1((w)[((t)-2)&0xf]) + \ 163 (w)[((t)-7)&0xf] + sig0((w)[((t)-15)&0xf]) ) 170 SHA2STEP32(a, b, c, d, e, f, g, h, 0xe49b69c1UL, W[16&0xf] =
Wgen(W,16));
171 SHA2STEP32(h, a, b, c, d, e, f, g, 0xefbe4786UL, W[17&0xf] =
Wgen(W,17));
172 SHA2STEP32(g, h, a, b, c, d, e, f, 0x0fc19dc6UL, W[18&0xf] =
Wgen(W,18));
173 SHA2STEP32(f, g, h, a, b, c, d, e, 0x240ca1ccUL, W[19&0xf] =
Wgen(W,19));
174 SHA2STEP32(e, f, g, h, a, b, c, d, 0x2de92c6fUL, W[20&0xf] =
Wgen(W,20));
175 SHA2STEP32(d, e, f, g, h, a, b, c, 0x4a7484aaUL, W[21&0xf] =
Wgen(W,21));
176 SHA2STEP32(c, d, e, f, g, h, a, b, 0x5cb0a9dcUL, W[22&0xf] =
Wgen(W,22));
177 SHA2STEP32(b, c, d, e, f, g, h, a, 0x76f988daUL, W[23&0xf] =
Wgen(W,23));
178 SHA2STEP32(a, b, c, d, e, f, g, h, 0x983e5152UL, W[24&0xf] =
Wgen(W,24));
179 SHA2STEP32(h, a, b, c, d, e, f, g, 0xa831c66dUL, W[25&0xf] =
Wgen(W,25));
180 SHA2STEP32(g, h, a, b, c, d, e, f, 0xb00327c8UL, W[26&0xf] =
Wgen(W,26));
181 SHA2STEP32(f, g, h, a, b, c, d, e, 0xbf597fc7UL, W[27&0xf] =
Wgen(W,27));
182 SHA2STEP32(e, f, g, h, a, b, c, d, 0xc6e00bf3UL, W[28&0xf] =
Wgen(W,28));
183 SHA2STEP32(d, e, f, g, h, a, b, c, 0xd5a79147UL, W[29&0xf] =
Wgen(W,29));
184 SHA2STEP32(c, d, e, f, g, h, a, b, 0x06ca6351UL, W[30&0xf] =
Wgen(W,30));
185 SHA2STEP32(b, c, d, e, f, g, h, a, 0x14292967UL, W[31&0xf] =
Wgen(W,31));
186 SHA2STEP32(a, b, c, d, e, f, g, h, 0x27b70a85UL, W[32&0xf] =
Wgen(W,32));
187 SHA2STEP32(h, a, b, c, d, e, f, g, 0x2e1b2138UL, W[33&0xf] =
Wgen(W,33));
188 SHA2STEP32(g, h, a, b, c, d, e, f, 0x4d2c6dfcUL, W[34&0xf] =
Wgen(W,34));
189 SHA2STEP32(f, g, h, a, b, c, d, e, 0x53380d13UL, W[35&0xf] =
Wgen(W,35));
190 SHA2STEP32(e, f, g, h, a, b, c, d, 0x650a7354UL, W[36&0xf] =
Wgen(W,36));
191 SHA2STEP32(d, e, f, g, h, a, b, c, 0x766a0abbUL, W[37&0xf] =
Wgen(W,37));
192 SHA2STEP32(c, d, e, f, g, h, a, b, 0x81c2c92eUL, W[38&0xf] =
Wgen(W,38));
193 SHA2STEP32(b, c, d, e, f, g, h, a, 0x92722c85UL, W[39&0xf] =
Wgen(W,39));
194 SHA2STEP32(a, b, c, d, e, f, g, h, 0xa2bfe8a1UL, W[40&0xf] =
Wgen(W,40));
195 SHA2STEP32(h, a, b, c, d, e, f, g, 0xa81a664bUL, W[41&0xf] =
Wgen(W,41));
196 SHA2STEP32(g, h, a, b, c, d, e, f, 0xc24b8b70UL, W[42&0xf] =
Wgen(W,42));
197 SHA2STEP32(f, g, h, a, b, c, d, e, 0xc76c51a3UL, W[43&0xf] =
Wgen(W,43));
198 SHA2STEP32(e, f, g, h, a, b, c, d, 0xd192e819UL, W[44&0xf] =
Wgen(W,44));
199 SHA2STEP32(d, e, f, g, h, a, b, c, 0xd6990624UL, W[45&0xf] =
Wgen(W,45));
200 SHA2STEP32(c, d, e, f, g, h, a, b, 0xf40e3585UL, W[46&0xf] =
Wgen(W,46));
201 SHA2STEP32(b, c, d, e, f, g, h, a, 0x106aa070UL, W[47&0xf] =
Wgen(W,47));
202 SHA2STEP32(a, b, c, d, e, f, g, h, 0x19a4c116UL, W[48&0xf] =
Wgen(W,48));
203 SHA2STEP32(h, a, b, c, d, e, f, g, 0x1e376c08UL, W[49&0xf] =
Wgen(W,49));
204 SHA2STEP32(g, h, a, b, c, d, e, f, 0x2748774cUL, W[50&0xf] =
Wgen(W,50));
205 SHA2STEP32(f, g, h, a, b, c, d, e, 0x34b0bcb5UL, W[51&0xf] =
Wgen(W,51));
206 SHA2STEP32(e, f, g, h, a, b, c, d, 0x391c0cb3UL, W[52&0xf] =
Wgen(W,52));
207 SHA2STEP32(d, e, f, g, h, a, b, c, 0x4ed8aa4aUL, W[53&0xf] =
Wgen(W,53));
208 SHA2STEP32(c, d, e, f, g, h, a, b, 0x5b9cca4fUL, W[54&0xf] =
Wgen(W,54));
209 SHA2STEP32(b, c, d, e, f, g, h, a, 0x682e6ff3UL, W[55&0xf] =
Wgen(W,55));
210 SHA2STEP32(a, b, c, d, e, f, g, h, 0x748f82eeUL, W[56&0xf] =
Wgen(W,56));
211 SHA2STEP32(h, a, b, c, d, e, f, g, 0x78a5636fUL, W[57&0xf] =
Wgen(W,57));
212 SHA2STEP32(g, h, a, b, c, d, e, f, 0x84c87814UL, W[58&0xf] =
Wgen(W,58));
213 SHA2STEP32(f, g, h, a, b, c, d, e, 0x8cc70208UL, W[59&0xf] =
Wgen(W,59));
214 SHA2STEP32(e, f, g, h, a, b, c, d, 0x90befffaUL, W[60&0xf] =
Wgen(W,60));
215 SHA2STEP32(d, e, f, g, h, a, b, c, 0xa4506cebUL, W[61&0xf] =
Wgen(W,61));
216 SHA2STEP32(c, d, e, f, g, h, a, b, 0xbef9a3f7UL, W[62&0xf] =
Wgen(W,62));
217 SHA2STEP32(b, c, d, e, f, g, h, a, 0xc67178f2UL, W[63&0xf] =
Wgen(W,63));
254 ctx->
count += length;
259 if (length >= bytes_left)
262 memcpy (ctx->
buffer + bytes_have,
266 length -= bytes_left;
283 memcpy (ctx->
buffer + bytes_have,
data, length);
292 #define SHA256_SIZE_OF_LEN_ADD (64 / 8) 308 num_bits = ctx->
count << 3;
319 ctx->
buffer[bytes_have++] = 0x80;
332 memset(ctx->
buffer + bytes_have, 0,
#define SHA256_DIGEST_SIZE
#define SHA256_SIZE_OF_LEN_ADD
#define SHA2STEP32(vA, vB, vC, vD, vE, vF, vG, vH, kt, wt)
void MHD_SHA256_init(void *ctx_)
static void sha256_transform(uint32_t H[_SHA256_DIGEST_LENGTH], const uint8_t data[SHA256_BLOCK_SIZE])
void MHD_SHA256_update(void *ctx_, const uint8_t *data, size_t length)
void sha256_finish(void *ctx_, uint8_t digest[SHA256_DIGEST_SIZE])
#define SHA256_BYTES_IN_WORD
#define _MHD_PUT_64BIT_BE(addr, value64)
uint8_t buffer[SHA256_BLOCK_SIZE]
#define SHA256_BLOCK_SIZE
#define _SHA256_DIGEST_LENGTH
#define GET_W_FROM_DATA(buf, t)
Calculation of SHA-256 digest.
#define _MHD_PUT_32BIT_BE(addr, value32)
uint32_t H[_SHA256_DIGEST_LENGTH]
macros for bits manipulations