diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/des/str2key.c | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/src/lib/libcrypto/des/str2key.c b/src/lib/libcrypto/des/str2key.c index c6abb87201..36c3f81d99 100644 --- a/src/lib/libcrypto/des/str2key.c +++ b/src/lib/libcrypto/des/str2key.c | |||
| @@ -58,9 +58,9 @@ | |||
| 58 | 58 | ||
| 59 | #include "des_locl.h" | 59 | #include "des_locl.h" |
| 60 | 60 | ||
| 61 | void des_string_to_key(const char *str, des_cblock *key) | 61 | void DES_string_to_key(const char *str, DES_cblock *key) |
| 62 | { | 62 | { |
| 63 | des_key_schedule ks; | 63 | DES_key_schedule ks; |
| 64 | int i,length; | 64 | int i,length; |
| 65 | register unsigned char j; | 65 | register unsigned char j; |
| 66 | 66 | ||
| @@ -85,16 +85,22 @@ void des_string_to_key(const char *str, des_cblock *key) | |||
| 85 | } | 85 | } |
| 86 | } | 86 | } |
| 87 | #endif | 87 | #endif |
| 88 | des_set_odd_parity(key); | 88 | DES_set_odd_parity(key); |
| 89 | des_set_key_unchecked(key,ks); | 89 | #ifdef EXPERIMENTAL_STR_TO_STRONG_KEY |
| 90 | des_cbc_cksum((const unsigned char*)str,key,length,ks,key); | 90 | if(DES_is_weak_key(key)) |
| 91 | memset(ks,0,sizeof(ks)); | 91 | (*key)[7] ^= 0xF0; |
| 92 | des_set_odd_parity(key); | 92 | DES_set_key(key,&ks); |
| 93 | #else | ||
| 94 | DES_set_key_unchecked(key,&ks); | ||
| 95 | #endif | ||
| 96 | DES_cbc_cksum((const unsigned char*)str,key,length,&ks,key); | ||
| 97 | memset(&ks,0,sizeof(ks)); | ||
| 98 | DES_set_odd_parity(key); | ||
| 93 | } | 99 | } |
| 94 | 100 | ||
| 95 | void des_string_to_2keys(const char *str, des_cblock *key1, des_cblock *key2) | 101 | void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2) |
| 96 | { | 102 | { |
| 97 | des_key_schedule ks; | 103 | DES_key_schedule ks; |
| 98 | int i,length; | 104 | int i,length; |
| 99 | register unsigned char j; | 105 | register unsigned char j; |
| 100 | 106 | ||
| @@ -143,13 +149,25 @@ void des_string_to_2keys(const char *str, des_cblock *key1, des_cblock *key2) | |||
| 143 | } | 149 | } |
| 144 | if (length <= 8) memcpy(key2,key1,8); | 150 | if (length <= 8) memcpy(key2,key1,8); |
| 145 | #endif | 151 | #endif |
| 146 | des_set_odd_parity(key1); | 152 | DES_set_odd_parity(key1); |
| 147 | des_set_odd_parity(key2); | 153 | DES_set_odd_parity(key2); |
| 148 | des_set_key_unchecked(key1,ks); | 154 | #ifdef EXPERIMENTAL_STR_TO_STRONG_KEY |
| 149 | des_cbc_cksum((const unsigned char*)str,key1,length,ks,key1); | 155 | if(DES_is_weak_key(key1)) |
| 150 | des_set_key_unchecked(key2,ks); | 156 | (*key1)[7] ^= 0xF0; |
| 151 | des_cbc_cksum((const unsigned char*)str,key2,length,ks,key2); | 157 | DES_set_key(key1,&ks); |
| 152 | memset(ks,0,sizeof(ks)); | 158 | #else |
| 153 | des_set_odd_parity(key1); | 159 | DES_set_key_unchecked(key1,&ks); |
| 154 | des_set_odd_parity(key2); | 160 | #endif |
| 161 | DES_cbc_cksum((const unsigned char*)str,key1,length,&ks,key1); | ||
| 162 | #ifdef EXPERIMENTAL_STR_TO_STRONG_KEY | ||
| 163 | if(DES_is_weak_key(key2)) | ||
| 164 | (*key2)[7] ^= 0xF0; | ||
| 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); | ||
| 155 | } | 173 | } |
