projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add functions des_set_key_checked, des_set_key_unchecked.
[openssl.git]
/
crypto
/
des
/
set_key.c
diff --git
a/crypto/des/set_key.c
b/crypto/des/set_key.c
index fe966fd25570c1c4e3c255b02f4eaa027caa9bec..eb64bd5292711dc524f63d4b8f980222f64156fd 100644
(file)
--- a/
crypto/des/set_key.c
+++ b/
crypto/des/set_key.c
@@
-67,16
+67,10
@@
#include "podd.h"
#include "sk.h"
#include "podd.h"
#include "sk.h"
-#ifndef NOPROTO
-static int check_parity(des_cblock (*key));
-#else
-static int check_parity();
-#endif
+static int check_parity(const_des_cblock *key);
+OPENSSL_GLOBAL int des_check_key=0;
-int des_check_key=0;
-
-void des_set_odd_parity(key)
-des_cblock (*key);
+void des_set_odd_parity(des_cblock *key)
{
int i;
{
int i;
@@
-84,8
+78,7
@@
des_cblock (*key);
(*key)[i]=odd_parity[(*key)[i]];
}
(*key)[i]=odd_parity[(*key)[i]];
}
-static int check_parity(key)
-des_cblock (*key);
+static int check_parity(const_des_cblock *key)
{
int i;
{
int i;
@@
-127,8
+120,7
@@
static des_cblock weak_keys[NUM_WEAK_KEY]={
{0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE},
{0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}};
{0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE},
{0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}};
-int des_is_weak_key(key)
-des_cblock (*key);
+int des_is_weak_key(const_des_cblock *key)
{
int i;
{
int i;
@@
-153,31
+145,43
@@
des_cblock (*key);
#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\
(a)=(a)^(t)^(t>>(16-(n))))
#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.
*/
/* return 0 if key parity is odd (correct),
* return -1 if key parity error,
* return -2 if illegal weak key.
*/
-int des_set_key(key, schedule)
-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;
{
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;
- register unsigned char *in;
+ register
const
unsigned char *in;
register DES_LONG *k;
register int i;
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=(DES_LONG *)schedule;
- in=(unsigned char *)key;
+ k = &schedule->ks.deslong[0];
+ in = &(*key)[0];
c2l(in,c);
c2l(in,d);
c2l(in,c);
c2l(in,d);
@@
-235,12
+239,9
@@
des_key_schedule schedule;
t2=((s>>16L)|(t&0xffff0000L));
*(k++)=ROTATE(t2,26)&0xffffffffL;
}
t2=((s>>16L)|(t&0xffff0000L));
*(k++)=ROTATE(t2,26)&0xffffffffL;
}
- return(0);
}
}
-int des_key_sched(key, schedule)
-des_cblock (*key);
-des_key_schedule schedule;
+int des_key_sched(const_des_cblock *key, des_key_schedule schedule)
{
return(des_set_key(key,schedule));
}
{
return(des_set_key(key,schedule));
}