|  | // Copyright lowRISC contributors. | 
|  | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | // SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | #ifndef OPENTITAN_HW_IP_AES_MODEL_CRYPTO_H_ | 
|  | #define OPENTITAN_HW_IP_AES_MODEL_CRYPTO_H_ | 
|  |  | 
|  | /** | 
|  | * AES cipher mode | 
|  | */ | 
|  | typedef enum crypto_mode { | 
|  | kCryptoAesEcb = 1 << 0, | 
|  | kCryptoAesCbc = 1 << 1, | 
|  | kCryptoAesCfb = 1 << 2, | 
|  | kCryptoAesOfb = 1 << 3, | 
|  | kCryptoAesCtr = 1 << 4, | 
|  | kCryptoAesNone = 1 << 5 | 
|  | } crypto_mode_t; | 
|  |  | 
|  | /** | 
|  | * Encrypt using BoringSSL/OpenSSL | 
|  | * | 
|  | * @param  output    Output cipher text, must be a multiple of 16 bytes | 
|  | * @param  iv        16-byte initialization vector | 
|  | * @param  input     Input plain text to encode, must be a multiple of 16 bytes | 
|  | * @param  input_len Length of the input plain text in bytes, must be a multiple | 
|  | *                   of 16 | 
|  | * @param  key       Encryption key | 
|  | * @param  key_len   Encryption key length in bytes (16, 24, 32) | 
|  | * @param  mode      AES cipher mode @see crypto_mode. | 
|  | * @return Length of the output cipher text in bytes, -1 in case of error | 
|  | */ | 
|  | int crypto_encrypt(unsigned char *output, const unsigned char *iv, | 
|  | const unsigned char *input, int input_len, | 
|  | const unsigned char *key, int key_len, crypto_mode_t mode); | 
|  |  | 
|  | /** | 
|  | * Decrypt using BoringSSL/OpenSSL | 
|  | * | 
|  | * @param  output    Output plain text, must be a multiple of 16 bytes | 
|  | * @param  iv        16-byte initialization vector | 
|  | * @param  input     Input cipher text to decode, must be a multiple of 16 bytes | 
|  | * @param  input_len Length of the input cipher text in bytes, must be a | 
|  | *                   multiple of 16 | 
|  | * @param  key       Encryption key, decryption key is derived internally | 
|  | * @param  key_len   Encryption key length in bytes (16, 24, 32) | 
|  | * @param  mode      AES cipher mode @see crypto_mode. | 
|  | * @return Length of the output plain text in bytes, -1 in case of error | 
|  | */ | 
|  | int crypto_decrypt(unsigned char *output, const unsigned char *iv, | 
|  | const unsigned char *input, int input_len, | 
|  | const unsigned char *key, int key_len, crypto_mode_t mode); | 
|  |  | 
|  | #endif  // OPENTITAN_HW_IP_AES_MODEL_CRYPTO_H_ |