SM4_IT 使用示例
例程路径: ls_sdk/examples/peripheral/sm4/sm4_it
一、程序基本配置及说明:
/*sm4模块初始化*/
HAL_SM4_Init();
二、操作步骤及结果:
2.1 密钥扩展
const uint8_t key[16] = {
0x01, 0x23, 0x45, 0x67,
0x89, 0xab, 0xcd, 0xef,
0xfe, 0xdc, 0xba, 0x98,
0x76, 0x54, 0x32, 0x10};
void sm4_init(void)
{
HAL_SM4_Init();
HAL_SM4_KeyExpansion_IT(key);
while (flag == SM4_KEYEXPANSEND);
}
void HAL_SM4_KeyExpansion_Complete_Callback()
{
flag = SM4_ENCRYPT;
LOG_I("CRYPT_SM4_KeyExpansion_TEST_SUCCESS!");
}
在加密和解密之前需要先进行密钥扩展,扩展完成后调用回调函数,修改flag,退出while。
2.2 加密测试
uint32_t length = 16;
uint8_t plainbuffer[64];
const uint8_t plaintext[64] = {
0x01, 0x23, 0x45, 0x67,0x89, 0xab, 0xcd, 0xef,0xfe, 0xdc, 0xba, 0x98,0x76, 0x54, 0x32, 0x10,
0x01, 0x23, 0x45, 0x67,0x89, 0xab, 0xcd, 0xef,0xfe, 0xdc, 0xba, 0x98,0x76, 0x54, 0x32, 0x10,
0x01, 0x23, 0x45, 0x67,0x89, 0xab, 0xcd, 0xef,0xfe, 0xdc, 0xba, 0x98,0x76, 0x54, 0x32, 0x10,
0x01, 0x23, 0x45, 0x67,0x89, 0xab, 0xcd, 0xef,0xfe, 0xdc, 0xba, 0x98,0x76, 0x54, 0x32, 0x10};
void sm4_crypt_test()
{
HAL_SM4_Encrypt_IT(plaintext, cipherbuffer, length);
while (flag == SM4_ENCRYPT);
}
plaintext是待加密的明文地址
cipherbuffer是加密后密文输出地址
length是加密的长度,以Byte为单位,例程中进行了长度分别为16、32、64的加密运算
示例开始加密后返回,在while中等待,加密完成后调用回调函数,修改flag,退出while,log如下:
CRYPT_SM4_ENCRYPT_16_TEST_SUCCESS!
CRYPT_SM4_ENCRYPT_32_TEST_SUCCESS!
CRYPT_SM4_ENCRYPT_64_TEST_SUCCESS!
2.3 解密测试
uint8_t cipherbuffer[64];
const uint8_t plaintext[64] = {
0x01, 0x23, 0x45, 0x67,0x89, 0xab, 0xcd, 0xef,0xfe, 0xdc, 0xba, 0x98,0x76, 0x54, 0x32, 0x10,
0x01, 0x23, 0x45, 0x67,0x89, 0xab, 0xcd, 0xef,0xfe, 0xdc, 0xba, 0x98,0x76, 0x54, 0x32, 0x10,
0x01, 0x23, 0x45, 0x67,0x89, 0xab, 0xcd, 0xef,0xfe, 0xdc, 0xba, 0x98,0x76, 0x54, 0x32, 0x10,
0x01, 0x23, 0x45, 0x67,0x89, 0xab, 0xcd, 0xef,0xfe, 0xdc, 0xba, 0x98,0x76, 0x54, 0x32, 0x10};
void sm4_crypt_test()
{
HAL_SM4_Decrypt_IT(ciphertext, plainbuffer, length);
while (flag == SM4_DECRYPT);
}
ciphertext是待解密的密文地址
plainbuffer是解密后明文输出地址
length是待解密的密文文长度,以Byte为单位,例程中进行了长度分别为16、32、64的解密运算
示例开始解密后返回,在while中等待,解密完成后调用回调函数,修改flag,退出while,log如下:
CRYPT_SM4_DECRYPT_16_TEST_SUCCESS!
CRYPT_SM4_DECRYPT_32_TEST_SUCCESS!
CRYPT_SM4_DECRYPT_64_TEST_SUCCESS!