如果不這樣做真的需要複製的鑰匙,你可以增加它的引用計數,像這樣:
CRYPTO_add(&your_evp_pkey->references, 1, CRYPTO_LOCK_EVP_PKEY);
否則,類似的(幾乎相同)的方式來你建議將以下內容:
int pkey_rsa_dup(EVP_PKEY *dst_pkey, EVP_PKEY *src_key) {
// Validate underlying key type - Only allow a RSA key
if (src_key->type != EVP_PKEY_RSA)
return -1;
RSA *rsa = EVP_PKEY_get1_RSA(src_key); // Get the underlying RSA key
RSA *dup_rsa = RSAPrivateKey_dup(rsa); // Duplicate the RSA key
RSA_free(rsa); // Decrement reference count
EVP_PKEY_set1_RSA(dst_pkey, dup_rsa); // Set the underlying RSA key in dst_pkey
// EVP_PKEY_set1_RSA also adjusts the other members in dst_pkey
return 0;
}
參考:Re: How to duplicate an EVP_PKEY - >作爲@ X-Istence低於稱,此參考線程中建議的方法在OpenSSL中不存在(至少在此更新的日期之前)。
RSA_dup不存在於OpenSSL源代碼中的任何地方。具體而言,在同一封電子郵件主題中,同一張海報的後續內容中提到的內容如下:http://www.mail-archive.com/[email protected]/msg17617.html –
'dst_pkey'泄漏 – Orient
@Orient你是對的。謝謝!我有'dst_pkey'的假/不必要的分配。傳遞的參數必須引用預分配的pkey。 – jweyrich