使用openssl实现ECDSA签名和验证

时间:2013-03-07 10:59:27

标签: c openssl signature verification ecdsa

我正在尝试创建C程序,我可以从菜单中选择我想要的选项来签署邮件和验证邮件。我有代码签署消息并同时验证。我想要的是能够解析一条消息并签名,然后输出证书,例如。接下来,当我选择验证时,我会插入相同的消息和证书,因此我实际上可以验证消息。

我正在使用以下代码: Signing a message using ECDSA in OpenSSL

PS:基本上我不知道如何实际打印签名,私钥和公钥。

非常感谢你。

2 个答案:

答案 0 :(得分:2)

我想我找到了打印r和s值的方法。签名(r,s)

中的密钥对

我们自己签名之后:

ECDSA_SIG *signature = ECDSA_do_sign(hash, strlen(hash), eckey);

我们可以这样打印r和s值:

printf("(sig->r, sig->s): (%s,%s)\n", BN_bn2hex(signature->r), BN_bn2hex(signature->s));

由于 最诚挚的问候

答案 1 :(得分:1)

使用这些功能:

int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp);

ECDSA_SIG* d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len);

根据OpenSSL文档:

“i2d_ECDSA_SIG()创建ECDSA签名sig的DER编码,并将编码的签名写入* pp(注意:如果pp为NULL,i2d_ECDSA_SIG返回DER编码签名的预期字节长度).i2d_ECDSA_SIG返回长度DER编码签名(错误时为0)。

d2i_ECDSA_SIG()解码DER编码的ECDSA签名,并在新分配的ECDSA_SIG结构中返回解码的签名。 * sig指向包含大小为len的DER编码签名的缓冲区。 “

如果你想要在屏幕上打印出签名而不是你需要的Base64:)