blob: d1c030a52c361f8968113a03a5eacef024179c86 [file] [log] [blame]
// 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_