From 94b83a3c78b24f2c7643ea850bf25595193031a7 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:54:34 +0200
Subject: [PATCH] (des_key_sched): Rewrote error checking logic for the case of
 non-zero des_check_key.

Rev: nettle/des-compat.c:1.3
---
 des-compat.c | 40 ++++++++--------------------------------
 1 file changed, 8 insertions(+), 32 deletions(-)

diff --git a/des-compat.c b/des-compat.c
index 26dda967..cd8cd1db 100644
--- a/des-compat.c
+++ b/des-compat.c
@@ -202,39 +202,15 @@ int des_check_key = 0;
 int
 des_key_sched(const_des_cblock *key, des_key_schedule ctx)
 {
-  des_cblock nkey;
-  const uint8_t *pkey;
+  if (des_check_key && !des_check_parity (DES_KEY_SIZE, *key))
+    /* Bad parity */
+    return -1;
   
-  if (des_check_key)
-    pkey = *key;
-  else
-    {
-      /* Fix the parity */
-      nettle_des_fix_parity(DES_KEY_SIZE, nkey, *key);
-      pkey = nkey;
-    }
-  
-  if (nettle_des_set_key(ctx, pkey))
-    return 0;
-  else switch(ctx->status)
-    {
-    case DES_BAD_PARITY:
-      if (des_check_key)
-        return -1;
-      else
-        /* We fixed the parity above */
-        abort();
-    case DES_WEAK_KEY:
-      if (des_check_key)
-        return -2;
-
-      /* Pretend the key was good */
-      ctx->status = DES_OK;
-      return 0;
-      
-    default:
-      abort();
-    }
+  if (!nettle_des_set_key(ctx, *key) && des_check_key)
+    /* Weak key */
+    return -2;
+
+  return 0;
 }
 
 int
-- 
GitLab