diff options
Diffstat (limited to 'src/lib/libcrypto/des/set_key.c')
-rw-r--r-- | src/lib/libcrypto/des/set_key.c | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/src/lib/libcrypto/des/set_key.c b/src/lib/libcrypto/des/set_key.c index 09afd4fc03..683916e71b 100644 --- a/src/lib/libcrypto/des/set_key.c +++ b/src/lib/libcrypto/des/set_key.c | |||
@@ -65,7 +65,7 @@ | |||
65 | */ | 65 | */ |
66 | #include "des_locl.h" | 66 | #include "des_locl.h" |
67 | 67 | ||
68 | OPENSSL_GLOBAL int des_check_key=0; | 68 | OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key); /* defaults to false */ |
69 | 69 | ||
70 | static const unsigned char odd_parity[256]={ | 70 | static const unsigned char odd_parity[256]={ |
71 | 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, | 71 | 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, |
@@ -85,7 +85,7 @@ static const unsigned char odd_parity[256]={ | |||
85 | 224,224,227,227,229,229,230,230,233,233,234,234,236,236,239,239, | 85 | 224,224,227,227,229,229,230,230,233,233,234,234,236,236,239,239, |
86 | 241,241,242,242,244,244,247,247,248,248,251,251,253,253,254,254}; | 86 | 241,241,242,242,244,244,247,247,248,248,251,251,253,253,254,254}; |
87 | 87 | ||
88 | void des_set_odd_parity(des_cblock *key) | 88 | void DES_set_odd_parity(DES_cblock *key) |
89 | { | 89 | { |
90 | int i; | 90 | int i; |
91 | 91 | ||
@@ -93,7 +93,7 @@ void des_set_odd_parity(des_cblock *key) | |||
93 | (*key)[i]=odd_parity[(*key)[i]]; | 93 | (*key)[i]=odd_parity[(*key)[i]]; |
94 | } | 94 | } |
95 | 95 | ||
96 | int des_check_key_parity(const_des_cblock *key) | 96 | int DES_check_key_parity(const_DES_cblock *key) |
97 | { | 97 | { |
98 | int i; | 98 | int i; |
99 | 99 | ||
@@ -115,7 +115,7 @@ int des_check_key_parity(const_des_cblock *key) | |||
115 | * (and actual cblock values). | 115 | * (and actual cblock values). |
116 | */ | 116 | */ |
117 | #define NUM_WEAK_KEY 16 | 117 | #define NUM_WEAK_KEY 16 |
118 | static des_cblock weak_keys[NUM_WEAK_KEY]={ | 118 | static DES_cblock weak_keys[NUM_WEAK_KEY]={ |
119 | /* weak keys */ | 119 | /* weak keys */ |
120 | {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, | 120 | {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01}, |
121 | {0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE}, | 121 | {0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE}, |
@@ -135,7 +135,7 @@ static des_cblock weak_keys[NUM_WEAK_KEY]={ | |||
135 | {0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE}, | 135 | {0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE}, |
136 | {0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}}; | 136 | {0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}}; |
137 | 137 | ||
138 | int des_is_weak_key(const_des_cblock *key) | 138 | int DES_is_weak_key(const_DES_cblock *key) |
139 | { | 139 | { |
140 | int i; | 140 | int i; |
141 | 141 | ||
@@ -146,7 +146,7 @@ int des_is_weak_key(const_des_cblock *key) | |||
146 | * eay 93/06/29 | 146 | * eay 93/06/29 |
147 | * Another problem, I was comparing only the first 4 | 147 | * Another problem, I was comparing only the first 4 |
148 | * bytes, 97/03/18 */ | 148 | * bytes, 97/03/18 */ |
149 | if (memcmp(weak_keys[i],key,sizeof(des_cblock)) == 0) return(1); | 149 | if (memcmp(weak_keys[i],key,sizeof(DES_cblock)) == 0) return(1); |
150 | return(0); | 150 | return(0); |
151 | } | 151 | } |
152 | 152 | ||
@@ -307,15 +307,15 @@ static const DES_LONG des_skb[8][64]={ | |||
307 | 0x00002822L,0x04002822L,0x00042822L,0x04042822L, | 307 | 0x00002822L,0x04002822L,0x00042822L,0x04042822L, |
308 | }}; | 308 | }}; |
309 | 309 | ||
310 | int des_set_key(const_des_cblock *key, des_key_schedule schedule) | 310 | int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule) |
311 | { | 311 | { |
312 | if (des_check_key) | 312 | if (DES_check_key) |
313 | { | 313 | { |
314 | return des_set_key_checked(key, schedule); | 314 | return DES_set_key_checked(key, schedule); |
315 | } | 315 | } |
316 | else | 316 | else |
317 | { | 317 | { |
318 | des_set_key_unchecked(key, schedule); | 318 | DES_set_key_unchecked(key, schedule); |
319 | return 0; | 319 | return 0; |
320 | } | 320 | } |
321 | } | 321 | } |
@@ -324,17 +324,17 @@ int des_set_key(const_des_cblock *key, des_key_schedule schedule) | |||
324 | * return -1 if key parity error, | 324 | * return -1 if key parity error, |
325 | * return -2 if illegal weak key. | 325 | * return -2 if illegal weak key. |
326 | */ | 326 | */ |
327 | int des_set_key_checked(const_des_cblock *key, des_key_schedule schedule) | 327 | int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule) |
328 | { | 328 | { |
329 | if (!des_check_key_parity(key)) | 329 | if (!DES_check_key_parity(key)) |
330 | return(-1); | 330 | return(-1); |
331 | if (des_is_weak_key(key)) | 331 | if (DES_is_weak_key(key)) |
332 | return(-2); | 332 | return(-2); |
333 | des_set_key_unchecked(key, schedule); | 333 | DES_set_key_unchecked(key, schedule); |
334 | return 0; | 334 | return 0; |
335 | } | 335 | } |
336 | 336 | ||
337 | void des_set_key_unchecked(const_des_cblock *key, des_key_schedule schedule) | 337 | void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule) |
338 | { | 338 | { |
339 | static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; | 339 | static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; |
340 | register DES_LONG c,d,t,s,t2; | 340 | register DES_LONG c,d,t,s,t2; |
@@ -342,7 +342,11 @@ void des_set_key_unchecked(const_des_cblock *key, des_key_schedule schedule) | |||
342 | register DES_LONG *k; | 342 | register DES_LONG *k; |
343 | register int i; | 343 | register int i; |
344 | 344 | ||
345 | k = &schedule->ks.deslong[0]; | 345 | #if OPENBSD_DEV_CRYPTO |
346 | memcpy(schedule->key,key,sizeof schedule->key); | ||
347 | schedule->session=NULL; | ||
348 | #endif | ||
349 | k = &schedule->ks->deslong[0]; | ||
346 | in = &(*key)[0]; | 350 | in = &(*key)[0]; |
347 | 351 | ||
348 | c2l(in,c); | 352 | c2l(in,c); |
@@ -390,13 +394,14 @@ void des_set_key_unchecked(const_des_cblock *key, des_key_schedule schedule) | |||
390 | } | 394 | } |
391 | } | 395 | } |
392 | 396 | ||
393 | int des_key_sched(const_des_cblock *key, des_key_schedule schedule) | 397 | int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule) |
394 | { | 398 | { |
395 | return(des_set_key(key,schedule)); | 399 | return(DES_set_key(key,schedule)); |
396 | } | 400 | } |
397 | 401 | /* | |
398 | #undef des_fixup_key_parity | 402 | #undef des_fixup_key_parity |
399 | void des_fixup_key_parity(des_cblock *key) | 403 | void des_fixup_key_parity(des_cblock *key) |
400 | { | 404 | { |
401 | des_set_odd_parity(key); | 405 | des_set_odd_parity(key); |
402 | } | 406 | } |
407 | */ | ||