SM3 gmssl c语言
时间: 2023-06-21 12:17:55 浏览: 110
以下是基于GMSSL库实现SM3哈希算法的C语言示例代码:
```C++
#include <openssl/evp.h>
#include <openssl/err.h>
void sm3_hash(unsigned char *in, int inlen, unsigned char *out)
{
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
if (!ctx) {
printf("EVP_MD_CTX_new failed\n");
return;
}
if (!EVP_DigestInit_ex(ctx, EVP_sm3(), NULL)) {
printf("EVP_DigestInit_ex failed\n");
EVP_MD_CTX_free(ctx);
return;
}
if (!EVP_DigestUpdate(ctx, in, inlen)) {
printf("EVP_DigestUpdate failed\n");
EVP_MD_CTX_free(ctx);
return;
}
unsigned int outlen;
if (!EVP_DigestFinal_ex(ctx, out, &outlen)) {
printf("EVP_DigestFinal_ex failed\n");
EVP_MD_CTX_free(ctx);
return;
}
EVP_MD_CTX_free(ctx);
}
```
以上代码中,`sm3_hash`函数用于计算输入数据的SM3哈希值,`in`表示输入数据,`inlen`表示输入数据长度,`out`表示输出的哈希值。函数中使用EVP_MD_CTX结构体和EVP_DigestXXX系列函数来实现SM3的计算,其中EVP_sm3()函数用于获取SM3算法的哈希上下文结构体。在使用时,只需要将输入数据作为参数传入函数即可,函数会返回对应的哈希值。
阅读全文