summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/e_des3.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/evp/e_des3.c')
-rw-r--r--src/lib/libcrypto/evp/e_des3.c300
1 files changed, 151 insertions, 149 deletions
diff --git a/src/lib/libcrypto/evp/e_des3.c b/src/lib/libcrypto/evp/e_des3.c
index 8d7b7de292..ddb069dda5 100644
--- a/src/lib/libcrypto/evp/e_des3.c
+++ b/src/lib/libcrypto/evp/e_des3.c
@@ -5,21 +5,21 @@
5 * This package is an SSL implementation written 5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com). 6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL. 7 * The implementation was written so as to conform with Netscapes SSL.
8 * 8 *
9 * This library is free for commercial and non-commercial use as long as 9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions 10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA, 11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation 12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms 13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com). 14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 * 15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in 16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed. 17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution 18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used. 19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or 20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package. 21 * in documentation (online or textual) provided with the package.
22 * 22 *
23 * Redistribution and use in source and binary forms, with or without 23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions 24 * modification, are permitted provided that the following conditions
25 * are met: 25 * are met:
@@ -34,10 +34,10 @@
34 * Eric Young (eay@cryptsoft.com)" 34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library 35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-). 36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from 37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement: 38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 * 40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE. 51 * SUCH DAMAGE.
52 * 52 *
53 * The licence and distribution terms for any publically available version or 53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be 54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence 55 * copied and put under another distribution licence
@@ -68,150 +68,147 @@
68#ifndef OPENSSL_FIPS 68#ifndef OPENSSL_FIPS
69 69
70static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 70static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
71 const unsigned char *iv,int enc); 71 const unsigned char *iv, int enc);
72 72
73static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 73static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
74 const unsigned char *iv,int enc); 74 const unsigned char *iv, int enc);
75 75
76static int des3_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr); 76static int des3_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr);
77 77
78typedef struct 78typedef struct {
79 {
80 DES_key_schedule ks1;/* key schedule */ 79 DES_key_schedule ks1;/* key schedule */
81 DES_key_schedule ks2;/* key schedule (for ede) */ 80 DES_key_schedule ks2;/* key schedule (for ede) */
82 DES_key_schedule ks3;/* key schedule (for ede3) */ 81 DES_key_schedule ks3;/* key schedule (for ede3) */
83 } DES_EDE_KEY; 82} DES_EDE_KEY;
84 83
85#define data(ctx) ((DES_EDE_KEY *)(ctx)->cipher_data) 84#define data(ctx) ((DES_EDE_KEY *)(ctx)->cipher_data)
86 85
87/* Because of various casts and different args can't use IMPLEMENT_BLOCK_CIPHER */ 86/* Because of various casts and different args can't use IMPLEMENT_BLOCK_CIPHER */
88 87
89static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 88static int
90 const unsigned char *in, size_t inl) 89des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
90 const unsigned char *in, size_t inl)
91{ 91{
92 BLOCK_CIPHER_ecb_loop() 92 BLOCK_CIPHER_ecb_loop()
93 DES_ecb3_encrypt((const_DES_cblock *)(in + i), 93 DES_ecb3_encrypt((const_DES_cblock *)(in + i), (DES_cblock *)(out + i),
94 (DES_cblock *)(out + i), 94 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, ctx->encrypt);
95 &data(ctx)->ks1, &data(ctx)->ks2,
96 &data(ctx)->ks3,
97 ctx->encrypt);
98 return 1; 95 return 1;
99} 96}
100 97
101static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 98static int
102 const unsigned char *in, size_t inl) 99des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
100 const unsigned char *in, size_t inl)
103{ 101{
104 while (inl>=EVP_MAXCHUNK) 102 while (inl >= EVP_MAXCHUNK) {
105 {
106 DES_ede3_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK, 103 DES_ede3_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK,
107 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 104 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
108 (DES_cblock *)ctx->iv, &ctx->num); 105 (DES_cblock *)ctx->iv, &ctx->num);
109 inl-=EVP_MAXCHUNK; 106 inl -= EVP_MAXCHUNK;
110 in +=EVP_MAXCHUNK; 107 in += EVP_MAXCHUNK;
111 out+=EVP_MAXCHUNK; 108 out += EVP_MAXCHUNK;
112 } 109 }
113 if (inl) 110 if (inl)
114 DES_ede3_ofb64_encrypt(in, out, (long)inl, 111 DES_ede3_ofb64_encrypt(in, out, (long)inl,
115 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 112 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
116 (DES_cblock *)ctx->iv, &ctx->num); 113 (DES_cblock *)ctx->iv, &ctx->num);
117 114
118 return 1; 115 return 1;
119} 116}
120 117
121static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 118static int
122 const unsigned char *in, size_t inl) 119des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
120 const unsigned char *in, size_t inl)
123{ 121{
124#ifdef KSSL_DEBUG 122#ifdef KSSL_DEBUG
125 { 123 {
126 int i; 124 int i;
127 char *cp; 125 char *cp;
128 printf("des_ede_cbc_cipher(ctx=%lx, buflen=%d)\n", ctx, ctx->buf_len); 126 printf("des_ede_cbc_cipher(ctx=%lx, buflen=%d)\n", ctx, ctx->buf_len);
129 printf("\t iv= "); 127 printf("\t iv= ");
130 for(i=0;i<8;i++) 128 for (i = 0; i < 8; i++)
131 printf("%02X",ctx->iv[i]); 129 printf("%02X",ctx->iv[i]);
132 printf("\n"); 130 printf("\n");
133 } 131 }
134#endif /* KSSL_DEBUG */ 132#endif /* KSSL_DEBUG */
135 while (inl>=EVP_MAXCHUNK) 133 while (inl >= EVP_MAXCHUNK) {
136 {
137 DES_ede3_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, 134 DES_ede3_cbc_encrypt(in, out, (long)EVP_MAXCHUNK,
138 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 135 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
139 (DES_cblock *)ctx->iv, ctx->encrypt); 136 (DES_cblock *)ctx->iv, ctx->encrypt);
140 inl-=EVP_MAXCHUNK; 137 inl -= EVP_MAXCHUNK;
141 in +=EVP_MAXCHUNK; 138 in += EVP_MAXCHUNK;
142 out+=EVP_MAXCHUNK; 139 out += EVP_MAXCHUNK;
143 } 140 }
144 if (inl) 141 if (inl)
145 DES_ede3_cbc_encrypt(in, out, (long)inl, 142 DES_ede3_cbc_encrypt(in, out, (long)inl,
146 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 143 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
147 (DES_cblock *)ctx->iv, ctx->encrypt); 144 (DES_cblock *)ctx->iv, ctx->encrypt);
148 return 1; 145 return 1;
149} 146}
150 147
151static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 148static int
152 const unsigned char *in, size_t inl) 149des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
150 const unsigned char *in, size_t inl)
153{ 151{
154 while (inl>=EVP_MAXCHUNK) 152 while (inl >= EVP_MAXCHUNK) {
155 { 153 DES_ede3_cfb64_encrypt(in, out, (long)EVP_MAXCHUNK,
156 DES_ede3_cfb64_encrypt(in, out, (long)EVP_MAXCHUNK, 154 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
157 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 155 (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt);
158 (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); 156 inl -= EVP_MAXCHUNK;
159 inl-=EVP_MAXCHUNK; 157 in += EVP_MAXCHUNK;
160 in +=EVP_MAXCHUNK; 158 out += EVP_MAXCHUNK;
161 out+=EVP_MAXCHUNK; 159 }
162 }
163 if (inl) 160 if (inl)
164 DES_ede3_cfb64_encrypt(in, out, (long)inl, 161 DES_ede3_cfb64_encrypt(in, out, (long)inl,
165 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, 162 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
166 (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); 163 (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt);
167 return 1; 164 return 1;
168} 165}
169 166
170/* Although we have a CFB-r implementation for 3-DES, it doesn't pack the right 167/* Although we have a CFB-r implementation for 3-DES, it doesn't pack the right
171 way, so wrap it here */ 168 way, so wrap it here */
172static int des_ede3_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 169static int
173 const unsigned char *in, size_t inl) 170des_ede3_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
174 { 171 const unsigned char *in, size_t inl)
175 size_t n; 172{
176 unsigned char c[1],d[1]; 173 size_t n;
174 unsigned char c[1], d[1];
177 175
178 for(n=0 ; n < inl ; ++n) 176 for (n = 0; n < inl; ++n) {
179 { 177 c[0] = (in[n/8]&(1 << (7 - n % 8))) ? 0x80 : 0;
180 c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0; 178 DES_ede3_cfb_encrypt(c, d, 1, 1,
181 DES_ede3_cfb_encrypt(c,d,1,1, 179 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
182 &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3, 180 (DES_cblock *)ctx->iv, ctx->encrypt);
183 (DES_cblock *)ctx->iv,ctx->encrypt); 181 out[n / 8] = (out[n / 8] & ~(0x80 >> (unsigned int)(n % 8))) |
184 out[n/8]=(out[n/8]&~(0x80 >> (unsigned int)(n%8))) | 182 ((d[0] & 0x80) >> (unsigned int)(n % 8));
185 ((d[0]&0x80) >> (unsigned int)(n%8));
186 } 183 }
187 184
188 return 1; 185 return 1;
189 } 186}
190 187
191static int des_ede3_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 188static int
192 const unsigned char *in, size_t inl) 189des_ede3_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
193 { 190 const unsigned char *in, size_t inl)
194 while (inl>=EVP_MAXCHUNK) 191{
195 { 192 while (inl >= EVP_MAXCHUNK) {
196 DES_ede3_cfb_encrypt(in,out,8,(long)EVP_MAXCHUNK, 193 DES_ede3_cfb_encrypt(in, out, 8, (long)EVP_MAXCHUNK,
197 &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3, 194 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
198 (DES_cblock *)ctx->iv,ctx->encrypt); 195 (DES_cblock *)ctx->iv, ctx->encrypt);
199 inl-=EVP_MAXCHUNK; 196 inl -= EVP_MAXCHUNK;
200 in +=EVP_MAXCHUNK; 197 in += EVP_MAXCHUNK;
201 out+=EVP_MAXCHUNK; 198 out += EVP_MAXCHUNK;
202 } 199 }
203 if (inl) 200 if (inl)
204 DES_ede3_cfb_encrypt(in,out,8,(long)inl, 201 DES_ede3_cfb_encrypt(in, out, 8, (long)inl,
205 &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3, 202 &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3,
206 (DES_cblock *)ctx->iv,ctx->encrypt); 203 (DES_cblock *)ctx->iv, ctx->encrypt);
207 return 1; 204 return 1;
208 } 205}
209 206
210BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64, 207BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64,
211 EVP_CIPH_RAND_KEY, des_ede_init_key, NULL, 208 EVP_CIPH_RAND_KEY, des_ede_init_key, NULL,
212 EVP_CIPHER_set_asn1_iv, 209 EVP_CIPHER_set_asn1_iv,
213 EVP_CIPHER_get_asn1_iv, 210 EVP_CIPHER_get_asn1_iv,
214 des3_ctrl) 211 des3_ctrl)
215 212
216#define des_ede3_cfb64_cipher des_ede_cfb64_cipher 213#define des_ede3_cfb64_cipher des_ede_cfb64_cipher
217#define des_ede3_ofb_cipher des_ede_ofb_cipher 214#define des_ede3_ofb_cipher des_ede_ofb_cipher
@@ -219,75 +216,78 @@ BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64,
219#define des_ede3_ecb_cipher des_ede_ecb_cipher 216#define des_ede3_ecb_cipher des_ede_ecb_cipher
220 217
221BLOCK_CIPHER_defs(des_ede3, DES_EDE_KEY, NID_des_ede3, 8, 24, 8, 64, 218BLOCK_CIPHER_defs(des_ede3, DES_EDE_KEY, NID_des_ede3, 8, 24, 8, 64,
222 EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL, 219 EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL,
223 EVP_CIPHER_set_asn1_iv, 220 EVP_CIPHER_set_asn1_iv,
224 EVP_CIPHER_get_asn1_iv, 221 EVP_CIPHER_get_asn1_iv,
225 des3_ctrl) 222 des3_ctrl)
226
227BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,1,
228 EVP_CIPH_RAND_KEY, des_ede3_init_key,NULL,
229 EVP_CIPHER_set_asn1_iv,
230 EVP_CIPHER_get_asn1_iv,
231 des3_ctrl)
232
233BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,8,
234 EVP_CIPH_RAND_KEY, des_ede3_init_key,NULL,
235 EVP_CIPHER_set_asn1_iv,
236 EVP_CIPHER_get_asn1_iv,
237 des3_ctrl)
238 223
239static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 224BLOCK_CIPHER_def_cfb(des_ede3, DES_EDE_KEY, NID_des_ede3, 24, 8, 1,
240 const unsigned char *iv, int enc) 225 EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL,
241 { 226 EVP_CIPHER_set_asn1_iv,
227 EVP_CIPHER_get_asn1_iv,
228 des3_ctrl)
229
230BLOCK_CIPHER_def_cfb(des_ede3, DES_EDE_KEY, NID_des_ede3, 24, 8, 8,
231 EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL,
232 EVP_CIPHER_set_asn1_iv,
233 EVP_CIPHER_get_asn1_iv,
234 des3_ctrl)
235
236static int
237des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
238 const unsigned char *iv, int enc)
239{
242 DES_cblock *deskey = (DES_cblock *)key; 240 DES_cblock *deskey = (DES_cblock *)key;
241
243#ifdef EVP_CHECK_DES_KEY 242#ifdef EVP_CHECK_DES_KEY
244 if (DES_set_key_checked(&deskey[0],&data(ctx)->ks1) 243 if (DES_set_key_checked(&deskey[0], &data(ctx)->ks1)
245 !! DES_set_key_checked(&deskey[1],&data(ctx)->ks2)) 244 !! DES_set_key_checked(&deskey[1], &data(ctx)->ks2))
246 return 0; 245 return 0;
247#else 246#else
248 DES_set_key_unchecked(&deskey[0],&data(ctx)->ks1); 247 DES_set_key_unchecked(&deskey[0], &data(ctx)->ks1);
249 DES_set_key_unchecked(&deskey[1],&data(ctx)->ks2); 248 DES_set_key_unchecked(&deskey[1], &data(ctx)->ks2);
250#endif 249#endif
251 memcpy(&data(ctx)->ks3,&data(ctx)->ks1, 250 memcpy(&data(ctx)->ks3, &data(ctx)->ks1,
252 sizeof(data(ctx)->ks1)); 251 sizeof(data(ctx)->ks1));
253 return 1; 252 return 1;
254 } 253}
255 254
256static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 255static int
257 const unsigned char *iv, int enc) 256des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
258 { 257 const unsigned char *iv, int enc)
258{
259 DES_cblock *deskey = (DES_cblock *)key; 259 DES_cblock *deskey = (DES_cblock *)key;
260
260#ifdef KSSL_DEBUG 261#ifdef KSSL_DEBUG
261 { 262 {
262 int i; 263 int i;
263 printf("des_ede3_init_key(ctx=%lx)\n", ctx); 264 printf("des_ede3_init_key(ctx=%lx)\n", ctx);
264 printf("\tKEY= "); 265 printf("\tKEY= ");
265 for(i=0;i<24;i++) printf("%02X",key[i]); printf("\n"); 266 for(i=0;i<24;i++) printf("%02X",key[i]); printf("\n");
266 printf("\t IV= "); 267 printf("\t IV= ");
267 for(i=0;i<8;i++) printf("%02X",iv[i]); printf("\n"); 268 for(i=0;i<8;i++) printf("%02X",iv[i]); printf("\n");
268 } 269 }
269#endif /* KSSL_DEBUG */ 270#endif /* KSSL_DEBUG */
270 271
271#ifdef EVP_CHECK_DES_KEY 272#ifdef EVP_CHECK_DES_KEY
272 if (DES_set_key_checked(&deskey[0],&data(ctx)->ks1) 273 if (DES_set_key_checked(&deskey[0], &data(ctx)->ks1) ||
273 || DES_set_key_checked(&deskey[1],&data(ctx)->ks2) 274 DES_set_key_checked(&deskey[1], &data(ctx)->ks2) ||
274 || DES_set_key_checked(&deskey[2],&data(ctx)->ks3)) 275 DES_set_key_checked(&deskey[2], &data(ctx)->ks3))
275 return 0; 276 return 0;
276#else 277#else
277 DES_set_key_unchecked(&deskey[0],&data(ctx)->ks1); 278 DES_set_key_unchecked(&deskey[0], &data(ctx)->ks1);
278 DES_set_key_unchecked(&deskey[1],&data(ctx)->ks2); 279 DES_set_key_unchecked(&deskey[1], &data(ctx)->ks2);
279 DES_set_key_unchecked(&deskey[2],&data(ctx)->ks3); 280 DES_set_key_unchecked(&deskey[2], &data(ctx)->ks3);
280#endif 281#endif
281 return 1; 282 return 1;
282 } 283}
283
284static int des3_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
285 {
286 284
285static int
286des3_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
287{
287 DES_cblock *deskey = ptr; 288 DES_cblock *deskey = ptr;
288 289
289 switch(type) 290 switch (type) {
290 {
291 case EVP_CTRL_RAND_KEY: 291 case EVP_CTRL_RAND_KEY:
292 if (RAND_bytes(ptr, c->key_len) <= 0) 292 if (RAND_bytes(ptr, c->key_len) <= 0)
293 return 0; 293 return 0;
@@ -300,15 +300,17 @@ static int des3_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
300 300
301 default: 301 default:
302 return -1; 302 return -1;
303 }
304 } 303 }
304}
305 305
306const EVP_CIPHER *EVP_des_ede(void) 306const EVP_CIPHER *
307EVP_des_ede(void)
307{ 308{
308 return &des_ede_ecb; 309 return &des_ede_ecb;
309} 310}
310 311
311const EVP_CIPHER *EVP_des_ede3(void) 312const EVP_CIPHER *
313EVP_des_ede3(void)
312{ 314{
313 return &des_ede3_ecb; 315 return &des_ede3_ecb;
314} 316}