summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/des/str2key.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/des/str2key.c')
-rw-r--r--src/lib/libcrypto/des/str2key.c54
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
61void des_string_to_key(const char *str, des_cblock *key) 61void 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
95void des_string_to_2keys(const char *str, des_cblock *key1, des_cblock *key2) 101void 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 }