diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/evp/e_des.c | 162 |
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 | |||
| 76 | des_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, | 76 | des_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 | ||
| 184 | BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, | 193 | static 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, | |
| 190 | BLOCK_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, | |
| 195 | BLOCK_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 | |||
| 209 | const EVP_CIPHER * | ||
| 210 | EVP_des_cbc(void) | ||
| 211 | { | ||
| 212 | return &des_cbc; | ||
| 213 | } | ||
| 214 | |||
| 215 | static 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 | |||
| 231 | const EVP_CIPHER * | ||
| 232 | EVP_des_cfb64(void) | ||
| 233 | { | ||
| 234 | return &des_cfb64; | ||
| 235 | } | ||
| 236 | |||
| 237 | static 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 | |||
| 253 | const EVP_CIPHER * | ||
| 254 | EVP_des_ofb(void) | ||
| 255 | { | ||
| 256 | return &des_ofb; | ||
| 257 | } | ||
| 258 | |||
| 259 | static 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 | |||
| 275 | const EVP_CIPHER * | ||
| 276 | EVP_des_ecb(void) | ||
| 277 | { | ||
| 278 | return &des_ecb; | ||
| 279 | } | ||
| 280 | |||
| 281 | |||
| 282 | static 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 | |||
| 298 | const EVP_CIPHER * | ||
| 299 | EVP_des_cfb1(void) | ||
| 300 | { | ||
| 301 | return &des_cfb1; | ||
| 302 | } | ||
| 303 | |||
| 304 | |||
| 305 | static 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 | |||
| 321 | const EVP_CIPHER * | ||
| 322 | EVP_des_cfb8(void) | ||
| 323 | { | ||
| 324 | return &des_cfb8; | ||
| 325 | } | ||
| 326 | |||
| 199 | 327 | ||
| 200 | static int | 328 | static int |
| 201 | des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | 329 | des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
