From 3d2dc0f8e5fae6d5c08e7355beae19e9bb0db99b Mon Sep 17 00:00:00 2001
From: Paul Bakker
Date: Wed, 27 Feb 2013 14:52:37 +0100
Subject: [PATCH] Corrected GCM counter incrementation to use only 32-bits
instead of 128-bits
Using 32-bits has the possibility to overwrite the IV in the first 12
bytes of the Y variable.
Found by Yawning Angel
---
ChangeLog | 2 ++
library/gcm.c | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index 75989bb91..a5fc141a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@ PolarSSL ChangeLog
= Master
Bugfix
* Fixed memory leak in ssl_free() and ssl_reset() for active session
+ * Corrected GCM counter incrementation to use only 32-bits instead of
+ 128-bits (found by Yawning Angel)
Security
* Removed further timing differences during SSL message decryption in
diff --git a/library/gcm.c b/library/gcm.c
index c91598cd2..68b6611e5 100644
--- a/library/gcm.c
+++ b/library/gcm.c
@@ -263,7 +263,7 @@ int gcm_crypt_and_tag( gcm_context *ctx,
{
use_len = ( length < 16 ) ? length : 16;
- for( i = 16; i > 0; i-- )
+ for( i = 16; i > 12; i-- )
if( ++y[i - 1] != 0 )
break;