From 1d4c756ce97c24cdfdea8369c1a3726ec3e18b66 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Tue, 16 Apr 2013 07:59:40 +0200
Subject: [PATCH] Fixed umac nonce increment.

---
 ChangeLog | 6 ++++++
 umac128.c | 7 +------
 umac32.c  | 6 ++----
 umac64.c  | 6 ++----
 umac96.c  | 7 +------
 5 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d069e75a..59f37bf3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2013-04-16  Niels Möller  <nisse@lysator.liu.se>
 
+	* umac32.c (umac32_digest): Fix nonce increment, use INCREMENT
+	macro.
+	* umac64.c (umac64_digest): Likewise.
+	* umac96.c (umac96_digest): Likewise.
+	* umac128.c (umac128_digest): Likewise.
+
 	* macros.h (INCREMENT): Allow size == 1.
 
 2013-04-15  Niels Möller  <nisse@lysator.liu.se>
diff --git a/umac128.c b/umac128.c
index 74936021..6d33b4f9 100644
--- a/umac128.c
+++ b/umac128.c
@@ -108,12 +108,7 @@ umac128_digest (struct umac128_ctx *ctx,
   aes_encrypt (&ctx->pdf_key, AES_BLOCK_SIZE,
 	       (uint8_t *) tag, ctx->nonce);
 
-  /* Increment nonce */
-  i = ctx->nonce_length - 1;
-  if (++ctx->nonce[i] == 0)
-    while (i > 0)
-      if (++ctx->nonce[--i] == 0)
-	break;
+  INCREMENT (ctx->nonce_length, ctx->nonce);
 
   _umac_l2_final (ctx->l2_key, ctx->l2_state, 4, ctx->count, ctx->l1_out);
   for (i = 0; i < 4; i++)
diff --git a/umac32.c b/umac32.c
index c3714fa3..98f987e9 100644
--- a/umac32.c
+++ b/umac32.c
@@ -115,10 +115,8 @@ umac32_digest (struct umac32_ctx *ctx,
       ctx->nonce_low = 0;
       ctx->nonce[i] += 4;
 
-      if (ctx->nonce[i] == 0)
-	while (i > 0)
-	  if (++ctx->nonce[--i] == 0)
-	    break;
+      if (ctx->nonce[i] == 0 && i > 0)
+	INCREMENT (i, ctx->nonce);
     }
 
   _umac_l2_final (ctx->l2_key, ctx->l2_state, 1, ctx->count, ctx->l1_out);
diff --git a/umac64.c b/umac64.c
index 6f8132de..b2a69709 100644
--- a/umac64.c
+++ b/umac64.c
@@ -118,10 +118,8 @@ umac64_digest (struct umac64_ctx *ctx,
       ctx->nonce_low = 0;
       ctx->nonce[i] += 2;
 
-      if (ctx->nonce[i] == 0)
-	while (i > 0)
-	  if (++ctx->nonce[--i] == 0)
-	    break;
+      if (ctx->nonce[i] == 0 && i > 0)
+	INCREMENT (i, ctx->nonce);
     }
 
   _umac_l2_final (ctx->l2_key, ctx->l2_state, 2, ctx->count, ctx->l1_out);
diff --git a/umac96.c b/umac96.c
index b4b43ed7..2831ad14 100644
--- a/umac96.c
+++ b/umac96.c
@@ -106,12 +106,7 @@ umac96_digest (struct umac96_ctx *ctx,
   aes_encrypt (&ctx->pdf_key, AES_BLOCK_SIZE,
 	       (uint8_t *) tag, ctx->nonce);
 
-  /* Increment nonce */
-  i = ctx->nonce_length - 1;
-  if (++ctx->nonce[i] == 0)
-    while (i > 0)
-      if (++ctx->nonce[--i] == 0)
-	break;
+  INCREMENT (ctx->nonce_length, ctx->nonce);
 
   _umac_l2_final (ctx->l2_key, ctx->l2_state, 3, ctx->count, ctx->l1_out);
   for (i = 0; i < 3; i++)
-- 
GitLab