1 /* 2 * Copyright 2019-2020 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 #include <openssl/aes.h> 11 #include "prov/ciphercommon.h" 12 #include "crypto/aes_platform.h" 13 14 #define OCB_MAX_TAG_LEN AES_BLOCK_SIZE 15 #define OCB_MAX_DATA_LEN AES_BLOCK_SIZE 16 #define OCB_MAX_AAD_LEN AES_BLOCK_SIZE 17 18 typedef struct prov_aes_ocb_ctx_st { 19 PROV_CIPHER_CTX base; /* Must be first */ 20 union { 21 OSSL_UNION_ALIGN; 22 AES_KEY ks; 23 } ksenc; /* AES key schedule to use for encryption/aad */ 24 union { 25 OSSL_UNION_ALIGN; 26 AES_KEY ks; 27 } ksdec; /* AES key schedule to use for decryption */ 28 OCB128_CONTEXT ocb; 29 unsigned int iv_state; /* set to one of IV_STATE_XXX */ 30 unsigned int key_set : 1; 31 size_t taglen; 32 size_t data_buf_len; 33 size_t aad_buf_len; 34 unsigned char tag[OCB_MAX_TAG_LEN]; 35 unsigned char data_buf[OCB_MAX_DATA_LEN]; /* Store partial data blocks */ 36 unsigned char aad_buf[OCB_MAX_AAD_LEN]; /* Store partial AAD blocks */ 37 } PROV_AES_OCB_CTX; 38 39 const PROV_CIPHER_HW *ossl_prov_cipher_hw_aes_ocb(size_t keybits); 40