如何使用证书中的公钥检查 ECDSA(在 p-256 上)签名

Posted

技术标签:

【中文标题】如何使用证书中的公钥检查 ECDSA(在 p-256 上)签名【英文标题】:How to check ECDSA (on p-256) signature using public key from certificate 【发布时间】:2014-10-14 11:53:40 【问题描述】:

我有证书和 ECDSA(在 p-256 上)签名。现在我想使用提供的证书验证这个签名。我使用 c++(在 Windows 上)。无法使用托管代码 (.NET)。我发现 CryptoAPI 不支持 ECDSA,所以我应该使用 CryptoAPI NG (CNG)。但是我找不到如何将公钥从证书导入 CNG。

你能帮我解决我的问题吗? 谢谢

【问题讨论】:

【参考方案1】:

问题已解决。为此,我使用 OpenSSL。

【讨论】:

【参考方案2】:

“CryptImportPublicKeyInfoEx2 函数将公钥导入 CNG 非对称提供程序...”

我的 C 可能有点偏离,但我相信它是这样的

BCRYPT_KEY_HANDLE hKey;
BOOL imported = CryptImportPublicKeyInfoEx2(
    X509_ASN_ENCODING,
    &(pCertContext->pCertInfo->SubjectPublicKeyInfo),
    0,
    NULL,
    &hKey);

if (!imported)
    goto :err;

【讨论】:

以上是关于如何使用证书中的公钥检查 ECDSA(在 p-256 上)签名的主要内容,如果未能解决你的问题,请参考以下文章

如何从 R 中的散列消息和签名中正确恢复 ECDSA 公钥 ||小号 || V格式?

如何从 OpenSSL 中的 ECDSA 私钥获取公钥?

如何在 C# 中从 ECDsa 获取公钥

ECDSA Android 使用公钥验证总是返回 false

如何使用公钥验证 ECDSA?

当我只有原始签名(R,S)和原始公钥点(Qx,Qy)时,ECDSA如何验证Java中的数据块