diff options
Diffstat (limited to 'src/lib/libcrypto/evp/e_des.c')
-rw-r--r-- | src/lib/libcrypto/evp/e_des.c | 36 |
1 files changed, 7 insertions, 29 deletions
diff --git a/src/lib/libcrypto/evp/e_des.c b/src/lib/libcrypto/evp/e_des.c index 856323648c..46e2899825 100644 --- a/src/lib/libcrypto/evp/e_des.c +++ b/src/lib/libcrypto/evp/e_des.c | |||
@@ -63,11 +63,9 @@ | |||
63 | #include <openssl/objects.h> | 63 | #include <openssl/objects.h> |
64 | #include "evp_locl.h" | 64 | #include "evp_locl.h" |
65 | #include <openssl/des.h> | 65 | #include <openssl/des.h> |
66 | #include <openssl/rand.h> | ||
67 | 66 | ||
68 | static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | 67 | static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
69 | const unsigned char *iv, int enc); | 68 | const unsigned char *iv, int enc); |
70 | static int des_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr); | ||
71 | 69 | ||
72 | /* Because of various casts and different names can't use IMPLEMENT_BLOCK_CIPHER */ | 70 | /* Because of various casts and different names can't use IMPLEMENT_BLOCK_CIPHER */ |
73 | 71 | ||
@@ -129,48 +127,28 @@ static int des_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | |||
129 | } | 127 | } |
130 | 128 | ||
131 | BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, | 129 | BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, |
132 | EVP_CIPH_RAND_KEY, des_init_key, NULL, | 130 | EVP_CIPH_FLAG_FIPS, des_init_key, NULL, |
133 | EVP_CIPHER_set_asn1_iv, | 131 | EVP_CIPHER_set_asn1_iv, |
134 | EVP_CIPHER_get_asn1_iv, | 132 | EVP_CIPHER_get_asn1_iv, |
135 | des_ctrl) | 133 | NULL) |
136 | 134 | ||
137 | BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,1, | 135 | BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,1, |
138 | EVP_CIPH_RAND_KEY, des_init_key,NULL, | 136 | EVP_CIPH_FLAG_FIPS,des_init_key,NULL, |
139 | EVP_CIPHER_set_asn1_iv, | 137 | EVP_CIPHER_set_asn1_iv, |
140 | EVP_CIPHER_get_asn1_iv,des_ctrl) | 138 | EVP_CIPHER_get_asn1_iv,NULL) |
141 | 139 | ||
142 | BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,8, | 140 | BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,8, |
143 | EVP_CIPH_RAND_KEY,des_init_key,NULL, | 141 | EVP_CIPH_FLAG_FIPS,des_init_key,NULL, |
144 | EVP_CIPHER_set_asn1_iv, | 142 | EVP_CIPHER_set_asn1_iv, |
145 | EVP_CIPHER_get_asn1_iv,des_ctrl) | 143 | EVP_CIPHER_get_asn1_iv,NULL) |
146 | 144 | ||
147 | static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | 145 | static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
148 | const unsigned char *iv, int enc) | 146 | const unsigned char *iv, int enc) |
149 | { | 147 | { |
150 | DES_cblock *deskey = (DES_cblock *)key; | 148 | DES_cblock *deskey = (DES_cblock *)key; |
151 | #ifdef EVP_CHECK_DES_KEY | 149 | |
152 | if(DES_set_key_checked(deskey,ctx->cipher_data) != 0) | ||
153 | return 0; | ||
154 | #else | ||
155 | DES_set_key_unchecked(deskey,ctx->cipher_data); | 150 | DES_set_key_unchecked(deskey,ctx->cipher_data); |
156 | #endif | ||
157 | return 1; | 151 | return 1; |
158 | } | 152 | } |
159 | 153 | ||
160 | static int des_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) | ||
161 | { | ||
162 | |||
163 | switch(type) | ||
164 | { | ||
165 | case EVP_CTRL_RAND_KEY: | ||
166 | if (RAND_bytes(ptr, 8) <= 0) | ||
167 | return 0; | ||
168 | DES_set_odd_parity((DES_cblock *)ptr); | ||
169 | return 1; | ||
170 | |||
171 | default: | ||
172 | return -1; | ||
173 | } | ||
174 | } | ||
175 | |||
176 | #endif | 154 | #endif |