diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libkeccak/digest.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/libkeccak/digest.c b/src/libkeccak/digest.c index ed6d153..08f98a1 100644 --- a/src/libkeccak/digest.c +++ b/src/libkeccak/digest.c @@ -297,7 +297,8 @@ static __attribute__((nonnull, nothrow)) void libkeccak_absorption_phase(libkeccak_state_t* restrict state, size_t len) { /* TODO optimise function */ - long rr = state->r >> 3, ww = state->w >> 3; + long rr = state->r >> 3; + long ww = state->w >> 3; long i = (long)len / rr; const char* restrict message = state->M; if (__builtin_expect(ww >= 8, 1)) /* ww > 8 is impossible, it is just for optimisation possibilities. */ @@ -336,22 +337,24 @@ static __attribute__((nonnull, nothrow, hot)) void libkeccak_squeezing_phase(register libkeccak_state_t* restrict state, long rr, long nn, long ww, register char* restrict hashsum) { - /* TODO optimise this */ - long i, j = 0, k, ptr = 0, ni = rr > 25 ? 25 : rr, olen = state->n; - int_fast64_t v; + register int_fast64_t v; + register long ni = rr > 25 ? 25 : rr; + auto long olen = state->n; + auto long i, j = 0; + register long k; while (olen > 0) { for (i = 0; (i < ni) && (j < nn); i++) { v = state->S[LANE_TRANSPOSE_MAP[i]]; for (k = 0; (k++ < ww) && (j++ < nn); v >>= 8) - hashsum[ptr++] = (char)v; + *hashsum++ = (char)v; } if (olen -= state->r, olen > 0) libkeccak_f(state); } if (state->n & 7) - hashsum[nn - 1] &= (char)((1 << (state->n & 7)) - 1); + hashsum[-1] &= (char)((1 << (state->n & 7)) - 1); } |