diff options
Diffstat (limited to 'libkeccak_state_initialise.c')
-rw-r--r-- | libkeccak_state_initialise.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/libkeccak_state_initialise.c b/libkeccak_state_initialise.c index 390fb87..aa77051 100644 --- a/libkeccak_state_initialise.c +++ b/libkeccak_state_initialise.c @@ -13,21 +13,25 @@ int libkeccak_state_initialise(struct libkeccak_state *restrict state, const struct libkeccak_spec *restrict spec) { long int x; + state->r = spec->bitrate; state->n = spec->output; state->c = spec->capacity; state->b = state->r + state->c; state->w = x = state->b / 25; state->l = 0; + if (x & 0xF0L) state->l |= 4, x >>= 4; if (x & 0x0CL) state->l |= 2, x >>= 2; if (x & 0x02L) state->l |= 1; + state->nr = 12 + (state->l << 1); state->wmod = (state->w == 64) ? ~0LL : (int64_t)((1ULL << state->w) - 1); for (x = 0; x < 25; x++) state->S[x] = 0; state->mptr = 0; state->mlen = (size_t)(state->r * state->b) >> 2; + state->M = malloc(state->mlen * sizeof(char)); return state->M == NULL ? -1 : 0; } |