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
diff --git a/library/gcm.c b/library/gcm.c
index 68b6611..ed7572d 100644
--- a/library/gcm.c
+++ b/library/gcm.c
@@ -80,7 +80,7 @@
 
     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 @@
 {
     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 @@
     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 @@
     {
         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];