在openssl/crypto中定义的SHA256_Update()在哪里?

Qia*_* Xu 4 openssl cryptography

我知道SHA256_Update()是在openssl下的libcrypto中实现的,但是,一个简单的grep找不到它的定义:

$ ack SHA256_Update
fips/fips_standalone_sha1.c
76:     SHA256_Update(md_ctx,key,len);
87:    SHA256_Update(md_ctx,pad,SHA256_CBLOCK);
92:    SHA256_Update(o_ctx,pad,SHA256_CBLOCK);
100:    SHA256_Update(o_ctx,buf,sizeof buf);
154:        SHA256_Update(&md_ctx,buf,l);

evp/m_sha1.c
114:    { return SHA256_Update(ctx->md_data,data,count); }

sha/sha256.c
58:     SHA256_Update(&c,d,n);
71:     SHA256_Update(&c,d,n);
78:{   return SHA256_Update (c,data,len);   }
116:#define     HASH_UPDATE             SHA256_Update
Run Code Online (Sandbox Code Playgroud)

所有这些实例都是函数被调用的地方,但不是它的定义.但是,如果我执行"nm libcrypto.so | grep SHA256_Update",则可以找到该条目.

奇怪的...

有人可以在这里说清楚吗?

Omr*_*rel 7

md32_common.h是C的"穷人模板".它定义了任何哈希算法的通用更新函数的结构.每个算法都提供此常规结构的名称.

所以在md32_common.h中你会发现:

int HASH_UPDATE (HASH_CTX *c, const void *data_, size_t len)
Run Code Online (Sandbox Code Playgroud)

在sha/sha256.c中你会发现:

#define HASH_UPDATE             SHA256_Update
Run Code Online (Sandbox Code Playgroud)

因此,当包含md32_common.h时,您将获得定义的SHA256_Update函数.

在md32_common.h的开头,您将通过示例找到更完整的解释.