我知道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
所有这些实例都是函数被调用的地方,但不是它的定义。但是,如果我执行“nm libcrypto.so | grep SHA256_Update”,则可以找到该条目。
...怪异
任何人都可以在这里说清楚吗?
答案 0 :(得分:7)
md32_common.h是C的“穷人模板”。 它定义了任何哈希算法的通用更新函数的结构。每种算法都提供了这种通用结构的名称。
所以在md32_common.h中你会发现:
int HASH_UPDATE (HASH_CTX *c, const void *data_, size_t len)
在sha / sha256.c中你会发现:
#define HASH_UPDATE SHA256_Update
因此,当包含md32_common.h时,您将获得定义的SHA256_Update函数。
在md32_common.h的开头,您将找到一个更完整的解释和示例。