0

我尝试导入证书的公钥以将其置于 ecc_key 结构中以供进一步使用。

为此,我在 wolfssl API 文档中找到了这个wc_EccPublicKeyDecode函数。我试图用它来将证书加载到 ecc_key 结构中。

const byte b64_cert[] = "MIIB6TCCAY+gAwIBAgIJAPhfFTGxGQMtMAoGCCqGSM49BAMCMFExCzAJBgNVBAYT"
                        "AlhYMQswCQYDVQQIDAJYWDELMAkGA1UEBwwCWFgxCzAJBgNVBAoMAlhYMQswCQYD"
                        "VQQLDAJYWDEOMAwGA1UEAwwFWFhYWFgwHhcNMTkwOTE4MTExMDQ3WhcNMjAwOTE3"
                        "MTExMDQ3WjBRMQswCQYDVQQGEwJYWDELMAkGA1UECAwCWFgxCzAJBgNVBAcMAlhY"
                        "MQswCQYDVQQKDAJYWDELMAkGA1UECwwCWFgxDjAMBgNVBAMMBVhYWFhYMFkwEwYH"
                        "KoZIzj0CAQYIKoZIzj0DAQcDQgAEOJdKmIL9KXUMcrR2obrUuyDsWoj7GFYxnGAI"
                        "wKz7aWgKenLL9pOTs5xhIkeZIEekkRayhV++CqMzEHRJhF6vNaNQME4wHQYDVR0O"
                        "BBYEFKtf9OtFyPb7GIkxjXsc8LbI6p4xMB8GA1UdIwQYMBaAFKtf9OtFyPb7GIkx"
                        "jXsc8LbI6p4xMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIhANN9YLSc"
                        "VcEQn/JEKcdPxdR70SnDkEa0hCrm3yiZqXSAAiB9krAmY/Shv2yq2sTD+84x7s9K"
                        "XcPcX00w1JyeaIbaDw==";

uint8_t der_cert[1000] = {0};
word32 size_of_cert = 1000;
ecc_key eccKey;
int wolfssl_ret = wc_ecc_init(&eccKey);

Base64_Decode(b64_cert, sizeof(b64_cert), der_cert, &size_of_cert);
word32 idx = 0;
wolfssl_ret = wc_EccPublicKeyDecode( der_cert, &idx, &eccKey, size_of_cert );
printf("wc_EccPublicKeyDecode failed! Wolfssl error = %d", wolfssl_ret);

但不幸的是,我总是收到 ASN_OBJECT_ID_E (-144) 错误代码:

wc_EccPublicKeyDecode failed! Wolfssl error = -144

那么我做错了什么?我使用了错误的功能吗?我还能如何将 DER/PEM 证书导入 ecc_key 结构?

4

1 回答 1

1

就像你提到的那样,你有一个证书,你正试图将它传递给一个只需要一个密钥而不是证书的 API。

尝试使用 InitDecodedCert()、ParseCert(),首先将证书解码为 DecodedCert 结构中的各个部分。然后将 cert->publicKey 传递给 wc_EccPublicKeyDecode()!(完成后不要忘记 FreeDecodedCert())。

注意:您需要使用该设置WOLFSSL_TEST_CERT来向调用应用程序公开ParseCert(),默认情况下它是一个不透明的 API。

如果您有任何后续问题并获得最佳响应时间,您可以通过 support@wolfssl.com 联系 wolfSSL 支持团队。

谢谢!

  • KH
于 2019-09-18T19:28:34.117 回答