我想在openssl源代码中找到SHA1_Init的实现。
http://osxr.org:8080/openssl/source/crypto/sha/sha1.c#0108
0108 SHA1_Init(&c);
但仅在中找到定义 http://osxr.org:8080/openssl/source/crypto/sha/sha.h#0122
在哪里? 谢谢,
=SG=
因此
SHA1_Init
在sha_locl.h
的标头中定义为HASH_INIT
。 sha1dgst.c
包括 sha_locl.h
,其中包括 ../md32_common.h
,它对 HASH_UPDATE
、HASH_TRANFORM
和 HASH_FINAL
进行扩展,在 SHA1_Init
中定义为 sha.h
。我相信 SHA1_Init
的实际实现最终在这里:http://osxr.org:8080/openssl/source/crypto/sha/sha_locl.h#0125 或在 github 上:https://github .com/openssl/openssl/blob/master/crypto/sha/sha_locl.h#L101.
注意:从 Git 2.42(2023 年第 3 季度)开始,您将不再发现使用
SHA1_Init(&c)
:Git 2.42 调整为 OpenSSL 3+,通过使用其 EVP API 弃用了基于其传统 API 的 SHA-1 函数相反。
请参阅“OpenSSL 的 EVP(信封加密)是什么意思?”和“使用 OpenSSL EVP 加密/解密文件”,作者:Amit Kulkarni。
请参阅commit bda9c12、commit 3e440ea(2023 年 8 月 1 日),作者:Eric Wong (
ele828
)。gitster
-- 合并于 commit 889c94d,2023 年 8 月 09 日)
:避免 OpenSSL 3+ 中弃用的 SHA-1 函数bda9c12073
签署人:Eric Wong
OpenSSL 3+ 弃用了
SHA1_Init,
和SHA1_Update,
函数,导致使用“DEVELOPER=1”构建时出现错误。SHA1_Final
使用较新的
API 与 OpenSSL 3+(仅),尽管由于堆分配更容易出错且效率较低。EVP_*
例如,您现在可以使用,而不是直接使用
SHA1_Init(&c)
:
static inline void openssl_SHA1_Init(struct openssl_SHA1_CTX *ctx)
{
const EVP_MD *type = EVP_sha1();
ctx->ectx = EVP_MD_CTX_new();
if (!ctx->ectx)
die("EVP_MD_CTX_new: out of memory");
EVP_DigestInit_ex(ctx->ectx, type, NULL);
}
EVP_DigestInit_ex()
定义于 openssl/openssl
crypto/evp/digest.c