C语言实现SM3(基于GMSSL)

上一篇文章已经完成了调用gmssl测试Sm4算法实现,https://blog.csdn.net/lingdukafeibj/article/details/107493356

本文继续测试SM3算法:写了一个简单的测试demo ,主函数直接调用就行了,并且在头文件已声明。(代码不规范处可以指出来,c语言的小白。。。)

#pragma once
#include "openssl/sm3.h"
#include
#include
#include "headtest.h"
#define GETCH() getchar()

int sm3Test() {
    EVP_MD_CTX* mdctx;
    const EVP_MD* md;
    unsigned char mess1[] = "12345678abcderty";

    unsigned char md_value[EVP_MAX_MD_SIZE] = { 0 };
    int md_len, i;

    md = EVP_get_digestbyname("sm3");

    if (!md) {
        return -1;
    }

    mdctx = EVP_MD_CTX_new(); //分配、初始化并返回摘要上下文.
    EVP_DigestInit_ex(mdctx, md, NULL);  //设置摘要上下文ctx以使用ENGINE impl中的摘要类型. 
    EVP_DigestUpdate(mdctx, mess1, 64); //将d处的cnt字节数据散列到摘要上下文ctx中.
    EVP_DigestFinal_ex(mdctx, md_value, (unsigned int*)&md_len);//从ctx检索摘要值并将其存入md中. 
    EVP_MD_CTX_free(mdctx);

    printf("sm3 Digest is: \n");
    for (i = 0; i < md_len; i++) {
        printf("%02x ", md_value[i]);
        if (i % 16 == 15) {
            printf("\n");
        }
    }
    printf("\n");
    printf("\n按任意键继续...");
    GETCH();

    return 0;
}

此外发现有小伙伴已经整理了EVP库的详解(https://blog.csdn.net/liao20081228/article/details/76285896),大家可以看看。

此外sm2算法实现的加解密、签名验签也已经完成了,但是代码有点长,上传不好看,有需要的小伙伴可以私信我。

你可能感兴趣的:(gmssl)