OpenSSL/GMSSL EVP接口说明

您所在的位置:网站首页 数字签名验签图 OpenSSL/GMSSL EVP接口说明

OpenSSL/GMSSL EVP接口说明

2023-12-26 06:43| 来源: 网络整理| 查看: 265

3.4 签名验签 签名验签的几种流程

假设EVP_PKEY *pkey已经生成完毕。

签名和验签各有几套流程:

基于EVP_PKEY_CTX的流程。待签名的数据为SM2的A1和A2步的计算结果,必须是32字节,所以此流程内不再做签名的A1和A2步。验签同理。基于EVP_MD_CTX的流程1。待签名的数据为SM2的A1步的计算结果,可以是任意长度,所以此流程内不再做签名的A1步,从A2步开始执行。验签同理。基于EVP_MD_CTX的流程2。待签名的数据为SM2的A1步的计算结果,可以是任意长度,所以此流程内不再做签名的A1步,从A2步开始执行。验签同理。 SM2_sign和SM2_verify流程图

几种签名验签流程都要涉及SM2_sign和SM2_verify,这两个函数又存在层层调用,所以下面列出SM2_sign和SM2_verify的流程图。

图3.1 SM2_sign和SM2_verify流程图

基于EVP_PKEY_CTX的流程

表3.2基于EVP_PKEY_CTX的签名验签使用步骤

签名

验签

1

pkctx = EVP_PKEY_CTX_new(

pkey, NULL))

pkctx = EVP_PKEY_CTX_new(

pkey, NULL))

2

EVP_PKEY_sign_init(pkctx)

EVP_PKEY_verify_init(pkctx)

3

EVP_PKEY_CTX_set_ec_sign_type(

pkctx, NID_sm_scheme)

EVP_PKEY_CTX_set_ec_sign_type(

pkctx, NID_sm_scheme)

4

EVP_PKEY_sign(

pkctx, sig, &siglen, dgst, dgstlen)

EVP_PKEY_verify(

pkctx, sig, siglen, dgst, dgstlen)

5

EVP_PKEY_CTX_free(pkctx);

EVP_PKEY_CTX_free(pkctx);

其中

EVP_PKEY_CTX_new和EVP_PKEY_CTX_free函数的使用说明请参见3.2 EVP_PKEY_CTX和EVP_PKEY操作。剩余函数的说明见后。

基于EVP_PKEY_CTX的签名验签流程图如下。

图3.2 基于EVP_PKEY_CTX的签名验签流程图

以上流程图中的SM2_sign和SM2_verify的流程图见SM2_sign和SM2_verify的流程图。

基于EVP_MD_CTX的流程1

表3.3基于EVP_MD_CTX的流程1的签名验签使用步骤

签名

验签

1

mdctx = EVP_MD_CTX_create()

mdctx = EVP_MD_CTX_create()

2

EVP_SignInit_ex(mdctx, md, NULL)

EVP_VerifyInit_ex(mdctx,md,NULL)

3

EVP_SignUpdate(mdctx, msg, mlen)

EVP_VerifyUpdate(mdctx, msg,mlen)

4

EVP_SignFinal(mdctx,sig,&slen,pkey)

EVP_VerifyFinal(mdctx,sig,slen,pkey)

5

EVP_MD_CTX_destroy(mdctx)

EVP_MD_CTX_destroy(mdctx)

其中

EVP_MD_CTX_create和EVP_MD_CTX_destroy函数的使用说明请参见2.2 EVP_MD_CTX操作。剩余函数的说明见后。

基于EVP_MD_CTX的流程1的签名验签流程图如下。

图3.3 基于EVP_MD_CTX的流程1的签名验签流程图

以上流程图中的SM2_sign和SM2_verify的流程图见SM2_sign和SM2_verify的流程图。

基于EVP_MD_CTX的流程2

表3.4基于EVP_MD_CTX的流程2的签名验签使用步骤

签名

验签

1

mdctx = EVP_MD_CTX_create();

mdctx = EVP_MD_CTX_create();

2

EVP_DigestSignInit(

mdctx, &pkctx, md, NULL, pkey);

EVP_DigestVerifyInit(

mdctx, &pkctx, md, NULL, pkey);

3

EVP_PKEY_CTX_set_ec_sign_type(

pkctx, type);

EVP_PKEY_CTX_set_ec_sign_type(

pkctx, type);

4

EVP_DigestSignUpdate(

mdctx, msg, msglen);

EVP_DigestVerifyUpdate(

mdctx, msg, msglen);

5

EVP_DigestSignFinal(

mdctx, sig, &siglen);

EVP_DigestVerifyFinal(

mdctx, sig, siglen);

6

EVP_MD_CTX_destroy(mdctx);

EVP_MD_CTX_destroy(mdctx);

其中

EVP_MD_CTX_create和EVP_MD_CTX_destroy函数的使用说明请参见2.2 EVP_MD_CTX操作。剩余函数的说明见后。

基于EVP_MD_CTX的流程2的签名验签流程图如下。

图3.4 基于EVP_MD_CTX的流程2的签名验签流程图

以上流程图中的SM2_sign和SM2_verify的流程图见SM2_sign和SM2_verify的流程图。

EVP_PKEY_sign_init

函 数 名:   int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);

功能描述:   签名之前的EVP_PKEY_CTX初始化

说    明:   -

参数说明:

       ctx         (in/out)         EVP_PKEY_CTX

返 回 值:   1[成功],



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3