如何在 OpenSSL 中找到 EVP_MD、EVP_MD_CT 等的定义?

How to find the definition of EVP_MD, EVP_MD_CT, etc in OpenSSL?

我正在使用 OpenSSL。我想使用 HMAC 算法计算 mac 条消息。 HMAC定义如下:

unsigned char *HMAC(const EVP_MD *evp_md, const void *key,
                     int key_len, const unsigned char *d, int n,
                     unsigned char *md, unsigned int *md_len);

现在,我发现HMAC的第一个参数是EVP_MD。我注意到很多函数都有return这个参数。我在哪里可以找到 EVP_MD 的参考或源代码中的内容。

 const EVP_MD *EVP_md_null(void);
 const EVP_MD *EVP_md2(void);
 const EVP_MD *EVP_md5(void);
 const EVP_MD *EVP_sha(void);
 const EVP_MD *EVP_sha1(void);
 const EVP_MD *EVP_dss(void);
 const EVP_MD *EVP_dss1(void);
 const EVP_MD *EVP_mdc2(void);
 const EVP_MD *EVP_ripemd160(void);

 const EVP_MD *EVP_sha224(void);
 const EVP_MD *EVP_sha256(void);
 const EVP_MD *EVP_sha384(void);
 const EVP_MD *EVP_sha512(void);

EVP_MD和EVP_MD_CTX有什么关系?

EVP_MD 结构包含哈希算法的描述。您列出的函数 return 指向特定哈希的这些结构之一的指针。您可以将其中一个作为第一个参数传递给 HASH.

例如,如果您想使用 SHA256 进行哈希运算,您可以调用 EVP_sha256 并将其 return 值传递给 HASH