From e907011aa04bd154a36348933eda12ed7a71ff5b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Mon, 5 Jul 2010 21:50:20 +0200
Subject: [PATCH] (des_set_key): New iteration logic, to keep key pointer
 unchanged. Moved weak key check to the end, and don't set the status
 attribute. (des_encrypt): Ignore status attribute. (des_decrypt): Likewise.

Rev: nettle/des.c:1.3
---
 des.c | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/des.c b/des.c
index 74c58340..7faadd0e 100644
--- a/des.c
+++ b/des.c
@@ -198,15 +198,13 @@ des_set_key(struct des_ctx *ctx, const uint8_t *key)
   uint32_t *method;
   const uint8_t *k;
 
-  ctx->status = des_weak_p(key) ? DES_WEAK_KEY : DES_OK;
-  
-  /* NOTE: We go on and expand the key, even if it was weak */
   /* explode the bits */
   n = 56;
   b0 = bits0;
   b1 = bits1;
+  k = key;
   do {
-    w = (256 | *key++) << 2;
+    w = (256 | *k++) << 2;
     do {
       --n;
       b1[n] = 8 & w;
@@ -262,7 +260,7 @@ des_set_key(struct des_ctx *ctx, const uint8_t *key)
     method	+= 2;
   } while ( --n );
 
-  return (ctx->status == DES_OK);
+  return !des_weak_p (key);
 }
 
 void
@@ -271,7 +269,6 @@ des_encrypt(const struct des_ctx *ctx,
 	    const uint8_t *src)
 {
   assert(!(length % DES_BLOCK_SIZE));
-  assert(ctx->status == DES_OK);
   
   while (length)
     {
@@ -288,7 +285,6 @@ des_decrypt(const struct des_ctx *ctx,
 	    const uint8_t *src)
 {
   assert(!(length % DES_BLOCK_SIZE));
-  assert(ctx->status == DES_OK);
 
   while (length)
     {
-- 
GitLab