EVP_PKEY_set1_DSA
NAME
EVP_PKEY_set1_RSA、EVP_PKEY_set1_DSA、EVP_PKEY_set1_DH、EVP_PKEY_set1_EC_KEY、EVP_PKEY_get1_RSA、EVP_PKEY_get1_DSA、EVP_PKEY_get1_DH、EVP_PKEY_get1_EC_KEY、EVP_PKEY_get0_RSA、EVP_PKEY_get0_DSA、EVP_PKEY _get0_DH、EVP_PKEY_get0_EC_KEY、EVP_PKEY_分配_RSA、EVP_PKEY_分配_DSA、EVP_PKEY_分配_DH、EVP_PKEY_分配_EC_KEY、EVP_PKEY_分配_POLY1305、EVP_PKEY_分配_SIPHASH、EVP_PKEY_get0_hmac、EVP_PKEY_get0_poly1305、EVP_PKEY_get 0_siphash、EVP_PKEY_get0、EVP_PKEY_type、EVP_PKEY_get_id、EVP_PKEY_get_base_id、 EVP_PKEY_set1_engine、EVP_PKEY_get0_engine、EVP_PKEY_id、EVP_PKEY_base_id - EVP_PKEY 分配函数
SYNOPSIS
#include <openssl/evp.h>
int EVP_PKEY_get_id(const EVP_PKEY *pkey);
int EVP_PKEY_get_base_id(const EVP_PKEY *pkey);
int EVP_PKEY_type(int type);
#define EVP_PKEY_id EVP_PKEY_get_id
#define EVP_PKEY_base_id EVP_PKEY_get_base_id
自 OpenSSL 3.0 起,以下函数已被弃用,并且可以通过使用合适的版本值定义OPENSSL_API_COMPAT 来完全隐藏,请参阅openssl_user_macros(7):
int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key);
int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key);
int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key);
int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len);
const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len);
const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len);
const RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey);
const DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey);
const DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey);
const EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey);
void *EVP_PKEY_get0(const EVP_PKEY *pkey);
int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key);
int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key);
int EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key);
int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
int EVP_PKEY_assign_POLY1305(EVP_PKEY *pkey, ASN1_OCTET_STRING *key);
int EVP_PKEY_assign_SIPHASH(EVP_PKEY *pkey, ASN1_OCTET_STRING *key);
ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey);
int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *engine);
DESCRIPTION
EVP_PKEY_get_base_id() 返回pkey 的类型。例如,RSA 密钥将返回EVP_PKEY_RSA。
仅当pkey类型不仅仅在提供者(7)中实现时,EVP_PKEY_get_id() 才会返回与pkey 关联的实际 NID 。从历史上看,使用相同算法的密钥可以使用不同的 NID。例如,RSA 密钥可以使用与NID_rsaEncryption(相当于EVP_PKEY_RSA)或NID_rsa(相当于EVP_PKEY_RSA2)相对应的 NID 。现在很少使用替代的非标准 NID,因此EVP_PKEY_RSA2等在实践中并不常见。如果pkey仅在提供者(7)中实现,则EVP_PKEY_get_id() 返回 -1 ( EVP_PKEY_KEYMGMT ) 。
EVP_PKEY_type() 返回 NID类型 的基础类型。例如 EVP_PKEY_type(EVP_PKEY_RSA2) 将返回EVP_PKEY_RSA。
EVP_PKEY_set1_RSA()、EVP_PKEY_set1_DSA()、EVP_PKEY_set1_DH() 和 EVP_PKEY_set1_EC_KEY() 将pkey 引用的密钥设置为key。这些函数已被弃用。应用程序应使用EVP_PKEY_fromdata(3)。
EVP_PKEY_assign_RSA()、EVP_PKEY_assign_DSA()、EVP_PKEY_assign_DH()、EVP_PKEY_assign_EC_KEY()、EVP_PKEY_assign_POLY1305() 和 EVP_PKEY_assign_SIPHASH() 将引用的密钥设置为 key,但是它们在内部使用提供的密钥,因此当父 pkey 被释放时,密钥将被释放。这些宏已被弃用。应用程序应使用 OSSL_DECODER API 直接读取 EVP_PKEY(请参阅OSSL_DECODER_CTX_new_for_pkey(3) ),或使用EVP_PKEY_fromdata(3)从数据构造 EVP_PKEY 。
EVP_PKEY_get1_RSA()、EVP_PKEY_get1_DSA()、EVP_PKEY_get1_DH() 和 EVP_PKEY_get1_EC_KEY() 返回pkey 中引用的密钥,如果密钥类型不正确,则返回 NULL。返回的密钥必须在使用后释放。这些函数已被弃用。应用程序应尽可能直接使用 EVP_PKEY。如果需要访问低级关键参数,则应用程序应使用EVP_PKEY_get_params(3)和其他类似函数。要写出 EVP_PKEY,请使用 OSSL_ENCODER API(请参阅OSSL_ENCODER_CTX_new_for_pkey(3))。
EVP_PKEY_get0_hmac()、EVP_PKEY_get0_poly1305()、EVP_PKEY_get0_siphash()、EVP_PKEY_get0_RSA()、EVP_PKEY_get0_DSA()、EVP_PKEY_get0_DH() 和 EVP_PKEY_get0_EC_KEY() 返回pkey 中引用的密钥,如果密钥类型不正确,则返回 NULL 。返回的键的引用计数不会增加,因此使用后不得释放该键。这些函数已被弃用。应用程序应尽可能直接使用 EVP_PKEY。如果需要访问低级关键参数,则应用程序应使用EVP_PKEY_get_params(3)和其他类似函数。要写出 EVP_PKEY,请使用 OSSL_ENCODER API(请参阅OSSL_ENCODER_CTX_new_for_pkey(3))。EVP_PKEY_get0() 返回指向旧密钥的指针,如果密钥不是旧密钥,则返回 NULL。
请注意,如果 EVP_PKEY 不是使用已弃用的函数之一(例如 EVP_PKEY_set1_RSA()、EVP_PKEY_set1_DSA()、EVP_PKEY_set1_DH() 或 EVP_PKEY_set1_EC_KEY() 构造的,或者不是通过上述类似名称的 EVP_PKEY_assign 宏构造的,则内部密钥将由提供者(参见提供者(7))。在这种情况下,由 EVP_PKEY_get1_RSA()、EVP_PKEY_get1_DSA()、EVP_PKEY_get1_DH()、EVP_PKEY_get1_EC_KEY()、EVP_PKEY_get0_hmac()、EVP_PKEY_get0_poly1305()、EVP_PKEY_get0_siphash()、EVP_PKEY_get0_RSA()、EV 返回的密钥P_PKEY_get0_DSA()、EVP_PKEY_get0_DH() 或 EVP_PKEY_get0_EC_KEY()将是提供者密钥的缓存副本。对提供者密钥的后续更新将不会反映在缓存的副本中,并且应用程序对返回的密钥所做的更新也不会反映在提供者的密钥中。对 EVP_PKEY_get1_RSA()、EVP_PKEY_get1_DSA()、EVP_PKEY_get1_DH() 和 EVP_PKEY_get1_EC_KEY() 的后续调用将始终返回第一次调用返回的缓存副本。
EVP_PKEY_get0_engine() 返回对处理pkey 的 ENGINE 的引用。该函数已被弃用。应用程序应该使用提供程序而不是引擎(有关详细信息,请参阅提供程序(7))。
EVP_PKEY_set1_engine() 将 ENGINE 处理pkey设置为engine。必须在关键算法和组件设置完成后调用它。如果引擎不包含pkey的EVP_PKEY_METHOD,则会发生错误。该函数已被弃用。应用程序应该使用提供程序而不是引擎(有关详细信息,请参阅提供程序(7))。
WARNINGS
以下函数仅对已使用 EVP_PKEY_assign_*() 分配了内部密钥的 EVP_PKEY可靠:
EVP_PKEY_get_id()、EVP_PKEY_get_base_id()、EVP_PKEY_type()
对于 EVP_PKEY 密钥类型检查目的,EVP_PKEY_is_a(3)更为通用。
为了检索EVP_PKEY的名称,函数EVP_PKEY_get0_type_name(3)更为有用。
在 OpenSSL 3.0 中,从函数 EVP_PKEY_get0_RSA()、EVP_PKEY_get0_DSA()、EVP_PKEY_get0_DH() 和 EVP_PKEY_get0_EC_KEY() 返回的密钥已更改为“const”返回类型。如上所述,返回的密钥可以是提供者中保存的密钥的缓存副本。因此,与早期版本的 OpenSSL 不同,它们应被视为密钥的只读副本。对这些密钥的更新不会反映在提供商方密钥中。EVP_PKEY_get1_RSA()、EVP_PKEY_get1_DSA()、EVP_PKEY_get1_DH() 和 EVP_PKEY_get1_EC_KEY() 函数未更改为具有“const”返回类型,以便应用程序可以“释放”返回值。但是应用程序仍应将它们视为只读副本。
NOTES
根据 OpenSSL 命名约定,使用1函数从 pkey 获取或分配给pkey 的密钥必须与pkey一样被释放。
EVP_PKEY_assign_RSA()、EVP_PKEY_assign_DSA()、EVP_PKEY_assign_DH()、EVP_PKEY_assign_EC_KEY()、EVP_PKEY_assign_POLY1305() 和 EVP_PKEY_assign_SIPHASH() 作为宏实现。
EVP_PKEY_assign_EC_KEY() 查看曲线名称 id 以确定传递的EC_KEY是否是SM2(7)密钥,并在这种情况下将EVP_PKEY类型设置为EVP_PKEY_SM2而不是EVP_PKEY_EC。
大多数希望知道密钥类型的应用程序将简单地调用 EVP_PKEY_get_base_id() 而不会关心实际类型:在几乎所有情况下,实际类型都是相同的。
本文档的早期版本建议使用 EVP_PKEY_type(pkey->type) 来确定密钥的类型。由于EVP_PKEY现在是不透明的,这不再可能:等效的是 EVP_PKEY_get_base_id(pkey)。
EVP_PKEY_set1_engine() 通常由返回 HSM 密钥的 ENGINE 使用,作为其加载私钥的例程的一部分。
RETURN VALUES
EVP_PKEY_set1_RSA()、EVP_PKEY_set1_DSA()、EVP_PKEY_set1_DH() 和 EVP_PKEY_set1_EC_KEY() 返回 1 表示成功,返回 0 表示失败。
EVP_PKEY_get1_RSA()、EVP_PKEY_get1_DSA()、EVP_PKEY_get1_DH() 和 EVP_PKEY_get1_EC_KEY() 返回引用的密钥,如果发生错误,则返回 NULL。
EVP_PKEY_assign_RSA()、EVP_PKEY_assign_DSA()、EVP_PKEY_assign_DH()、EVP_PKEY_assign_EC_KEY()、EVP_PKEY_assign_POLY1305() 和 EVP_PKEY_assign_SIPHASH() 返回 1 表示成功,返回 0 表示失败。
EVP_PKEY_get_base_id()、EVP_PKEY_get_id() 和 EVP_PKEY_type() 在出错时返回密钥类型或NID_undef(等效于EVP_PKEY_NONE)。
EVP_PKEY_set1_engine() 返回 1 表示成功,0 表示失败。
SEE ALSO
HISTORY
EVP_PKEY_id() 和 EVP_PKEY_base_id() 函数已重命名,以get
分别包含在 OpenSSL 3.0 中的名称中。旧名称保留为未弃用的别名宏。
EVP_PKEY_set1_RSA、EVP_PKEY_set1_DSA、EVP_PKEY_set1_DH、EVP_PKEY_set1_EC_KEY、EVP_PKEY_get1_RSA、EVP_PKEY_get1_DSA、EVP_PKEY_get1_DH、EVP_PKEY_get1_EC_KEY、EVP_PKEY_get0_RSA、EVP_PKEY_get0_DSA、EVP_PKEY _get0_DH、EVP_PKEY_get0_EC_KEY、EVP_PKEY_分配_RSA、EVP_PKEY_分配_DSA、EVP_PKEY_分配_DH、EVP_PKEY_分配_EC_KEY、EVP_PKEY_分配_POLY1305、EVP_PKEY_分配_SIPHASH、EVP_PKEY_get0_hmac、EVP_PKEY_get0_poly1305、EVP_PKEY_get 0_siphash、EVP_PKEY_set1_engine 和 EVP_PKEY_get0_engine 在 OpenSSL 3.0 中已弃用。
EVP_PKEY_get0_RSA、EVP_PKEY_get0_DSA、EVP_PKEY_get0_DH、EVP_PKEY_get0_EC_KEY 的返回值在 OpenSSL 3.0 中设为 const。
函数 EVP_PKEY_set_alias_type() 先前已在此页面上记录。它在 OpenSSL 3.0 中被删除。
COPYRIGHT
版权所有 2002-2023 OpenSSL 项目作者。版权所有。
根据 Apache License 2.0(“许可证”)获得许可。除非遵守许可证,否则您不得使用此文件。您可以在源代码分发版或/source/license.html的 LICENSE 文件中获取副本。