| // 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_ |