md5/sha512: a better fix for strict aliasing warnings
The locations *are* well-aligned for direct stores on any architecture. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
f6205c6ab7
commit
1f5e81f8f8
@ -208,6 +208,7 @@ typedef int bb__aliased_int FIX_ALIASING;
|
|||||||
typedef long bb__aliased_long FIX_ALIASING;
|
typedef long bb__aliased_long FIX_ALIASING;
|
||||||
typedef uint16_t bb__aliased_uint16_t FIX_ALIASING;
|
typedef uint16_t bb__aliased_uint16_t FIX_ALIASING;
|
||||||
typedef uint32_t bb__aliased_uint32_t FIX_ALIASING;
|
typedef uint32_t bb__aliased_uint32_t FIX_ALIASING;
|
||||||
|
typedef uint64_t bb__aliased_uint64_t FIX_ALIASING;
|
||||||
|
|
||||||
/* NB: unaligned parameter should be a pointer, aligned one -
|
/* NB: unaligned parameter should be a pointer, aligned one -
|
||||||
* a lvalue. This makes it more likely to not swap them by mistake
|
* a lvalue. This makes it more likely to not swap them by mistake
|
||||||
|
@ -84,7 +84,7 @@ static void FAST_FUNC common64_end(md5_ctx_t *ctx, int swap_needed)
|
|||||||
if (swap_needed)
|
if (swap_needed)
|
||||||
t = bb_bswap_64(t);
|
t = bb_bswap_64(t);
|
||||||
/* wbuffer is suitably aligned for this */
|
/* wbuffer is suitably aligned for this */
|
||||||
memcpy(&ctx->wbuffer[64 - 8], &t, sizeof(t));
|
*(bb__aliased_uint64_t *) (&ctx->wbuffer[64 - 8]) = t;
|
||||||
}
|
}
|
||||||
ctx->process_block(ctx);
|
ctx->process_block(ctx);
|
||||||
if (remaining >= 8)
|
if (remaining >= 8)
|
||||||
@ -883,10 +883,10 @@ void FAST_FUNC sha512_end(sha512_ctx_t *ctx, void *resbuf)
|
|||||||
uint64_t t;
|
uint64_t t;
|
||||||
t = ctx->total64[0] << 3;
|
t = ctx->total64[0] << 3;
|
||||||
t = SWAP_BE64(t);
|
t = SWAP_BE64(t);
|
||||||
memcpy(&ctx->wbuffer[128 - 8], &t, sizeof(t));
|
*(bb__aliased_uint64_t *) (&ctx->wbuffer[128 - 8]) = t;
|
||||||
t = (ctx->total64[1] << 3) | (ctx->total64[0] >> 61);
|
t = (ctx->total64[1] << 3) | (ctx->total64[0] >> 61);
|
||||||
t = SWAP_BE64(t);
|
t = SWAP_BE64(t);
|
||||||
memcpy(&ctx->wbuffer[128 - 16], &t, sizeof(t));
|
*(bb__aliased_uint64_t *) (&ctx->wbuffer[128 - 16]) = t;
|
||||||
}
|
}
|
||||||
sha512_process_block128(ctx);
|
sha512_process_block128(ctx);
|
||||||
if (remaining >= 16)
|
if (remaining >= 16)
|
||||||
|
Loading…
Reference in New Issue
Block a user