symm/des.c: Introduce a function to fix or check key parity.
[catacomb] / progs / key.c
index c59eac0..d5bfedb 100644 (file)
@@ -53,6 +53,7 @@
 
 #include "bintab.h"
 #include "bbs.h"
+#include "des.h"
 #include "dh.h"
 #include "dsa.h"
 #include "dsarand.h"
@@ -411,7 +412,6 @@ static void alg_des(keyopts *k)
   unsigned sz;
   octet *p;
   key_data *kd;
-  int i;
 
   if (!k->bits)
     k->bits = 168;
@@ -422,13 +422,7 @@ static void alg_des(keyopts *k)
   sz = k->bits / 7;
   p = sub_alloc(sz);
   k->r->ops->fill(k->r, p, sz);
-  for (i = 0; i < sz; i++) {
-    octet x = p[i] | 0x01;
-    x = x ^ (x >> 4);
-    x = x ^ (x >> 2);
-    x = x ^ (x >> 1);
-    p[i] = (p[i] & 0xfe) | (x & 0x01);
-  }
+  des_fixparity(p, p, sz);
   kd = key_newbinary(KCAT_SYMM | KF_BURN, p, sz);
   memset(p, 0, sz);
   dolock(k, &kd, 0);