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];