summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/e_des.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/evp/e_des.c')
-rw-r--r--src/lib/libcrypto/evp/e_des.c36
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
68static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 67static 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);
70static 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
131BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, 129BLOCK_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
137BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,1, 135BLOCK_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
142BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,8, 140BLOCK_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
147static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 145static 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
160static 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