接下來詳細介紹各個簽名函數。
───────────────────────────────────────
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
───────────────────────────────────────