使用命名曲线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_sign
或ECDSA_sign
创建的每个签名,是吗?是否会发生创建的签名无效的情况?
发布于 2016-08-15 06:43:44
来自NIST酒吧186-4 -数字签名标准 4.7节:
签字核查可由任何一方(即签字人、预定接受者或任何其他当事方)使用签字人的公用钥匙进行。签字人似宜在向预定收件人发送经签名的电文之前,核实计算的签字是否正确。预期接收方(或任何其他方)验证签名以确定其真实性。
(签字人是签名创建人)
https://stackoverflow.com/questions/36452829
复制相似问题