blob: bbf785d7a29d255d73326e2df8332b92e057c543 [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_SW_DEVICE_TESTS_CRYPTO_AES_GCM_TESTUTILS_H_
#define OPENTITAN_SW_DEVICE_TESTS_CRYPTO_AES_GCM_TESTUTILS_H_
#include <stdbool.h>
#include "sw/device/lib/crypto/drivers/aes.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
typedef struct aes_gcm_test {
/**
* Key length.
*/
aes_key_len_t key_len;
/**
* Key material (length = key_len).
*/
const uint32_t *key;
/**
* IV and length (in bytes). If IV length is < 16 then the last bytes are
* ignored.
*/
size_t iv_len;
uint8_t iv[16];
/**
* Plaintext and length (in bytes). If the length is not a multiple of 4,
* then the most significant bytes of the last word are ignored.
*/
size_t plaintext_len;
uint8_t *plaintext;
/**
* Authenticated data and length (in bytes). If the length is not a multiple
* of 4, then the most significant bytes of the last word are ignored.
*/
size_t aad_len;
uint8_t *aad;
/**
* Authentication tag.
*/
uint8_t tag[16];
/**
* Ciphertext (same length as plaintext).
*/
uint8_t *ciphertext;
} aes_gcm_test_t;
/**
* Call AES-GCM authenticated encryption for the given test vector.
*
* @param test The test vector to run
* @return Cycle count for the encrypt() call
*/
uint32_t call_aes_gcm_encrypt(aes_gcm_test_t test);
/**
* Call AES-GCM authenticated decryption for the given test vector.
*
* @param test The test vector to run
* @param plaintext Buffer for the output plaintext
* @param tag_valid True iff the tag is expected to be valid
* @return Cycle count for the decrypt() call
*/
uint32_t call_aes_gcm_decrypt(aes_gcm_test_t test, bool tag_valid);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif // OPENTITAN_SW_DEVICE_TESTS_CRYPTO_AES_GCM_TESTUTILS_H_