接下来详细介绍各个签名函数。
───────────────────────────────────────
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
───────────────────────────────────────