openssl函数-d2i_PublicKey和;d2i_PUBKEY和哪些场景决定应该使用哪种?

openssl函数-d2i_PublicKey和;d2i_PUBKEY和哪些场景决定应该使用哪种?,openssl,private-key,public-key,Openssl,Private Key,Public Key,openssl函数--d2i_公钥和d2i_公钥之间有什么区别?哪些场景决定了应该使用哪个 d2i_公钥正在返回有效的EVP_PKEY对象的应用程序中使用,直到找到一个特定的测试用例,其中返回了NULL。如果函数调用更改为d2i\u PUBKEY,它将返回有效的EVP\u PKEY。但是它只针对这一个测试用例,其余的测试用例使用另一个函数--d2i\u PublicKey。在决定调用哪个函数之前,似乎需要对参数进行一些初始检查/处理。以前是否有人遇到过类似的问题,并且可以在相关信息或代码方面提供

openssl函数--
d2i_公钥
d2i_公钥
之间有什么区别?哪些场景决定了应该使用哪个

d2i_公钥
正在返回有效的
EVP_PKEY
对象的应用程序中使用,直到找到一个特定的测试用例,其中返回了
NULL
。如果函数调用更改为
d2i\u PUBKEY
,它将返回有效的
EVP\u PKEY
。但是它只针对这一个测试用例,其余的测试用例使用另一个函数--
d2i\u PublicKey
。在决定调用哪个函数之前,似乎需要对参数进行一些初始检查/处理。以前是否有人遇到过类似的问题,并且可以在相关信息或代码方面提供帮助

Variant 1: EVP_PKEY_result_obj = d2i_PublicKey(keyType /*EVP_PKEY_RSA*/, nullptr, &publicKeyData, publicKey.size());
Variant 2: EVP_PKEY_result_obj = d2i_PUBKEY(nullptr, &publicKeyData, publicKey.size());
1.1.0分支文件[1][2]说明了有关这些功能的以下内容:

  • d2i\u PrivateKey()
    使用算法类型对私钥进行解码。它尝试使用任何特定于密钥的格式或PKCS#8未加密的PrivateKeyInfo格式。类型参数应该是公钥算法常量,例如EVP_PKEY_RSA。如果解码的密钥与类型不匹配,则会发生错误。d2i_PublicKey()对公钥执行相同的操作

  • d2i_PUBKEY()
    i2d_PUBKEY()
    使用SubjectPublicKeyInfo格式对EVP_PKEY结构进行解码和编码。否则,它们将遵循其他ASN.1函数的约定,如d2i_X509()

  • [1]

    [2]

    目前尚不清楚如何解释上述信息以帮助理解当前的问题

    如果有任何其他信息需要进一步了解这个问题,请让我知道-我会在这里添加它