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 | } |