整理了一些常用的密码算法,包括哈希算法,对称加解密算法,非对称加解密算法等。使用c语言实现,经过统一的接口封装后,提供对外使用。密码算法包括哈希算法:SHA256, SHA1, MD5;对称算法:DES, SM4, AES; 非对称算法:RSA, ECC, SM2; 以及HMAC和CMAC算法;
适用于嵌入式、windows,linux平台;
接口使用示例:
int test_asym_rsa_sign_verify_update()
{
ASYM_CIPHER_TYPE ct = ASYM_RSA;
DIGEST_TYPE dt = DIGEST_SHA256;
ASYM_CIPHER_CTX ctx;
ASYM_CIPHER_CTX ctx_v;
int ret;
char *data = "testdata";
unsigned char sign[300] = { 0 }; // rsa1024:128 rsa2048:256
unsigned int sign_len = 0;
int result = 0;
/* sign */
ret = ss_asym_ctx_init(ct, dt, &ctx);
if(SEC_SUCCESS != ret)
{
return SS_FALSE;
}
ret = ss_asym_sign_init(&ctx);
if(SEC_SUCCESS != ret)
{
return SS_FALSE;
}
ret = ss_asym_sign_update(&ctx, (unsigned char *)data, strlen(data));
if(SEC_SUCCESS != ret)
{
return SS_FALSE;
}
ret = ss_asym_sign_final(&ctx, sign, &sign_len, (unsigned char *)prikey2, strlen(prikey2));
if(SEC_SUCCESS != ret)
{
return SS_FALSE;
}
/* verify */
ret = ss_asym_ctx_init(ct, dt, &ctx_v);
if(SEC_SUCCESS != ret)
{
return SS_FALSE;
}
ret = ss_asym_verify_init(&ctx_v);
if(SEC_SUCCESS != ret)
{
return SS_FALSE;
}
ret = ss_asym_verify_update(&ctx_v, (unsigned char *)data, strlen(data));
if(SEC_SUCCESS != ret)
{
return SS_FALSE;
}
ret = ss_asym_verify_final(&ctx_v, sign, sign_len, (unsigned char *)pubkey2, strlen(pubkey2), &result);
if(SEC_SUCCESS != ret)
{
return SS_FALSE;
}
if(0 == result)
return SS_FALSE;
return SS_TRUE;
}