c语言实现常用密码算法

整理了一些常用的密码算法,包括哈希算法,对称加解密算法,非对称加解密算法等。使用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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值