1 /* 2 * Copyright 2001-2024 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the Apache License 2.0 (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 /* 11 * This file uses the low level AES functions (which are deprecated for 12 * non-internal use) in order to implement the EVP AES ciphers. 13 */ 14 #include "internal/deprecated.h" 15 16 #include <string.h> 17 #include <assert.h> 18 #include <openssl/opensslconf.h> 19 #include <openssl/crypto.h> 20 #include <openssl/evp.h> 21 #include <openssl/err.h> 22 #include <openssl/aes.h> 23 #include <openssl/rand.h> 24 #include <openssl/cmac.h> 25 #include "crypto/evp.h" 26 #include "internal/cryptlib.h" 27 #include "crypto/modes.h" 28 #include "crypto/siv.h" 29 #include "crypto/aes_platform.h" 30 #include "evp_local.h" 31 32 typedef struct { 33 union { 34 OSSL_UNION_ALIGN; 35 AES_KEY ks; 36 } ks; 37 block128_f block; 38 union { 39 cbc128_f cbc; 40 ctr128_f ctr; 41 } stream; 42 } EVP_AES_KEY; 43 44 typedef struct { 45 union { 46 OSSL_UNION_ALIGN; 47 AES_KEY ks; 48 } ks; /* AES key schedule to use */ 49 int key_set; /* Set if key initialised */ 50 int iv_set; /* Set if an iv is set */ 51 GCM128_CONTEXT gcm; 52 unsigned char *iv; /* Temporary IV store */ 53 int ivlen; /* IV length */ 54 int taglen; 55 int iv_gen; /* It is OK to generate IVs */ 56 int iv_gen_rand; /* No IV was specified, so generate a rand IV */ 57 int tls_aad_len; /* TLS AAD length */ 58 uint64_t tls_enc_records; /* Number of TLS records encrypted */ 59 ctr128_f ctr; 60 } EVP_AES_GCM_CTX; 61 62 typedef struct { 63 union { 64 OSSL_UNION_ALIGN; 65 AES_KEY ks; 66 } ks1, ks2; /* AES key schedules to use */ 67 XTS128_CONTEXT xts; 68 void (*stream) (const unsigned char *in, 69 unsigned char *out, size_t length, 70 const AES_KEY *key1, const AES_KEY *key2, 71 const unsigned char iv[16]); 72 } EVP_AES_XTS_CTX; 73 74 #ifdef FIPS_MODULE 75 static const int allow_insecure_decrypt = 0; 76 #else 77 static const int allow_insecure_decrypt = 1; 78 #endif 79 80 typedef struct { 81 union { 82 OSSL_UNION_ALIGN; 83 AES_KEY ks; 84 } ks; /* AES key schedule to use */ 85 int key_set; /* Set if key initialised */ 86 int iv_set; /* Set if an iv is set */ 87 int tag_set; /* Set if tag is valid */ 88 int len_set; /* Set if message length set */ 89 int L, M; /* L and M parameters from RFC3610 */ 90 int tls_aad_len; /* TLS AAD length */ 91 CCM128_CONTEXT ccm; 92 ccm128_f str; 93 } EVP_AES_CCM_CTX; 94 95 #ifndef OPENSSL_NO_OCB 96 typedef struct { 97 union { 98 OSSL_UNION_ALIGN; 99 AES_KEY ks; 100 } ksenc; /* AES key schedule to use for encryption */ 101 union { 102 OSSL_UNION_ALIGN; 103 AES_KEY ks; 104 } ksdec; /* AES key schedule to use for decryption */ 105 int key_set; /* Set if key initialised */ 106 int iv_set; /* Set if an iv is set */ 107 OCB128_CONTEXT ocb; 108 unsigned char *iv; /* Temporary IV store */ 109 unsigned char tag[16]; 110 unsigned char data_buf[16]; /* Store partial data blocks */ 111 unsigned char aad_buf[16]; /* Store partial AAD blocks */ 112 int data_buf_len; 113 int aad_buf_len; 114 int ivlen; /* IV length */ 115 int taglen; 116 } EVP_AES_OCB_CTX; 117 #endif 118 119 #define MAXBITCHUNK ((size_t)1<<(sizeof(size_t)*8-4)) 120 121 /* increment counter (64-bit int) by 1 */ 122 static void ctr64_inc(unsigned char *counter) 123 { 124 int n = 8; 125 unsigned char c; 126 127 do { 128 --n; 129 c = counter[n]; 130 ++c; 131 counter[n] = c; 132 if (c) 133 return; 134 } while (n); 135 } 136 137 #if defined(AESNI_CAPABLE) 138 # if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) 139 # define AES_GCM_ASM2(gctx) (gctx->gcm.block==(block128_f)aesni_encrypt && \ 140 gctx->gcm.ghash==gcm_ghash_avx) 141 # undef AES_GCM_ASM2 /* minor size optimization */ 142 # endif 143 144 static int aesni_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 145 const unsigned char *iv, int enc) 146 { 147 int ret, mode; 148 EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx); 149 150 mode = EVP_CIPHER_CTX_get_mode(ctx); 151 if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE) 152 && !enc) { 153 ret = aesni_set_decrypt_key(key, 154 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 155 &dat->ks.ks); 156 dat->block = (block128_f) aesni_decrypt; 157 dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? 158 (cbc128_f) aesni_cbc_encrypt : NULL; 159 } else { 160 ret = aesni_set_encrypt_key(key, 161 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 162 &dat->ks.ks); 163 dat->block = (block128_f) aesni_encrypt; 164 if (mode == EVP_CIPH_CBC_MODE) 165 dat->stream.cbc = (cbc128_f) aesni_cbc_encrypt; 166 else if (mode == EVP_CIPH_CTR_MODE) 167 dat->stream.ctr = (ctr128_f) aesni_ctr32_encrypt_blocks; 168 else 169 dat->stream.cbc = NULL; 170 } 171 172 if (ret < 0) { 173 ERR_raise(ERR_LIB_EVP, EVP_R_AES_KEY_SETUP_FAILED); 174 return 0; 175 } 176 177 return 1; 178 } 179 180 static int aesni_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 181 const unsigned char *in, size_t len) 182 { 183 aesni_cbc_encrypt(in, out, len, &EVP_C_DATA(EVP_AES_KEY,ctx)->ks.ks, 184 ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx)); 185 186 return 1; 187 } 188 189 static int aesni_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 190 const unsigned char *in, size_t len) 191 { 192 size_t bl = EVP_CIPHER_CTX_get_block_size(ctx); 193 194 if (len < bl) 195 return 1; 196 197 aesni_ecb_encrypt(in, out, len, &EVP_C_DATA(EVP_AES_KEY,ctx)->ks.ks, 198 EVP_CIPHER_CTX_is_encrypting(ctx)); 199 200 return 1; 201 } 202 203 # define aesni_ofb_cipher aes_ofb_cipher 204 static int aesni_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 205 const unsigned char *in, size_t len); 206 207 # define aesni_cfb_cipher aes_cfb_cipher 208 static int aesni_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 209 const unsigned char *in, size_t len); 210 211 # define aesni_cfb8_cipher aes_cfb8_cipher 212 static int aesni_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 213 const unsigned char *in, size_t len); 214 215 # define aesni_cfb1_cipher aes_cfb1_cipher 216 static int aesni_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 217 const unsigned char *in, size_t len); 218 219 # define aesni_ctr_cipher aes_ctr_cipher 220 static int aesni_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 221 const unsigned char *in, size_t len); 222 223 static int aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 224 const unsigned char *iv, int enc) 225 { 226 EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx); 227 if (!iv && !key) 228 return 1; 229 if (key) { 230 aesni_set_encrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 231 &gctx->ks.ks); 232 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f) aesni_encrypt); 233 gctx->ctr = (ctr128_f) aesni_ctr32_encrypt_blocks; 234 /* 235 * If we have an iv can set it directly, otherwise use saved IV. 236 */ 237 if (iv == NULL && gctx->iv_set) 238 iv = gctx->iv; 239 if (iv) { 240 CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen); 241 gctx->iv_set = 1; 242 } 243 gctx->key_set = 1; 244 } else { 245 /* If key set use IV, otherwise copy */ 246 if (gctx->key_set) 247 CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen); 248 else 249 memcpy(gctx->iv, iv, gctx->ivlen); 250 gctx->iv_set = 1; 251 gctx->iv_gen = 0; 252 } 253 return 1; 254 } 255 256 # define aesni_gcm_cipher aes_gcm_cipher 257 static int aesni_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 258 const unsigned char *in, size_t len); 259 260 static int aesni_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 261 const unsigned char *iv, int enc) 262 { 263 EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx); 264 265 if (!iv && !key) 266 return 1; 267 268 if (key) { 269 /* The key is two half length keys in reality */ 270 const int bytes = EVP_CIPHER_CTX_get_key_length(ctx) / 2; 271 const int bits = bytes * 8; 272 273 /* 274 * Verify that the two keys are different. 275 * 276 * This addresses Rogaway's vulnerability. 277 * See comment in aes_xts_init_key() below. 278 */ 279 if ((!allow_insecure_decrypt || enc) 280 && CRYPTO_memcmp(key, key + bytes, bytes) == 0) { 281 ERR_raise(ERR_LIB_EVP, EVP_R_XTS_DUPLICATED_KEYS); 282 return 0; 283 } 284 285 /* key_len is two AES keys */ 286 if (enc) { 287 aesni_set_encrypt_key(key, bits, &xctx->ks1.ks); 288 xctx->xts.block1 = (block128_f) aesni_encrypt; 289 xctx->stream = aesni_xts_encrypt; 290 } else { 291 aesni_set_decrypt_key(key, bits, &xctx->ks1.ks); 292 xctx->xts.block1 = (block128_f) aesni_decrypt; 293 xctx->stream = aesni_xts_decrypt; 294 } 295 296 aesni_set_encrypt_key(key + bytes, bits, &xctx->ks2.ks); 297 xctx->xts.block2 = (block128_f) aesni_encrypt; 298 299 xctx->xts.key1 = &xctx->ks1; 300 } 301 302 if (iv) { 303 xctx->xts.key2 = &xctx->ks2; 304 memcpy(ctx->iv, iv, 16); 305 } 306 307 return 1; 308 } 309 310 # define aesni_xts_cipher aes_xts_cipher 311 static int aesni_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 312 const unsigned char *in, size_t len); 313 314 static int aesni_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 315 const unsigned char *iv, int enc) 316 { 317 EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx); 318 if (!iv && !key) 319 return 1; 320 if (key) { 321 aesni_set_encrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 322 &cctx->ks.ks); 323 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, 324 &cctx->ks, (block128_f) aesni_encrypt); 325 cctx->str = enc ? (ccm128_f) aesni_ccm64_encrypt_blocks : 326 (ccm128_f) aesni_ccm64_decrypt_blocks; 327 cctx->key_set = 1; 328 } 329 if (iv) { 330 memcpy(ctx->iv, iv, 15 - cctx->L); 331 cctx->iv_set = 1; 332 } 333 return 1; 334 } 335 336 # define aesni_ccm_cipher aes_ccm_cipher 337 static int aesni_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 338 const unsigned char *in, size_t len); 339 340 # ifndef OPENSSL_NO_OCB 341 static int aesni_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 342 const unsigned char *iv, int enc) 343 { 344 EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx); 345 if (!iv && !key) 346 return 1; 347 if (key) { 348 do { 349 /* 350 * We set both the encrypt and decrypt key here because decrypt 351 * needs both. We could possibly optimise to remove setting the 352 * decrypt for an encryption operation. 353 */ 354 aesni_set_encrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 355 &octx->ksenc.ks); 356 aesni_set_decrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 357 &octx->ksdec.ks); 358 if (!CRYPTO_ocb128_init(&octx->ocb, 359 &octx->ksenc.ks, &octx->ksdec.ks, 360 (block128_f) aesni_encrypt, 361 (block128_f) aesni_decrypt, 362 enc ? aesni_ocb_encrypt 363 : aesni_ocb_decrypt)) 364 return 0; 365 } 366 while (0); 367 368 /* 369 * If we have an iv we can set it directly, otherwise use saved IV. 370 */ 371 if (iv == NULL && octx->iv_set) 372 iv = octx->iv; 373 if (iv) { 374 if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen) 375 != 1) 376 return 0; 377 octx->iv_set = 1; 378 } 379 octx->key_set = 1; 380 } else { 381 /* If key set use IV, otherwise copy */ 382 if (octx->key_set) 383 CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen); 384 else 385 memcpy(octx->iv, iv, octx->ivlen); 386 octx->iv_set = 1; 387 } 388 return 1; 389 } 390 391 # define aesni_ocb_cipher aes_ocb_cipher 392 static int aesni_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 393 const unsigned char *in, size_t len); 394 # endif /* OPENSSL_NO_OCB */ 395 396 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \ 397 static const EVP_CIPHER aesni_##keylen##_##mode = { \ 398 nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \ 399 flags|EVP_CIPH_##MODE##_MODE, \ 400 EVP_ORIG_GLOBAL, \ 401 aesni_init_key, \ 402 aesni_##mode##_cipher, \ 403 NULL, \ 404 sizeof(EVP_AES_KEY), \ 405 NULL,NULL,NULL,NULL }; \ 406 static const EVP_CIPHER aes_##keylen##_##mode = { \ 407 nid##_##keylen##_##nmode,blocksize, \ 408 keylen/8,ivlen, \ 409 flags|EVP_CIPH_##MODE##_MODE, \ 410 EVP_ORIG_GLOBAL, \ 411 aes_init_key, \ 412 aes_##mode##_cipher, \ 413 NULL, \ 414 sizeof(EVP_AES_KEY), \ 415 NULL,NULL,NULL,NULL }; \ 416 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ 417 { return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; } 418 419 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \ 420 static const EVP_CIPHER aesni_##keylen##_##mode = { \ 421 nid##_##keylen##_##mode,blocksize, \ 422 (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \ 423 ivlen, \ 424 flags|EVP_CIPH_##MODE##_MODE, \ 425 EVP_ORIG_GLOBAL, \ 426 aesni_##mode##_init_key, \ 427 aesni_##mode##_cipher, \ 428 aes_##mode##_cleanup, \ 429 sizeof(EVP_AES_##MODE##_CTX), \ 430 NULL,NULL,aes_##mode##_ctrl,NULL }; \ 431 static const EVP_CIPHER aes_##keylen##_##mode = { \ 432 nid##_##keylen##_##mode,blocksize, \ 433 (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \ 434 ivlen, \ 435 flags|EVP_CIPH_##MODE##_MODE, \ 436 EVP_ORIG_GLOBAL, \ 437 aes_##mode##_init_key, \ 438 aes_##mode##_cipher, \ 439 aes_##mode##_cleanup, \ 440 sizeof(EVP_AES_##MODE##_CTX), \ 441 NULL,NULL,aes_##mode##_ctrl,NULL }; \ 442 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ 443 { return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; } 444 445 #elif defined(SPARC_AES_CAPABLE) 446 447 static int aes_t4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 448 const unsigned char *iv, int enc) 449 { 450 int ret, mode, bits; 451 EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx); 452 453 mode = EVP_CIPHER_CTX_get_mode(ctx); 454 bits = EVP_CIPHER_CTX_get_key_length(ctx) * 8; 455 if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE) 456 && !enc) { 457 ret = 0; 458 aes_t4_set_decrypt_key(key, bits, &dat->ks.ks); 459 dat->block = (block128_f) aes_t4_decrypt; 460 switch (bits) { 461 case 128: 462 dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? 463 (cbc128_f) aes128_t4_cbc_decrypt : NULL; 464 break; 465 case 192: 466 dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? 467 (cbc128_f) aes192_t4_cbc_decrypt : NULL; 468 break; 469 case 256: 470 dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? 471 (cbc128_f) aes256_t4_cbc_decrypt : NULL; 472 break; 473 default: 474 ret = -1; 475 } 476 } else { 477 ret = 0; 478 aes_t4_set_encrypt_key(key, bits, &dat->ks.ks); 479 dat->block = (block128_f) aes_t4_encrypt; 480 switch (bits) { 481 case 128: 482 if (mode == EVP_CIPH_CBC_MODE) 483 dat->stream.cbc = (cbc128_f) aes128_t4_cbc_encrypt; 484 else if (mode == EVP_CIPH_CTR_MODE) 485 dat->stream.ctr = (ctr128_f) aes128_t4_ctr32_encrypt; 486 else 487 dat->stream.cbc = NULL; 488 break; 489 case 192: 490 if (mode == EVP_CIPH_CBC_MODE) 491 dat->stream.cbc = (cbc128_f) aes192_t4_cbc_encrypt; 492 else if (mode == EVP_CIPH_CTR_MODE) 493 dat->stream.ctr = (ctr128_f) aes192_t4_ctr32_encrypt; 494 else 495 dat->stream.cbc = NULL; 496 break; 497 case 256: 498 if (mode == EVP_CIPH_CBC_MODE) 499 dat->stream.cbc = (cbc128_f) aes256_t4_cbc_encrypt; 500 else if (mode == EVP_CIPH_CTR_MODE) 501 dat->stream.ctr = (ctr128_f) aes256_t4_ctr32_encrypt; 502 else 503 dat->stream.cbc = NULL; 504 break; 505 default: 506 ret = -1; 507 } 508 } 509 510 if (ret < 0) { 511 ERR_raise(ERR_LIB_EVP, EVP_R_AES_KEY_SETUP_FAILED); 512 return 0; 513 } 514 515 return 1; 516 } 517 518 # define aes_t4_cbc_cipher aes_cbc_cipher 519 static int aes_t4_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 520 const unsigned char *in, size_t len); 521 522 # define aes_t4_ecb_cipher aes_ecb_cipher 523 static int aes_t4_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 524 const unsigned char *in, size_t len); 525 526 # define aes_t4_ofb_cipher aes_ofb_cipher 527 static int aes_t4_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 528 const unsigned char *in, size_t len); 529 530 # define aes_t4_cfb_cipher aes_cfb_cipher 531 static int aes_t4_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 532 const unsigned char *in, size_t len); 533 534 # define aes_t4_cfb8_cipher aes_cfb8_cipher 535 static int aes_t4_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 536 const unsigned char *in, size_t len); 537 538 # define aes_t4_cfb1_cipher aes_cfb1_cipher 539 static int aes_t4_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 540 const unsigned char *in, size_t len); 541 542 # define aes_t4_ctr_cipher aes_ctr_cipher 543 static int aes_t4_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 544 const unsigned char *in, size_t len); 545 546 static int aes_t4_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 547 const unsigned char *iv, int enc) 548 { 549 EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx); 550 if (!iv && !key) 551 return 1; 552 if (key) { 553 int bits = EVP_CIPHER_CTX_get_key_length(ctx) * 8; 554 aes_t4_set_encrypt_key(key, bits, &gctx->ks.ks); 555 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, 556 (block128_f) aes_t4_encrypt); 557 switch (bits) { 558 case 128: 559 gctx->ctr = (ctr128_f) aes128_t4_ctr32_encrypt; 560 break; 561 case 192: 562 gctx->ctr = (ctr128_f) aes192_t4_ctr32_encrypt; 563 break; 564 case 256: 565 gctx->ctr = (ctr128_f) aes256_t4_ctr32_encrypt; 566 break; 567 default: 568 return 0; 569 } 570 /* 571 * If we have an iv can set it directly, otherwise use saved IV. 572 */ 573 if (iv == NULL && gctx->iv_set) 574 iv = gctx->iv; 575 if (iv) { 576 CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen); 577 gctx->iv_set = 1; 578 } 579 gctx->key_set = 1; 580 } else { 581 /* If key set use IV, otherwise copy */ 582 if (gctx->key_set) 583 CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen); 584 else 585 memcpy(gctx->iv, iv, gctx->ivlen); 586 gctx->iv_set = 1; 587 gctx->iv_gen = 0; 588 } 589 return 1; 590 } 591 592 # define aes_t4_gcm_cipher aes_gcm_cipher 593 static int aes_t4_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 594 const unsigned char *in, size_t len); 595 596 static int aes_t4_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 597 const unsigned char *iv, int enc) 598 { 599 EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx); 600 601 if (!iv && !key) 602 return 1; 603 604 if (key) { 605 /* The key is two half length keys in reality */ 606 const int bytes = EVP_CIPHER_CTX_get_key_length(ctx) / 2; 607 const int bits = bytes * 8; 608 609 /* 610 * Verify that the two keys are different. 611 * 612 * This addresses Rogaway's vulnerability. 613 * See comment in aes_xts_init_key() below. 614 */ 615 if ((!allow_insecure_decrypt || enc) 616 && CRYPTO_memcmp(key, key + bytes, bytes) == 0) { 617 ERR_raise(ERR_LIB_EVP, EVP_R_XTS_DUPLICATED_KEYS); 618 return 0; 619 } 620 621 xctx->stream = NULL; 622 /* key_len is two AES keys */ 623 if (enc) { 624 aes_t4_set_encrypt_key(key, bits, &xctx->ks1.ks); 625 xctx->xts.block1 = (block128_f) aes_t4_encrypt; 626 switch (bits) { 627 case 128: 628 xctx->stream = aes128_t4_xts_encrypt; 629 break; 630 case 256: 631 xctx->stream = aes256_t4_xts_encrypt; 632 break; 633 default: 634 return 0; 635 } 636 } else { 637 aes_t4_set_decrypt_key(key, bits, &xctx->ks1.ks); 638 xctx->xts.block1 = (block128_f) aes_t4_decrypt; 639 switch (bits) { 640 case 128: 641 xctx->stream = aes128_t4_xts_decrypt; 642 break; 643 case 256: 644 xctx->stream = aes256_t4_xts_decrypt; 645 break; 646 default: 647 return 0; 648 } 649 } 650 651 aes_t4_set_encrypt_key(key + bytes, bits, &xctx->ks2.ks); 652 xctx->xts.block2 = (block128_f) aes_t4_encrypt; 653 654 xctx->xts.key1 = &xctx->ks1; 655 } 656 657 if (iv) { 658 xctx->xts.key2 = &xctx->ks2; 659 memcpy(ctx->iv, iv, 16); 660 } 661 662 return 1; 663 } 664 665 # define aes_t4_xts_cipher aes_xts_cipher 666 static int aes_t4_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 667 const unsigned char *in, size_t len); 668 669 static int aes_t4_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 670 const unsigned char *iv, int enc) 671 { 672 EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx); 673 if (!iv && !key) 674 return 1; 675 if (key) { 676 int bits = EVP_CIPHER_CTX_get_key_length(ctx) * 8; 677 aes_t4_set_encrypt_key(key, bits, &cctx->ks.ks); 678 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, 679 &cctx->ks, (block128_f) aes_t4_encrypt); 680 cctx->str = NULL; 681 cctx->key_set = 1; 682 } 683 if (iv) { 684 memcpy(ctx->iv, iv, 15 - cctx->L); 685 cctx->iv_set = 1; 686 } 687 return 1; 688 } 689 690 # define aes_t4_ccm_cipher aes_ccm_cipher 691 static int aes_t4_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 692 const unsigned char *in, size_t len); 693 694 # ifndef OPENSSL_NO_OCB 695 static int aes_t4_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 696 const unsigned char *iv, int enc) 697 { 698 EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx); 699 if (!iv && !key) 700 return 1; 701 if (key) { 702 do { 703 /* 704 * We set both the encrypt and decrypt key here because decrypt 705 * needs both. We could possibly optimise to remove setting the 706 * decrypt for an encryption operation. 707 */ 708 aes_t4_set_encrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 709 &octx->ksenc.ks); 710 aes_t4_set_decrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 711 &octx->ksdec.ks); 712 if (!CRYPTO_ocb128_init(&octx->ocb, 713 &octx->ksenc.ks, &octx->ksdec.ks, 714 (block128_f) aes_t4_encrypt, 715 (block128_f) aes_t4_decrypt, 716 NULL)) 717 return 0; 718 } 719 while (0); 720 721 /* 722 * If we have an iv we can set it directly, otherwise use saved IV. 723 */ 724 if (iv == NULL && octx->iv_set) 725 iv = octx->iv; 726 if (iv) { 727 if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen) 728 != 1) 729 return 0; 730 octx->iv_set = 1; 731 } 732 octx->key_set = 1; 733 } else { 734 /* If key set use IV, otherwise copy */ 735 if (octx->key_set) 736 CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen); 737 else 738 memcpy(octx->iv, iv, octx->ivlen); 739 octx->iv_set = 1; 740 } 741 return 1; 742 } 743 744 # define aes_t4_ocb_cipher aes_ocb_cipher 745 static int aes_t4_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 746 const unsigned char *in, size_t len); 747 # endif /* OPENSSL_NO_OCB */ 748 749 # ifndef OPENSSL_NO_SIV 750 # define aes_t4_siv_init_key aes_siv_init_key 751 # define aes_t4_siv_cipher aes_siv_cipher 752 # endif /* OPENSSL_NO_SIV */ 753 754 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \ 755 static const EVP_CIPHER aes_t4_##keylen##_##mode = { \ 756 nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \ 757 flags|EVP_CIPH_##MODE##_MODE, \ 758 EVP_ORIG_GLOBAL, \ 759 aes_t4_init_key, \ 760 aes_t4_##mode##_cipher, \ 761 NULL, \ 762 sizeof(EVP_AES_KEY), \ 763 NULL,NULL,NULL,NULL }; \ 764 static const EVP_CIPHER aes_##keylen##_##mode = { \ 765 nid##_##keylen##_##nmode,blocksize, \ 766 keylen/8,ivlen, \ 767 flags|EVP_CIPH_##MODE##_MODE, \ 768 EVP_ORIG_GLOBAL, \ 769 aes_init_key, \ 770 aes_##mode##_cipher, \ 771 NULL, \ 772 sizeof(EVP_AES_KEY), \ 773 NULL,NULL,NULL,NULL }; \ 774 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ 775 { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; } 776 777 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \ 778 static const EVP_CIPHER aes_t4_##keylen##_##mode = { \ 779 nid##_##keylen##_##mode,blocksize, \ 780 (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \ 781 ivlen, \ 782 flags|EVP_CIPH_##MODE##_MODE, \ 783 EVP_ORIG_GLOBAL, \ 784 aes_t4_##mode##_init_key, \ 785 aes_t4_##mode##_cipher, \ 786 aes_##mode##_cleanup, \ 787 sizeof(EVP_AES_##MODE##_CTX), \ 788 NULL,NULL,aes_##mode##_ctrl,NULL }; \ 789 static const EVP_CIPHER aes_##keylen##_##mode = { \ 790 nid##_##keylen##_##mode,blocksize, \ 791 (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \ 792 ivlen, \ 793 flags|EVP_CIPH_##MODE##_MODE, \ 794 EVP_ORIG_GLOBAL, \ 795 aes_##mode##_init_key, \ 796 aes_##mode##_cipher, \ 797 aes_##mode##_cleanup, \ 798 sizeof(EVP_AES_##MODE##_CTX), \ 799 NULL,NULL,aes_##mode##_ctrl,NULL }; \ 800 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ 801 { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; } 802 803 #elif defined(S390X_aes_128_CAPABLE) 804 /* IBM S390X support */ 805 typedef struct { 806 union { 807 OSSL_UNION_ALIGN; 808 /*- 809 * KM-AES parameter block - begin 810 * (see z/Architecture Principles of Operation >= SA22-7832-06) 811 */ 812 struct { 813 unsigned char k[32]; 814 } param; 815 /* KM-AES parameter block - end */ 816 } km; 817 unsigned int fc; 818 } S390X_AES_ECB_CTX; 819 820 typedef struct { 821 union { 822 OSSL_UNION_ALIGN; 823 /*- 824 * KMO-AES parameter block - begin 825 * (see z/Architecture Principles of Operation >= SA22-7832-08) 826 */ 827 struct { 828 unsigned char cv[16]; 829 unsigned char k[32]; 830 } param; 831 /* KMO-AES parameter block - end */ 832 } kmo; 833 unsigned int fc; 834 } S390X_AES_OFB_CTX; 835 836 typedef struct { 837 union { 838 OSSL_UNION_ALIGN; 839 /*- 840 * KMF-AES parameter block - begin 841 * (see z/Architecture Principles of Operation >= SA22-7832-08) 842 */ 843 struct { 844 unsigned char cv[16]; 845 unsigned char k[32]; 846 } param; 847 /* KMF-AES parameter block - end */ 848 } kmf; 849 unsigned int fc; 850 } S390X_AES_CFB_CTX; 851 852 typedef struct { 853 union { 854 OSSL_UNION_ALIGN; 855 /*- 856 * KMA-GCM-AES parameter block - begin 857 * (see z/Architecture Principles of Operation >= SA22-7832-11) 858 */ 859 struct { 860 unsigned char reserved[12]; 861 union { 862 unsigned int w; 863 unsigned char b[4]; 864 } cv; 865 union { 866 unsigned long long g[2]; 867 unsigned char b[16]; 868 } t; 869 unsigned char h[16]; 870 unsigned long long taadl; 871 unsigned long long tpcl; 872 union { 873 unsigned long long g[2]; 874 unsigned int w[4]; 875 } j0; 876 unsigned char k[32]; 877 } param; 878 /* KMA-GCM-AES parameter block - end */ 879 } kma; 880 unsigned int fc; 881 int key_set; 882 883 unsigned char *iv; 884 int ivlen; 885 int iv_set; 886 int iv_gen; 887 888 int taglen; 889 890 unsigned char ares[16]; 891 unsigned char mres[16]; 892 unsigned char kres[16]; 893 int areslen; 894 int mreslen; 895 int kreslen; 896 897 int tls_aad_len; 898 uint64_t tls_enc_records; /* Number of TLS records encrypted */ 899 } S390X_AES_GCM_CTX; 900 901 typedef struct { 902 union { 903 OSSL_UNION_ALIGN; 904 /*- 905 * Padding is chosen so that ccm.kmac_param.k overlaps with key.k and 906 * ccm.fc with key.k.rounds. Remember that on s390x, an AES_KEY's 907 * rounds field is used to store the function code and that the key 908 * schedule is not stored (if aes hardware support is detected). 909 */ 910 struct { 911 unsigned char pad[16]; 912 AES_KEY k; 913 } key; 914 915 struct { 916 /*- 917 * KMAC-AES parameter block - begin 918 * (see z/Architecture Principles of Operation >= SA22-7832-08) 919 */ 920 struct { 921 union { 922 unsigned long long g[2]; 923 unsigned char b[16]; 924 } icv; 925 unsigned char k[32]; 926 } kmac_param; 927 /* KMAC-AES parameter block - end */ 928 929 union { 930 unsigned long long g[2]; 931 unsigned char b[16]; 932 } nonce; 933 union { 934 unsigned long long g[2]; 935 unsigned char b[16]; 936 } buf; 937 938 unsigned long long blocks; 939 int l; 940 int m; 941 int tls_aad_len; 942 int iv_set; 943 int tag_set; 944 int len_set; 945 int key_set; 946 947 unsigned char pad[140]; 948 unsigned int fc; 949 } ccm; 950 } aes; 951 } S390X_AES_CCM_CTX; 952 953 # define s390x_aes_init_key aes_init_key 954 static int s390x_aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 955 const unsigned char *iv, int enc); 956 957 # define S390X_AES_CBC_CTX EVP_AES_KEY 958 959 # define s390x_aes_cbc_init_key aes_init_key 960 961 # define s390x_aes_cbc_cipher aes_cbc_cipher 962 static int s390x_aes_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 963 const unsigned char *in, size_t len); 964 965 static int s390x_aes_ecb_init_key(EVP_CIPHER_CTX *ctx, 966 const unsigned char *key, 967 const unsigned char *iv, int enc) 968 { 969 S390X_AES_ECB_CTX *cctx = EVP_C_DATA(S390X_AES_ECB_CTX, ctx); 970 const int keylen = EVP_CIPHER_CTX_get_key_length(ctx); 971 972 cctx->fc = S390X_AES_FC(keylen); 973 if (!enc) 974 cctx->fc |= S390X_DECRYPT; 975 976 memcpy(cctx->km.param.k, key, keylen); 977 return 1; 978 } 979 980 static int s390x_aes_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 981 const unsigned char *in, size_t len) 982 { 983 S390X_AES_ECB_CTX *cctx = EVP_C_DATA(S390X_AES_ECB_CTX, ctx); 984 985 s390x_km(in, len, out, cctx->fc, &cctx->km.param); 986 return 1; 987 } 988 989 static int s390x_aes_ofb_init_key(EVP_CIPHER_CTX *ctx, 990 const unsigned char *key, 991 const unsigned char *ivec, int enc) 992 { 993 S390X_AES_OFB_CTX *cctx = EVP_C_DATA(S390X_AES_OFB_CTX, ctx); 994 const unsigned char *iv = ctx->oiv; 995 const int keylen = EVP_CIPHER_CTX_get_key_length(ctx); 996 const int ivlen = EVP_CIPHER_CTX_get_iv_length(ctx); 997 998 memcpy(cctx->kmo.param.cv, iv, ivlen); 999 memcpy(cctx->kmo.param.k, key, keylen); 1000 cctx->fc = S390X_AES_FC(keylen); 1001 return 1; 1002 } 1003 1004 static int s390x_aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 1005 const unsigned char *in, size_t len) 1006 { 1007 S390X_AES_OFB_CTX *cctx = EVP_C_DATA(S390X_AES_OFB_CTX, ctx); 1008 const int ivlen = EVP_CIPHER_CTX_get_iv_length(ctx); 1009 unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); 1010 int n = ctx->num; 1011 int rem; 1012 1013 memcpy(cctx->kmo.param.cv, iv, ivlen); 1014 while (n && len) { 1015 *out = *in ^ cctx->kmo.param.cv[n]; 1016 n = (n + 1) & 0xf; 1017 --len; 1018 ++in; 1019 ++out; 1020 } 1021 1022 rem = len & 0xf; 1023 1024 len &= ~(size_t)0xf; 1025 if (len) { 1026 s390x_kmo(in, len, out, cctx->fc, &cctx->kmo.param); 1027 1028 out += len; 1029 in += len; 1030 } 1031 1032 if (rem) { 1033 s390x_km(cctx->kmo.param.cv, 16, cctx->kmo.param.cv, cctx->fc, 1034 cctx->kmo.param.k); 1035 1036 while (rem--) { 1037 out[n] = in[n] ^ cctx->kmo.param.cv[n]; 1038 ++n; 1039 } 1040 } 1041 1042 memcpy(iv, cctx->kmo.param.cv, ivlen); 1043 ctx->num = n; 1044 return 1; 1045 } 1046 1047 static int s390x_aes_cfb_init_key(EVP_CIPHER_CTX *ctx, 1048 const unsigned char *key, 1049 const unsigned char *ivec, int enc) 1050 { 1051 S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx); 1052 const unsigned char *iv = ctx->oiv; 1053 const int keylen = EVP_CIPHER_CTX_get_key_length(ctx); 1054 const int ivlen = EVP_CIPHER_CTX_get_iv_length(ctx); 1055 1056 cctx->fc = S390X_AES_FC(keylen); 1057 cctx->fc |= 16 << 24; /* 16 bytes cipher feedback */ 1058 if (!enc) 1059 cctx->fc |= S390X_DECRYPT; 1060 1061 memcpy(cctx->kmf.param.cv, iv, ivlen); 1062 memcpy(cctx->kmf.param.k, key, keylen); 1063 return 1; 1064 } 1065 1066 static int s390x_aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 1067 const unsigned char *in, size_t len) 1068 { 1069 S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx); 1070 const int keylen = EVP_CIPHER_CTX_get_key_length(ctx); 1071 const int enc = EVP_CIPHER_CTX_is_encrypting(ctx); 1072 const int ivlen = EVP_CIPHER_CTX_get_iv_length(ctx); 1073 unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); 1074 int n = ctx->num; 1075 int rem; 1076 unsigned char tmp; 1077 1078 memcpy(cctx->kmf.param.cv, iv, ivlen); 1079 while (n && len) { 1080 tmp = *in; 1081 *out = cctx->kmf.param.cv[n] ^ tmp; 1082 cctx->kmf.param.cv[n] = enc ? *out : tmp; 1083 n = (n + 1) & 0xf; 1084 --len; 1085 ++in; 1086 ++out; 1087 } 1088 1089 rem = len & 0xf; 1090 1091 len &= ~(size_t)0xf; 1092 if (len) { 1093 s390x_kmf(in, len, out, cctx->fc, &cctx->kmf.param); 1094 1095 out += len; 1096 in += len; 1097 } 1098 1099 if (rem) { 1100 s390x_km(cctx->kmf.param.cv, 16, cctx->kmf.param.cv, 1101 S390X_AES_FC(keylen), cctx->kmf.param.k); 1102 1103 while (rem--) { 1104 tmp = in[n]; 1105 out[n] = cctx->kmf.param.cv[n] ^ tmp; 1106 cctx->kmf.param.cv[n] = enc ? out[n] : tmp; 1107 ++n; 1108 } 1109 } 1110 1111 memcpy(iv, cctx->kmf.param.cv, ivlen); 1112 ctx->num = n; 1113 return 1; 1114 } 1115 1116 static int s390x_aes_cfb8_init_key(EVP_CIPHER_CTX *ctx, 1117 const unsigned char *key, 1118 const unsigned char *ivec, int enc) 1119 { 1120 S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx); 1121 const unsigned char *iv = ctx->oiv; 1122 const int keylen = EVP_CIPHER_CTX_get_key_length(ctx); 1123 const int ivlen = EVP_CIPHER_CTX_get_iv_length(ctx); 1124 1125 cctx->fc = S390X_AES_FC(keylen); 1126 cctx->fc |= 1 << 24; /* 1 byte cipher feedback */ 1127 if (!enc) 1128 cctx->fc |= S390X_DECRYPT; 1129 1130 memcpy(cctx->kmf.param.cv, iv, ivlen); 1131 memcpy(cctx->kmf.param.k, key, keylen); 1132 return 1; 1133 } 1134 1135 static int s390x_aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 1136 const unsigned char *in, size_t len) 1137 { 1138 S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx); 1139 const int ivlen = EVP_CIPHER_CTX_get_iv_length(ctx); 1140 unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); 1141 1142 memcpy(cctx->kmf.param.cv, iv, ivlen); 1143 s390x_kmf(in, len, out, cctx->fc, &cctx->kmf.param); 1144 memcpy(iv, cctx->kmf.param.cv, ivlen); 1145 return 1; 1146 } 1147 1148 # define s390x_aes_cfb1_init_key aes_init_key 1149 1150 # define s390x_aes_cfb1_cipher aes_cfb1_cipher 1151 static int s390x_aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 1152 const unsigned char *in, size_t len); 1153 1154 # define S390X_AES_CTR_CTX EVP_AES_KEY 1155 1156 # define s390x_aes_ctr_init_key aes_init_key 1157 1158 # define s390x_aes_ctr_cipher aes_ctr_cipher 1159 static int s390x_aes_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 1160 const unsigned char *in, size_t len); 1161 1162 /* iv + padding length for iv lengths != 12 */ 1163 # define S390X_gcm_ivpadlen(i) ((((i) + 15) >> 4 << 4) + 16) 1164 1165 /*- 1166 * Process additional authenticated data. Returns 0 on success. Code is 1167 * big-endian. 1168 */ 1169 static int s390x_aes_gcm_aad(S390X_AES_GCM_CTX *ctx, const unsigned char *aad, 1170 size_t len) 1171 { 1172 unsigned long long alen; 1173 int n, rem; 1174 1175 if (ctx->kma.param.tpcl) 1176 return -2; 1177 1178 alen = ctx->kma.param.taadl + len; 1179 if (alen > (U64(1) << 61) || (sizeof(len) == 8 && alen < len)) 1180 return -1; 1181 ctx->kma.param.taadl = alen; 1182 1183 n = ctx->areslen; 1184 if (n) { 1185 while (n && len) { 1186 ctx->ares[n] = *aad; 1187 n = (n + 1) & 0xf; 1188 ++aad; 1189 --len; 1190 } 1191 /* ctx->ares contains a complete block if offset has wrapped around */ 1192 if (!n) { 1193 s390x_kma(ctx->ares, 16, NULL, 0, NULL, ctx->fc, &ctx->kma.param); 1194 ctx->fc |= S390X_KMA_HS; 1195 } 1196 ctx->areslen = n; 1197 } 1198 1199 rem = len & 0xf; 1200 1201 len &= ~(size_t)0xf; 1202 if (len) { 1203 s390x_kma(aad, len, NULL, 0, NULL, ctx->fc, &ctx->kma.param); 1204 aad += len; 1205 ctx->fc |= S390X_KMA_HS; 1206 } 1207 1208 if (rem) { 1209 ctx->areslen = rem; 1210 1211 do { 1212 --rem; 1213 ctx->ares[rem] = aad[rem]; 1214 } while (rem); 1215 } 1216 return 0; 1217 } 1218 1219 /*- 1220 * En/de-crypt plain/cipher-text and authenticate ciphertext. Returns 0 for 1221 * success. Code is big-endian. 1222 */ 1223 static int s390x_aes_gcm(S390X_AES_GCM_CTX *ctx, const unsigned char *in, 1224 unsigned char *out, size_t len) 1225 { 1226 const unsigned char *inptr; 1227 unsigned long long mlen; 1228 union { 1229 unsigned int w[4]; 1230 unsigned char b[16]; 1231 } buf; 1232 size_t inlen; 1233 int n, rem, i; 1234 1235 mlen = ctx->kma.param.tpcl + len; 1236 if (mlen > ((U64(1) << 36) - 32) || (sizeof(len) == 8 && mlen < len)) 1237 return -1; 1238 ctx->kma.param.tpcl = mlen; 1239 1240 n = ctx->mreslen; 1241 if (n) { 1242 inptr = in; 1243 inlen = len; 1244 while (n && inlen) { 1245 ctx->mres[n] = *inptr; 1246 n = (n + 1) & 0xf; 1247 ++inptr; 1248 --inlen; 1249 } 1250 /* ctx->mres contains a complete block if offset has wrapped around */ 1251 if (!n) { 1252 s390x_kma(ctx->ares, ctx->areslen, ctx->mres, 16, buf.b, 1253 ctx->fc | S390X_KMA_LAAD, &ctx->kma.param); 1254 ctx->fc |= S390X_KMA_HS; 1255 ctx->areslen = 0; 1256 1257 /* previous call already encrypted/decrypted its remainder, 1258 * see comment below */ 1259 n = ctx->mreslen; 1260 while (n) { 1261 *out = buf.b[n]; 1262 n = (n + 1) & 0xf; 1263 ++out; 1264 ++in; 1265 --len; 1266 } 1267 ctx->mreslen = 0; 1268 } 1269 } 1270 1271 rem = len & 0xf; 1272 1273 len &= ~(size_t)0xf; 1274 if (len) { 1275 s390x_kma(ctx->ares, ctx->areslen, in, len, out, 1276 ctx->fc | S390X_KMA_LAAD, &ctx->kma.param); 1277 in += len; 1278 out += len; 1279 ctx->fc |= S390X_KMA_HS; 1280 ctx->areslen = 0; 1281 } 1282 1283 /*- 1284 * If there is a remainder, it has to be saved such that it can be 1285 * processed by kma later. However, we also have to do the for-now 1286 * unauthenticated encryption/decryption part here and now... 1287 */ 1288 if (rem) { 1289 if (!ctx->mreslen) { 1290 buf.w[0] = ctx->kma.param.j0.w[0]; 1291 buf.w[1] = ctx->kma.param.j0.w[1]; 1292 buf.w[2] = ctx->kma.param.j0.w[2]; 1293 buf.w[3] = ctx->kma.param.cv.w + 1; 1294 s390x_km(buf.b, 16, ctx->kres, ctx->fc & 0x1f, &ctx->kma.param.k); 1295 } 1296 1297 n = ctx->mreslen; 1298 for (i = 0; i < rem; i++) { 1299 ctx->mres[n + i] = in[i]; 1300 out[i] = in[i] ^ ctx->kres[n + i]; 1301 } 1302 1303 ctx->mreslen += rem; 1304 } 1305 return 0; 1306 } 1307 1308 /*- 1309 * Initialize context structure. Code is big-endian. 1310 */ 1311 static void s390x_aes_gcm_setiv(S390X_AES_GCM_CTX *ctx, 1312 const unsigned char *iv) 1313 { 1314 ctx->kma.param.t.g[0] = 0; 1315 ctx->kma.param.t.g[1] = 0; 1316 ctx->kma.param.tpcl = 0; 1317 ctx->kma.param.taadl = 0; 1318 ctx->mreslen = 0; 1319 ctx->areslen = 0; 1320 ctx->kreslen = 0; 1321 1322 if (ctx->ivlen == 12) { 1323 memcpy(&ctx->kma.param.j0, iv, ctx->ivlen); 1324 ctx->kma.param.j0.w[3] = 1; 1325 ctx->kma.param.cv.w = 1; 1326 } else { 1327 /* ctx->iv has the right size and is already padded. */ 1328 memcpy(ctx->iv, iv, ctx->ivlen); 1329 s390x_kma(ctx->iv, S390X_gcm_ivpadlen(ctx->ivlen), NULL, 0, NULL, 1330 ctx->fc, &ctx->kma.param); 1331 ctx->fc |= S390X_KMA_HS; 1332 1333 ctx->kma.param.j0.g[0] = ctx->kma.param.t.g[0]; 1334 ctx->kma.param.j0.g[1] = ctx->kma.param.t.g[1]; 1335 ctx->kma.param.cv.w = ctx->kma.param.j0.w[3]; 1336 ctx->kma.param.t.g[0] = 0; 1337 ctx->kma.param.t.g[1] = 0; 1338 } 1339 } 1340 1341 /*- 1342 * Performs various operations on the context structure depending on control 1343 * type. Returns 1 for success, 0 for failure and -1 for unknown control type. 1344 * Code is big-endian. 1345 */ 1346 static int s390x_aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) 1347 { 1348 S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, c); 1349 S390X_AES_GCM_CTX *gctx_out; 1350 EVP_CIPHER_CTX *out; 1351 unsigned char *buf; 1352 int ivlen, enc, len; 1353 1354 switch (type) { 1355 case EVP_CTRL_INIT: 1356 ivlen = EVP_CIPHER_get_iv_length(c->cipher); 1357 gctx->key_set = 0; 1358 gctx->iv_set = 0; 1359 gctx->ivlen = ivlen; 1360 gctx->iv = c->iv; 1361 gctx->taglen = -1; 1362 gctx->iv_gen = 0; 1363 gctx->tls_aad_len = -1; 1364 return 1; 1365 1366 case EVP_CTRL_GET_IVLEN: 1367 *(int *)ptr = gctx->ivlen; 1368 return 1; 1369 1370 case EVP_CTRL_AEAD_SET_IVLEN: 1371 if (arg <= 0) 1372 return 0; 1373 1374 if (arg != 12) { 1375 len = S390X_gcm_ivpadlen(arg); 1376 1377 /* Allocate memory for iv if needed. */ 1378 if (gctx->ivlen == 12 || len > S390X_gcm_ivpadlen(gctx->ivlen)) { 1379 if (gctx->iv != c->iv) 1380 OPENSSL_free(gctx->iv); 1381 1382 if ((gctx->iv = OPENSSL_malloc(len)) == NULL) { 1383 ERR_raise(ERR_LIB_EVP, ERR_R_MALLOC_FAILURE); 1384 return 0; 1385 } 1386 } 1387 /* Add padding. */ 1388 memset(gctx->iv + arg, 0, len - arg - 8); 1389 *((unsigned long long *)(gctx->iv + len - 8)) = arg << 3; 1390 } 1391 gctx->ivlen = arg; 1392 return 1; 1393 1394 case EVP_CTRL_AEAD_SET_TAG: 1395 buf = EVP_CIPHER_CTX_buf_noconst(c); 1396 enc = EVP_CIPHER_CTX_is_encrypting(c); 1397 if (arg <= 0 || arg > 16 || enc) 1398 return 0; 1399 1400 memcpy(buf, ptr, arg); 1401 gctx->taglen = arg; 1402 return 1; 1403 1404 case EVP_CTRL_AEAD_GET_TAG: 1405 enc = EVP_CIPHER_CTX_is_encrypting(c); 1406 if (arg <= 0 || arg > 16 || !enc || gctx->taglen < 0) 1407 return 0; 1408 1409 memcpy(ptr, gctx->kma.param.t.b, arg); 1410 return 1; 1411 1412 case EVP_CTRL_GCM_SET_IV_FIXED: 1413 /* Special case: -1 length restores whole iv */ 1414 if (arg == -1) { 1415 memcpy(gctx->iv, ptr, gctx->ivlen); 1416 gctx->iv_gen = 1; 1417 return 1; 1418 } 1419 /* 1420 * Fixed field must be at least 4 bytes and invocation field at least 1421 * 8. 1422 */ 1423 if ((arg < 4) || (gctx->ivlen - arg) < 8) 1424 return 0; 1425 1426 if (arg) 1427 memcpy(gctx->iv, ptr, arg); 1428 1429 enc = EVP_CIPHER_CTX_is_encrypting(c); 1430 if (enc && RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0) 1431 return 0; 1432 1433 gctx->iv_gen = 1; 1434 return 1; 1435 1436 case EVP_CTRL_GCM_IV_GEN: 1437 if (gctx->iv_gen == 0 || gctx->key_set == 0) 1438 return 0; 1439 1440 s390x_aes_gcm_setiv(gctx, gctx->iv); 1441 1442 if (arg <= 0 || arg > gctx->ivlen) 1443 arg = gctx->ivlen; 1444 1445 memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg); 1446 /* 1447 * Invocation field will be at least 8 bytes in size and so no need 1448 * to check wrap around or increment more than last 8 bytes. 1449 */ 1450 ctr64_inc(gctx->iv + gctx->ivlen - 8); 1451 gctx->iv_set = 1; 1452 return 1; 1453 1454 case EVP_CTRL_GCM_SET_IV_INV: 1455 enc = EVP_CIPHER_CTX_is_encrypting(c); 1456 if (gctx->iv_gen == 0 || gctx->key_set == 0 || enc) 1457 return 0; 1458 1459 memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg); 1460 s390x_aes_gcm_setiv(gctx, gctx->iv); 1461 gctx->iv_set = 1; 1462 return 1; 1463 1464 case EVP_CTRL_AEAD_TLS1_AAD: 1465 /* Save the aad for later use. */ 1466 if (arg != EVP_AEAD_TLS1_AAD_LEN) 1467 return 0; 1468 1469 buf = EVP_CIPHER_CTX_buf_noconst(c); 1470 memcpy(buf, ptr, arg); 1471 gctx->tls_aad_len = arg; 1472 gctx->tls_enc_records = 0; 1473 1474 len = buf[arg - 2] << 8 | buf[arg - 1]; 1475 /* Correct length for explicit iv. */ 1476 if (len < EVP_GCM_TLS_EXPLICIT_IV_LEN) 1477 return 0; 1478 len -= EVP_GCM_TLS_EXPLICIT_IV_LEN; 1479 1480 /* If decrypting correct for tag too. */ 1481 enc = EVP_CIPHER_CTX_is_encrypting(c); 1482 if (!enc) { 1483 if (len < EVP_GCM_TLS_TAG_LEN) 1484 return 0; 1485 len -= EVP_GCM_TLS_TAG_LEN; 1486 } 1487 buf[arg - 2] = len >> 8; 1488 buf[arg - 1] = len & 0xff; 1489 /* Extra padding: tag appended to record. */ 1490 return EVP_GCM_TLS_TAG_LEN; 1491 1492 case EVP_CTRL_COPY: 1493 out = ptr; 1494 gctx_out = EVP_C_DATA(S390X_AES_GCM_CTX, out); 1495 1496 if (gctx->iv == c->iv) { 1497 gctx_out->iv = out->iv; 1498 } else { 1499 len = S390X_gcm_ivpadlen(gctx->ivlen); 1500 1501 if ((gctx_out->iv = OPENSSL_malloc(len)) == NULL) { 1502 ERR_raise(ERR_LIB_EVP, ERR_R_MALLOC_FAILURE); 1503 return 0; 1504 } 1505 1506 memcpy(gctx_out->iv, gctx->iv, len); 1507 } 1508 return 1; 1509 1510 default: 1511 return -1; 1512 } 1513 } 1514 1515 /*- 1516 * Set key and/or iv. Returns 1 on success. Otherwise 0 is returned. 1517 */ 1518 static int s390x_aes_gcm_init_key(EVP_CIPHER_CTX *ctx, 1519 const unsigned char *key, 1520 const unsigned char *iv, int enc) 1521 { 1522 S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx); 1523 int keylen; 1524 1525 if (iv == NULL && key == NULL) 1526 return 1; 1527 1528 if (key != NULL) { 1529 keylen = EVP_CIPHER_CTX_get_key_length(ctx); 1530 memcpy(&gctx->kma.param.k, key, keylen); 1531 1532 gctx->fc = S390X_AES_FC(keylen); 1533 if (!enc) 1534 gctx->fc |= S390X_DECRYPT; 1535 1536 if (iv == NULL && gctx->iv_set) 1537 iv = gctx->iv; 1538 1539 if (iv != NULL) { 1540 s390x_aes_gcm_setiv(gctx, iv); 1541 gctx->iv_set = 1; 1542 } 1543 gctx->key_set = 1; 1544 } else { 1545 if (gctx->key_set) 1546 s390x_aes_gcm_setiv(gctx, iv); 1547 else 1548 memcpy(gctx->iv, iv, gctx->ivlen); 1549 1550 gctx->iv_set = 1; 1551 gctx->iv_gen = 0; 1552 } 1553 return 1; 1554 } 1555 1556 /*- 1557 * En/de-crypt and authenticate TLS packet. Returns the number of bytes written 1558 * if successful. Otherwise -1 is returned. Code is big-endian. 1559 */ 1560 static int s390x_aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 1561 const unsigned char *in, size_t len) 1562 { 1563 S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx); 1564 const unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx); 1565 const int enc = EVP_CIPHER_CTX_is_encrypting(ctx); 1566 int rv = -1; 1567 1568 if (out != in || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN)) 1569 return -1; 1570 1571 /* 1572 * Check for too many keys as per FIPS 140-2 IG A.5 "Key/IV Pair Uniqueness 1573 * Requirements from SP 800-38D". The requirements is for one party to the 1574 * communication to fail after 2^64 - 1 keys. We do this on the encrypting 1575 * side only. 1576 */ 1577 if (ctx->encrypt && ++gctx->tls_enc_records == 0) { 1578 ERR_raise(ERR_LIB_EVP, EVP_R_TOO_MANY_RECORDS); 1579 goto err; 1580 } 1581 1582 if (EVP_CIPHER_CTX_ctrl(ctx, enc ? EVP_CTRL_GCM_IV_GEN 1583 : EVP_CTRL_GCM_SET_IV_INV, 1584 EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0) 1585 goto err; 1586 1587 in += EVP_GCM_TLS_EXPLICIT_IV_LEN; 1588 out += EVP_GCM_TLS_EXPLICIT_IV_LEN; 1589 len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN; 1590 1591 gctx->kma.param.taadl = gctx->tls_aad_len << 3; 1592 gctx->kma.param.tpcl = len << 3; 1593 s390x_kma(buf, gctx->tls_aad_len, in, len, out, 1594 gctx->fc | S390X_KMA_LAAD | S390X_KMA_LPC, &gctx->kma.param); 1595 1596 if (enc) { 1597 memcpy(out + len, gctx->kma.param.t.b, EVP_GCM_TLS_TAG_LEN); 1598 rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN; 1599 } else { 1600 if (CRYPTO_memcmp(gctx->kma.param.t.b, in + len, 1601 EVP_GCM_TLS_TAG_LEN)) { 1602 OPENSSL_cleanse(out, len); 1603 goto err; 1604 } 1605 rv = len; 1606 } 1607 err: 1608 gctx->iv_set = 0; 1609 gctx->tls_aad_len = -1; 1610 return rv; 1611 } 1612 1613 /*- 1614 * Called from EVP layer to initialize context, process additional 1615 * authenticated data, en/de-crypt plain/cipher-text and authenticate 1616 * ciphertext or process a TLS packet, depending on context. Returns bytes 1617 * written on success. Otherwise -1 is returned. Code is big-endian. 1618 */ 1619 static int s390x_aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 1620 const unsigned char *in, size_t len) 1621 { 1622 S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx); 1623 unsigned char *buf, tmp[16]; 1624 int enc; 1625 1626 if (!gctx->key_set) 1627 return -1; 1628 1629 if (gctx->tls_aad_len >= 0) 1630 return s390x_aes_gcm_tls_cipher(ctx, out, in, len); 1631 1632 if (!gctx->iv_set) 1633 return -1; 1634 1635 if (in != NULL) { 1636 if (out == NULL) { 1637 if (s390x_aes_gcm_aad(gctx, in, len)) 1638 return -1; 1639 } else { 1640 if (s390x_aes_gcm(gctx, in, out, len)) 1641 return -1; 1642 } 1643 return len; 1644 } else { 1645 gctx->kma.param.taadl <<= 3; 1646 gctx->kma.param.tpcl <<= 3; 1647 s390x_kma(gctx->ares, gctx->areslen, gctx->mres, gctx->mreslen, tmp, 1648 gctx->fc | S390X_KMA_LAAD | S390X_KMA_LPC, &gctx->kma.param); 1649 /* recall that we already did en-/decrypt gctx->mres 1650 * and returned it to caller... */ 1651 OPENSSL_cleanse(tmp, gctx->mreslen); 1652 gctx->iv_set = 0; 1653 1654 enc = EVP_CIPHER_CTX_is_encrypting(ctx); 1655 if (enc) { 1656 gctx->taglen = 16; 1657 } else { 1658 if (gctx->taglen < 0) 1659 return -1; 1660 1661 buf = EVP_CIPHER_CTX_buf_noconst(ctx); 1662 if (CRYPTO_memcmp(buf, gctx->kma.param.t.b, gctx->taglen)) 1663 return -1; 1664 } 1665 return 0; 1666 } 1667 } 1668 1669 static int s390x_aes_gcm_cleanup(EVP_CIPHER_CTX *c) 1670 { 1671 S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, c); 1672 1673 if (gctx == NULL) 1674 return 0; 1675 1676 if (gctx->iv != c->iv) 1677 OPENSSL_free(gctx->iv); 1678 1679 OPENSSL_cleanse(gctx, sizeof(*gctx)); 1680 return 1; 1681 } 1682 1683 # define S390X_AES_XTS_CTX EVP_AES_XTS_CTX 1684 1685 # define s390x_aes_xts_init_key aes_xts_init_key 1686 static int s390x_aes_xts_init_key(EVP_CIPHER_CTX *ctx, 1687 const unsigned char *key, 1688 const unsigned char *iv, int enc); 1689 # define s390x_aes_xts_cipher aes_xts_cipher 1690 static int s390x_aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 1691 const unsigned char *in, size_t len); 1692 # define s390x_aes_xts_ctrl aes_xts_ctrl 1693 static int s390x_aes_xts_ctrl(EVP_CIPHER_CTX *, int type, int arg, void *ptr); 1694 # define s390x_aes_xts_cleanup aes_xts_cleanup 1695 1696 /*- 1697 * Set nonce and length fields. Code is big-endian. 1698 */ 1699 static inline void s390x_aes_ccm_setiv(S390X_AES_CCM_CTX *ctx, 1700 const unsigned char *nonce, 1701 size_t mlen) 1702 { 1703 ctx->aes.ccm.nonce.b[0] &= ~S390X_CCM_AAD_FLAG; 1704 ctx->aes.ccm.nonce.g[1] = mlen; 1705 memcpy(ctx->aes.ccm.nonce.b + 1, nonce, 15 - ctx->aes.ccm.l); 1706 } 1707 1708 /*- 1709 * Process additional authenticated data. Code is big-endian. 1710 */ 1711 static void s390x_aes_ccm_aad(S390X_AES_CCM_CTX *ctx, const unsigned char *aad, 1712 size_t alen) 1713 { 1714 unsigned char *ptr; 1715 int i, rem; 1716 1717 if (!alen) 1718 return; 1719 1720 ctx->aes.ccm.nonce.b[0] |= S390X_CCM_AAD_FLAG; 1721 1722 /* Suppress 'type-punned pointer dereference' warning. */ 1723 ptr = ctx->aes.ccm.buf.b; 1724 1725 if (alen < ((1 << 16) - (1 << 8))) { 1726 *(uint16_t *)ptr = alen; 1727 i = 2; 1728 } else if (sizeof(alen) == 8 1729 && alen >= (size_t)1 << (32 % (sizeof(alen) * 8))) { 1730 *(uint16_t *)ptr = 0xffff; 1731 *(uint64_t *)(ptr + 2) = alen; 1732 i = 10; 1733 } else { 1734 *(uint16_t *)ptr = 0xfffe; 1735 *(uint32_t *)(ptr + 2) = alen; 1736 i = 6; 1737 } 1738 1739 while (i < 16 && alen) { 1740 ctx->aes.ccm.buf.b[i] = *aad; 1741 ++aad; 1742 --alen; 1743 ++i; 1744 } 1745 while (i < 16) { 1746 ctx->aes.ccm.buf.b[i] = 0; 1747 ++i; 1748 } 1749 1750 ctx->aes.ccm.kmac_param.icv.g[0] = 0; 1751 ctx->aes.ccm.kmac_param.icv.g[1] = 0; 1752 s390x_kmac(ctx->aes.ccm.nonce.b, 32, ctx->aes.ccm.fc, 1753 &ctx->aes.ccm.kmac_param); 1754 ctx->aes.ccm.blocks += 2; 1755 1756 rem = alen & 0xf; 1757 alen &= ~(size_t)0xf; 1758 if (alen) { 1759 s390x_kmac(aad, alen, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param); 1760 ctx->aes.ccm.blocks += alen >> 4; 1761 aad += alen; 1762 } 1763 if (rem) { 1764 for (i = 0; i < rem; i++) 1765 ctx->aes.ccm.kmac_param.icv.b[i] ^= aad[i]; 1766 1767 s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16, 1768 ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc, 1769 ctx->aes.ccm.kmac_param.k); 1770 ctx->aes.ccm.blocks++; 1771 } 1772 } 1773 1774 /*- 1775 * En/de-crypt plain/cipher-text. Compute tag from plaintext. Returns 0 for 1776 * success. 1777 */ 1778 static int s390x_aes_ccm(S390X_AES_CCM_CTX *ctx, const unsigned char *in, 1779 unsigned char *out, size_t len, int enc) 1780 { 1781 size_t n, rem; 1782 unsigned int i, l, num; 1783 unsigned char flags; 1784 1785 flags = ctx->aes.ccm.nonce.b[0]; 1786 if (!(flags & S390X_CCM_AAD_FLAG)) { 1787 s390x_km(ctx->aes.ccm.nonce.b, 16, ctx->aes.ccm.kmac_param.icv.b, 1788 ctx->aes.ccm.fc, ctx->aes.ccm.kmac_param.k); 1789 ctx->aes.ccm.blocks++; 1790 } 1791 l = flags & 0x7; 1792 ctx->aes.ccm.nonce.b[0] = l; 1793 1794 /*- 1795 * Reconstruct length from encoded length field 1796 * and initialize it with counter value. 1797 */ 1798 n = 0; 1799 for (i = 15 - l; i < 15; i++) { 1800 n |= ctx->aes.ccm.nonce.b[i]; 1801 ctx->aes.ccm.nonce.b[i] = 0; 1802 n <<= 8; 1803 } 1804 n |= ctx->aes.ccm.nonce.b[15]; 1805 ctx->aes.ccm.nonce.b[15] = 1; 1806 1807 if (n != len) 1808 return -1; /* length mismatch */ 1809 1810 if (enc) { 1811 /* Two operations per block plus one for tag encryption */ 1812 ctx->aes.ccm.blocks += (((len + 15) >> 4) << 1) + 1; 1813 if (ctx->aes.ccm.blocks > (1ULL << 61)) 1814 return -2; /* too much data */ 1815 } 1816 1817 num = 0; 1818 rem = len & 0xf; 1819 len &= ~(size_t)0xf; 1820 1821 if (enc) { 1822 /* mac-then-encrypt */ 1823 if (len) 1824 s390x_kmac(in, len, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param); 1825 if (rem) { 1826 for (i = 0; i < rem; i++) 1827 ctx->aes.ccm.kmac_param.icv.b[i] ^= in[len + i]; 1828 1829 s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16, 1830 ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc, 1831 ctx->aes.ccm.kmac_param.k); 1832 } 1833 1834 CRYPTO_ctr128_encrypt_ctr32(in, out, len + rem, &ctx->aes.key.k, 1835 ctx->aes.ccm.nonce.b, ctx->aes.ccm.buf.b, 1836 &num, (ctr128_f)AES_ctr32_encrypt); 1837 } else { 1838 /* decrypt-then-mac */ 1839 CRYPTO_ctr128_encrypt_ctr32(in, out, len + rem, &ctx->aes.key.k, 1840 ctx->aes.ccm.nonce.b, ctx->aes.ccm.buf.b, 1841 &num, (ctr128_f)AES_ctr32_encrypt); 1842 1843 if (len) 1844 s390x_kmac(out, len, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param); 1845 if (rem) { 1846 for (i = 0; i < rem; i++) 1847 ctx->aes.ccm.kmac_param.icv.b[i] ^= out[len + i]; 1848 1849 s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16, 1850 ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc, 1851 ctx->aes.ccm.kmac_param.k); 1852 } 1853 } 1854 /* encrypt tag */ 1855 for (i = 15 - l; i < 16; i++) 1856 ctx->aes.ccm.nonce.b[i] = 0; 1857 1858 s390x_km(ctx->aes.ccm.nonce.b, 16, ctx->aes.ccm.buf.b, ctx->aes.ccm.fc, 1859 ctx->aes.ccm.kmac_param.k); 1860 ctx->aes.ccm.kmac_param.icv.g[0] ^= ctx->aes.ccm.buf.g[0]; 1861 ctx->aes.ccm.kmac_param.icv.g[1] ^= ctx->aes.ccm.buf.g[1]; 1862 1863 ctx->aes.ccm.nonce.b[0] = flags; /* restore flags field */ 1864 return 0; 1865 } 1866 1867 /*- 1868 * En/de-crypt and authenticate TLS packet. Returns the number of bytes written 1869 * if successful. Otherwise -1 is returned. 1870 */ 1871 static int s390x_aes_ccm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 1872 const unsigned char *in, size_t len) 1873 { 1874 S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx); 1875 unsigned char *ivec = ctx->iv; 1876 unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx); 1877 const int enc = EVP_CIPHER_CTX_is_encrypting(ctx); 1878 1879 if (out != in 1880 || len < (EVP_CCM_TLS_EXPLICIT_IV_LEN + (size_t)cctx->aes.ccm.m)) 1881 return -1; 1882 1883 if (enc) { 1884 /* Set explicit iv (sequence number). */ 1885 memcpy(out, buf, EVP_CCM_TLS_EXPLICIT_IV_LEN); 1886 } 1887 1888 len -= EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->aes.ccm.m; 1889 /*- 1890 * Get explicit iv (sequence number). We already have fixed iv 1891 * (server/client_write_iv) here. 1892 */ 1893 memcpy(ivec + EVP_CCM_TLS_FIXED_IV_LEN, in, EVP_CCM_TLS_EXPLICIT_IV_LEN); 1894 s390x_aes_ccm_setiv(cctx, ivec, len); 1895 1896 /* Process aad (sequence number|type|version|length) */ 1897 s390x_aes_ccm_aad(cctx, buf, cctx->aes.ccm.tls_aad_len); 1898 1899 in += EVP_CCM_TLS_EXPLICIT_IV_LEN; 1900 out += EVP_CCM_TLS_EXPLICIT_IV_LEN; 1901 1902 if (enc) { 1903 if (s390x_aes_ccm(cctx, in, out, len, enc)) 1904 return -1; 1905 1906 memcpy(out + len, cctx->aes.ccm.kmac_param.icv.b, cctx->aes.ccm.m); 1907 return len + EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->aes.ccm.m; 1908 } else { 1909 if (!s390x_aes_ccm(cctx, in, out, len, enc)) { 1910 if (!CRYPTO_memcmp(cctx->aes.ccm.kmac_param.icv.b, in + len, 1911 cctx->aes.ccm.m)) 1912 return len; 1913 } 1914 1915 OPENSSL_cleanse(out, len); 1916 return -1; 1917 } 1918 } 1919 1920 /*- 1921 * Set key and flag field and/or iv. Returns 1 if successful. Otherwise 0 is 1922 * returned. 1923 */ 1924 static int s390x_aes_ccm_init_key(EVP_CIPHER_CTX *ctx, 1925 const unsigned char *key, 1926 const unsigned char *iv, int enc) 1927 { 1928 S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx); 1929 int keylen; 1930 1931 if (iv == NULL && key == NULL) 1932 return 1; 1933 1934 if (key != NULL) { 1935 keylen = EVP_CIPHER_CTX_get_key_length(ctx); 1936 cctx->aes.ccm.fc = S390X_AES_FC(keylen); 1937 memcpy(cctx->aes.ccm.kmac_param.k, key, keylen); 1938 1939 /* Store encoded m and l. */ 1940 cctx->aes.ccm.nonce.b[0] = ((cctx->aes.ccm.l - 1) & 0x7) 1941 | (((cctx->aes.ccm.m - 2) >> 1) & 0x7) << 3; 1942 memset(cctx->aes.ccm.nonce.b + 1, 0, 1943 sizeof(cctx->aes.ccm.nonce.b)); 1944 cctx->aes.ccm.blocks = 0; 1945 1946 cctx->aes.ccm.key_set = 1; 1947 } 1948 1949 if (iv != NULL) { 1950 memcpy(ctx->iv, iv, 15 - cctx->aes.ccm.l); 1951 1952 cctx->aes.ccm.iv_set = 1; 1953 } 1954 1955 return 1; 1956 } 1957 1958 /*- 1959 * Called from EVP layer to initialize context, process additional 1960 * authenticated data, en/de-crypt plain/cipher-text and authenticate 1961 * plaintext or process a TLS packet, depending on context. Returns bytes 1962 * written on success. Otherwise -1 is returned. 1963 */ 1964 static int s390x_aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 1965 const unsigned char *in, size_t len) 1966 { 1967 S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx); 1968 const int enc = EVP_CIPHER_CTX_is_encrypting(ctx); 1969 int rv; 1970 unsigned char *buf; 1971 1972 if (!cctx->aes.ccm.key_set) 1973 return -1; 1974 1975 if (cctx->aes.ccm.tls_aad_len >= 0) 1976 return s390x_aes_ccm_tls_cipher(ctx, out, in, len); 1977 1978 /*- 1979 * Final(): Does not return any data. Recall that ccm is mac-then-encrypt 1980 * so integrity must be checked already at Update() i.e., before 1981 * potentially corrupted data is output. 1982 */ 1983 if (in == NULL && out != NULL) 1984 return 0; 1985 1986 if (!cctx->aes.ccm.iv_set) 1987 return -1; 1988 1989 if (out == NULL) { 1990 /* Update(): Pass message length. */ 1991 if (in == NULL) { 1992 s390x_aes_ccm_setiv(cctx, ctx->iv, len); 1993 1994 cctx->aes.ccm.len_set = 1; 1995 return len; 1996 } 1997 1998 /* Update(): Process aad. */ 1999 if (!cctx->aes.ccm.len_set && len) 2000 return -1; 2001 2002 s390x_aes_ccm_aad(cctx, in, len); 2003 return len; 2004 } 2005 2006 /* The tag must be set before actually decrypting data */ 2007 if (!enc && !cctx->aes.ccm.tag_set) 2008 return -1; 2009 2010 /* Update(): Process message. */ 2011 2012 if (!cctx->aes.ccm.len_set) { 2013 /*- 2014 * In case message length was not previously set explicitly via 2015 * Update(), set it now. 2016 */ 2017 s390x_aes_ccm_setiv(cctx, ctx->iv, len); 2018 2019 cctx->aes.ccm.len_set = 1; 2020 } 2021 2022 if (enc) { 2023 if (s390x_aes_ccm(cctx, in, out, len, enc)) 2024 return -1; 2025 2026 cctx->aes.ccm.tag_set = 1; 2027 return len; 2028 } else { 2029 rv = -1; 2030 2031 if (!s390x_aes_ccm(cctx, in, out, len, enc)) { 2032 buf = EVP_CIPHER_CTX_buf_noconst(ctx); 2033 if (!CRYPTO_memcmp(cctx->aes.ccm.kmac_param.icv.b, buf, 2034 cctx->aes.ccm.m)) 2035 rv = len; 2036 } 2037 2038 if (rv == -1) 2039 OPENSSL_cleanse(out, len); 2040 2041 cctx->aes.ccm.iv_set = 0; 2042 cctx->aes.ccm.tag_set = 0; 2043 cctx->aes.ccm.len_set = 0; 2044 return rv; 2045 } 2046 } 2047 2048 /*- 2049 * Performs various operations on the context structure depending on control 2050 * type. Returns 1 for success, 0 for failure and -1 for unknown control type. 2051 * Code is big-endian. 2052 */ 2053 static int s390x_aes_ccm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) 2054 { 2055 S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, c); 2056 unsigned char *buf; 2057 int enc, len; 2058 2059 switch (type) { 2060 case EVP_CTRL_INIT: 2061 cctx->aes.ccm.key_set = 0; 2062 cctx->aes.ccm.iv_set = 0; 2063 cctx->aes.ccm.l = 8; 2064 cctx->aes.ccm.m = 12; 2065 cctx->aes.ccm.tag_set = 0; 2066 cctx->aes.ccm.len_set = 0; 2067 cctx->aes.ccm.tls_aad_len = -1; 2068 return 1; 2069 2070 case EVP_CTRL_GET_IVLEN: 2071 *(int *)ptr = 15 - cctx->aes.ccm.l; 2072 return 1; 2073 2074 case EVP_CTRL_AEAD_TLS1_AAD: 2075 if (arg != EVP_AEAD_TLS1_AAD_LEN) 2076 return 0; 2077 2078 /* Save the aad for later use. */ 2079 buf = EVP_CIPHER_CTX_buf_noconst(c); 2080 memcpy(buf, ptr, arg); 2081 cctx->aes.ccm.tls_aad_len = arg; 2082 2083 len = buf[arg - 2] << 8 | buf[arg - 1]; 2084 if (len < EVP_CCM_TLS_EXPLICIT_IV_LEN) 2085 return 0; 2086 2087 /* Correct length for explicit iv. */ 2088 len -= EVP_CCM_TLS_EXPLICIT_IV_LEN; 2089 2090 enc = EVP_CIPHER_CTX_is_encrypting(c); 2091 if (!enc) { 2092 if (len < cctx->aes.ccm.m) 2093 return 0; 2094 2095 /* Correct length for tag. */ 2096 len -= cctx->aes.ccm.m; 2097 } 2098 2099 buf[arg - 2] = len >> 8; 2100 buf[arg - 1] = len & 0xff; 2101 2102 /* Extra padding: tag appended to record. */ 2103 return cctx->aes.ccm.m; 2104 2105 case EVP_CTRL_CCM_SET_IV_FIXED: 2106 if (arg != EVP_CCM_TLS_FIXED_IV_LEN) 2107 return 0; 2108 2109 /* Copy to first part of the iv. */ 2110 memcpy(c->iv, ptr, arg); 2111 return 1; 2112 2113 case EVP_CTRL_AEAD_SET_IVLEN: 2114 arg = 15 - arg; 2115 /* fall-through */ 2116 2117 case EVP_CTRL_CCM_SET_L: 2118 if (arg < 2 || arg > 8) 2119 return 0; 2120 2121 cctx->aes.ccm.l = arg; 2122 return 1; 2123 2124 case EVP_CTRL_AEAD_SET_TAG: 2125 if ((arg & 1) || arg < 4 || arg > 16) 2126 return 0; 2127 2128 enc = EVP_CIPHER_CTX_is_encrypting(c); 2129 if (enc && ptr) 2130 return 0; 2131 2132 if (ptr) { 2133 cctx->aes.ccm.tag_set = 1; 2134 buf = EVP_CIPHER_CTX_buf_noconst(c); 2135 memcpy(buf, ptr, arg); 2136 } 2137 2138 cctx->aes.ccm.m = arg; 2139 return 1; 2140 2141 case EVP_CTRL_AEAD_GET_TAG: 2142 enc = EVP_CIPHER_CTX_is_encrypting(c); 2143 if (!enc || !cctx->aes.ccm.tag_set) 2144 return 0; 2145 2146 if(arg < cctx->aes.ccm.m) 2147 return 0; 2148 2149 memcpy(ptr, cctx->aes.ccm.kmac_param.icv.b, cctx->aes.ccm.m); 2150 cctx->aes.ccm.tag_set = 0; 2151 cctx->aes.ccm.iv_set = 0; 2152 cctx->aes.ccm.len_set = 0; 2153 return 1; 2154 2155 case EVP_CTRL_COPY: 2156 return 1; 2157 2158 default: 2159 return -1; 2160 } 2161 } 2162 2163 # define s390x_aes_ccm_cleanup aes_ccm_cleanup 2164 2165 # ifndef OPENSSL_NO_OCB 2166 # define S390X_AES_OCB_CTX EVP_AES_OCB_CTX 2167 2168 # define s390x_aes_ocb_init_key aes_ocb_init_key 2169 static int s390x_aes_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 2170 const unsigned char *iv, int enc); 2171 # define s390x_aes_ocb_cipher aes_ocb_cipher 2172 static int s390x_aes_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 2173 const unsigned char *in, size_t len); 2174 # define s390x_aes_ocb_cleanup aes_ocb_cleanup 2175 static int s390x_aes_ocb_cleanup(EVP_CIPHER_CTX *); 2176 # define s390x_aes_ocb_ctrl aes_ocb_ctrl 2177 static int s390x_aes_ocb_ctrl(EVP_CIPHER_CTX *, int type, int arg, void *ptr); 2178 # endif 2179 2180 # ifndef OPENSSL_NO_SIV 2181 # define S390X_AES_SIV_CTX EVP_AES_SIV_CTX 2182 2183 # define s390x_aes_siv_init_key aes_siv_init_key 2184 # define s390x_aes_siv_cipher aes_siv_cipher 2185 # define s390x_aes_siv_cleanup aes_siv_cleanup 2186 # define s390x_aes_siv_ctrl aes_siv_ctrl 2187 # endif 2188 2189 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode, \ 2190 MODE,flags) \ 2191 static const EVP_CIPHER s390x_aes_##keylen##_##mode = { \ 2192 nid##_##keylen##_##nmode,blocksize, \ 2193 keylen / 8, \ 2194 ivlen, \ 2195 flags | EVP_CIPH_##MODE##_MODE, \ 2196 EVP_ORIG_GLOBAL, \ 2197 s390x_aes_##mode##_init_key, \ 2198 s390x_aes_##mode##_cipher, \ 2199 NULL, \ 2200 sizeof(S390X_AES_##MODE##_CTX), \ 2201 NULL, \ 2202 NULL, \ 2203 NULL, \ 2204 NULL \ 2205 }; \ 2206 static const EVP_CIPHER aes_##keylen##_##mode = { \ 2207 nid##_##keylen##_##nmode, \ 2208 blocksize, \ 2209 keylen / 8, \ 2210 ivlen, \ 2211 flags | EVP_CIPH_##MODE##_MODE, \ 2212 EVP_ORIG_GLOBAL, \ 2213 aes_init_key, \ 2214 aes_##mode##_cipher, \ 2215 NULL, \ 2216 sizeof(EVP_AES_KEY), \ 2217 NULL, \ 2218 NULL, \ 2219 NULL, \ 2220 NULL \ 2221 }; \ 2222 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ 2223 { \ 2224 return S390X_aes_##keylen##_##mode##_CAPABLE ? \ 2225 &s390x_aes_##keylen##_##mode : &aes_##keylen##_##mode; \ 2226 } 2227 2228 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags)\ 2229 static const EVP_CIPHER s390x_aes_##keylen##_##mode = { \ 2230 nid##_##keylen##_##mode, \ 2231 blocksize, \ 2232 (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE ? 2 : 1) * keylen / 8, \ 2233 ivlen, \ 2234 flags | EVP_CIPH_##MODE##_MODE, \ 2235 EVP_ORIG_GLOBAL, \ 2236 s390x_aes_##mode##_init_key, \ 2237 s390x_aes_##mode##_cipher, \ 2238 s390x_aes_##mode##_cleanup, \ 2239 sizeof(S390X_AES_##MODE##_CTX), \ 2240 NULL, \ 2241 NULL, \ 2242 s390x_aes_##mode##_ctrl, \ 2243 NULL \ 2244 }; \ 2245 static const EVP_CIPHER aes_##keylen##_##mode = { \ 2246 nid##_##keylen##_##mode,blocksize, \ 2247 (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE ? 2 : 1) * keylen / 8, \ 2248 ivlen, \ 2249 flags | EVP_CIPH_##MODE##_MODE, \ 2250 EVP_ORIG_GLOBAL, \ 2251 aes_##mode##_init_key, \ 2252 aes_##mode##_cipher, \ 2253 aes_##mode##_cleanup, \ 2254 sizeof(EVP_AES_##MODE##_CTX), \ 2255 NULL, \ 2256 NULL, \ 2257 aes_##mode##_ctrl, \ 2258 NULL \ 2259 }; \ 2260 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ 2261 { \ 2262 return S390X_aes_##keylen##_##mode##_CAPABLE ? \ 2263 &s390x_aes_##keylen##_##mode : &aes_##keylen##_##mode; \ 2264 } 2265 2266 #else 2267 2268 # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \ 2269 static const EVP_CIPHER aes_##keylen##_##mode = { \ 2270 nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \ 2271 flags|EVP_CIPH_##MODE##_MODE, \ 2272 EVP_ORIG_GLOBAL, \ 2273 aes_init_key, \ 2274 aes_##mode##_cipher, \ 2275 NULL, \ 2276 sizeof(EVP_AES_KEY), \ 2277 NULL,NULL,NULL,NULL }; \ 2278 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ 2279 { return &aes_##keylen##_##mode; } 2280 2281 # define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \ 2282 static const EVP_CIPHER aes_##keylen##_##mode = { \ 2283 nid##_##keylen##_##mode,blocksize, \ 2284 (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE||EVP_CIPH_##MODE##_MODE==EVP_CIPH_SIV_MODE?2:1)*keylen/8, \ 2285 ivlen, \ 2286 flags|EVP_CIPH_##MODE##_MODE, \ 2287 EVP_ORIG_GLOBAL, \ 2288 aes_##mode##_init_key, \ 2289 aes_##mode##_cipher, \ 2290 aes_##mode##_cleanup, \ 2291 sizeof(EVP_AES_##MODE##_CTX), \ 2292 NULL,NULL,aes_##mode##_ctrl,NULL }; \ 2293 const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ 2294 { return &aes_##keylen##_##mode; } 2295 2296 #endif 2297 2298 #define BLOCK_CIPHER_generic_pack(nid,keylen,flags) \ 2299 BLOCK_CIPHER_generic(nid,keylen,16,16,cbc,cbc,CBC,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \ 2300 BLOCK_CIPHER_generic(nid,keylen,16,0,ecb,ecb,ECB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \ 2301 BLOCK_CIPHER_generic(nid,keylen,1,16,ofb128,ofb,OFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \ 2302 BLOCK_CIPHER_generic(nid,keylen,1,16,cfb128,cfb,CFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \ 2303 BLOCK_CIPHER_generic(nid,keylen,1,16,cfb1,cfb1,CFB,flags) \ 2304 BLOCK_CIPHER_generic(nid,keylen,1,16,cfb8,cfb8,CFB,flags) \ 2305 BLOCK_CIPHER_generic(nid,keylen,1,16,ctr,ctr,CTR,flags) 2306 2307 static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 2308 const unsigned char *iv, int enc) 2309 { 2310 int ret, mode; 2311 EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx); 2312 2313 mode = EVP_CIPHER_CTX_get_mode(ctx); 2314 if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE) 2315 && !enc) { 2316 #ifdef HWAES_CAPABLE 2317 if (HWAES_CAPABLE) { 2318 ret = HWAES_set_decrypt_key(key, 2319 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 2320 &dat->ks.ks); 2321 dat->block = (block128_f) HWAES_decrypt; 2322 dat->stream.cbc = NULL; 2323 # ifdef HWAES_cbc_encrypt 2324 if (mode == EVP_CIPH_CBC_MODE) 2325 dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt; 2326 # endif 2327 } else 2328 #endif 2329 #ifdef BSAES_CAPABLE 2330 if (BSAES_CAPABLE && mode == EVP_CIPH_CBC_MODE) { 2331 ret = AES_set_decrypt_key(key, 2332 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 2333 &dat->ks.ks); 2334 dat->block = (block128_f) AES_decrypt; 2335 dat->stream.cbc = (cbc128_f) ossl_bsaes_cbc_encrypt; 2336 } else 2337 #endif 2338 #ifdef VPAES_CAPABLE 2339 if (VPAES_CAPABLE) { 2340 ret = vpaes_set_decrypt_key(key, 2341 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 2342 &dat->ks.ks); 2343 dat->block = (block128_f) vpaes_decrypt; 2344 dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? 2345 (cbc128_f) vpaes_cbc_encrypt : NULL; 2346 } else 2347 #endif 2348 { 2349 ret = AES_set_decrypt_key(key, 2350 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 2351 &dat->ks.ks); 2352 dat->block = (block128_f) AES_decrypt; 2353 dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? 2354 (cbc128_f) AES_cbc_encrypt : NULL; 2355 } 2356 } else 2357 #ifdef HWAES_CAPABLE 2358 if (HWAES_CAPABLE) { 2359 ret = HWAES_set_encrypt_key(key, 2360 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 2361 &dat->ks.ks); 2362 dat->block = (block128_f) HWAES_encrypt; 2363 dat->stream.cbc = NULL; 2364 # ifdef HWAES_cbc_encrypt 2365 if (mode == EVP_CIPH_CBC_MODE) 2366 dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt; 2367 else 2368 # endif 2369 # ifdef HWAES_ctr32_encrypt_blocks 2370 if (mode == EVP_CIPH_CTR_MODE) 2371 dat->stream.ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks; 2372 else 2373 # endif 2374 (void)0; /* terminate potentially open 'else' */ 2375 } else 2376 #endif 2377 #ifdef BSAES_CAPABLE 2378 if (BSAES_CAPABLE && mode == EVP_CIPH_CTR_MODE) { 2379 ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 2380 &dat->ks.ks); 2381 dat->block = (block128_f) AES_encrypt; 2382 dat->stream.ctr = (ctr128_f) ossl_bsaes_ctr32_encrypt_blocks; 2383 } else 2384 #endif 2385 #ifdef VPAES_CAPABLE 2386 if (VPAES_CAPABLE) { 2387 ret = vpaes_set_encrypt_key(key, 2388 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 2389 &dat->ks.ks); 2390 dat->block = (block128_f) vpaes_encrypt; 2391 dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? 2392 (cbc128_f) vpaes_cbc_encrypt : NULL; 2393 } else 2394 #endif 2395 { 2396 ret = AES_set_encrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 2397 &dat->ks.ks); 2398 dat->block = (block128_f) AES_encrypt; 2399 dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ? 2400 (cbc128_f) AES_cbc_encrypt : NULL; 2401 #ifdef AES_CTR_ASM 2402 if (mode == EVP_CIPH_CTR_MODE) 2403 dat->stream.ctr = (ctr128_f) AES_ctr32_encrypt; 2404 #endif 2405 } 2406 2407 if (ret < 0) { 2408 ERR_raise(ERR_LIB_EVP, EVP_R_AES_KEY_SETUP_FAILED); 2409 return 0; 2410 } 2411 2412 return 1; 2413 } 2414 2415 static int aes_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 2416 const unsigned char *in, size_t len) 2417 { 2418 EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx); 2419 2420 if (dat->stream.cbc) 2421 (*dat->stream.cbc) (in, out, len, &dat->ks, ctx->iv, 2422 EVP_CIPHER_CTX_is_encrypting(ctx)); 2423 else if (EVP_CIPHER_CTX_is_encrypting(ctx)) 2424 CRYPTO_cbc128_encrypt(in, out, len, &dat->ks, ctx->iv, 2425 dat->block); 2426 else 2427 CRYPTO_cbc128_decrypt(in, out, len, &dat->ks, 2428 ctx->iv, dat->block); 2429 2430 return 1; 2431 } 2432 2433 static int aes_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 2434 const unsigned char *in, size_t len) 2435 { 2436 size_t bl = EVP_CIPHER_CTX_get_block_size(ctx); 2437 size_t i; 2438 EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx); 2439 2440 if (len < bl) 2441 return 1; 2442 2443 for (i = 0, len -= bl; i <= len; i += bl) 2444 (*dat->block) (in + i, out + i, &dat->ks); 2445 2446 return 1; 2447 } 2448 2449 static int aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 2450 const unsigned char *in, size_t len) 2451 { 2452 EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx); 2453 2454 int num = EVP_CIPHER_CTX_get_num(ctx); 2455 CRYPTO_ofb128_encrypt(in, out, len, &dat->ks, 2456 ctx->iv, &num, dat->block); 2457 EVP_CIPHER_CTX_set_num(ctx, num); 2458 return 1; 2459 } 2460 2461 static int aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 2462 const unsigned char *in, size_t len) 2463 { 2464 EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx); 2465 2466 int num = EVP_CIPHER_CTX_get_num(ctx); 2467 CRYPTO_cfb128_encrypt(in, out, len, &dat->ks, 2468 ctx->iv, &num, 2469 EVP_CIPHER_CTX_is_encrypting(ctx), dat->block); 2470 EVP_CIPHER_CTX_set_num(ctx, num); 2471 return 1; 2472 } 2473 2474 static int aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 2475 const unsigned char *in, size_t len) 2476 { 2477 EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx); 2478 2479 int num = EVP_CIPHER_CTX_get_num(ctx); 2480 CRYPTO_cfb128_8_encrypt(in, out, len, &dat->ks, 2481 ctx->iv, &num, 2482 EVP_CIPHER_CTX_is_encrypting(ctx), dat->block); 2483 EVP_CIPHER_CTX_set_num(ctx, num); 2484 return 1; 2485 } 2486 2487 static int aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 2488 const unsigned char *in, size_t len) 2489 { 2490 EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx); 2491 2492 if (EVP_CIPHER_CTX_test_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS)) { 2493 int num = EVP_CIPHER_CTX_get_num(ctx); 2494 CRYPTO_cfb128_1_encrypt(in, out, len, &dat->ks, 2495 ctx->iv, &num, 2496 EVP_CIPHER_CTX_is_encrypting(ctx), dat->block); 2497 EVP_CIPHER_CTX_set_num(ctx, num); 2498 return 1; 2499 } 2500 2501 while (len >= MAXBITCHUNK) { 2502 int num = EVP_CIPHER_CTX_get_num(ctx); 2503 CRYPTO_cfb128_1_encrypt(in, out, MAXBITCHUNK * 8, &dat->ks, 2504 ctx->iv, &num, 2505 EVP_CIPHER_CTX_is_encrypting(ctx), dat->block); 2506 EVP_CIPHER_CTX_set_num(ctx, num); 2507 len -= MAXBITCHUNK; 2508 out += MAXBITCHUNK; 2509 in += MAXBITCHUNK; 2510 } 2511 if (len) { 2512 int num = EVP_CIPHER_CTX_get_num(ctx); 2513 CRYPTO_cfb128_1_encrypt(in, out, len * 8, &dat->ks, 2514 ctx->iv, &num, 2515 EVP_CIPHER_CTX_is_encrypting(ctx), dat->block); 2516 EVP_CIPHER_CTX_set_num(ctx, num); 2517 } 2518 2519 return 1; 2520 } 2521 2522 static int aes_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 2523 const unsigned char *in, size_t len) 2524 { 2525 int n = EVP_CIPHER_CTX_get_num(ctx); 2526 unsigned int num; 2527 EVP_AES_KEY *dat = EVP_C_DATA(EVP_AES_KEY,ctx); 2528 2529 if (n < 0) 2530 return 0; 2531 num = (unsigned int)n; 2532 2533 if (dat->stream.ctr) 2534 CRYPTO_ctr128_encrypt_ctr32(in, out, len, &dat->ks, 2535 ctx->iv, 2536 EVP_CIPHER_CTX_buf_noconst(ctx), 2537 &num, dat->stream.ctr); 2538 else 2539 CRYPTO_ctr128_encrypt(in, out, len, &dat->ks, 2540 ctx->iv, 2541 EVP_CIPHER_CTX_buf_noconst(ctx), &num, 2542 dat->block); 2543 EVP_CIPHER_CTX_set_num(ctx, num); 2544 return 1; 2545 } 2546 2547 BLOCK_CIPHER_generic_pack(NID_aes, 128, 0) 2548 BLOCK_CIPHER_generic_pack(NID_aes, 192, 0) 2549 BLOCK_CIPHER_generic_pack(NID_aes, 256, 0) 2550 2551 static int aes_gcm_cleanup(EVP_CIPHER_CTX *c) 2552 { 2553 EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,c); 2554 if (gctx == NULL) 2555 return 0; 2556 OPENSSL_cleanse(&gctx->gcm, sizeof(gctx->gcm)); 2557 if (gctx->iv != c->iv) 2558 OPENSSL_free(gctx->iv); 2559 return 1; 2560 } 2561 2562 static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) 2563 { 2564 EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,c); 2565 switch (type) { 2566 case EVP_CTRL_INIT: 2567 gctx->key_set = 0; 2568 gctx->iv_set = 0; 2569 gctx->ivlen = EVP_CIPHER_get_iv_length(c->cipher); 2570 gctx->iv = c->iv; 2571 gctx->taglen = -1; 2572 gctx->iv_gen = 0; 2573 gctx->tls_aad_len = -1; 2574 return 1; 2575 2576 case EVP_CTRL_GET_IVLEN: 2577 *(int *)ptr = gctx->ivlen; 2578 return 1; 2579 2580 case EVP_CTRL_AEAD_SET_IVLEN: 2581 if (arg <= 0) 2582 return 0; 2583 /* Allocate memory for IV if needed */ 2584 if ((arg > EVP_MAX_IV_LENGTH) && (arg > gctx->ivlen)) { 2585 if (gctx->iv != c->iv) 2586 OPENSSL_free(gctx->iv); 2587 if ((gctx->iv = OPENSSL_malloc(arg)) == NULL) { 2588 ERR_raise(ERR_LIB_EVP, ERR_R_MALLOC_FAILURE); 2589 return 0; 2590 } 2591 } 2592 gctx->ivlen = arg; 2593 return 1; 2594 2595 case EVP_CTRL_AEAD_SET_TAG: 2596 if (arg <= 0 || arg > 16 || c->encrypt) 2597 return 0; 2598 memcpy(c->buf, ptr, arg); 2599 gctx->taglen = arg; 2600 return 1; 2601 2602 case EVP_CTRL_AEAD_GET_TAG: 2603 if (arg <= 0 || arg > 16 || !c->encrypt 2604 || gctx->taglen < 0) 2605 return 0; 2606 memcpy(ptr, c->buf, arg); 2607 return 1; 2608 2609 case EVP_CTRL_GCM_SET_IV_FIXED: 2610 /* Special case: -1 length restores whole IV */ 2611 if (arg == -1) { 2612 memcpy(gctx->iv, ptr, gctx->ivlen); 2613 gctx->iv_gen = 1; 2614 return 1; 2615 } 2616 /* 2617 * Fixed field must be at least 4 bytes and invocation field at least 2618 * 8. 2619 */ 2620 if ((arg < 4) || (gctx->ivlen - arg) < 8) 2621 return 0; 2622 if (arg) 2623 memcpy(gctx->iv, ptr, arg); 2624 if (c->encrypt && RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0) 2625 return 0; 2626 gctx->iv_gen = 1; 2627 return 1; 2628 2629 case EVP_CTRL_GCM_IV_GEN: 2630 if (gctx->iv_gen == 0 || gctx->key_set == 0) 2631 return 0; 2632 CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen); 2633 if (arg <= 0 || arg > gctx->ivlen) 2634 arg = gctx->ivlen; 2635 memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg); 2636 /* 2637 * Invocation field will be at least 8 bytes in size and so no need 2638 * to check wrap around or increment more than last 8 bytes. 2639 */ 2640 ctr64_inc(gctx->iv + gctx->ivlen - 8); 2641 gctx->iv_set = 1; 2642 return 1; 2643 2644 case EVP_CTRL_GCM_SET_IV_INV: 2645 if (gctx->iv_gen == 0 || gctx->key_set == 0 || c->encrypt) 2646 return 0; 2647 memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg); 2648 CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen); 2649 gctx->iv_set = 1; 2650 return 1; 2651 2652 case EVP_CTRL_AEAD_TLS1_AAD: 2653 /* Save the AAD for later use */ 2654 if (arg != EVP_AEAD_TLS1_AAD_LEN) 2655 return 0; 2656 memcpy(c->buf, ptr, arg); 2657 gctx->tls_aad_len = arg; 2658 gctx->tls_enc_records = 0; 2659 { 2660 unsigned int len = c->buf[arg - 2] << 8 | c->buf[arg - 1]; 2661 /* Correct length for explicit IV */ 2662 if (len < EVP_GCM_TLS_EXPLICIT_IV_LEN) 2663 return 0; 2664 len -= EVP_GCM_TLS_EXPLICIT_IV_LEN; 2665 /* If decrypting correct for tag too */ 2666 if (!c->encrypt) { 2667 if (len < EVP_GCM_TLS_TAG_LEN) 2668 return 0; 2669 len -= EVP_GCM_TLS_TAG_LEN; 2670 } 2671 c->buf[arg - 2] = len >> 8; 2672 c->buf[arg - 1] = len & 0xff; 2673 } 2674 /* Extra padding: tag appended to record */ 2675 return EVP_GCM_TLS_TAG_LEN; 2676 2677 case EVP_CTRL_COPY: 2678 { 2679 EVP_CIPHER_CTX *out = ptr; 2680 EVP_AES_GCM_CTX *gctx_out = EVP_C_DATA(EVP_AES_GCM_CTX,out); 2681 if (gctx->gcm.key) { 2682 if (gctx->gcm.key != &gctx->ks) 2683 return 0; 2684 gctx_out->gcm.key = &gctx_out->ks; 2685 } 2686 if (gctx->iv == c->iv) 2687 gctx_out->iv = out->iv; 2688 else { 2689 if ((gctx_out->iv = OPENSSL_malloc(gctx->ivlen)) == NULL) { 2690 ERR_raise(ERR_LIB_EVP, ERR_R_MALLOC_FAILURE); 2691 return 0; 2692 } 2693 memcpy(gctx_out->iv, gctx->iv, gctx->ivlen); 2694 } 2695 return 1; 2696 } 2697 2698 default: 2699 return -1; 2700 2701 } 2702 } 2703 2704 static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 2705 const unsigned char *iv, int enc) 2706 { 2707 EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx); 2708 if (!iv && !key) 2709 return 1; 2710 if (key) { 2711 do { 2712 #ifdef HWAES_CAPABLE 2713 if (HWAES_CAPABLE) { 2714 HWAES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks); 2715 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, 2716 (block128_f) HWAES_encrypt); 2717 # ifdef HWAES_ctr32_encrypt_blocks 2718 gctx->ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks; 2719 # else 2720 gctx->ctr = NULL; 2721 # endif 2722 break; 2723 } else 2724 #endif 2725 #ifdef BSAES_CAPABLE 2726 if (BSAES_CAPABLE) { 2727 AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks); 2728 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, 2729 (block128_f) AES_encrypt); 2730 gctx->ctr = (ctr128_f) ossl_bsaes_ctr32_encrypt_blocks; 2731 break; 2732 } else 2733 #endif 2734 #ifdef VPAES_CAPABLE 2735 if (VPAES_CAPABLE) { 2736 vpaes_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks); 2737 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, 2738 (block128_f) vpaes_encrypt); 2739 gctx->ctr = NULL; 2740 break; 2741 } else 2742 #endif 2743 (void)0; /* terminate potentially open 'else' */ 2744 2745 AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks); 2746 CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, 2747 (block128_f) AES_encrypt); 2748 #ifdef AES_CTR_ASM 2749 gctx->ctr = (ctr128_f) AES_ctr32_encrypt; 2750 #else 2751 gctx->ctr = NULL; 2752 #endif 2753 } while (0); 2754 2755 /* 2756 * If we have an iv can set it directly, otherwise use saved IV. 2757 */ 2758 if (iv == NULL && gctx->iv_set) 2759 iv = gctx->iv; 2760 if (iv) { 2761 CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen); 2762 gctx->iv_set = 1; 2763 } 2764 gctx->key_set = 1; 2765 } else { 2766 /* If key set use IV, otherwise copy */ 2767 if (gctx->key_set) 2768 CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen); 2769 else 2770 memcpy(gctx->iv, iv, gctx->ivlen); 2771 gctx->iv_set = 1; 2772 gctx->iv_gen = 0; 2773 } 2774 return 1; 2775 } 2776 2777 /* 2778 * Handle TLS GCM packet format. This consists of the last portion of the IV 2779 * followed by the payload and finally the tag. On encrypt generate IV, 2780 * encrypt payload and write the tag. On verify retrieve IV, decrypt payload 2781 * and verify tag. 2782 */ 2783 2784 static int aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 2785 const unsigned char *in, size_t len) 2786 { 2787 EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx); 2788 int rv = -1; 2789 /* Encrypt/decrypt must be performed in place */ 2790 if (out != in 2791 || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN)) 2792 return -1; 2793 2794 /* 2795 * Check for too many keys as per FIPS 140-2 IG A.5 "Key/IV Pair Uniqueness 2796 * Requirements from SP 800-38D". The requirements is for one party to the 2797 * communication to fail after 2^64 - 1 keys. We do this on the encrypting 2798 * side only. 2799 */ 2800 if (ctx->encrypt && ++gctx->tls_enc_records == 0) { 2801 ERR_raise(ERR_LIB_EVP, EVP_R_TOO_MANY_RECORDS); 2802 goto err; 2803 } 2804 2805 /* 2806 * Set IV from start of buffer or generate IV and write to start of 2807 * buffer. 2808 */ 2809 if (EVP_CIPHER_CTX_ctrl(ctx, ctx->encrypt ? EVP_CTRL_GCM_IV_GEN 2810 : EVP_CTRL_GCM_SET_IV_INV, 2811 EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0) 2812 goto err; 2813 /* Use saved AAD */ 2814 if (CRYPTO_gcm128_aad(&gctx->gcm, ctx->buf, gctx->tls_aad_len)) 2815 goto err; 2816 /* Fix buffer and length to point to payload */ 2817 in += EVP_GCM_TLS_EXPLICIT_IV_LEN; 2818 out += EVP_GCM_TLS_EXPLICIT_IV_LEN; 2819 len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN; 2820 if (ctx->encrypt) { 2821 /* Encrypt payload */ 2822 if (gctx->ctr) { 2823 size_t bulk = 0; 2824 #if defined(AES_GCM_ASM) 2825 if (len >= 32 && AES_GCM_ASM(gctx)) { 2826 if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0)) 2827 return -1; 2828 2829 bulk = AES_gcm_encrypt(in, out, len, 2830 gctx->gcm.key, 2831 gctx->gcm.Yi.c, gctx->gcm.Xi.u); 2832 gctx->gcm.len.u[1] += bulk; 2833 } 2834 #endif 2835 if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm, 2836 in + bulk, 2837 out + bulk, 2838 len - bulk, gctx->ctr)) 2839 goto err; 2840 } else { 2841 size_t bulk = 0; 2842 #if defined(AES_GCM_ASM2) 2843 if (len >= 32 && AES_GCM_ASM2(gctx)) { 2844 if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0)) 2845 return -1; 2846 2847 bulk = AES_gcm_encrypt(in, out, len, 2848 gctx->gcm.key, 2849 gctx->gcm.Yi.c, gctx->gcm.Xi.u); 2850 gctx->gcm.len.u[1] += bulk; 2851 } 2852 #endif 2853 if (CRYPTO_gcm128_encrypt(&gctx->gcm, 2854 in + bulk, out + bulk, len - bulk)) 2855 goto err; 2856 } 2857 out += len; 2858 /* Finally write tag */ 2859 CRYPTO_gcm128_tag(&gctx->gcm, out, EVP_GCM_TLS_TAG_LEN); 2860 rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN; 2861 } else { 2862 /* Decrypt */ 2863 if (gctx->ctr) { 2864 size_t bulk = 0; 2865 #if defined(AES_GCM_ASM) 2866 if (len >= 16 && AES_GCM_ASM(gctx)) { 2867 if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0)) 2868 return -1; 2869 2870 bulk = AES_gcm_decrypt(in, out, len, 2871 gctx->gcm.key, 2872 gctx->gcm.Yi.c, gctx->gcm.Xi.u); 2873 gctx->gcm.len.u[1] += bulk; 2874 } 2875 #endif 2876 if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm, 2877 in + bulk, 2878 out + bulk, 2879 len - bulk, gctx->ctr)) 2880 goto err; 2881 } else { 2882 size_t bulk = 0; 2883 #if defined(AES_GCM_ASM2) 2884 if (len >= 16 && AES_GCM_ASM2(gctx)) { 2885 if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0)) 2886 return -1; 2887 2888 bulk = AES_gcm_decrypt(in, out, len, 2889 gctx->gcm.key, 2890 gctx->gcm.Yi.c, gctx->gcm.Xi.u); 2891 gctx->gcm.len.u[1] += bulk; 2892 } 2893 #endif 2894 if (CRYPTO_gcm128_decrypt(&gctx->gcm, 2895 in + bulk, out + bulk, len - bulk)) 2896 goto err; 2897 } 2898 /* Retrieve tag */ 2899 CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf, EVP_GCM_TLS_TAG_LEN); 2900 /* If tag mismatch wipe buffer */ 2901 if (CRYPTO_memcmp(ctx->buf, in + len, EVP_GCM_TLS_TAG_LEN)) { 2902 OPENSSL_cleanse(out, len); 2903 goto err; 2904 } 2905 rv = len; 2906 } 2907 2908 err: 2909 gctx->iv_set = 0; 2910 gctx->tls_aad_len = -1; 2911 return rv; 2912 } 2913 2914 #ifdef FIPS_MODULE 2915 /* 2916 * See SP800-38D (GCM) Section 8 "Uniqueness requirement on IVS and keys" 2917 * 2918 * See also 8.2.2 RBG-based construction. 2919 * Random construction consists of a free field (which can be NULL) and a 2920 * random field which will use a DRBG that can return at least 96 bits of 2921 * entropy strength. (The DRBG must be seeded by the FIPS module). 2922 */ 2923 static int aes_gcm_iv_generate(EVP_AES_GCM_CTX *gctx, int offset) 2924 { 2925 int sz = gctx->ivlen - offset; 2926 2927 /* Must be at least 96 bits */ 2928 if (sz <= 0 || gctx->ivlen < 12) 2929 return 0; 2930 2931 /* Use DRBG to generate random iv */ 2932 if (RAND_bytes(gctx->iv + offset, sz) <= 0) 2933 return 0; 2934 return 1; 2935 } 2936 #endif /* FIPS_MODULE */ 2937 2938 static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 2939 const unsigned char *in, size_t len) 2940 { 2941 EVP_AES_GCM_CTX *gctx = EVP_C_DATA(EVP_AES_GCM_CTX,ctx); 2942 2943 /* If not set up, return error */ 2944 if (!gctx->key_set) 2945 return -1; 2946 2947 if (gctx->tls_aad_len >= 0) 2948 return aes_gcm_tls_cipher(ctx, out, in, len); 2949 2950 #ifdef FIPS_MODULE 2951 /* 2952 * FIPS requires generation of AES-GCM IV's inside the FIPS module. 2953 * The IV can still be set externally (the security policy will state that 2954 * this is not FIPS compliant). There are some applications 2955 * where setting the IV externally is the only option available. 2956 */ 2957 if (!gctx->iv_set) { 2958 if (!ctx->encrypt || !aes_gcm_iv_generate(gctx, 0)) 2959 return -1; 2960 CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen); 2961 gctx->iv_set = 1; 2962 gctx->iv_gen_rand = 1; 2963 } 2964 #else 2965 if (!gctx->iv_set) 2966 return -1; 2967 #endif /* FIPS_MODULE */ 2968 2969 if (in) { 2970 if (out == NULL) { 2971 if (CRYPTO_gcm128_aad(&gctx->gcm, in, len)) 2972 return -1; 2973 } else if (ctx->encrypt) { 2974 if (gctx->ctr) { 2975 size_t bulk = 0; 2976 #if defined(AES_GCM_ASM) 2977 if (len >= 32 && AES_GCM_ASM(gctx)) { 2978 size_t res = (16 - gctx->gcm.mres) % 16; 2979 2980 if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res)) 2981 return -1; 2982 2983 bulk = AES_gcm_encrypt(in + res, 2984 out + res, len - res, 2985 gctx->gcm.key, gctx->gcm.Yi.c, 2986 gctx->gcm.Xi.u); 2987 gctx->gcm.len.u[1] += bulk; 2988 bulk += res; 2989 } 2990 #endif 2991 if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm, 2992 in + bulk, 2993 out + bulk, 2994 len - bulk, gctx->ctr)) 2995 return -1; 2996 } else { 2997 size_t bulk = 0; 2998 #if defined(AES_GCM_ASM2) 2999 if (len >= 32 && AES_GCM_ASM2(gctx)) { 3000 size_t res = (16 - gctx->gcm.mres) % 16; 3001 3002 if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res)) 3003 return -1; 3004 3005 bulk = AES_gcm_encrypt(in + res, 3006 out + res, len - res, 3007 gctx->gcm.key, gctx->gcm.Yi.c, 3008 gctx->gcm.Xi.u); 3009 gctx->gcm.len.u[1] += bulk; 3010 bulk += res; 3011 } 3012 #endif 3013 if (CRYPTO_gcm128_encrypt(&gctx->gcm, 3014 in + bulk, out + bulk, len - bulk)) 3015 return -1; 3016 } 3017 } else { 3018 if (gctx->ctr) { 3019 size_t bulk = 0; 3020 #if defined(AES_GCM_ASM) 3021 if (len >= 16 && AES_GCM_ASM(gctx)) { 3022 size_t res = (16 - gctx->gcm.mres) % 16; 3023 3024 if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res)) 3025 return -1; 3026 3027 bulk = AES_gcm_decrypt(in + res, 3028 out + res, len - res, 3029 gctx->gcm.key, 3030 gctx->gcm.Yi.c, gctx->gcm.Xi.u); 3031 gctx->gcm.len.u[1] += bulk; 3032 bulk += res; 3033 } 3034 #endif 3035 if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm, 3036 in + bulk, 3037 out + bulk, 3038 len - bulk, gctx->ctr)) 3039 return -1; 3040 } else { 3041 size_t bulk = 0; 3042 #if defined(AES_GCM_ASM2) 3043 if (len >= 16 && AES_GCM_ASM2(gctx)) { 3044 size_t res = (16 - gctx->gcm.mres) % 16; 3045 3046 if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res)) 3047 return -1; 3048 3049 bulk = AES_gcm_decrypt(in + res, 3050 out + res, len - res, 3051 gctx->gcm.key, 3052 gctx->gcm.Yi.c, gctx->gcm.Xi.u); 3053 gctx->gcm.len.u[1] += bulk; 3054 bulk += res; 3055 } 3056 #endif 3057 if (CRYPTO_gcm128_decrypt(&gctx->gcm, 3058 in + bulk, out + bulk, len - bulk)) 3059 return -1; 3060 } 3061 } 3062 return len; 3063 } else { 3064 if (!ctx->encrypt) { 3065 if (gctx->taglen < 0) 3066 return -1; 3067 if (CRYPTO_gcm128_finish(&gctx->gcm, ctx->buf, gctx->taglen) != 0) 3068 return -1; 3069 gctx->iv_set = 0; 3070 return 0; 3071 } 3072 CRYPTO_gcm128_tag(&gctx->gcm, ctx->buf, 16); 3073 gctx->taglen = 16; 3074 /* Don't reuse the IV */ 3075 gctx->iv_set = 0; 3076 return 0; 3077 } 3078 3079 } 3080 3081 #define CUSTOM_FLAGS (EVP_CIPH_FLAG_DEFAULT_ASN1 \ 3082 | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \ 3083 | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \ 3084 | EVP_CIPH_CUSTOM_COPY | EVP_CIPH_CUSTOM_IV_LENGTH) 3085 3086 BLOCK_CIPHER_custom(NID_aes, 128, 1, 12, gcm, GCM, 3087 EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS) 3088 BLOCK_CIPHER_custom(NID_aes, 192, 1, 12, gcm, GCM, 3089 EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS) 3090 BLOCK_CIPHER_custom(NID_aes, 256, 1, 12, gcm, GCM, 3091 EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS) 3092 3093 static int aes_xts_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) 3094 { 3095 EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX, c); 3096 3097 if (type == EVP_CTRL_COPY) { 3098 EVP_CIPHER_CTX *out = ptr; 3099 EVP_AES_XTS_CTX *xctx_out = EVP_C_DATA(EVP_AES_XTS_CTX,out); 3100 3101 if (xctx->xts.key1) { 3102 if (xctx->xts.key1 != &xctx->ks1) 3103 return 0; 3104 xctx_out->xts.key1 = &xctx_out->ks1; 3105 } 3106 if (xctx->xts.key2) { 3107 if (xctx->xts.key2 != &xctx->ks2) 3108 return 0; 3109 xctx_out->xts.key2 = &xctx_out->ks2; 3110 } 3111 return 1; 3112 } else if (type != EVP_CTRL_INIT) 3113 return -1; 3114 /* key1 and key2 are used as an indicator both key and IV are set */ 3115 xctx->xts.key1 = NULL; 3116 xctx->xts.key2 = NULL; 3117 return 1; 3118 } 3119 3120 static int aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 3121 const unsigned char *iv, int enc) 3122 { 3123 EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx); 3124 3125 if (!iv && !key) 3126 return 1; 3127 3128 if (key) { 3129 do { 3130 /* The key is two half length keys in reality */ 3131 const int bytes = EVP_CIPHER_CTX_get_key_length(ctx) / 2; 3132 const int bits = bytes * 8; 3133 3134 /* 3135 * Verify that the two keys are different. 3136 * 3137 * This addresses the vulnerability described in Rogaway's 3138 * September 2004 paper: 3139 * 3140 * "Efficient Instantiations of Tweakable Blockciphers and 3141 * Refinements to Modes OCB and PMAC". 3142 * (http://web.cs.ucdavis.edu/~rogaway/papers/offsets.pdf) 3143 * 3144 * FIPS 140-2 IG A.9 XTS-AES Key Generation Requirements states 3145 * that: 3146 * "The check for Key_1 != Key_2 shall be done at any place 3147 * BEFORE using the keys in the XTS-AES algorithm to process 3148 * data with them." 3149 */ 3150 if ((!allow_insecure_decrypt || enc) 3151 && CRYPTO_memcmp(key, key + bytes, bytes) == 0) { 3152 ERR_raise(ERR_LIB_EVP, EVP_R_XTS_DUPLICATED_KEYS); 3153 return 0; 3154 } 3155 3156 #ifdef AES_XTS_ASM 3157 xctx->stream = enc ? AES_xts_encrypt : AES_xts_decrypt; 3158 #else 3159 xctx->stream = NULL; 3160 #endif 3161 /* key_len is two AES keys */ 3162 #ifdef HWAES_CAPABLE 3163 if (HWAES_CAPABLE) { 3164 if (enc) { 3165 HWAES_set_encrypt_key(key, bits, &xctx->ks1.ks); 3166 xctx->xts.block1 = (block128_f) HWAES_encrypt; 3167 # ifdef HWAES_xts_encrypt 3168 xctx->stream = HWAES_xts_encrypt; 3169 # endif 3170 } else { 3171 HWAES_set_decrypt_key(key, bits, &xctx->ks1.ks); 3172 xctx->xts.block1 = (block128_f) HWAES_decrypt; 3173 # ifdef HWAES_xts_decrypt 3174 xctx->stream = HWAES_xts_decrypt; 3175 #endif 3176 } 3177 3178 HWAES_set_encrypt_key(key + bytes, bits, &xctx->ks2.ks); 3179 xctx->xts.block2 = (block128_f) HWAES_encrypt; 3180 3181 xctx->xts.key1 = &xctx->ks1; 3182 break; 3183 } else 3184 #endif 3185 #ifdef BSAES_CAPABLE 3186 if (BSAES_CAPABLE) 3187 xctx->stream = enc ? ossl_bsaes_xts_encrypt : ossl_bsaes_xts_decrypt; 3188 else 3189 #endif 3190 #ifdef VPAES_CAPABLE 3191 if (VPAES_CAPABLE) { 3192 if (enc) { 3193 vpaes_set_encrypt_key(key, bits, &xctx->ks1.ks); 3194 xctx->xts.block1 = (block128_f) vpaes_encrypt; 3195 } else { 3196 vpaes_set_decrypt_key(key, bits, &xctx->ks1.ks); 3197 xctx->xts.block1 = (block128_f) vpaes_decrypt; 3198 } 3199 3200 vpaes_set_encrypt_key(key + bytes, bits, &xctx->ks2.ks); 3201 xctx->xts.block2 = (block128_f) vpaes_encrypt; 3202 3203 xctx->xts.key1 = &xctx->ks1; 3204 break; 3205 } else 3206 #endif 3207 (void)0; /* terminate potentially open 'else' */ 3208 3209 if (enc) { 3210 AES_set_encrypt_key(key, bits, &xctx->ks1.ks); 3211 xctx->xts.block1 = (block128_f) AES_encrypt; 3212 } else { 3213 AES_set_decrypt_key(key, bits, &xctx->ks1.ks); 3214 xctx->xts.block1 = (block128_f) AES_decrypt; 3215 } 3216 3217 AES_set_encrypt_key(key + bytes, bits, &xctx->ks2.ks); 3218 xctx->xts.block2 = (block128_f) AES_encrypt; 3219 3220 xctx->xts.key1 = &xctx->ks1; 3221 } while (0); 3222 } 3223 3224 if (iv) { 3225 xctx->xts.key2 = &xctx->ks2; 3226 memcpy(ctx->iv, iv, 16); 3227 } 3228 3229 return 1; 3230 } 3231 3232 static int aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 3233 const unsigned char *in, size_t len) 3234 { 3235 EVP_AES_XTS_CTX *xctx = EVP_C_DATA(EVP_AES_XTS_CTX,ctx); 3236 3237 if (xctx->xts.key1 == NULL 3238 || xctx->xts.key2 == NULL 3239 || out == NULL 3240 || in == NULL 3241 || len < AES_BLOCK_SIZE) 3242 return 0; 3243 3244 /* 3245 * Impose a limit of 2^20 blocks per data unit as specified by 3246 * IEEE Std 1619-2018. The earlier and obsolete IEEE Std 1619-2007 3247 * indicated that this was a SHOULD NOT rather than a MUST NOT. 3248 * NIST SP 800-38E mandates the same limit. 3249 */ 3250 if (len > XTS_MAX_BLOCKS_PER_DATA_UNIT * AES_BLOCK_SIZE) { 3251 ERR_raise(ERR_LIB_EVP, EVP_R_XTS_DATA_UNIT_IS_TOO_LARGE); 3252 return 0; 3253 } 3254 3255 if (xctx->stream) 3256 (*xctx->stream) (in, out, len, 3257 xctx->xts.key1, xctx->xts.key2, 3258 ctx->iv); 3259 else if (CRYPTO_xts128_encrypt(&xctx->xts, ctx->iv, in, out, len, 3260 EVP_CIPHER_CTX_is_encrypting(ctx))) 3261 return 0; 3262 return 1; 3263 } 3264 3265 #define aes_xts_cleanup NULL 3266 3267 #define XTS_FLAGS (EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CUSTOM_IV \ 3268 | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \ 3269 | EVP_CIPH_CUSTOM_COPY) 3270 3271 BLOCK_CIPHER_custom(NID_aes, 128, 1, 16, xts, XTS, XTS_FLAGS) 3272 BLOCK_CIPHER_custom(NID_aes, 256, 1, 16, xts, XTS, XTS_FLAGS) 3273 3274 static int aes_ccm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) 3275 { 3276 EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,c); 3277 switch (type) { 3278 case EVP_CTRL_INIT: 3279 cctx->key_set = 0; 3280 cctx->iv_set = 0; 3281 cctx->L = 8; 3282 cctx->M = 12; 3283 cctx->tag_set = 0; 3284 cctx->len_set = 0; 3285 cctx->tls_aad_len = -1; 3286 return 1; 3287 3288 case EVP_CTRL_GET_IVLEN: 3289 *(int *)ptr = 15 - cctx->L; 3290 return 1; 3291 3292 case EVP_CTRL_AEAD_TLS1_AAD: 3293 /* Save the AAD for later use */ 3294 if (arg != EVP_AEAD_TLS1_AAD_LEN) 3295 return 0; 3296 memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg); 3297 cctx->tls_aad_len = arg; 3298 { 3299 uint16_t len = 3300 EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] << 8 3301 | EVP_CIPHER_CTX_buf_noconst(c)[arg - 1]; 3302 /* Correct length for explicit IV */ 3303 if (len < EVP_CCM_TLS_EXPLICIT_IV_LEN) 3304 return 0; 3305 len -= EVP_CCM_TLS_EXPLICIT_IV_LEN; 3306 /* If decrypting correct for tag too */ 3307 if (!EVP_CIPHER_CTX_is_encrypting(c)) { 3308 if (len < cctx->M) 3309 return 0; 3310 len -= cctx->M; 3311 } 3312 EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] = len >> 8; 3313 EVP_CIPHER_CTX_buf_noconst(c)[arg - 1] = len & 0xff; 3314 } 3315 /* Extra padding: tag appended to record */ 3316 return cctx->M; 3317 3318 case EVP_CTRL_CCM_SET_IV_FIXED: 3319 /* Sanity check length */ 3320 if (arg != EVP_CCM_TLS_FIXED_IV_LEN) 3321 return 0; 3322 /* Just copy to first part of IV */ 3323 memcpy(c->iv, ptr, arg); 3324 return 1; 3325 3326 case EVP_CTRL_AEAD_SET_IVLEN: 3327 arg = 15 - arg; 3328 /* fall thru */ 3329 case EVP_CTRL_CCM_SET_L: 3330 if (arg < 2 || arg > 8) 3331 return 0; 3332 cctx->L = arg; 3333 return 1; 3334 3335 case EVP_CTRL_AEAD_SET_TAG: 3336 if ((arg & 1) || arg < 4 || arg > 16) 3337 return 0; 3338 if (EVP_CIPHER_CTX_is_encrypting(c) && ptr) 3339 return 0; 3340 if (ptr) { 3341 cctx->tag_set = 1; 3342 memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg); 3343 } 3344 cctx->M = arg; 3345 return 1; 3346 3347 case EVP_CTRL_AEAD_GET_TAG: 3348 if (!EVP_CIPHER_CTX_is_encrypting(c) || !cctx->tag_set) 3349 return 0; 3350 if (!CRYPTO_ccm128_tag(&cctx->ccm, ptr, (size_t)arg)) 3351 return 0; 3352 cctx->tag_set = 0; 3353 cctx->iv_set = 0; 3354 cctx->len_set = 0; 3355 return 1; 3356 3357 case EVP_CTRL_COPY: 3358 { 3359 EVP_CIPHER_CTX *out = ptr; 3360 EVP_AES_CCM_CTX *cctx_out = EVP_C_DATA(EVP_AES_CCM_CTX,out); 3361 if (cctx->ccm.key) { 3362 if (cctx->ccm.key != &cctx->ks) 3363 return 0; 3364 cctx_out->ccm.key = &cctx_out->ks; 3365 } 3366 return 1; 3367 } 3368 3369 default: 3370 return -1; 3371 3372 } 3373 } 3374 3375 static int aes_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 3376 const unsigned char *iv, int enc) 3377 { 3378 EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx); 3379 if (!iv && !key) 3380 return 1; 3381 if (key) 3382 do { 3383 #ifdef HWAES_CAPABLE 3384 if (HWAES_CAPABLE) { 3385 HWAES_set_encrypt_key(key, 3386 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3387 &cctx->ks.ks); 3388 3389 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, 3390 &cctx->ks, (block128_f) HWAES_encrypt); 3391 cctx->str = NULL; 3392 cctx->key_set = 1; 3393 break; 3394 } else 3395 #endif 3396 #ifdef VPAES_CAPABLE 3397 if (VPAES_CAPABLE) { 3398 vpaes_set_encrypt_key(key, 3399 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3400 &cctx->ks.ks); 3401 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, 3402 &cctx->ks, (block128_f) vpaes_encrypt); 3403 cctx->str = NULL; 3404 cctx->key_set = 1; 3405 break; 3406 } 3407 #endif 3408 AES_set_encrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3409 &cctx->ks.ks); 3410 CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, 3411 &cctx->ks, (block128_f) AES_encrypt); 3412 cctx->str = NULL; 3413 cctx->key_set = 1; 3414 } while (0); 3415 if (iv) { 3416 memcpy(ctx->iv, iv, 15 - cctx->L); 3417 cctx->iv_set = 1; 3418 } 3419 return 1; 3420 } 3421 3422 static int aes_ccm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 3423 const unsigned char *in, size_t len) 3424 { 3425 EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx); 3426 CCM128_CONTEXT *ccm = &cctx->ccm; 3427 /* Encrypt/decrypt must be performed in place */ 3428 if (out != in || len < (EVP_CCM_TLS_EXPLICIT_IV_LEN + (size_t)cctx->M)) 3429 return -1; 3430 /* If encrypting set explicit IV from sequence number (start of AAD) */ 3431 if (EVP_CIPHER_CTX_is_encrypting(ctx)) 3432 memcpy(out, EVP_CIPHER_CTX_buf_noconst(ctx), 3433 EVP_CCM_TLS_EXPLICIT_IV_LEN); 3434 /* Get rest of IV from explicit IV */ 3435 memcpy(ctx->iv + EVP_CCM_TLS_FIXED_IV_LEN, in, 3436 EVP_CCM_TLS_EXPLICIT_IV_LEN); 3437 /* Correct length value */ 3438 len -= EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->M; 3439 if (CRYPTO_ccm128_setiv(ccm, ctx->iv, 15 - cctx->L, 3440 len)) 3441 return -1; 3442 /* Use saved AAD */ 3443 CRYPTO_ccm128_aad(ccm, EVP_CIPHER_CTX_buf_noconst(ctx), 3444 cctx->tls_aad_len); 3445 /* Fix buffer to point to payload */ 3446 in += EVP_CCM_TLS_EXPLICIT_IV_LEN; 3447 out += EVP_CCM_TLS_EXPLICIT_IV_LEN; 3448 if (EVP_CIPHER_CTX_is_encrypting(ctx)) { 3449 if (cctx->str ? CRYPTO_ccm128_encrypt_ccm64(ccm, in, out, len, 3450 cctx->str) : 3451 CRYPTO_ccm128_encrypt(ccm, in, out, len)) 3452 return -1; 3453 if (!CRYPTO_ccm128_tag(ccm, out + len, cctx->M)) 3454 return -1; 3455 return len + EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->M; 3456 } else { 3457 if (cctx->str ? !CRYPTO_ccm128_decrypt_ccm64(ccm, in, out, len, 3458 cctx->str) : 3459 !CRYPTO_ccm128_decrypt(ccm, in, out, len)) { 3460 unsigned char tag[16]; 3461 if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) { 3462 if (!CRYPTO_memcmp(tag, in + len, cctx->M)) 3463 return len; 3464 } 3465 } 3466 OPENSSL_cleanse(out, len); 3467 return -1; 3468 } 3469 } 3470 3471 static int aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 3472 const unsigned char *in, size_t len) 3473 { 3474 EVP_AES_CCM_CTX *cctx = EVP_C_DATA(EVP_AES_CCM_CTX,ctx); 3475 CCM128_CONTEXT *ccm = &cctx->ccm; 3476 /* If not set up, return error */ 3477 if (!cctx->key_set) 3478 return -1; 3479 3480 if (cctx->tls_aad_len >= 0) 3481 return aes_ccm_tls_cipher(ctx, out, in, len); 3482 3483 /* EVP_*Final() doesn't return any data */ 3484 if (in == NULL && out != NULL) 3485 return 0; 3486 3487 if (!cctx->iv_set) 3488 return -1; 3489 3490 if (!out) { 3491 if (!in) { 3492 if (CRYPTO_ccm128_setiv(ccm, ctx->iv, 3493 15 - cctx->L, len)) 3494 return -1; 3495 cctx->len_set = 1; 3496 return len; 3497 } 3498 /* If have AAD need message length */ 3499 if (!cctx->len_set && len) 3500 return -1; 3501 CRYPTO_ccm128_aad(ccm, in, len); 3502 return len; 3503 } 3504 3505 /* The tag must be set before actually decrypting data */ 3506 if (!EVP_CIPHER_CTX_is_encrypting(ctx) && !cctx->tag_set) 3507 return -1; 3508 3509 /* If not set length yet do it */ 3510 if (!cctx->len_set) { 3511 if (CRYPTO_ccm128_setiv(ccm, ctx->iv, 15 - cctx->L, len)) 3512 return -1; 3513 cctx->len_set = 1; 3514 } 3515 if (EVP_CIPHER_CTX_is_encrypting(ctx)) { 3516 if (cctx->str ? CRYPTO_ccm128_encrypt_ccm64(ccm, in, out, len, 3517 cctx->str) : 3518 CRYPTO_ccm128_encrypt(ccm, in, out, len)) 3519 return -1; 3520 cctx->tag_set = 1; 3521 return len; 3522 } else { 3523 int rv = -1; 3524 if (cctx->str ? !CRYPTO_ccm128_decrypt_ccm64(ccm, in, out, len, 3525 cctx->str) : 3526 !CRYPTO_ccm128_decrypt(ccm, in, out, len)) { 3527 unsigned char tag[16]; 3528 if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) { 3529 if (!CRYPTO_memcmp(tag, EVP_CIPHER_CTX_buf_noconst(ctx), 3530 cctx->M)) 3531 rv = len; 3532 } 3533 } 3534 if (rv == -1) 3535 OPENSSL_cleanse(out, len); 3536 cctx->iv_set = 0; 3537 cctx->tag_set = 0; 3538 cctx->len_set = 0; 3539 return rv; 3540 } 3541 } 3542 3543 #define aes_ccm_cleanup NULL 3544 3545 BLOCK_CIPHER_custom(NID_aes, 128, 1, 12, ccm, CCM, 3546 EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS) 3547 BLOCK_CIPHER_custom(NID_aes, 192, 1, 12, ccm, CCM, 3548 EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS) 3549 BLOCK_CIPHER_custom(NID_aes, 256, 1, 12, ccm, CCM, 3550 EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS) 3551 3552 typedef struct { 3553 union { 3554 OSSL_UNION_ALIGN; 3555 AES_KEY ks; 3556 } ks; 3557 /* Indicates if IV has been set */ 3558 unsigned char *iv; 3559 } EVP_AES_WRAP_CTX; 3560 3561 static int aes_wrap_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 3562 const unsigned char *iv, int enc) 3563 { 3564 int len; 3565 EVP_AES_WRAP_CTX *wctx = EVP_C_DATA(EVP_AES_WRAP_CTX,ctx); 3566 3567 if (iv == NULL && key == NULL) 3568 return 1; 3569 if (key != NULL) { 3570 if (EVP_CIPHER_CTX_is_encrypting(ctx)) 3571 AES_set_encrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3572 &wctx->ks.ks); 3573 else 3574 AES_set_decrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3575 &wctx->ks.ks); 3576 if (iv == NULL) 3577 wctx->iv = NULL; 3578 } 3579 if (iv != NULL) { 3580 if ((len = EVP_CIPHER_CTX_get_iv_length(ctx)) < 0) 3581 return 0; 3582 memcpy(ctx->iv, iv, len); 3583 wctx->iv = ctx->iv; 3584 } 3585 return 1; 3586 } 3587 3588 static int aes_wrap_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 3589 const unsigned char *in, size_t inlen) 3590 { 3591 EVP_AES_WRAP_CTX *wctx = EVP_C_DATA(EVP_AES_WRAP_CTX,ctx); 3592 size_t rv; 3593 /* AES wrap with padding has IV length of 4, without padding 8 */ 3594 int pad = EVP_CIPHER_CTX_get_iv_length(ctx) == 4; 3595 /* No final operation so always return zero length */ 3596 if (!in) 3597 return 0; 3598 /* Input length must always be non-zero */ 3599 if (!inlen) 3600 return -1; 3601 /* If decrypting need at least 16 bytes and multiple of 8 */ 3602 if (!EVP_CIPHER_CTX_is_encrypting(ctx) && (inlen < 16 || inlen & 0x7)) 3603 return -1; 3604 /* If not padding input must be multiple of 8 */ 3605 if (!pad && inlen & 0x7) 3606 return -1; 3607 if (ossl_is_partially_overlapping(out, in, inlen)) { 3608 ERR_raise(ERR_LIB_EVP, EVP_R_PARTIALLY_OVERLAPPING); 3609 return 0; 3610 } 3611 if (!out) { 3612 if (EVP_CIPHER_CTX_is_encrypting(ctx)) { 3613 /* If padding round up to multiple of 8 */ 3614 if (pad) 3615 inlen = (inlen + 7) / 8 * 8; 3616 /* 8 byte prefix */ 3617 return inlen + 8; 3618 } else { 3619 /* 3620 * If not padding output will be exactly 8 bytes smaller than 3621 * input. If padding it will be at least 8 bytes smaller but we 3622 * don't know how much. 3623 */ 3624 return inlen - 8; 3625 } 3626 } 3627 if (pad) { 3628 if (EVP_CIPHER_CTX_is_encrypting(ctx)) 3629 rv = CRYPTO_128_wrap_pad(&wctx->ks.ks, wctx->iv, 3630 out, in, inlen, 3631 (block128_f) AES_encrypt); 3632 else 3633 rv = CRYPTO_128_unwrap_pad(&wctx->ks.ks, wctx->iv, 3634 out, in, inlen, 3635 (block128_f) AES_decrypt); 3636 } else { 3637 if (EVP_CIPHER_CTX_is_encrypting(ctx)) 3638 rv = CRYPTO_128_wrap(&wctx->ks.ks, wctx->iv, 3639 out, in, inlen, (block128_f) AES_encrypt); 3640 else 3641 rv = CRYPTO_128_unwrap(&wctx->ks.ks, wctx->iv, 3642 out, in, inlen, (block128_f) AES_decrypt); 3643 } 3644 return rv ? (int)rv : -1; 3645 } 3646 3647 #define WRAP_FLAGS (EVP_CIPH_WRAP_MODE \ 3648 | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \ 3649 | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_FLAG_DEFAULT_ASN1) 3650 3651 static const EVP_CIPHER aes_128_wrap = { 3652 NID_id_aes128_wrap, 3653 8, 16, 8, WRAP_FLAGS, EVP_ORIG_GLOBAL, 3654 aes_wrap_init_key, aes_wrap_cipher, 3655 NULL, 3656 sizeof(EVP_AES_WRAP_CTX), 3657 NULL, NULL, NULL, NULL 3658 }; 3659 3660 const EVP_CIPHER *EVP_aes_128_wrap(void) 3661 { 3662 return &aes_128_wrap; 3663 } 3664 3665 static const EVP_CIPHER aes_192_wrap = { 3666 NID_id_aes192_wrap, 3667 8, 24, 8, WRAP_FLAGS, EVP_ORIG_GLOBAL, 3668 aes_wrap_init_key, aes_wrap_cipher, 3669 NULL, 3670 sizeof(EVP_AES_WRAP_CTX), 3671 NULL, NULL, NULL, NULL 3672 }; 3673 3674 const EVP_CIPHER *EVP_aes_192_wrap(void) 3675 { 3676 return &aes_192_wrap; 3677 } 3678 3679 static const EVP_CIPHER aes_256_wrap = { 3680 NID_id_aes256_wrap, 3681 8, 32, 8, WRAP_FLAGS, EVP_ORIG_GLOBAL, 3682 aes_wrap_init_key, aes_wrap_cipher, 3683 NULL, 3684 sizeof(EVP_AES_WRAP_CTX), 3685 NULL, NULL, NULL, NULL 3686 }; 3687 3688 const EVP_CIPHER *EVP_aes_256_wrap(void) 3689 { 3690 return &aes_256_wrap; 3691 } 3692 3693 static const EVP_CIPHER aes_128_wrap_pad = { 3694 NID_id_aes128_wrap_pad, 3695 8, 16, 4, WRAP_FLAGS, EVP_ORIG_GLOBAL, 3696 aes_wrap_init_key, aes_wrap_cipher, 3697 NULL, 3698 sizeof(EVP_AES_WRAP_CTX), 3699 NULL, NULL, NULL, NULL 3700 }; 3701 3702 const EVP_CIPHER *EVP_aes_128_wrap_pad(void) 3703 { 3704 return &aes_128_wrap_pad; 3705 } 3706 3707 static const EVP_CIPHER aes_192_wrap_pad = { 3708 NID_id_aes192_wrap_pad, 3709 8, 24, 4, WRAP_FLAGS, EVP_ORIG_GLOBAL, 3710 aes_wrap_init_key, aes_wrap_cipher, 3711 NULL, 3712 sizeof(EVP_AES_WRAP_CTX), 3713 NULL, NULL, NULL, NULL 3714 }; 3715 3716 const EVP_CIPHER *EVP_aes_192_wrap_pad(void) 3717 { 3718 return &aes_192_wrap_pad; 3719 } 3720 3721 static const EVP_CIPHER aes_256_wrap_pad = { 3722 NID_id_aes256_wrap_pad, 3723 8, 32, 4, WRAP_FLAGS, EVP_ORIG_GLOBAL, 3724 aes_wrap_init_key, aes_wrap_cipher, 3725 NULL, 3726 sizeof(EVP_AES_WRAP_CTX), 3727 NULL, NULL, NULL, NULL 3728 }; 3729 3730 const EVP_CIPHER *EVP_aes_256_wrap_pad(void) 3731 { 3732 return &aes_256_wrap_pad; 3733 } 3734 3735 #ifndef OPENSSL_NO_OCB 3736 static int aes_ocb_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) 3737 { 3738 EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,c); 3739 EVP_CIPHER_CTX *newc; 3740 EVP_AES_OCB_CTX *new_octx; 3741 3742 switch (type) { 3743 case EVP_CTRL_INIT: 3744 octx->key_set = 0; 3745 octx->iv_set = 0; 3746 octx->ivlen = EVP_CIPHER_get_iv_length(c->cipher); 3747 octx->iv = c->iv; 3748 octx->taglen = 16; 3749 octx->data_buf_len = 0; 3750 octx->aad_buf_len = 0; 3751 return 1; 3752 3753 case EVP_CTRL_GET_IVLEN: 3754 *(int *)ptr = octx->ivlen; 3755 return 1; 3756 3757 case EVP_CTRL_AEAD_SET_IVLEN: 3758 /* IV len must be 1 to 15 */ 3759 if (arg <= 0 || arg > 15) 3760 return 0; 3761 3762 octx->ivlen = arg; 3763 return 1; 3764 3765 case EVP_CTRL_AEAD_SET_TAG: 3766 if (ptr == NULL) { 3767 /* Tag len must be 0 to 16 */ 3768 if (arg < 0 || arg > 16) 3769 return 0; 3770 3771 octx->taglen = arg; 3772 return 1; 3773 } 3774 if (arg != octx->taglen || EVP_CIPHER_CTX_is_encrypting(c)) 3775 return 0; 3776 memcpy(octx->tag, ptr, arg); 3777 return 1; 3778 3779 case EVP_CTRL_AEAD_GET_TAG: 3780 if (arg != octx->taglen || !EVP_CIPHER_CTX_is_encrypting(c)) 3781 return 0; 3782 3783 memcpy(ptr, octx->tag, arg); 3784 return 1; 3785 3786 case EVP_CTRL_COPY: 3787 newc = (EVP_CIPHER_CTX *)ptr; 3788 new_octx = EVP_C_DATA(EVP_AES_OCB_CTX,newc); 3789 return CRYPTO_ocb128_copy_ctx(&new_octx->ocb, &octx->ocb, 3790 &new_octx->ksenc.ks, 3791 &new_octx->ksdec.ks); 3792 3793 default: 3794 return -1; 3795 3796 } 3797 } 3798 3799 static int aes_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 3800 const unsigned char *iv, int enc) 3801 { 3802 EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx); 3803 if (!iv && !key) 3804 return 1; 3805 if (key) { 3806 do { 3807 /* 3808 * We set both the encrypt and decrypt key here because decrypt 3809 * needs both. We could possibly optimise to remove setting the 3810 * decrypt for an encryption operation. 3811 */ 3812 # ifdef HWAES_CAPABLE 3813 if (HWAES_CAPABLE) { 3814 HWAES_set_encrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3815 &octx->ksenc.ks); 3816 HWAES_set_decrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3817 &octx->ksdec.ks); 3818 if (!CRYPTO_ocb128_init(&octx->ocb, 3819 &octx->ksenc.ks, &octx->ksdec.ks, 3820 (block128_f) HWAES_encrypt, 3821 (block128_f) HWAES_decrypt, 3822 enc ? HWAES_ocb_encrypt 3823 : HWAES_ocb_decrypt)) 3824 return 0; 3825 break; 3826 } 3827 # endif 3828 # ifdef VPAES_CAPABLE 3829 if (VPAES_CAPABLE) { 3830 vpaes_set_encrypt_key(key, 3831 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3832 &octx->ksenc.ks); 3833 vpaes_set_decrypt_key(key, 3834 EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3835 &octx->ksdec.ks); 3836 if (!CRYPTO_ocb128_init(&octx->ocb, 3837 &octx->ksenc.ks, &octx->ksdec.ks, 3838 (block128_f) vpaes_encrypt, 3839 (block128_f) vpaes_decrypt, 3840 NULL)) 3841 return 0; 3842 break; 3843 } 3844 # endif 3845 AES_set_encrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3846 &octx->ksenc.ks); 3847 AES_set_decrypt_key(key, EVP_CIPHER_CTX_get_key_length(ctx) * 8, 3848 &octx->ksdec.ks); 3849 if (!CRYPTO_ocb128_init(&octx->ocb, 3850 &octx->ksenc.ks, &octx->ksdec.ks, 3851 (block128_f) AES_encrypt, 3852 (block128_f) AES_decrypt, 3853 NULL)) 3854 return 0; 3855 } 3856 while (0); 3857 3858 /* 3859 * If we have an iv we can set it directly, otherwise use saved IV. 3860 */ 3861 if (iv == NULL && octx->iv_set) 3862 iv = octx->iv; 3863 if (iv) { 3864 if (CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen) 3865 != 1) 3866 return 0; 3867 octx->iv_set = 1; 3868 } 3869 octx->key_set = 1; 3870 } else { 3871 /* If key set use IV, otherwise copy */ 3872 if (octx->key_set) 3873 CRYPTO_ocb128_setiv(&octx->ocb, iv, octx->ivlen, octx->taglen); 3874 else 3875 memcpy(octx->iv, iv, octx->ivlen); 3876 octx->iv_set = 1; 3877 } 3878 return 1; 3879 } 3880 3881 static int aes_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, 3882 const unsigned char *in, size_t len) 3883 { 3884 unsigned char *buf; 3885 int *buf_len; 3886 int written_len = 0; 3887 size_t trailing_len; 3888 EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,ctx); 3889 3890 /* If IV or Key not set then return error */ 3891 if (!octx->iv_set) 3892 return -1; 3893 3894 if (!octx->key_set) 3895 return -1; 3896 3897 if (in != NULL) { 3898 /* 3899 * Need to ensure we are only passing full blocks to low level OCB 3900 * routines. We do it here rather than in EVP_EncryptUpdate/ 3901 * EVP_DecryptUpdate because we need to pass full blocks of AAD too 3902 * and those routines don't support that 3903 */ 3904 3905 /* Are we dealing with AAD or normal data here? */ 3906 if (out == NULL) { 3907 buf = octx->aad_buf; 3908 buf_len = &(octx->aad_buf_len); 3909 } else { 3910 buf = octx->data_buf; 3911 buf_len = &(octx->data_buf_len); 3912 3913 if (ossl_is_partially_overlapping(out + *buf_len, in, len)) { 3914 ERR_raise(ERR_LIB_EVP, EVP_R_PARTIALLY_OVERLAPPING); 3915 return 0; 3916 } 3917 } 3918 3919 /* 3920 * If we've got a partially filled buffer from a previous call then 3921 * use that data first 3922 */ 3923 if (*buf_len > 0) { 3924 unsigned int remaining; 3925 3926 remaining = AES_BLOCK_SIZE - (*buf_len); 3927 if (remaining > len) { 3928 memcpy(buf + (*buf_len), in, len); 3929 *(buf_len) += len; 3930 return 0; 3931 } 3932 memcpy(buf + (*buf_len), in, remaining); 3933 3934 /* 3935 * If we get here we've filled the buffer, so process it 3936 */ 3937 len -= remaining; 3938 in += remaining; 3939 if (out == NULL) { 3940 if (!CRYPTO_ocb128_aad(&octx->ocb, buf, AES_BLOCK_SIZE)) 3941 return -1; 3942 } else if (EVP_CIPHER_CTX_is_encrypting(ctx)) { 3943 if (!CRYPTO_ocb128_encrypt(&octx->ocb, buf, out, 3944 AES_BLOCK_SIZE)) 3945 return -1; 3946 } else { 3947 if (!CRYPTO_ocb128_decrypt(&octx->ocb, buf, out, 3948 AES_BLOCK_SIZE)) 3949 return -1; 3950 } 3951 written_len = AES_BLOCK_SIZE; 3952 *buf_len = 0; 3953 if (out != NULL) 3954 out += AES_BLOCK_SIZE; 3955 } 3956 3957 /* Do we have a partial block to handle at the end? */ 3958 trailing_len = len % AES_BLOCK_SIZE; 3959 3960 /* 3961 * If we've got some full blocks to handle, then process these first 3962 */ 3963 if (len != trailing_len) { 3964 if (out == NULL) { 3965 if (!CRYPTO_ocb128_aad(&octx->ocb, in, len - trailing_len)) 3966 return -1; 3967 } else if (EVP_CIPHER_CTX_is_encrypting(ctx)) { 3968 if (!CRYPTO_ocb128_encrypt 3969 (&octx->ocb, in, out, len - trailing_len)) 3970 return -1; 3971 } else { 3972 if (!CRYPTO_ocb128_decrypt 3973 (&octx->ocb, in, out, len - trailing_len)) 3974 return -1; 3975 } 3976 written_len += len - trailing_len; 3977 in += len - trailing_len; 3978 } 3979 3980 /* Handle any trailing partial block */ 3981 if (trailing_len > 0) { 3982 memcpy(buf, in, trailing_len); 3983 *buf_len = trailing_len; 3984 } 3985 3986 return written_len; 3987 } else { 3988 /* 3989 * First of all empty the buffer of any partial block that we might 3990 * have been provided - both for data and AAD 3991 */ 3992 if (octx->data_buf_len > 0) { 3993 if (EVP_CIPHER_CTX_is_encrypting(ctx)) { 3994 if (!CRYPTO_ocb128_encrypt(&octx->ocb, octx->data_buf, out, 3995 octx->data_buf_len)) 3996 return -1; 3997 } else { 3998 if (!CRYPTO_ocb128_decrypt(&octx->ocb, octx->data_buf, out, 3999 octx->data_buf_len)) 4000 return -1; 4001 } 4002 written_len = octx->data_buf_len; 4003 octx->data_buf_len = 0; 4004 } 4005 if (octx->aad_buf_len > 0) { 4006 if (!CRYPTO_ocb128_aad 4007 (&octx->ocb, octx->aad_buf, octx->aad_buf_len)) 4008 return -1; 4009 octx->aad_buf_len = 0; 4010 } 4011 /* If decrypting then verify */ 4012 if (!EVP_CIPHER_CTX_is_encrypting(ctx)) { 4013 if (octx->taglen < 0) 4014 return -1; 4015 if (CRYPTO_ocb128_finish(&octx->ocb, 4016 octx->tag, octx->taglen) != 0) 4017 return -1; 4018 octx->iv_set = 0; 4019 return written_len; 4020 } 4021 /* If encrypting then just get the tag */ 4022 if (CRYPTO_ocb128_tag(&octx->ocb, octx->tag, 16) != 1) 4023 return -1; 4024 /* Don't reuse the IV */ 4025 octx->iv_set = 0; 4026 return written_len; 4027 } 4028 } 4029 4030 static int aes_ocb_cleanup(EVP_CIPHER_CTX *c) 4031 { 4032 EVP_AES_OCB_CTX *octx = EVP_C_DATA(EVP_AES_OCB_CTX,c); 4033 CRYPTO_ocb128_cleanup(&octx->ocb); 4034 return 1; 4035 } 4036 4037 BLOCK_CIPHER_custom(NID_aes, 128, 16, 12, ocb, OCB, 4038 EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS) 4039 BLOCK_CIPHER_custom(NID_aes, 192, 16, 12, ocb, OCB, 4040 EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS) 4041 BLOCK_CIPHER_custom(NID_aes, 256, 16, 12, ocb, OCB, 4042 EVP_CIPH_FLAG_AEAD_CIPHER | CUSTOM_FLAGS) 4043 #endif /* OPENSSL_NO_OCB */ 4044