aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/sha256.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/microhttpd/sha256.c')
-rw-r--r--src/microhttpd/sha256.c192
1 files changed, 120 insertions, 72 deletions
diff --git a/src/microhttpd/sha256.c b/src/microhttpd/sha256.c
index df6a1aa3..6f6700dc 100644
--- a/src/microhttpd/sha256.c
+++ b/src/microhttpd/sha256.c
@@ -45,14 +45,14 @@ MHD_SHA256_init (void *ctx_)
45 /* First thirty-two bits of the fractional parts of the square 45 /* First thirty-two bits of the fractional parts of the square
46 * roots of the first eight prime numbers: 2, 3, 5, 7, 11, 13, 46 * roots of the first eight prime numbers: 2, 3, 5, 7, 11, 13,
47 * 17, 19." */ 47 * 17, 19." */
48 ctx->H[0] = 0x6a09e667UL; 48 ctx->H[0] = UINT32_C (0x6a09e667);
49 ctx->H[1] = 0xbb67ae85UL; 49 ctx->H[1] = UINT32_C (0xbb67ae85);
50 ctx->H[2] = 0x3c6ef372UL; 50 ctx->H[2] = UINT32_C (0x3c6ef372);
51 ctx->H[3] = 0xa54ff53aUL; 51 ctx->H[3] = UINT32_C (0xa54ff53a);
52 ctx->H[4] = 0x510e527fUL; 52 ctx->H[4] = UINT32_C (0x510e527f);
53 ctx->H[5] = 0x9b05688cUL; 53 ctx->H[5] = UINT32_C (0x9b05688c);
54 ctx->H[6] = 0x1f83d9abUL; 54 ctx->H[6] = UINT32_C (0x1f83d9ab);
55 ctx->H[7] = 0x5be0cd19UL; 55 ctx->H[7] = UINT32_C (0x5be0cd19);
56 56
57 /* Initialise number of bytes. */ 57 /* Initialise number of bytes. */
58 ctx->count = 0; 58 ctx->count = 0;
@@ -144,37 +144,37 @@ sha256_transform (uint32_t H[_SHA256_DIGEST_LENGTH],
144 stored in array of W elements. */ 144 stored in array of W elements. */
145 /* Note: instead of using K constants as array, all K values are specified 145 /* Note: instead of using K constants as array, all K values are specified
146 individually for each step, see FIPS PUB 180-4 paragraph 4.2.2 for K values. */ 146 individually for each step, see FIPS PUB 180-4 paragraph 4.2.2 for K values. */
147 SHA2STEP32 (a, b, c, d, e, f, g, h, 0x428a2f98UL, W[0] = \ 147 SHA2STEP32 (a, b, c, d, e, f, g, h, UINT32_C (0x428a2f98), W[0] = \
148 GET_W_FROM_DATA (data, 0)); 148 GET_W_FROM_DATA (data, 0));
149 SHA2STEP32 (h, a, b, c, d, e, f, g, 0x71374491UL, W[1] = \ 149 SHA2STEP32 (h, a, b, c, d, e, f, g, UINT32_C (0x71374491), W[1] = \
150 GET_W_FROM_DATA (data, 1)); 150 GET_W_FROM_DATA (data, 1));
151 SHA2STEP32 (g, h, a, b, c, d, e, f, 0xb5c0fbcfUL, W[2] = \ 151 SHA2STEP32 (g, h, a, b, c, d, e, f, UINT32_C (0xb5c0fbcf), W[2] = \
152 GET_W_FROM_DATA (data, 2)); 152 GET_W_FROM_DATA (data, 2));
153 SHA2STEP32 (f, g, h, a, b, c, d, e, 0xe9b5dba5UL, W[3] = \ 153 SHA2STEP32 (f, g, h, a, b, c, d, e, UINT32_C (0xe9b5dba5), W[3] = \
154 GET_W_FROM_DATA (data, 3)); 154 GET_W_FROM_DATA (data, 3));
155 SHA2STEP32 (e, f, g, h, a, b, c, d, 0x3956c25bUL, W[4] = \ 155 SHA2STEP32 (e, f, g, h, a, b, c, d, UINT32_C (0x3956c25b), W[4] = \
156 GET_W_FROM_DATA (data, 4)); 156 GET_W_FROM_DATA (data, 4));
157 SHA2STEP32 (d, e, f, g, h, a, b, c, 0x59f111f1UL, W[5] = \ 157 SHA2STEP32 (d, e, f, g, h, a, b, c, UINT32_C (0x59f111f1), W[5] = \
158 GET_W_FROM_DATA (data, 5)); 158 GET_W_FROM_DATA (data, 5));
159 SHA2STEP32 (c, d, e, f, g, h, a, b, 0x923f82a4UL, W[6] = \ 159 SHA2STEP32 (c, d, e, f, g, h, a, b, UINT32_C (0x923f82a4), W[6] = \
160 GET_W_FROM_DATA (data, 6)); 160 GET_W_FROM_DATA (data, 6));
161 SHA2STEP32 (b, c, d, e, f, g, h, a, 0xab1c5ed5UL, W[7] = \ 161 SHA2STEP32 (b, c, d, e, f, g, h, a, UINT32_C (0xab1c5ed5), W[7] = \
162 GET_W_FROM_DATA (data, 7)); 162 GET_W_FROM_DATA (data, 7));
163 SHA2STEP32 (a, b, c, d, e, f, g, h, 0xd807aa98UL, W[8] = \ 163 SHA2STEP32 (a, b, c, d, e, f, g, h, UINT32_C (0xd807aa98), W[8] = \
164 GET_W_FROM_DATA (data, 8)); 164 GET_W_FROM_DATA (data, 8));
165 SHA2STEP32 (h, a, b, c, d, e, f, g, 0x12835b01UL, W[9] = \ 165 SHA2STEP32 (h, a, b, c, d, e, f, g, UINT32_C (0x12835b01), W[9] = \
166 GET_W_FROM_DATA (data, 9)); 166 GET_W_FROM_DATA (data, 9));
167 SHA2STEP32 (g, h, a, b, c, d, e, f, 0x243185beUL, W[10] = \ 167 SHA2STEP32 (g, h, a, b, c, d, e, f, UINT32_C (0x243185be), W[10] = \
168 GET_W_FROM_DATA (data, 10)); 168 GET_W_FROM_DATA (data, 10));
169 SHA2STEP32 (f, g, h, a, b, c, d, e, 0x550c7dc3UL, W[11] = \ 169 SHA2STEP32 (f, g, h, a, b, c, d, e, UINT32_C (0x550c7dc3), W[11] = \
170 GET_W_FROM_DATA (data, 11)); 170 GET_W_FROM_DATA (data, 11));
171 SHA2STEP32 (e, f, g, h, a, b, c, d, 0x72be5d74UL, W[12] = \ 171 SHA2STEP32 (e, f, g, h, a, b, c, d, UINT32_C (0x72be5d74), W[12] = \
172 GET_W_FROM_DATA (data, 12)); 172 GET_W_FROM_DATA (data, 12));
173 SHA2STEP32 (d, e, f, g, h, a, b, c, 0x80deb1feUL, W[13] = \ 173 SHA2STEP32 (d, e, f, g, h, a, b, c, UINT32_C (0x80deb1fe), W[13] = \
174 GET_W_FROM_DATA (data, 13)); 174 GET_W_FROM_DATA (data, 13));
175 SHA2STEP32 (c, d, e, f, g, h, a, b, 0x9bdc06a7UL, W[14] = \ 175 SHA2STEP32 (c, d, e, f, g, h, a, b, UINT32_C (0x9bdc06a7), W[14] = \
176 GET_W_FROM_DATA (data, 14)); 176 GET_W_FROM_DATA (data, 14));
177 SHA2STEP32 (b, c, d, e, f, g, h, a, 0xc19bf174UL, W[15] = \ 177 SHA2STEP32 (b, c, d, e, f, g, h, a, UINT32_C (0xc19bf174), W[15] = \
178 GET_W_FROM_DATA (data, 15)); 178 GET_W_FROM_DATA (data, 15));
179 179
180 /* 'W' generation and assignment for 16 <= t <= 63. 180 /* 'W' generation and assignment for 16 <= t <= 63.
@@ -190,54 +190,102 @@ sha256_transform (uint32_t H[_SHA256_DIGEST_LENGTH],
190 stored back in cyclic buffer. */ 190 stored back in cyclic buffer. */
191 /* Note: instead of using K constants as array, all K values are specified 191 /* Note: instead of using K constants as array, all K values are specified
192 individually for each step, see FIPS PUB 180-4 paragraph 4.2.2 for K values. */ 192 individually for each step, see FIPS PUB 180-4 paragraph 4.2.2 for K values. */
193 SHA2STEP32 (a, b, c, d, e, f, g, h, 0xe49b69c1UL, W[16 & 0xf] = Wgen (W,16)); 193 SHA2STEP32 (a, b, c, d, e, f, g, h, UINT32_C (0xe49b69c1), W[16 & 0xf] = \
194 SHA2STEP32 (h, a, b, c, d, e, f, g, 0xefbe4786UL, W[17 & 0xf] = Wgen (W,17)); 194 Wgen (W,16));
195 SHA2STEP32 (g, h, a, b, c, d, e, f, 0x0fc19dc6UL, W[18 & 0xf] = Wgen (W,18)); 195 SHA2STEP32 (h, a, b, c, d, e, f, g, UINT32_C (0xefbe4786), W[17 & 0xf] = \
196 SHA2STEP32 (f, g, h, a, b, c, d, e, 0x240ca1ccUL, W[19 & 0xf] = Wgen (W,19)); 196 Wgen (W,17));
197 SHA2STEP32 (e, f, g, h, a, b, c, d, 0x2de92c6fUL, W[20 & 0xf] = Wgen (W,20)); 197 SHA2STEP32 (g, h, a, b, c, d, e, f, UINT32_C (0x0fc19dc6), W[18 & 0xf] = \
198 SHA2STEP32 (d, e, f, g, h, a, b, c, 0x4a7484aaUL, W[21 & 0xf] = Wgen (W,21)); 198 Wgen (W,18));
199 SHA2STEP32 (c, d, e, f, g, h, a, b, 0x5cb0a9dcUL, W[22 & 0xf] = Wgen (W,22)); 199 SHA2STEP32 (f, g, h, a, b, c, d, e, UINT32_C (0x240ca1cc), W[19 & 0xf] = \
200 SHA2STEP32 (b, c, d, e, f, g, h, a, 0x76f988daUL, W[23 & 0xf] = Wgen (W,23)); 200 Wgen (W,19));
201 SHA2STEP32 (a, b, c, d, e, f, g, h, 0x983e5152UL, W[24 & 0xf] = Wgen (W,24)); 201 SHA2STEP32 (e, f, g, h, a, b, c, d, UINT32_C (0x2de92c6f), W[20 & 0xf] = \
202 SHA2STEP32 (h, a, b, c, d, e, f, g, 0xa831c66dUL, W[25 & 0xf] = Wgen (W,25)); 202 Wgen (W,20));
203 SHA2STEP32 (g, h, a, b, c, d, e, f, 0xb00327c8UL, W[26 & 0xf] = Wgen (W,26)); 203 SHA2STEP32 (d, e, f, g, h, a, b, c, UINT32_C (0x4a7484aa), W[21 & 0xf] = \
204 SHA2STEP32 (f, g, h, a, b, c, d, e, 0xbf597fc7UL, W[27 & 0xf] = Wgen (W,27)); 204 Wgen (W,21));
205 SHA2STEP32 (e, f, g, h, a, b, c, d, 0xc6e00bf3UL, W[28 & 0xf] = Wgen (W,28)); 205 SHA2STEP32 (c, d, e, f, g, h, a, b, UINT32_C (0x5cb0a9dc), W[22 & 0xf] = \
206 SHA2STEP32 (d, e, f, g, h, a, b, c, 0xd5a79147UL, W[29 & 0xf] = Wgen (W,29)); 206 Wgen (W,22));
207 SHA2STEP32 (c, d, e, f, g, h, a, b, 0x06ca6351UL, W[30 & 0xf] = Wgen (W,30)); 207 SHA2STEP32 (b, c, d, e, f, g, h, a, UINT32_C (0x76f988da), W[23 & 0xf] = \
208 SHA2STEP32 (b, c, d, e, f, g, h, a, 0x14292967UL, W[31 & 0xf] = Wgen (W,31)); 208 Wgen (W,23));
209 SHA2STEP32 (a, b, c, d, e, f, g, h, 0x27b70a85UL, W[32 & 0xf] = Wgen (W,32)); 209 SHA2STEP32 (a, b, c, d, e, f, g, h, UINT32_C (0x983e5152), W[24 & 0xf] = \
210 SHA2STEP32 (h, a, b, c, d, e, f, g, 0x2e1b2138UL, W[33 & 0xf] = Wgen (W,33)); 210 Wgen (W,24));
211 SHA2STEP32 (g, h, a, b, c, d, e, f, 0x4d2c6dfcUL, W[34 & 0xf] = Wgen (W,34)); 211 SHA2STEP32 (h, a, b, c, d, e, f, g, UINT32_C (0xa831c66d), W[25 & 0xf] = \
212 SHA2STEP32 (f, g, h, a, b, c, d, e, 0x53380d13UL, W[35 & 0xf] = Wgen (W,35)); 212 Wgen (W,25));
213 SHA2STEP32 (e, f, g, h, a, b, c, d, 0x650a7354UL, W[36 & 0xf] = Wgen (W,36)); 213 SHA2STEP32 (g, h, a, b, c, d, e, f, UINT32_C (0xb00327c8), W[26 & 0xf] = \
214 SHA2STEP32 (d, e, f, g, h, a, b, c, 0x766a0abbUL, W[37 & 0xf] = Wgen (W,37)); 214 Wgen (W,26));
215 SHA2STEP32 (c, d, e, f, g, h, a, b, 0x81c2c92eUL, W[38 & 0xf] = Wgen (W,38)); 215 SHA2STEP32 (f, g, h, a, b, c, d, e, UINT32_C (0xbf597fc7), W[27 & 0xf] = \
216 SHA2STEP32 (b, c, d, e, f, g, h, a, 0x92722c85UL, W[39 & 0xf] = Wgen (W,39)); 216 Wgen (W,27));
217 SHA2STEP32 (a, b, c, d, e, f, g, h, 0xa2bfe8a1UL, W[40 & 0xf] = Wgen (W,40)); 217 SHA2STEP32 (e, f, g, h, a, b, c, d, UINT32_C (0xc6e00bf3), W[28 & 0xf] = \
218 SHA2STEP32 (h, a, b, c, d, e, f, g, 0xa81a664bUL, W[41 & 0xf] = Wgen (W,41)); 218 Wgen (W,28));
219 SHA2STEP32 (g, h, a, b, c, d, e, f, 0xc24b8b70UL, W[42 & 0xf] = Wgen (W,42)); 219 SHA2STEP32 (d, e, f, g, h, a, b, c, UINT32_C (0xd5a79147), W[29 & 0xf] = \
220 SHA2STEP32 (f, g, h, a, b, c, d, e, 0xc76c51a3UL, W[43 & 0xf] = Wgen (W,43)); 220 Wgen (W,29));
221 SHA2STEP32 (e, f, g, h, a, b, c, d, 0xd192e819UL, W[44 & 0xf] = Wgen (W,44)); 221 SHA2STEP32 (c, d, e, f, g, h, a, b, UINT32_C (0x06ca6351), W[30 & 0xf] = \
222 SHA2STEP32 (d, e, f, g, h, a, b, c, 0xd6990624UL, W[45 & 0xf] = Wgen (W,45)); 222 Wgen (W,30));
223 SHA2STEP32 (c, d, e, f, g, h, a, b, 0xf40e3585UL, W[46 & 0xf] = Wgen (W,46)); 223 SHA2STEP32 (b, c, d, e, f, g, h, a, UINT32_C (0x14292967), W[31 & 0xf] = \
224 SHA2STEP32 (b, c, d, e, f, g, h, a, 0x106aa070UL, W[47 & 0xf] = Wgen (W,47)); 224 Wgen (W,31));
225 SHA2STEP32 (a, b, c, d, e, f, g, h, 0x19a4c116UL, W[48 & 0xf] = Wgen (W,48)); 225 SHA2STEP32 (a, b, c, d, e, f, g, h, UINT32_C (0x27b70a85), W[32 & 0xf] = \
226 SHA2STEP32 (h, a, b, c, d, e, f, g, 0x1e376c08UL, W[49 & 0xf] = Wgen (W,49)); 226 Wgen (W,32));
227 SHA2STEP32 (g, h, a, b, c, d, e, f, 0x2748774cUL, W[50 & 0xf] = Wgen (W,50)); 227 SHA2STEP32 (h, a, b, c, d, e, f, g, UINT32_C (0x2e1b2138), W[33 & 0xf] = \
228 SHA2STEP32 (f, g, h, a, b, c, d, e, 0x34b0bcb5UL, W[51 & 0xf] = Wgen (W,51)); 228 Wgen (W,33));
229 SHA2STEP32 (e, f, g, h, a, b, c, d, 0x391c0cb3UL, W[52 & 0xf] = Wgen (W,52)); 229 SHA2STEP32 (g, h, a, b, c, d, e, f, UINT32_C (0x4d2c6dfc), W[34 & 0xf] = \
230 SHA2STEP32 (d, e, f, g, h, a, b, c, 0x4ed8aa4aUL, W[53 & 0xf] = Wgen (W,53)); 230 Wgen (W,34));
231 SHA2STEP32 (c, d, e, f, g, h, a, b, 0x5b9cca4fUL, W[54 & 0xf] = Wgen (W,54)); 231 SHA2STEP32 (f, g, h, a, b, c, d, e, UINT32_C (0x53380d13), W[35 & 0xf] = \
232 SHA2STEP32 (b, c, d, e, f, g, h, a, 0x682e6ff3UL, W[55 & 0xf] = Wgen (W,55)); 232 Wgen (W,35));
233 SHA2STEP32 (a, b, c, d, e, f, g, h, 0x748f82eeUL, W[56 & 0xf] = Wgen (W,56)); 233 SHA2STEP32 (e, f, g, h, a, b, c, d, UINT32_C (0x650a7354), W[36 & 0xf] = \
234 SHA2STEP32 (h, a, b, c, d, e, f, g, 0x78a5636fUL, W[57 & 0xf] = Wgen (W,57)); 234 Wgen (W,36));
235 SHA2STEP32 (g, h, a, b, c, d, e, f, 0x84c87814UL, W[58 & 0xf] = Wgen (W,58)); 235 SHA2STEP32 (d, e, f, g, h, a, b, c, UINT32_C (0x766a0abb), W[37 & 0xf] = \
236 SHA2STEP32 (f, g, h, a, b, c, d, e, 0x8cc70208UL, W[59 & 0xf] = Wgen (W,59)); 236 Wgen (W,37));
237 SHA2STEP32 (e, f, g, h, a, b, c, d, 0x90befffaUL, W[60 & 0xf] = Wgen (W,60)); 237 SHA2STEP32 (c, d, e, f, g, h, a, b, UINT32_C (0x81c2c92e), W[38 & 0xf] = \
238 SHA2STEP32 (d, e, f, g, h, a, b, c, 0xa4506cebUL, W[61 & 0xf] = Wgen (W,61)); 238 Wgen (W,38));
239 SHA2STEP32 (c, d, e, f, g, h, a, b, 0xbef9a3f7UL, W[62 & 0xf] = Wgen (W,62)); 239 SHA2STEP32 (b, c, d, e, f, g, h, a, UINT32_C (0x92722c85), W[39 & 0xf] = \
240 SHA2STEP32 (b, c, d, e, f, g, h, a, 0xc67178f2UL, W[63 & 0xf] = Wgen (W,63)); 240 Wgen (W,39));
241 SHA2STEP32 (a, b, c, d, e, f, g, h, UINT32_C (0xa2bfe8a1), W[40 & 0xf] = \
242 Wgen (W,40));
243 SHA2STEP32 (h, a, b, c, d, e, f, g, UINT32_C (0xa81a664b), W[41 & 0xf] = \
244 Wgen (W,41));
245 SHA2STEP32 (g, h, a, b, c, d, e, f, UINT32_C (0xc24b8b70), W[42 & 0xf] = \
246 Wgen (W,42));
247 SHA2STEP32 (f, g, h, a, b, c, d, e, UINT32_C (0xc76c51a3), W[43 & 0xf] = \
248 Wgen (W,43));
249 SHA2STEP32 (e, f, g, h, a, b, c, d, UINT32_C (0xd192e819), W[44 & 0xf] = \
250 Wgen (W,44));
251 SHA2STEP32 (d, e, f, g, h, a, b, c, UINT32_C (0xd6990624), W[45 & 0xf] = \
252 Wgen (W,45));
253 SHA2STEP32 (c, d, e, f, g, h, a, b, UINT32_C (0xf40e3585), W[46 & 0xf] = \
254 Wgen (W,46));
255 SHA2STEP32 (b, c, d, e, f, g, h, a, UINT32_C (0x106aa070), W[47 & 0xf] = \
256 Wgen (W,47));
257 SHA2STEP32 (a, b, c, d, e, f, g, h, UINT32_C (0x19a4c116), W[48 & 0xf] = \
258 Wgen (W,48));
259 SHA2STEP32 (h, a, b, c, d, e, f, g, UINT32_C (0x1e376c08), W[49 & 0xf] = \
260 Wgen (W,49));
261 SHA2STEP32 (g, h, a, b, c, d, e, f, UINT32_C (0x2748774c), W[50 & 0xf] = \
262 Wgen (W,50));
263 SHA2STEP32 (f, g, h, a, b, c, d, e, UINT32_C (0x34b0bcb5), W[51 & 0xf] = \
264 Wgen (W,51));
265 SHA2STEP32 (e, f, g, h, a, b, c, d, UINT32_C (0x391c0cb3), W[52 & 0xf] = \
266 Wgen (W,52));
267 SHA2STEP32 (d, e, f, g, h, a, b, c, UINT32_C (0x4ed8aa4a), W[53 & 0xf] = \
268 Wgen (W,53));
269 SHA2STEP32 (c, d, e, f, g, h, a, b, UINT32_C (0x5b9cca4f), W[54 & 0xf] = \
270 Wgen (W,54));
271 SHA2STEP32 (b, c, d, e, f, g, h, a, UINT32_C (0x682e6ff3), W[55 & 0xf] = \
272 Wgen (W,55));
273 SHA2STEP32 (a, b, c, d, e, f, g, h, UINT32_C (0x748f82ee), W[56 & 0xf] = \
274 Wgen (W,56));
275 SHA2STEP32 (h, a, b, c, d, e, f, g, UINT32_C (0x78a5636f), W[57 & 0xf] = \
276 Wgen (W,57));
277 SHA2STEP32 (g, h, a, b, c, d, e, f, UINT32_C (0x84c87814), W[58 & 0xf] = \
278 Wgen (W,58));
279 SHA2STEP32 (f, g, h, a, b, c, d, e, UINT32_C (0x8cc70208), W[59 & 0xf] = \
280 Wgen (W,59));
281 SHA2STEP32 (e, f, g, h, a, b, c, d, UINT32_C (0x90befffa), W[60 & 0xf] = \
282 Wgen (W,60));
283 SHA2STEP32 (d, e, f, g, h, a, b, c, UINT32_C (0xa4506ceb), W[61 & 0xf] = \
284 Wgen (W,61));
285 SHA2STEP32 (c, d, e, f, g, h, a, b, UINT32_C (0xbef9a3f7), W[62 & 0xf] = \
286 Wgen (W,62));
287 SHA2STEP32 (b, c, d, e, f, g, h, a, UINT32_C (0xc67178f2), W[63 & 0xf] = \
288 Wgen (W,63));
241 289
242 /* Compute intermediate hash. 290 /* Compute intermediate hash.
243 See FIPS PUB 180-4 paragraph 6.2.2 step 4. */ 291 See FIPS PUB 180-4 paragraph 6.2.2 step 4. */