如何在 AES HAL 中设置和删除 AES 密钥
How to set and delete AES key within AES HAL
我有以下自动生成的(从 HAL)pKeyAES 数组(还有一个看起来相同的 initVectorAES):
__ALIGN_BEGIN static const uint8_t pKeyAES[16] __ALIGN_END = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00};
连同初始化函数如:
void Hal_MX_init (void){
hcryp.Instance = AES;
hcryp.Init.DataType = CRYP_DATATYPE_8B;
hcryp.Init.KeySize = CRYP_KEYSIZE_128B;
hcryp.Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
hcryp.Init.pKey = (uint8_t *)pKeyAES;
hcryp.Init.pInitVect = (uint8_t *)pInitVectAES;
if (HAL_CRYP_Init(&hcryp) != HAL_OK)
{
Error_Handler();
}
}
现在我想在这个由 HAL 生成的文件中创建一个新函数,以便“密钥”始终保存在 HAL 中。为此,我正在考虑使用 pKeyAES 始终保留“密钥”。但是,我不太确定该怎么做;例如,如果我想创建一个新的“设置键”或“删除键”方法,在 HAL 中执行时会是什么样子?
例如,对于“设置密钥”,我认为最好将其存储在 pKeyAES 中(具有用于获取新密钥的输入参数)。对于“删除键”功能,我怀疑您可以“删除”/重置当前存储在 pKeyAES 数组中的任何内容?但是,我不完全确定如何在代码方面完成此操作。
此外,在执行“set-key”时,我是否需要对提供的“initVector”做一些事情,或者保持原样(当前与 pKeyAES 具有相同的值)。
任何帮助、提示等都是最有帮助的。
我猜我必须为设置密钥创建一个新的初始化函数,例如“void setKey_init (){}”,并从 hcryp 添加相同的内容,例如上面提供的示例代码;但是我将新密钥作为参数输入变量。 hcryp.Init.pKey是一个uint8_t指针键;我想要设置新密钥的地方。但我的问题是,在此处设置新密钥时,如何使其在代码方面看起来最有效。我不想指向 aes.c 文件之外的密钥(有风险),而是发送一个密钥,我可以将其添加到结构中并使用函数初始化。
如果我没看错的话,应该很简单。有了一个指向新密钥 (const uint8_t *pNewKeyAES
) 的指针,将其复制到 pKeyAES
存储并执行初始化。下面如果pNewKeyAES
为NULL,则key设置为全零key(对应删除key):
#include <string.h>
#include <stdint.h>
// Discard `const` from pKeyAES to be able to modify it
__ALIGN_BEGIN static uint8_t pKeyAES[16] __ALIGN_END = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00};
void setKey_init (const uint8_t *pNewKeyAES)
{
if(pNewKeyAES != NULL)
{ // Use new key
memcpy(pKeyAES, pNewKeyAES, CRYP_KEYSIZE_128B);
}
else
{ // Delete key
memset(pKeyAES, 0, CRYP_KEYSIZE_128B);
}
Hal_MX_init(); // As defined in the question, may also copy contents here
}
我有以下自动生成的(从 HAL)pKeyAES 数组(还有一个看起来相同的 initVectorAES):
__ALIGN_BEGIN static const uint8_t pKeyAES[16] __ALIGN_END = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00};
连同初始化函数如:
void Hal_MX_init (void){
hcryp.Instance = AES;
hcryp.Init.DataType = CRYP_DATATYPE_8B;
hcryp.Init.KeySize = CRYP_KEYSIZE_128B;
hcryp.Init.OperatingMode = CRYP_ALGOMODE_ENCRYPT;
hcryp.Init.ChainingMode = CRYP_CHAINMODE_AES_CBC;
hcryp.Init.KeyWriteFlag = CRYP_KEY_WRITE_ENABLE;
hcryp.Init.pKey = (uint8_t *)pKeyAES;
hcryp.Init.pInitVect = (uint8_t *)pInitVectAES;
if (HAL_CRYP_Init(&hcryp) != HAL_OK)
{
Error_Handler();
}
}
现在我想在这个由 HAL 生成的文件中创建一个新函数,以便“密钥”始终保存在 HAL 中。为此,我正在考虑使用 pKeyAES 始终保留“密钥”。但是,我不太确定该怎么做;例如,如果我想创建一个新的“设置键”或“删除键”方法,在 HAL 中执行时会是什么样子?
例如,对于“设置密钥”,我认为最好将其存储在 pKeyAES 中(具有用于获取新密钥的输入参数)。对于“删除键”功能,我怀疑您可以“删除”/重置当前存储在 pKeyAES 数组中的任何内容?但是,我不完全确定如何在代码方面完成此操作。
此外,在执行“set-key”时,我是否需要对提供的“initVector”做一些事情,或者保持原样(当前与 pKeyAES 具有相同的值)。
任何帮助、提示等都是最有帮助的。
我猜我必须为设置密钥创建一个新的初始化函数,例如“void setKey_init (){}”,并从 hcryp 添加相同的内容,例如上面提供的示例代码;但是我将新密钥作为参数输入变量。 hcryp.Init.pKey是一个uint8_t指针键;我想要设置新密钥的地方。但我的问题是,在此处设置新密钥时,如何使其在代码方面看起来最有效。我不想指向 aes.c 文件之外的密钥(有风险),而是发送一个密钥,我可以将其添加到结构中并使用函数初始化。
如果我没看错的话,应该很简单。有了一个指向新密钥 (const uint8_t *pNewKeyAES
) 的指针,将其复制到 pKeyAES
存储并执行初始化。下面如果pNewKeyAES
为NULL,则key设置为全零key(对应删除key):
#include <string.h>
#include <stdint.h>
// Discard `const` from pKeyAES to be able to modify it
__ALIGN_BEGIN static uint8_t pKeyAES[16] __ALIGN_END = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00};
void setKey_init (const uint8_t *pNewKeyAES)
{
if(pNewKeyAES != NULL)
{ // Use new key
memcpy(pKeyAES, pNewKeyAES, CRYP_KEYSIZE_128B);
}
else
{ // Delete key
memset(pKeyAES, 0, CRYP_KEYSIZE_128B);
}
Hal_MX_init(); // As defined in the question, may also copy contents here
}