diff options
author | beck <> | 2002-05-15 02:29:21 +0000 |
---|---|---|
committer | beck <> | 2002-05-15 02:29:21 +0000 |
commit | b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9 (patch) | |
tree | fa27cf82a1250b64ed3bf5f4a18c7354d470bbcc /src/lib/libcrypto/des/str2key.c | |
parent | e471e1ea98d673597b182ea85f29e30c97cd08b5 (diff) | |
download | openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.gz openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.bz2 openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.zip |
OpenSSL 0.9.7 stable 2002 05 08 merge
Diffstat (limited to 'src/lib/libcrypto/des/str2key.c')
-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 | } |