OpenSSL ECDSA签名有效性

时间:2016-04-06 13:37:27

标签: c openssl ecdsa

来自OpenSSL documentation

使用命名曲线prime256v1(又名P-256)创建给定SHA-256哈希值的ECDSA签名。

第二步:使用ECDSA_do_sign()计算SHA-256哈希值的ECDSA签名:

sig = ECDSA_do_sign(digest, 32, eckey);
if (sig == NULL) {
   /* error */
}

或使用ECDSA_sign():

unsigned char *buffer, *pp;
int            buf_len;
buf_len = ECDSA_size(eckey);
buffer  = OPENSSL_malloc(buf_len);
pp = buffer;
if (ECDSA_sign(0, dgst, dgstlen, pp, &buf_len, eckey) == 0) {
   /* error */
}

第三步:使用ECDSA_do_verify()验证创建的ECDSA签名:

ret = ECDSA_do_verify(digest, 32, sig, eckey);

或使用ECDSA_verify():

ret = ECDSA_verify(0, digest, 32, buffer, buf_len, eckey);

并最终评估返回值:

if (ret == 1) {
   /* signature ok */
} else if (ret == 0) {
   /* incorrect signature */
} else {
   /* error */
}

EOF

这让我理解我需要验证我使用ECDSA_do_signECDSA_sign创建的每个签名,是吗?是否可能发生创建的签名无效?

1 个答案:

答案 0 :(得分:0)

来自NIST PUB 186-4 - Digital Signature Standard第4.7节:

  

签名验证可由任何一方(即签字人,预定收件人或任何其他方)使用签字人的公钥进行。签名者可能希望在将签名消息发送给预期接收者之前验证计算出的签名是否正确。预期的接收者(或任何其他方)验证签名以确定其签名   真实性。

(签字人是签名创作者)