OpenSSL

密码学和 SSL/TLS 工具包

EVP_MD_meth_new

NAME

EVP_MD_meth_new、EVP_MD_meth_dup、EVP_MD_meth_free、EVP_MD_meth_set_input_blocksize、EVP_MD_meth_set_result_size、EVP_MD_meth_set_app_datasize、EVP_MD_meth_set_flags、EVP_MD_meth_set_init、EVP_MD_meth_set_update、EVP_MD_meth_set_final、EVP_MD_meth_ set_copy、EVP_MD_meth_set_cleanup、EVP_MD_meth_set_ctrl、EVP_MD_meth_get_input_blocksize、EVP_MD_meth_get_result_size、EVP_MD_meth_get_app_datasize、EVP_MD_meth_get_flags、EVP_MD_meth_get_init、EVP_MD_meth_get_update、EVP_MD_meth_get_final、EVP_MD_meth_get _copy、EVP_MD_meth_get_cleanup、EVP_MD_meth_get_ctrl - 要构建的例程旧版 EVP_MD 方法

SYNOPSIS

 #include <openssl/evp.h>

自 OpenSSL 3.0 起,以下函数已被弃用,并且可以通过使用合适的版本值定义OPENSSL_API_COMPAT 来完全隐藏,请参阅openssl_user_macros(7)

 EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type);
void EVP_MD_meth_free(EVP_MD *md);
EVP_MD *EVP_MD_meth_dup(const EVP_MD *md);

int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize);
int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize);
int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize);
int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags);
int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx));
int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx,
                                                     const void *data,
                                                     size_t count));
int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx,
                                                   unsigned char *md));
int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to,
                                                 const EVP_MD_CTX *from));
int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx));
int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd,
                                                 int p1, void *p2));

int EVP_MD_meth_get_input_blocksize(const EVP_MD *md);
int EVP_MD_meth_get_result_size(const EVP_MD *md);
int EVP_MD_meth_get_app_datasize(const EVP_MD *md);
unsigned long EVP_MD_meth_get_flags(const EVP_MD *md);
int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx);
int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx,
                                                const void *data,
                                                size_t count);
int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx,
                                               unsigned char *md);
int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to,
                                              const EVP_MD_CTX *from);
int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx);
int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd,
                                              int p1, void *p2);

DESCRIPTION

本页描述的所有功能均已弃用。应用程序应该使用 OSSL_PROVIDER API。

EVP_MD类型是用于摘要方法实现结构。它还可以具有关联的公钥/私钥签名和验证例程。

EVP_MD_meth_new() 创建一个新的EVP_MD结构。这些EVP_MD结构是引用计数的。

EVP_MD_meth_dup() 创建md 的副本。

EVP_MD_meth_free() 减少EVP_MD结构 的引用计数。如果引用计数降至 0,则该结构将被释放。

EVP_MD_meth_set_input_blocksize() 将方法md 的内部输入块大小设置为blocksize字节。

EVP_MD_meth_set_result_size() 将md中的摘要方法预期生成 的结果大小设置为resultsize字节。

摘要方法可能有自己的私有数据,OpenSSL 将为它分配这些数据。应使用 EVP_MD_meth_set_app_datasize() 将其大小设置为datasize

EVP_MD_meth_set_flags() 设置标志来描述特定md中的可选行为。多个标志可以组合在一起。可用的标志有:

EVP_MD_FLAG_ONESHOT

此摘要方法只能处理一个输入块。

EVP_MD_FLAG_XOF

此摘要方法是可扩展输出函数 (XOF),并支持EVP_MD_CTRL_XOF_LEN控制。

EVP_MD_FLAG_DIGALGID_NULL

当设置 DigestAlgorithmIdentifier 时,该标志将默认将参数设置为 NULL。将其用于 PKCS#1。注意:如果与 EVP_MD_FLAG_DIGALGID_ABSENT 结合使用,后者将被覆盖。

EVP_MD_FLAG_DIGALGID_ABSENT

当设置 DigestAlgorithmIdentifier 时,默认情况下该标志将不存在该参数。注意:如果与 EVP_MD_FLAG_DIGALGID_NULL 结合使用,后者将被覆盖。

EVP_MD_FLAG_DIGALGID_CUSTOM

通过 ctrl 处理自定义 DigestAlgorithmIdentifier,默认使用EVP_MD_FLAG_DIGALGID_ABSENT 。注意:如果与 EVP_MD_FLAG_DIGALGID_NULL 结合使用,后者将被覆盖。目前未使用。

EVP_MD_FLAG_FIPS

该摘要方法适合在 FIPS 模式下使用。目前未使用。

EVP_MD_meth_set_init() 设置md 的摘要初始化函数。摘要初始化函数由 EVP_Digest()、EVP_DigestInit()、EVP_DigestInit_ex()、EVP_SignInit、EVP_SignInit_ex()、EVP_VerifyInit() 和 EVP_VerifyInit_ex() 调用。

EVP_MD_meth_set_update() 设置md 的摘要更新函数。摘要更新函数由 EVP_Digest()、EVP_DigestUpdate() 和 EVP_SignUpdate() 调用。

EVP_MD_meth_set_final() 设置md 的摘要最终函数。摘要最终函数由 EVP_Digest()、EVP_DigestFinal()、EVP_DigestFinal_ex()、EVP_SignFinal() 和 EVP_VerifyFinal() 调用。

EVP_MD_meth_set_copy() 设置md 函数在方法的私有数据结构从一个EVP_MD_CTX复制到另一个 EVP_MD_CTX 后执行额外计算。如果只需要复制数据,则不需要此复制功能。请注意,复制函数传递了两个EVP_MD_CTX *,然后可通过 EVP_MD_CTX_get0_md_data() 使用私有数据结构。该复制函数由 EVP_MD_CTX_copy() 和 EVP_MD_CTX_copy_ex() 调用。

EVP_MD_meth_set_cleanup() 设置md 函数在方法的私有数据结构被清理和释放之前进行额外的清理。请注意,清理函数传递了EVP_MD_CTX *,然后可通过 EVP_MD_CTX_get0_md_data() 使用私有数据结构。该清理函数由 EVP_MD_CTX_reset() 和 EVP_MD_CTX_free() 调用。

EVP_MD_meth_set_ctrl() 设置md 的控制函数。有关可用控件, 请参阅EVP_MD_CTX_ctrl(3) 。

EVP_MD_meth_get_input_blocksize()、EVP_MD_meth_get_result_size()、EVP_MD_meth_get_app_datasize()、EVP_MD_meth_get_flags()、EVP_MD_meth_get_init()、EVP_MD_meth_get_update()、EVP_MD_meth_get_final()、EVP_MD_meth_get_copy()、EVP_MD_meth_get _cleanup() 和 EVP_MD_meth_get_ctrl() 均用于检索由 给定的方法数据EVP_MD_meth_set_*() 函数如上。

RETURN VALUES

EVP_MD_meth_new() 和 EVP_MD_meth_dup() 返回指向新创建的EVP_MD 的 指针,或在失败时返回 NULL。所有 EVP_MD_meth_set_ () 函数均返回 1。 EVP_MD_get_input_blocksize()、EVP_MD_meth_get_result_size()、EVP_MD_meth_get_app_datasize() 和 EVP_MD_meth_get_flags() 返回指示的大小或标志。所有其他 EVP_CIPHER_meth_get_ () 函数返回指向其各自md函数的指针。

SEE ALSO

EVP_DigestInit(3)EVP_SignInit(3)EVP_VerifyInit(3)

HISTORY

所有这些函数在 OpenSSL 3.0 中均已弃用。

EVP_MD结构在OpenSSL 1.1 版本之前公开可用。这里描述的功能是在 OpenSSL 1.1 中添加的。使用这些函数创建的 EVP_MD结构在 OpenSSL 3.0 中成为引用计数。

版权所有 2015-2021 OpenSSL 项目作者。版权所有。

根据 Apache License 2.0(“许可证”)获得许可。除非遵守许可证,否则您不得使用此文件。您可以在源代码分发版或/source/license.html的 LICENSE 文件中获取副本。