add aes API by DMA
This commit is contained in:
parent
41dd0c6999
commit
06f2995fad
|
@ -13,6 +13,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "sysctl.h"
|
||||
#include "aes.h"
|
||||
#include "utils.h"
|
||||
|
@ -419,3 +420,464 @@ void aes_gcm256_hard_encrypt(gcm_context_t *context, uint8_t *input_data, size_t
|
|||
gcm_get_tag(gcm_tag);
|
||||
}
|
||||
|
||||
void aes_ecb128_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
aes_init(input_key, AES_128, NULL, 0L, NULL, AES_ECB, AES_HARD_DECRYPTION, 0L, input_len);
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
}
|
||||
|
||||
|
||||
void aes_ecb128_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
aes_init(input_key, AES_128, NULL, 0L, NULL, AES_ECB, AES_HARD_ENCRYPTION, 0L, input_len);
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
}
|
||||
|
||||
void aes_ecb192_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
aes_init(input_key, AES_192, NULL, 0L, NULL, AES_ECB, AES_HARD_DECRYPTION, 0L, input_len);
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
}
|
||||
|
||||
void aes_ecb192_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
aes_init(input_key, AES_192, NULL, 0L, NULL, AES_ECB, AES_HARD_ENCRYPTION, 0L, input_len);
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
|
||||
}
|
||||
|
||||
void aes_ecb256_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
aes_init(input_key, AES_256, NULL, 0L, NULL, AES_ECB, AES_HARD_DECRYPTION, 0L, input_len);
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
}
|
||||
|
||||
void aes_ecb256_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
aes_init(input_key, AES_256, NULL, 0L, NULL, AES_ECB, AES_HARD_ENCRYPTION, 0L, input_len);
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
}
|
||||
|
||||
void aes_cbc128_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
aes_init(context->input_key, AES_128, context->iv, IV_LEN_128, NULL, AES_CBC, AES_HARD_DECRYPTION, 0L, input_len);
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
|
||||
}
|
||||
|
||||
void aes_cbc128_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
aes_init(context->input_key, AES_128, context->iv, IV_LEN_128, NULL, AES_CBC, AES_HARD_ENCRYPTION, 0L, input_len);
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
}
|
||||
|
||||
void aes_cbc192_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
aes_init(context->input_key, AES_192, context->iv, IV_LEN_128, NULL, AES_CBC, AES_HARD_DECRYPTION, 0L, input_len);
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
|
||||
}
|
||||
|
||||
void aes_cbc192_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
aes_init(context->input_key, AES_192, context->iv, IV_LEN_128, NULL, AES_CBC, AES_HARD_ENCRYPTION, 0L, input_len);
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
}
|
||||
|
||||
void aes_cbc256_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
aes_init(context->input_key, AES_256, context->iv, IV_LEN_128, NULL, AES_CBC, AES_HARD_DECRYPTION, 0L, input_len);
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
|
||||
}
|
||||
|
||||
void aes_cbc256_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data)
|
||||
{
|
||||
aes_init(context->input_key, AES_256, context->iv, IV_LEN_128, NULL, AES_CBC, AES_HARD_ENCRYPTION, 0L, input_len);
|
||||
size_t padding_len = ((input_len + 15) / 16) * 16;
|
||||
uint8_t* padding_buffer = NULL;
|
||||
padding_buffer = (uint8_t*)malloc(padding_len * sizeof(uint8_t));
|
||||
memset(padding_buffer, 0, padding_len);
|
||||
memcpy(padding_buffer, input_data, input_len);
|
||||
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, padding_buffer, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, padding_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
free(padding_buffer);
|
||||
}
|
||||
|
||||
void aes_gcm128_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag)
|
||||
{
|
||||
configASSERT(input_len % 4 == 0);
|
||||
|
||||
aes_init(context->input_key, AES_128, context->iv, IV_LEN_96, context->gcm_aad,
|
||||
AES_GCM, AES_HARD_DECRYPTION, context->gcm_aad_len, input_len);
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, input_data, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
gcm_get_tag(gcm_tag);
|
||||
}
|
||||
|
||||
void aes_gcm128_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag)
|
||||
{
|
||||
configASSERT(input_len % 4 == 0);
|
||||
|
||||
aes_init(context->input_key, AES_128, context->iv, IV_LEN_96, context->gcm_aad,
|
||||
AES_GCM, AES_HARD_ENCRYPTION, context->gcm_aad_len, input_len);
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, input_data, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
gcm_get_tag(gcm_tag);
|
||||
}
|
||||
|
||||
void aes_gcm192_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag)
|
||||
{
|
||||
configASSERT(input_len % 4 == 0);
|
||||
|
||||
aes_init(context->input_key, AES_192, context->iv, IV_LEN_96, context->gcm_aad,
|
||||
AES_GCM, AES_HARD_DECRYPTION, context->gcm_aad_len, input_len);
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, input_data, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
gcm_get_tag(gcm_tag);
|
||||
}
|
||||
|
||||
void aes_gcm192_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag)
|
||||
{
|
||||
configASSERT(input_len % 4 == 0);
|
||||
|
||||
aes_init(context->input_key, AES_192, context->iv, IV_LEN_96, context->gcm_aad,
|
||||
AES_GCM, AES_HARD_ENCRYPTION, context->gcm_aad_len, input_len);
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, input_data, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
gcm_get_tag(gcm_tag);
|
||||
}
|
||||
|
||||
void aes_gcm256_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag)
|
||||
{
|
||||
configASSERT(input_len % 4 == 0);
|
||||
|
||||
aes_init(context->input_key, AES_256, context->iv, IV_LEN_96, context->gcm_aad,
|
||||
AES_GCM, AES_HARD_DECRYPTION, context->gcm_aad_len, input_len);
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, input_data, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
gcm_get_tag(gcm_tag);
|
||||
}
|
||||
|
||||
void aes_gcm256_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag)
|
||||
{
|
||||
configASSERT(input_len % 4 == 0);
|
||||
|
||||
aes_init(context->input_key, AES_256, context->iv, IV_LEN_96, context->gcm_aad,
|
||||
AES_GCM, AES_HARD_ENCRYPTION, context->gcm_aad_len, input_len);
|
||||
sysctl_dma_select(dma_receive_channel_num, SYSCTL_DMA_SELECT_AES_REQ);
|
||||
aes->dma_sel = 1;
|
||||
dmac_set_single_mode(dma_receive_channel_num, (void *)(&aes->aes_out_data), output_data, DMAC_ADDR_NOCHANGE, DMAC_ADDR_INCREMENT,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
dmac_set_single_mode(dma_send_channel_num, input_data, (void *)(&aes->aes_text_data), DMAC_ADDR_INCREMENT, DMAC_ADDR_NOCHANGE,
|
||||
DMAC_MSIZE_256, DMAC_TRANS_WIDTH_32, input_len >> 2);
|
||||
|
||||
dmac_wait_done(dma_send_channel_num);
|
||||
dmac_wait_done(dma_receive_channel_num);
|
||||
gcm_get_tag(gcm_tag);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
#define _DRIVER_AES_H
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include "platform.h"
|
||||
#include "dmac.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -369,6 +371,150 @@ void aes_gcm256_hard_decrypt(gcm_context_t *context, uint8_t *input_data, size_t
|
|||
*/
|
||||
void aes_gcm256_hard_encrypt(gcm_context_t *context, uint8_t *input_data, size_t input_len, uint8_t *output_data, uint8_t *gcm_tag);
|
||||
|
||||
/**
|
||||
* @brief AES-ECB-128 decryption by dma
|
||||
*
|
||||
* @param[in] dma_send_channel_num Dmac send channel number.
|
||||
* @param[in] dma_receive_channel_num Dmac receive channel number.
|
||||
* @param[in] input_key The decryption key. must be 16bytes.
|
||||
* @param[in] input_data The buffer holding the input data.
|
||||
* @param[in] input_len The length of a data unit in bytes.
|
||||
* This can be any length between 16 bytes and 2^31 bytes inclusive
|
||||
* (between 1 and 2^27 block cipher blocks).
|
||||
* @param[out] output_data The buffer holding the output data.
|
||||
*/
|
||||
void aes_ecb128_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_ecb128_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_ecb192_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_ecb192_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_ecb256_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_ecb256_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint8_t *input_key,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_cbc128_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_cbc128_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_cbc192_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_cbc192_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_cbc256_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_cbc256_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
cbc_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data);
|
||||
|
||||
void aes_gcm128_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag);
|
||||
|
||||
void aes_gcm128_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag);
|
||||
|
||||
void aes_gcm192_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag);
|
||||
|
||||
void aes_gcm192_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag);
|
||||
|
||||
void aes_gcm256_hard_decrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag);
|
||||
|
||||
void aes_gcm256_hard_encrypt_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
gcm_context_t *context,
|
||||
uint8_t *input_data,
|
||||
size_t input_len,
|
||||
uint8_t *output_data,
|
||||
uint8_t *gcm_tag);
|
||||
|
||||
/**
|
||||
* @brief This function initializes the AES hard module.
|
||||
*
|
||||
|
|
|
@ -220,9 +220,24 @@ typedef struct _fft
|
|||
fft_output_fifo_t fft_output_fifo;
|
||||
} __attribute__((packed, aligned(8))) fft_t;
|
||||
|
||||
|
||||
void fft_complex_uint16_dma(dmac_channel_number_t dma_send_channel_num, dmac_channel_number_t dma_receive_channel_num,
|
||||
uint16_t shift, fft_direction_t direction, const uint64_t *input, size_t point_num, uint64_t *output);
|
||||
/**
|
||||
* @brief Do 16bit quantized complex FFT by DMA
|
||||
*
|
||||
* @param[in] dma_send_channel_num Dmac send channel number.
|
||||
* @param[in] dma_receive_channel_num Dmac receive channel number.
|
||||
* @param[in] shift The shifts selection in 9 stage
|
||||
* @param[in] direction The direction
|
||||
* @param[in] input The input data
|
||||
* @param[in] point The FFT points count
|
||||
* @param[out] output The output data
|
||||
*/
|
||||
void fft_complex_uint16_dma(dmac_channel_number_t dma_send_channel_num,
|
||||
dmac_channel_number_t dma_receive_channel_num,
|
||||
uint16_t shift,
|
||||
fft_direction_t direction,
|
||||
const uint64_t *input,
|
||||
size_t point_num,
|
||||
uint64_t *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue