为了使用 OpenSSL 的 EVP 接口进行 SM2 签名,需要进行以下步骤:

  1. 初始化 OpenSSL 库
#include <openssl/evp.h>
#include <openssl/err.h>

OpenSSL_add_all_algorithms();
ERR_load_crypto_strings();
  1. 生成 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);
  1. 创建 EVP_MD_CTX 对象
EVP_MD_CTX *md_ctx;

md_ctx = EVP_MD_CTX_new();
EVP_MD_CTX_init(md_ctx);
  1. 设置签名算法
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());
  1. 进行 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));
  1. 释放相关资源
EVP_PKEY_free(pkey);
EVP_MD_CTX_free(md_ctx);
EVP_PKEY_CTX_free(pkey_ctx);
ERR_free_strings();
使用 OpenSSL EVP 接口进行 SM2 签名 - C 语言实现

原文地址: https://www.cveoy.top/t/topic/nnp9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录