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.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/microhttpd/sha256.c b/src/microhttpd/sha256.c
index c81cfdcd..825b80b3 100644
--- a/src/microhttpd/sha256.c
+++ b/src/microhttpd/sha256.c
@@ -136,8 +136,11 @@ sha256_transform (uint32_t H[_SHA256_DIGEST_LENGTH],
136 See FIPS PUB 180-4 paragraph 6.2. 136 See FIPS PUB 180-4 paragraph 6.2.
137 Input data must be read in big-endian bytes order, 137 Input data must be read in big-endian bytes order,
138 see FIPS PUB 180-4 paragraph 3.1.2. */ 138 see FIPS PUB 180-4 paragraph 3.1.2. */
139 /* Use cast to (const void*) to mute compiler alignment warning,
140 * data was already aligned in previous step */
139#define GET_W_FROM_DATA(buf,t) \ 141#define GET_W_FROM_DATA(buf,t) \
140 _MHD_GET_32BIT_BE (((const uint8_t*) (buf)) + (t) * SHA256_BYTES_IN_WORD) 142 _MHD_GET_32BIT_BE ((const void*)(((const uint8_t*) (buf)) + \
143 (t) * SHA256_BYTES_IN_WORD))
141 144
142 /* During first 16 steps, before making any calculations on each step, 145 /* During first 16 steps, before making any calculations on each step,
143 the W element is read from input data buffer as big-endian value and 146 the W element is read from input data buffer as big-endian value and
@@ -432,14 +435,16 @@ MHD_SHA256_finish (void *ctx_,
432 if (1) 435 if (1)
433#endif /* _MHD_PUT_32BIT_BE_UNALIGNED */ 436#endif /* _MHD_PUT_32BIT_BE_UNALIGNED */
434 { 437 {
435 _MHD_PUT_32BIT_BE (digest + 0 * SHA256_BYTES_IN_WORD, ctx->H[0]); 438 /* Use cast to (void*) here to mute compiler alignment warnings.
436 _MHD_PUT_32BIT_BE (digest + 1 * SHA256_BYTES_IN_WORD, ctx->H[1]); 439 * Compilers are not smart enough to see that alignment has been checked. */
437 _MHD_PUT_32BIT_BE (digest + 2 * SHA256_BYTES_IN_WORD, ctx->H[2]); 440 _MHD_PUT_32BIT_BE ((void *) (digest + 0 * SHA256_BYTES_IN_WORD), ctx->H[0]);
438 _MHD_PUT_32BIT_BE (digest + 3 * SHA256_BYTES_IN_WORD, ctx->H[3]); 441 _MHD_PUT_32BIT_BE ((void *) (digest + 1 * SHA256_BYTES_IN_WORD), ctx->H[1]);
439 _MHD_PUT_32BIT_BE (digest + 4 * SHA256_BYTES_IN_WORD, ctx->H[4]); 442 _MHD_PUT_32BIT_BE ((void *) (digest + 2 * SHA256_BYTES_IN_WORD), ctx->H[2]);
440 _MHD_PUT_32BIT_BE (digest + 5 * SHA256_BYTES_IN_WORD, ctx->H[5]); 443 _MHD_PUT_32BIT_BE ((void *) (digest + 3 * SHA256_BYTES_IN_WORD), ctx->H[3]);
441 _MHD_PUT_32BIT_BE (digest + 6 * SHA256_BYTES_IN_WORD, ctx->H[6]); 444 _MHD_PUT_32BIT_BE ((void *) (digest + 4 * SHA256_BYTES_IN_WORD), ctx->H[4]);
442 _MHD_PUT_32BIT_BE (digest + 7 * SHA256_BYTES_IN_WORD, ctx->H[7]); 445 _MHD_PUT_32BIT_BE ((void *) (digest + 5 * SHA256_BYTES_IN_WORD), ctx->H[5]);
446 _MHD_PUT_32BIT_BE ((void *) (digest + 6 * SHA256_BYTES_IN_WORD), ctx->H[6]);
447 _MHD_PUT_32BIT_BE ((void *) (digest + 7 * SHA256_BYTES_IN_WORD), ctx->H[7]);
443 } 448 }
444 449
445 /* Erase potentially sensitive data. */ 450 /* Erase potentially sensitive data. */