From 7e757a92eda4265e5a167b6ea9c0461ee06c453f Mon Sep 17 00:00:00 2001 From: bg Date: Thu, 27 Dec 2012 01:39:06 +0100 Subject: [PATCH] [keccak-asm] improving last block handling (reducing stack space) --- keccak/keccak-stub.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/keccak/keccak-stub.c b/keccak/keccak-stub.c index 886e2d1..8447703 100644 --- a/keccak/keccak-stub.c +++ b/keccak/keccak-stub.c @@ -93,9 +93,6 @@ void keccak_lastBlock(keccak_ctx_t* ctx, const void* block, uint16_t length_b){ block = (uint8_t*)block + ctx->bs; length_b -= ctx->r; } -// uint8_t tmp[ctx->bs]; - uint8_t pad[3]; -// memset(tmp, 0x00, ctx->bs); memxor(ctx->a, block, (length_b)/8); /* appand 1 */ if(length_b & 7){ @@ -107,19 +104,19 @@ void keccak_lastBlock(keccak_ctx_t* ctx, const void* block, uint16_t length_b){ }else{ ((uint8_t*)ctx->a)[length_b / 8] ^= 0x01; } - pad[0] = ctx->d; - pad[1] = ctx->bs; - pad[2] = 0x01; if(length_b / 8 + 1 + 3 <= ctx->bs){ - memxor((uint8_t*)ctx->a + length_b / 8 + 1, pad, 3); + *((uint8_t*)ctx->a + length_b / 8 + 1) ^= ctx->d; + *((uint8_t*)ctx->a + length_b / 8 + 2) ^= ctx->bs; + *((uint8_t*)ctx->a + length_b / 8 + 3) ^= 1; }else{ if(length_b / 8 + 1 + 2 <= ctx->bs){ - memxor((uint8_t*)ctx->a + length_b / 8 + 1, pad, 2); + *((uint8_t*)ctx->a + length_b / 8 + 1) ^= ctx->d; + *((uint8_t*)ctx->a + length_b / 8 + 2) ^= ctx->bs; keccak_f1600(ctx->a); ((uint8_t*)ctx->a)[0] ^= 0x01; }else{ if(length_b/8+1+1 <= ctx->bs){ - memxor((uint8_t*)ctx->a + length_b / 8 + 1, pad, 1); + *((uint8_t*)ctx->a + length_b / 8 + 1) ^= ctx->d; keccak_f1600(ctx->a); ((uint8_t*)ctx->a)[0] ^= ctx->bs; ((uint8_t*)ctx->a)[1] ^= 0x01; -- 2.39.2