2025-10-10 16:07:00 +08:00

98 lines
1.8 KiB
C

#include <common/sys_config.h>
#if (CONFIG_SOC_BK7251)
#include <os/os.h>
#include "bk_uart.h"
#include <os/str.h>
#include <os/mem.h>
#include <common/bk_kernel_err.h>
#include "hal_aes.h"
#include "security.h"
beken_mutex_t hal_aes_mutex = NULL;
static void hal_aes_done_callback(void *param)
{
}
void hal_aes_init(void *ctx)
{
bk_err_t result;
if (hal_aes_mutex == NULL) {
result = rtos_init_mutex(&hal_aes_mutex);
if (result != kNoErr) {
os_printf("aes mutex init failed\n");
return;
}
security_aes_init(hal_aes_done_callback, NULL);
os_printf("hal_aes_init done\r\n");
}
}
int hal_aes_setkey_dec(void *ctx, const unsigned char *key, unsigned int keybits)
{
AES_RETURN ret;
rtos_lock_mutex(&hal_aes_mutex);
ret = security_aes_set_key(key, keybits);
rtos_unlock_mutex(&hal_aes_mutex);
return (ret == AES_OK) ? 0 : -1;
}
int hal_aes_setkey_enc(void *ctx, const unsigned char *key, unsigned int keybits)
{
AES_RETURN ret;
rtos_lock_mutex(&hal_aes_mutex);
ret = security_aes_set_key(key, keybits);
rtos_unlock_mutex(&hal_aes_mutex);
return (ret == AES_OK) ? 0 : -1;
}
int hal_aes_crypt_ecb(void *ctx,
int mode,
const unsigned char input[16],
unsigned char output[16])
{
AES_RETURN ret;
rtos_lock_mutex(&hal_aes_mutex);
ret = security_aes_set_block_data(input);
if (ret != AES_OK) {
rtos_unlock_mutex(&hal_aes_mutex);
return -1;
}
if (mode == DECODE)
mode = DECODE;
else
mode = ENCODE;
security_aes_start(mode);
ret = security_aes_get_result_data(output);
rtos_unlock_mutex(&hal_aes_mutex);
return (ret == AES_OK) ? 0 : -1;
}
void hal_aes_free(void *ctx)
{
if (hal_aes_mutex)
rtos_deinit_mutex(&hal_aes_mutex);
// the same operate as hal_aes_init
security_aes_init(NULL, NULL);
hal_aes_mutex = NULL;
}
#endif