aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxiphon <xiphon@protonmail.com>2018-10-22 06:48:54 +0000
committerxiphon <xiphon@protonmail.com>2018-10-22 18:34:19 +0300
commited36335c969a1061e555724467263e22d1738cce (patch)
treee202e4954a4ea7c7bc98c470d64a7842f463b485
parentMerge pull request #4524 (diff)
downloadmonero-ed36335c969a1061e555724467263e22d1738cce.tar.xz
crypto: fixed incremental keccak API on big-endian platforms
-rw-r--r--src/crypto/keccak.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/crypto/keccak.c b/src/crypto/keccak.c
index b5946036e..b095b5ce2 100644
--- a/src/crypto/keccak.c
+++ b/src/crypto/keccak.c
@@ -145,7 +145,7 @@ void keccak1600(const uint8_t *in, size_t inlen, uint8_t *md)
#define IS_ALIGNED_64(p) (0 == (7 & ((const char*)(p) - (const char*)0)))
#define KECCAK_PROCESS_BLOCK(st, block) { \
for (int i_ = 0; i_ < KECCAK_WORDS; i_++){ \
- ((st))[i_] ^= ((block))[i_]; \
+ ((st))[i_] ^= swap64le(((block))[i_]); \
}; \
keccakf(st, KECCAK_ROUNDS); }
@@ -207,7 +207,8 @@ void keccak_finish(KECCAK_CTX * ctx, uint8_t *md){
}
static_assert(KECCAK_BLOCKLEN > KECCAK_DIGESTSIZE, "");
+ static_assert(KECCAK_DIGESTSIZE % sizeof(uint64_t) == 0, "");
if (md) {
- memcpy(md, ctx->hash, KECCAK_DIGESTSIZE);
+ memcpy_swap64le(md, ctx->hash, KECCAK_DIGESTSIZE / sizeof(uint64_t));
}
}