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

时间:2012-03-26 21:08:42

标签: cryptography openssl

我知道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”,则可以找到该条目。

...怪异

任何人都可以在这里说清楚吗?

1 个答案:

答案 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的开头,您将找到一个更完整的解释和示例。