diff options
Diffstat (limited to 'src/lib/libcrypto/des/str2key.c')
| -rw-r--r-- | src/lib/libcrypto/des/str2key.c | 70 | 
1 files changed, 36 insertions, 34 deletions
| diff --git a/src/lib/libcrypto/des/str2key.c b/src/lib/libcrypto/des/str2key.c index 3365c1bcf3..36c3f81d99 100644 --- a/src/lib/libcrypto/des/str2key.c +++ b/src/lib/libcrypto/des/str2key.c | |||
| @@ -58,13 +58,9 @@ | |||
| 58 | 58 | ||
| 59 | #include "des_locl.h" | 59 | #include "des_locl.h" | 
| 60 | 60 | ||
| 61 | extern int des_check_key; | 61 | void DES_string_to_key(const char *str, DES_cblock *key) | 
| 62 | |||
| 63 | void des_string_to_key(str, key) | ||
| 64 | char *str; | ||
| 65 | des_cblock (*key); | ||
| 66 | { | 62 | { | 
| 67 | des_key_schedule ks; | 63 | DES_key_schedule ks; | 
| 68 | int i,length; | 64 | int i,length; | 
| 69 | register unsigned char j; | 65 | register unsigned char j; | 
| 70 | 66 | ||
| @@ -89,23 +85,22 @@ des_cblock (*key); | |||
| 89 | } | 85 | } | 
| 90 | } | 86 | } | 
| 91 | #endif | 87 | #endif | 
| 92 | des_set_odd_parity((des_cblock *)key); | 88 | DES_set_odd_parity(key); | 
| 93 | i=des_check_key; | 89 | #ifdef EXPERIMENTAL_STR_TO_STRONG_KEY | 
| 94 | des_check_key=0; | 90 | if(DES_is_weak_key(key)) | 
| 95 | des_set_key((des_cblock *)key,ks); | 91 | (*key)[7] ^= 0xF0; | 
| 96 | des_check_key=i; | 92 | DES_set_key(key,&ks); | 
| 97 | des_cbc_cksum((des_cblock *)str,(des_cblock *)key,(long)length,ks, | 93 | #else | 
| 98 | (des_cblock *)key); | 94 | DES_set_key_unchecked(key,&ks); | 
| 99 | memset(ks,0,sizeof(ks)); | 95 | #endif | 
| 100 | des_set_odd_parity((des_cblock *)key); | 96 | DES_cbc_cksum((const unsigned char*)str,key,length,&ks,key); | 
| 97 | memset(&ks,0,sizeof(ks)); | ||
| 98 | DES_set_odd_parity(key); | ||
| 101 | } | 99 | } | 
| 102 | 100 | ||
| 103 | void des_string_to_2keys(str, key1, key2) | 101 | void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2) | 
| 104 | char *str; | ||
| 105 | des_cblock (*key1); | ||
| 106 | des_cblock (*key2); | ||
| 107 | { | 102 | { | 
| 108 | des_key_schedule ks; | 103 | DES_key_schedule ks; | 
| 109 | int i,length; | 104 | int i,length; | 
| 110 | register unsigned char j; | 105 | register unsigned char j; | 
| 111 | 106 | ||
| @@ -154,18 +149,25 @@ des_cblock (*key2); | |||
| 154 | } | 149 | } | 
| 155 | if (length <= 8) memcpy(key2,key1,8); | 150 | if (length <= 8) memcpy(key2,key1,8); | 
| 156 | #endif | 151 | #endif | 
| 157 | des_set_odd_parity((des_cblock *)key1); | 152 | DES_set_odd_parity(key1); | 
| 158 | des_set_odd_parity((des_cblock *)key2); | 153 | DES_set_odd_parity(key2); | 
| 159 | i=des_check_key; | 154 | #ifdef EXPERIMENTAL_STR_TO_STRONG_KEY | 
| 160 | des_check_key=0; | 155 | if(DES_is_weak_key(key1)) | 
| 161 | des_set_key((des_cblock *)key1,ks); | 156 | (*key1)[7] ^= 0xF0; | 
| 162 | des_cbc_cksum((des_cblock *)str,(des_cblock *)key1,(long)length,ks, | 157 | DES_set_key(key1,&ks); | 
| 163 | (des_cblock *)key1); | 158 | #else | 
| 164 | des_set_key((des_cblock *)key2,ks); | 159 | DES_set_key_unchecked(key1,&ks); | 
| 165 | des_cbc_cksum((des_cblock *)str,(des_cblock *)key2,(long)length,ks, | 160 | #endif | 
| 166 | (des_cblock *)key2); | 161 | DES_cbc_cksum((const unsigned char*)str,key1,length,&ks,key1); | 
| 167 | des_check_key=i; | 162 | #ifdef EXPERIMENTAL_STR_TO_STRONG_KEY | 
| 168 | memset(ks,0,sizeof(ks)); | 163 | if(DES_is_weak_key(key2)) | 
| 169 | des_set_odd_parity(key1); | 164 | (*key2)[7] ^= 0xF0; | 
| 170 | des_set_odd_parity(key2); | 165 | DES_set_key(key2,&ks); | 
| 166 | #else | ||
| 167 | DES_set_key_unchecked(key2,&ks); | ||
| 168 | #endif | ||
| 169 | DES_cbc_cksum((const unsigned char*)str,key2,length,&ks,key2); | ||
| 170 | memset(&ks,0,sizeof(ks)); | ||
| 171 | DES_set_odd_parity(key1); | ||
| 172 | DES_set_odd_parity(key2); | ||
| 171 | } | 173 | } | 
