SM4_POLLING 使用示例
例程路径: ls_sdk/examples/peripheral/sm4/sm4_polling
一、程序基本配置及说明:
/*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};
HAL_SM4_KeyExpansion(key);
在加密和解密之前需要先进行密钥扩展,扩展完成后返回。
2.2 加密测试
uint32_t length = 16;
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};
HAL_SM4_Encrypt(plaintext, cipherbuffer, length);
plaintext是待加密的明文地址
cipherbuffer是加密后的密文输出地址
length是加密的长度,以Byte为单位,例程中进行了长度分别为16、32、64的加密运算
示例加密完成后返回,根据cipherbuffer与plaintext进行比较,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 ciphertext[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};
HAL_SM4_Decrypt(ciphertext, plainbuffer, length);
ciphertext是待解密的密文地址
plainbuffer是解密后明文输出地址
length是待解密的密文文长度,以Byte为单位,例程中进行了长度分别为16、32、64的解密运算
示例加密完成后返回,根据plainbuffer与plaintext进行比较,log如下:
CRYPT_SM4_DECRYPT_16_TEST_SUCCESS!
CRYPT_SM4_DECRYPT_32_TEST_SUCCESS!
CRYPT_SM4_DECRYPT_64_TEST_SUCCESS!