| OLD | NEW |
| 1 /* crypto/des/set_key.c */ | 1 /* crypto/des/set_key.c */ |
| 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 * All rights reserved. | 3 * All rights reserved. |
| 4 * | 4 * |
| 5 * This package is an SSL implementation written | 5 * This package is an SSL implementation written |
| 6 * by Eric Young (eay@cryptsoft.com). | 6 * by Eric Young (eay@cryptsoft.com). |
| 7 * The implementation was written so as to conform with Netscapes SSL. | 7 * The implementation was written so as to conform with Netscapes SSL. |
| 8 * | 8 * |
| 9 * This library is free for commercial and non-commercial use as long as | 9 * This library is free for commercial and non-commercial use as long as |
| 10 * the following conditions are aheared to. The following conditions | 10 * the following conditions are aheared to. The following conditions |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 */ | 57 */ |
| 58 | 58 |
| 59 /* set_key.c v 1.4 eay 24/9/91 | 59 /* set_key.c v 1.4 eay 24/9/91 |
| 60 * 1.4 Speed up by 400% :-) | 60 * 1.4 Speed up by 400% :-) |
| 61 * 1.3 added register declarations. | 61 * 1.3 added register declarations. |
| 62 * 1.2 unrolled make_key_sched a bit more | 62 * 1.2 unrolled make_key_sched a bit more |
| 63 * 1.1 added norm_expand_bits | 63 * 1.1 added norm_expand_bits |
| 64 * 1.0 First working version | 64 * 1.0 First working version |
| 65 */ | 65 */ |
| 66 #include "des_locl.h" | 66 #include "des_locl.h" |
| 67 #ifdef OPENSSL_FIPS | |
| 68 #include <openssl/fips.h> | |
| 69 #endif | |
| 70 | 67 |
| 71 | 68 OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key,0)» /* defaults to false */ |
| 72 OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key);» /* defaults to false */ | |
| 73 | 69 |
| 74 static const unsigned char odd_parity[256]={ | 70 static const unsigned char odd_parity[256]={ |
| 75 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, |
| 76 16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, | 72 16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, |
| 77 32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47, | 73 32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47, |
| 78 49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62, | 74 49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62, |
| 79 64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79, | 75 64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79, |
| 80 81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94, | 76 81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94, |
| 81 97, 97, 98, 98,100,100,103,103,104,104,107,107,109,109,110,110, | 77 97, 97, 98, 98,100,100,103,103,104,104,107,107,109,109,110,110, |
| 82 112,112,115,115,117,117,118,118,121,121,122,122,124,124,127,127, | 78 112,112,115,115,117,117,118,118,121,121,122,122,124,124,127,127, |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 if (!DES_check_key_parity(key)) | 329 if (!DES_check_key_parity(key)) |
| 334 return(-1); | 330 return(-1); |
| 335 if (DES_is_weak_key(key)) | 331 if (DES_is_weak_key(key)) |
| 336 return(-2); | 332 return(-2); |
| 337 DES_set_key_unchecked(key, schedule); | 333 DES_set_key_unchecked(key, schedule); |
| 338 return 0; | 334 return 0; |
| 339 } | 335 } |
| 340 | 336 |
| 341 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) |
| 342 { | 338 { |
| 343 » static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; | 339 » static const int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0}; |
| 344 register DES_LONG c,d,t,s,t2; | 340 register DES_LONG c,d,t,s,t2; |
| 345 register const unsigned char *in; | 341 register const unsigned char *in; |
| 346 register DES_LONG *k; | 342 register DES_LONG *k; |
| 347 register int i; | 343 register int i; |
| 348 | 344 |
| 349 #ifdef OPENBSD_DEV_CRYPTO | 345 #ifdef OPENBSD_DEV_CRYPTO |
| 350 memcpy(schedule->key,key,sizeof schedule->key); | 346 memcpy(schedule->key,key,sizeof schedule->key); |
| 351 schedule->session=NULL; | 347 schedule->session=NULL; |
| 352 #endif | 348 #endif |
| 353 k = &schedule->ks->deslong[0]; | 349 k = &schedule->ks->deslong[0]; |
| 354 in = &(*key)[0]; | 350 in = &(*key)[0]; |
| 355 | 351 |
| 356 #ifdef OPENSSL_FIPS | |
| 357 FIPS_selftest_check(); | |
| 358 #endif | |
| 359 | |
| 360 c2l(in,c); | 352 c2l(in,c); |
| 361 c2l(in,d); | 353 c2l(in,d); |
| 362 | 354 |
| 363 /* do PC1 in 47 simple operations :-) | 355 /* do PC1 in 47 simple operations :-) |
| 364 * Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov) | 356 * Thanks to John Fletcher (john_fletcher@lccmail.ocf.llnl.gov) |
| 365 * for the inspiration. :-) */ | 357 * for the inspiration. :-) */ |
| 366 PERM_OP (d,c,t,4,0x0f0f0f0fL); | 358 PERM_OP (d,c,t,4,0x0f0f0f0fL); |
| 367 HPERM_OP(c,t,-2,0xcccc0000L); | 359 HPERM_OP(c,t,-2,0xcccc0000L); |
| 368 HPERM_OP(d,t,-2,0xcccc0000L); | 360 HPERM_OP(d,t,-2,0xcccc0000L); |
| 369 PERM_OP (d,c,t,1,0x55555555L); | 361 PERM_OP (d,c,t,1,0x55555555L); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 { | 398 { |
| 407 return(DES_set_key(key,schedule)); | 399 return(DES_set_key(key,schedule)); |
| 408 } | 400 } |
| 409 /* | 401 /* |
| 410 #undef des_fixup_key_parity | 402 #undef des_fixup_key_parity |
| 411 void des_fixup_key_parity(des_cblock *key) | 403 void des_fixup_key_parity(des_cblock *key) |
| 412 { | 404 { |
| 413 des_set_odd_parity(key); | 405 des_set_odd_parity(key); |
| 414 } | 406 } |
| 415 */ | 407 */ |
| 416 | |
| OLD | NEW |