From f42e5cceab885bc4b9490aee2d6ff38f617d39b7 Mon Sep 17 00:00:00 2001 From: Paul Bakker Date: Fri, 12 Apr 2013 13:21:29 +0200 Subject: [PATCH] Cleanup of the GCM code Removed unused variable 'v' orig_len and orig_add_len are now uint64_t to support larger than 2^29 data sizes (cherry picked from commit 0ecdb23eed0cfa3d9d9709fb92c002a520847776) Conflicts: library/gcm.c --- library/gcm.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/library/gcm.c b/library/gcm.c index 68b6611e5b..ed7572dc5e 100644 --- a/library/gcm.c +++ b/library/gcm.c @@ -80,7 +80,7 @@ static void gcm_gen_table( gcm_context *ctx ) for( i = 4; i > 0; i >>= 1 ) { - uint32_t T = ( vl & 1 ) ? 0xe1000000U : 0; + uint32_t T = ( vl & 1 ) * 0xe1000000U; vl = ( vh << 63 ) | ( vl >> 1 ); vh = ( vh >> 1 ) ^ ( (uint64_t) T << 32); @@ -128,12 +128,10 @@ void gcm_mult( gcm_context *ctx, const unsigned char x[16], unsigned char output { int i = 0; unsigned char z[16]; - unsigned char v[16]; unsigned char lo, hi, rem; uint64_t zh, zl; memset( z, 0x00, 16 ); - memcpy( v, x, 16 ); lo = x[15] & 0xf; hi = x[15] >> 4; @@ -191,8 +189,8 @@ int gcm_crypt_and_tag( gcm_context *ctx, const unsigned char *p; unsigned char *out_p = output; size_t use_len; - size_t orig_len = length * 8; - size_t orig_add_len = add_len * 8; + uint64_t orig_len = length * 8; + uint64_t orig_add_len = add_len * 8; unsigned char **xor_p; memset( y, 0x00, 16 ); @@ -286,8 +284,10 @@ int gcm_crypt_and_tag( gcm_context *ctx, { memset( work_buf, 0x00, 16 ); - PUT_UINT32_BE( orig_add_len , work_buf, 4 ); - PUT_UINT32_BE( orig_len , work_buf, 12 ); + PUT_UINT32_BE( ( orig_add_len >> 32 ), work_buf, 0 ); + PUT_UINT32_BE( ( orig_add_len ), work_buf, 4 ); + PUT_UINT32_BE( ( orig_len >> 32 ), work_buf, 8 ); + PUT_UINT32_BE( ( orig_len ), work_buf, 12 ); for( i = 0; i < 16; i++ ) buf[i] ^= work_buf[i];