Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cryptography openssl/crypto中定义的SHA256_Update()在哪里?_Cryptography_Openssl - Fatal编程技术网

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

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:

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

奇怪的

任何人都可以在这里解释一下吗?

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!