使用 OpenSSL EVP 接口进行 SM2 签名 - C 语言实现
为了使用 OpenSSL 的 EVP 接口进行 SM2 签名,需要进行以下步骤:
- 初始化 OpenSSL 库
#include <openssl/evp.h>
#include <openssl/err.h>
OpenSSL_add_all_algorithms();
ERR_load_crypto_strings();
- 生成 SM2 密钥对
EVP_PKEY_CTX *ctx;
EVP_PKEY *pkey;
ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL);
EVP_PKEY_keygen_init(ctx);
EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, NID_sm2);
EVP_PKEY_keygen(ctx, &pkey);
- 创建 EVP_MD_CTX 对象
EVP_MD_CTX *md_ctx;
md_ctx = EVP_MD_CTX_new();
EVP_MD_CTX_init(md_ctx);
- 设置签名算法
EVP_PKEY_CTX *pkey_ctx;
pkey_ctx = EVP_PKEY_CTX_new(pkey, NULL);
EVP_PKEY_sign_init(pkey_ctx);
EVP_PKEY_CTX_set_signature_md(pkey_ctx, EVP_sm3());
- 进行 SM2 签名
unsigned char *msg = 'hello world';
unsigned char sigbuf[128];
size_t siglen;
EVP_PKEY_sign(pkey_ctx, sigbuf, &siglen, (const unsigned char *)msg, strlen(msg));
- 释放相关资源
EVP_PKEY_free(pkey);
EVP_MD_CTX_free(md_ctx);
EVP_PKEY_CTX_free(pkey_ctx);
ERR_free_strings();
原文地址: https://www.cveoy.top/t/topic/nnp9 著作权归作者所有。请勿转载和采集!