在FIPS模式下使用OpenSSL计算SHA256哈希
背景在FIPS模式下使用OpenSSL计算SHA256哈希,openssl,sha256,fips,Openssl,Sha256,Fips,背景 我已经使用OpenSSL FIPS对象模块编译了OpenSSL(遵循交叉编译到Android的说明) 现在,在我的代码中,我想使用SHA256(据我所见,至少有一些SHA256算法是FIPS批准的) 问题 调用set_mode(1)在运行时启用FIPS后,以下代码在OpenSSLDie中崩溃(可能意味着FIPS禁用) 问题 调用private\u SHA256\u Init似乎是可行的,但这是正确的方法还是绕过了FIPS合规性? 如果不是正确的方法,如何在FIPS模式下计算SHA256 如
我已经使用OpenSSL FIPS对象模块编译了OpenSSL(遵循交叉编译到Android的说明) 现在,在我的代码中,我想使用SHA256(据我所见,至少有一些SHA256算法是FIPS批准的) 问题
调用set_mode(1)在运行时启用FIPS后,以下代码在OpenSSLDie中崩溃(可能意味着FIPS禁用) 问题
private\u SHA256\u Init
似乎是可行的,但这是正确的方法还是绕过了FIPS合规性?
如果不是正确的方法,如何在FIPS模式下计算SHA256使用的版本:据我所知,openssl-1.0.1q、openssl-fips-2.0.11等低级函数的使用已被弃用,例如
SHA256_Init
目前批准的使用OpenSSL计算摘要的方法是通过EVP
。SHA-256的示例取自:
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, data, len);
SHA256_Final(outputBuffer, &sha256);
void digest_message(unsigned char *message, unsigned char **digest, unsigned int *digest_len)
{
EVP_MD_CTX *mdctx;
if((mdctx = EVP_MD_CTX_create()) == NULL)
handleErrors();
if(1 != EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL))
handleErrors();
if(1 != EVP_DigestUpdate(mdctx, message, strlen(message)))
handleErrors();
if((*digest = (unsigned char *)OPENSSL_malloc(EVP_MD_size(EVP_sha256()))) == NULL)
handleErrors();
if(1 != EVP_DigestFinal_ex(mdctx, *digest, digest_len))
handleErrors();
EVP_MD_CTX_destroy(mdctx);
}