From cddfe788fbbc4726fcf9892963df3f3e823eb233 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bodo=20M=C3=B6ller?= Date: Fri, 3 Dec 1999 20:24:21 +0000 Subject: Add functions des_set_key_checked, des_set_key_unchecked. Never use des_set_key (it depends on the global variable des_check_key), but usually des_set_key_unchecked. Only destest.c bothered to look at the return values of des_set_key, but it did not set des_check_key -- if it had done so, most checks would have failed because of wrong parity and because of weak keys. --- crypto/des/set_key.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'crypto/des/set_key.c') 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) -- cgit v1.2.3