summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorjsing <>2022-09-04 08:18:07 +0000
committerjsing <>2022-09-04 08:18:07 +0000
commit2bca87d03ddc64d23589b89c1d3668c43ae06bcb (patch)
treeda75a633abc6924aa21857b55102b022e915b424 /src/lib
parent02944a9859a546d84ce056fb2c8df1832dba3fc4 (diff)
downloadopenbsd-2bca87d03ddc64d23589b89c1d3668c43ae06bcb.tar.gz
openbsd-2bca87d03ddc64d23589b89c1d3668c43ae06bcb.tar.bz2
openbsd-2bca87d03ddc64d23589b89c1d3668c43ae06bcb.zip
Mechanically expand BLOCK_CIPHER_* ciphers.
This includes the wonderful BLOCK_CIPHER_ecb_loop - a for loop in a macro. No change in generated assembly.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/evp/e_des.c162
1 files changed, 145 insertions, 17 deletions
diff --git a/src/lib/libcrypto/evp/e_des.c b/src/lib/libcrypto/evp/e_des.c
index 118e59695f..1064c0b7cc 100644
--- a/src/lib/libcrypto/evp/e_des.c
+++ b/src/lib/libcrypto/evp/e_des.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: e_des.c,v 1.15 2022/09/03 20:12:24 jsing Exp $ */ 1/* $OpenBSD: e_des.c,v 1.16 2022/09/04 08:18:07 jsing Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -76,7 +76,16 @@ static int
76des_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 76des_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
77 const unsigned char *in, size_t inl) 77 const unsigned char *in, size_t inl)
78{ 78{
79 BLOCK_CIPHER_ecb_loop() 79 size_t i, bl;
80
81 bl = ctx->cipher->block_size;
82
83 if (inl < bl)
84 return 1;
85
86 inl -= bl;
87
88 for (i = 0; i <= inl; i += bl)
80 DES_ecb_encrypt((DES_cblock *)(in + i), (DES_cblock *)(out + i), 89 DES_ecb_encrypt((DES_cblock *)(in + i), (DES_cblock *)(out + i),
81 ctx->cipher_data, ctx->encrypt); 90 ctx->cipher_data, ctx->encrypt);
82 return 1; 91 return 1;
@@ -181,21 +190,140 @@ des_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
181 return 1; 190 return 1;
182} 191}
183 192
184BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, 193static const EVP_CIPHER des_cbc = {
185 EVP_CIPH_RAND_KEY, des_init_key, NULL, 194 .nid = NID_des_cbc,
186 EVP_CIPHER_set_asn1_iv, 195 .block_size = 8,
187 EVP_CIPHER_get_asn1_iv, 196 .key_len = 8,
188 des_ctrl) 197 .iv_len = 8,
189 198 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CBC_MODE,
190BLOCK_CIPHER_def_cfb(des, DES_key_schedule, NID_des, 8, 8, 1, 199 .init = des_init_key,
191 EVP_CIPH_RAND_KEY, des_init_key, NULL, 200 .do_cipher = des_cbc_cipher,
192 EVP_CIPHER_set_asn1_iv, 201 .cleanup = NULL,
193 EVP_CIPHER_get_asn1_iv, des_ctrl) 202 .ctx_size = sizeof(DES_key_schedule),
194 203 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
195BLOCK_CIPHER_def_cfb(des, DES_key_schedule, NID_des, 8, 8, 8, 204 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
196 EVP_CIPH_RAND_KEY, des_init_key, NULL, 205 .ctrl = des_ctrl,
197 EVP_CIPHER_set_asn1_iv, 206 .app_data = NULL,
198 EVP_CIPHER_get_asn1_iv, des_ctrl) 207};
208
209const EVP_CIPHER *
210EVP_des_cbc(void)
211{
212 return &des_cbc;
213}
214
215static const EVP_CIPHER des_cfb64 = {
216 .nid = NID_des_cfb64,
217 .block_size = 1,
218 .key_len = 8,
219 .iv_len = 8,
220 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CFB_MODE,
221 .init = des_init_key,
222 .do_cipher = des_cfb64_cipher,
223 .cleanup = NULL,
224 .ctx_size = sizeof(DES_key_schedule),
225 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
226 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
227 .ctrl = des_ctrl,
228 .app_data = NULL,
229};
230
231const EVP_CIPHER *
232EVP_des_cfb64(void)
233{
234 return &des_cfb64;
235}
236
237static const EVP_CIPHER des_ofb = {
238 .nid = NID_des_ofb64,
239 .block_size = 1,
240 .key_len = 8,
241 .iv_len = 8,
242 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_OFB_MODE,
243 .init = des_init_key,
244 .do_cipher = des_ofb_cipher,
245 .cleanup = NULL,
246 .ctx_size = sizeof(DES_key_schedule),
247 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
248 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
249 .ctrl = des_ctrl,
250 .app_data = NULL,
251};
252
253const EVP_CIPHER *
254EVP_des_ofb(void)
255{
256 return &des_ofb;
257}
258
259static const EVP_CIPHER des_ecb = {
260 .nid = NID_des_ecb,
261 .block_size = 8,
262 .key_len = 8,
263 .iv_len = 0,
264 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_ECB_MODE,
265 .init = des_init_key,
266 .do_cipher = des_ecb_cipher,
267 .cleanup = NULL,
268 .ctx_size = sizeof(DES_key_schedule),
269 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
270 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
271 .ctrl = des_ctrl,
272 .app_data = NULL,
273};
274
275const EVP_CIPHER *
276EVP_des_ecb(void)
277{
278 return &des_ecb;
279}
280
281
282static const EVP_CIPHER des_cfb1 = {
283 .nid = NID_des_cfb1,
284 .block_size = 1,
285 .key_len = 8,
286 .iv_len = 8,
287 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CFB_MODE,
288 .init = des_init_key,
289 .do_cipher = des_cfb1_cipher,
290 .cleanup = NULL,
291 .ctx_size = sizeof(DES_key_schedule),
292 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
293 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
294 .ctrl = des_ctrl,
295 .app_data = NULL,
296};
297
298const EVP_CIPHER *
299EVP_des_cfb1(void)
300{
301 return &des_cfb1;
302}
303
304
305static const EVP_CIPHER des_cfb8 = {
306 .nid = NID_des_cfb8,
307 .block_size = 1,
308 .key_len = 8,
309 .iv_len = 8,
310 .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_CFB_MODE,
311 .init = des_init_key,
312 .do_cipher = des_cfb8_cipher,
313 .cleanup = NULL,
314 .ctx_size = sizeof(DES_key_schedule),
315 .set_asn1_parameters = EVP_CIPHER_set_asn1_iv,
316 .get_asn1_parameters = EVP_CIPHER_get_asn1_iv,
317 .ctrl = des_ctrl,
318 .app_data = NULL,
319};
320
321const EVP_CIPHER *
322EVP_des_cfb8(void)
323{
324 return &des_cfb8;
325}
326
199 327
200static int 328static int
201des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 329des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,