summaryrefslogtreecommitdiffstats
path: root/crypto/des/set_key.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/des/set_key.c')
-rw-r--r--crypto/des/set_key.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/crypto/des/set_key.c b/crypto/des/set_key.c
index 52553a4c16..eb64bd5292 100644
--- a/crypto/des/set_key.c
+++ b/crypto/des/set_key.c
@@ -145,11 +145,34 @@ int des_is_weak_key(const_des_cblock *key)
#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\
(a)=(a)^(t)^(t>>(16-(n))))
+int des_set_key(const_des_cblock *key, des_key_schedule schedule)
+ {
+ if (des_check_key)
+ {
+ return des_set_key_checked(key, schedule);
+ }
+ else
+ {
+ des_set_key_unchecked(key, schedule);
+ return 0;
+ }
+ }
+
/* return 0 if key parity is odd (correct),
* return -1 if key parity error,
* return -2 if illegal weak key.
*/
-int des_set_key(const_des_cblock *key, des_key_schedule schedule)
+int des_set_key_checked(const_des_cblock *key, des_key_schedule schedule)
+ {
+ if (!check_parity(key))
+ return(-1);
+ if (des_is_weak_key(key))
+ return(-2);
+ des_set_key_unchecked(key, schedule);
+ return 0;
+ }
+
+void des_set_key_unchecked(const_des_cblock *key, des_key_schedule schedule)
{
static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0};
register DES_LONG c,d,t,s,t2;
@@ -157,15 +180,6 @@ int des_set_key(const_des_cblock *key, des_key_schedule schedule)
register DES_LONG *k;
register int i;
- if (des_check_key)
- {
- if (!check_parity(key))
- return(-1);
-
- if (des_is_weak_key(key))
- return(-2);
- }
-
k = &schedule->ks.deslong[0];
in = &(*key)[0];
@@ -225,7 +239,6 @@ int des_set_key(const_des_cblock *key, des_key_schedule schedule)
t2=((s>>16L)|(t&0xffff0000L));
*(k++)=ROTATE(t2,26)&0xffffffffL;
}
- return(0);
}
int des_key_sched(const_des_cblock *key, des_key_schedule schedule)