summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/e_des.c
diff options
context:
space:
mode:
authordjm <>2008-09-06 12:17:54 +0000
committerdjm <>2008-09-06 12:17:54 +0000
commit38ce604e3cc97706b876b0525ddff0121115456d (patch)
tree7ccc28afe1789ea3dbedf72365f955d5b8e105b5 /src/lib/libcrypto/evp/e_des.c
parent12867252827c8efaa8ddd1fa3b3d6e321e2bcdef (diff)
downloadopenbsd-38ce604e3cc97706b876b0525ddff0121115456d.tar.gz
openbsd-38ce604e3cc97706b876b0525ddff0121115456d.tar.bz2
openbsd-38ce604e3cc97706b876b0525ddff0121115456d.zip
resolve conflicts
Diffstat (limited to 'src/lib/libcrypto/evp/e_des.c')
-rw-r--r--src/lib/libcrypto/evp/e_des.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/lib/libcrypto/evp/e_des.c b/src/lib/libcrypto/evp/e_des.c
index 46e2899825..856323648c 100644
--- a/src/lib/libcrypto/evp/e_des.c
+++ b/src/lib/libcrypto/evp/e_des.c
@@ -63,9 +63,11 @@
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>
66 67
67static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 68static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
68 const unsigned char *iv, int enc); 69 const unsigned char *iv, int enc);
70static int des_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr);
69 71
70/* Because of various casts and different names can't use IMPLEMENT_BLOCK_CIPHER */ 72/* Because of various casts and different names can't use IMPLEMENT_BLOCK_CIPHER */
71 73
@@ -127,28 +129,48 @@ static int des_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
127 } 129 }
128 130
129BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, 131BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64,
130 EVP_CIPH_FLAG_FIPS, des_init_key, NULL, 132 EVP_CIPH_RAND_KEY, des_init_key, NULL,
131 EVP_CIPHER_set_asn1_iv, 133 EVP_CIPHER_set_asn1_iv,
132 EVP_CIPHER_get_asn1_iv, 134 EVP_CIPHER_get_asn1_iv,
133 NULL) 135 des_ctrl)
134 136
135BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,1, 137BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,1,
136 EVP_CIPH_FLAG_FIPS,des_init_key,NULL, 138 EVP_CIPH_RAND_KEY, des_init_key,NULL,
137 EVP_CIPHER_set_asn1_iv, 139 EVP_CIPHER_set_asn1_iv,
138 EVP_CIPHER_get_asn1_iv,NULL) 140 EVP_CIPHER_get_asn1_iv,des_ctrl)
139 141
140BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,8, 142BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,8,
141 EVP_CIPH_FLAG_FIPS,des_init_key,NULL, 143 EVP_CIPH_RAND_KEY,des_init_key,NULL,
142 EVP_CIPHER_set_asn1_iv, 144 EVP_CIPHER_set_asn1_iv,
143 EVP_CIPHER_get_asn1_iv,NULL) 145 EVP_CIPHER_get_asn1_iv,des_ctrl)
144 146
145static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 147static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
146 const unsigned char *iv, int enc) 148 const unsigned char *iv, int enc)
147 { 149 {
148 DES_cblock *deskey = (DES_cblock *)key; 150 DES_cblock *deskey = (DES_cblock *)key;
149 151#ifdef EVP_CHECK_DES_KEY
152 if(DES_set_key_checked(deskey,ctx->cipher_data) != 0)
153 return 0;
154#else
150 DES_set_key_unchecked(deskey,ctx->cipher_data); 155 DES_set_key_unchecked(deskey,ctx->cipher_data);
156#endif
151 return 1; 157 return 1;
152 } 158 }
153 159
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
154#endif 176#endif