如何使用wc_EccPublicKeyDecode在Wolfssl中导入der证书

时间:2019-09-18 12:04:33

标签: c cryptography asn.1 wolfssl

我尝试导入证书的公钥,使其具有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结构?

1 个答案:

答案 0 :(得分:1)

就像您提到的那样,您有一个证书,并且正试图将其传递到仅需要密钥而不是证书的API中。

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

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

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

谢谢!

  • KH