/*
sm4 ecb模式加密/解密
Flag 运算标志,0为加密,1为解密。
Key sm4算法密钥。
In sm4算法ecb运算输入数据。
Out sm4算法ecb计算得到密文。
Len ecb明文/密文长度。
*/
int SM4_ECB(int Flag, unsigned char *Key, unsigned char *In, unsigned char *Out, unsigned int Len)
{
int i;
int Ret;
int PadLen;
unsigned char Pad[256];//可以根据实际情况malloc需要的空间
sms4_key_t key;
if(!Flag)
{
memset(Pad, 0, sizeof(Pad));
Ret = AddPadding(In, Len, Pad, &PadLen);//检查是否是16倍数,不是补全
if(Ret < 0)
{
return -2;
}
sms4_set_encrypt_key(&key, Key);
for(i = 0;i < PadLen / 16;i++)
{
sms4_encrypt(Pad + i * 16, Out + i * 16, &key);