Cryptography openssl/crypto中定义的SHA256_Update()在哪里?
我知道SHA256_Update()是在openssl下的libcrypto中实现的,但是,一个简单的grep找不到它的定义:Cryptography openssl/crypto中定义的SHA256_Update()在哪里?,cryptography,openssl,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:
$ 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”,则可以找到条目
奇怪的
任何人都可以在这里解释一下吗?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的开头,您将通过一个示例找到更完整的解释。我昨天确实看到了这个#define
,但没有对它给予足够的重视。因为通常使用类似于#定义未知已知
,例如,#定义缓冲区大小256
。因此,当我昨天看到#define HASH_UPDATE SHA256_UPDATE
时,我认为SHA256_UPDATE
必须在其他地方定义/实现。但今天,您的回答让我想到了#define
宏的基础知识。本质上,它是一种文本替换。考虑到这一点,理解加密中的代码并不难。谢谢你,Omri!