OpenSSL密码库算法笔记——第6.3.4章 签名函数说明

博客详细介绍了OpenSSL中多个签名函数,如ECDSA_sign、ECDSA_sign_ex等。阐述了各函数的功能、输入输出参数、返回值、出处及备注信息,还提及了签名预计算函数ECDSA_sign_setup及其调用关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接下来详细介绍各个签名函数。

───────────────────────────────────────

int    ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, unsigned char *sig, unsigned int *siglen, EC_KEY *eckey)

功能:    计算签名,签名采用DER编码格式

输入:    type【无用】,dgst【等待签名的hash值】,dgstlen【hash值长度】,eckey【密钥】

输出:    sig【签名】,siglen【签名长度】,

返回:    1【正确】 or 0【出错】

出处:    ecdsa\ecs_sign.c

备注:    return ECDSA_sign_ex(type, dgst, dlen, sig, siglen, NULL, NULL, eckey);

───────────────────────────────────────

被ECDSA_sign调用的ECDSA_sign_ex函数如下。

───────────────────────────────────────

int    ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, unsigned char *sig, unsigned int *siglen, const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey)

功能:    计算签名,签名采用DER编码格式

输入:    type【无用】,dgst【等待签名的hash值】,dgstlen【hash值长度】,eckey【密钥】,

kinv【可选参数,k-1 mod order】,rp【可选参数,k×G的x坐标】

输出:    sig【签名】,siglen【签名长度】,

返回:    1【正确】 or 0【出错】

出处:    ecdsa\ecs_sign.c

───────────────────────────────────────

 

───────────────────────────────────────

ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dlen, EC_KEY *eckey)

功能:    计算签名

输入:    dgst【等待签名的hash值】,dgstlen【hash值长度】,eckey【密钥】,

输出:    sig【签名】,siglen【签名长度】,

返回:    1【正确】 or 0【出错】

出处:    ecdsa\ecs_sign.c

备注:    return ECDSA_do_sign_ex(dgst, dlen, NULL, NULL, eckey);

───────────────────────────────────────

被ECDSA_sign_ex和 ECDSA_do_sign调用的ECDSA_do_sign_ex函数如下。

───────────────────────────────────────

ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dlen, const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey)

功能:    计算签名

输入:    dgst【等待签名的hash值】,dgstlen【hash值长度】,eckey【密钥】,

kinv【可选参数,k-1 mod order】,rp【可选参数,k×G的x坐标】

输出:    -

返回:    签名

出处:    ecdsa\ecs_sign.c

───────────────────────────────────────

被ECDSA_do_sign_ex调用的ecdsa_do_sign函数如下。

───────────────────────────────────────

static ECDSA_SIG *ecdsa_do_sign(const unsigned char *dgst, int dgst_len, const BIGNUM *in_kinv, const BIGNUM *in_r, EC_KEY *eckey)

功能:    计算签名

输入:    dgst【等待签名的hash值】,dgstlen【hash值长度】,eckey【密钥】,

kinv【可选参数,k-1 mod order】,in_r【可选参数,k×G的x坐标】

输出:    -

返回:    签名

出处:    ecdsa\ecs_ossl.c

───────────────────────────────────────

可能会被ecdsa_do_sign调用的预计算函数ECDSA_sign_setup如下。

───────────────────────────────────────

int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)

功能:    签名的预计算部分

输入:    eckey 【含私钥】,ctx

输出:    kinvp【k的逆】,rp【k×G的x坐标】

返回:    1【正常】or 0【出错】

出处:    ecdsa\ecs_sign.c

备注:    return ecdsa->meth->ecdsa_sign_setup(eckey, ctx_in, kinvp, rp);

───────────────────────────────────────

被ECDSA_sign_setup调用的实现预计算的ecdsa_sign_setup函数如下。

───────────────────────────────────────

static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)

功能:    签名的预计算部分

输入:    eckey 【含私钥】,ctx

输出:    kinvp【k的逆】,rp【k×G的x坐标】

返回:    1【正常】or 0【出错】

出处:    ecdsa\ecs_ossl.c

───────────────────────────────────────

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值