Merge pull request #5703 from wentaoshang/fix-sha256

hashes: support unaligned memory access in be32enc_vect
This commit is contained in:
kYc0o 2016-08-02 15:54:10 +02:00 committed by GitHub
commit ac4cc0849e

View File

@ -64,13 +64,25 @@
*/
static void be32enc_vect(void *dst_, const void *src_, size_t len)
{
if ((uintptr_t)dst_ % sizeof(uint32_t) == 0 &&
(uintptr_t)src_ % sizeof(uint32_t) == 0) {
uint32_t *dst = dst_;
const uint32_t *src = src_;
for (size_t i = 0; i < len / 4; i++) {
dst[i] = __builtin_bswap32(src[i]);
}
}
else {
uint8_t *dst = dst_;
const uint8_t *src = src_;
for (size_t i = 0; i < len; i += 4) {
dst[i] = src[i + 3];
dst[i + 1] = src[i + 2];
dst[i + 2] = src[i + 1];
dst[i + 3] = src[i];
}
}
}
/*
* Decode a big-endian length len vector of (unsigned char) into a length