我想有以下解決方案:
- 力霸 - > OpenSSL的+ FIPS
- LibB - > OpenSLL只有
要啓用或禁用FIPS,你叫FIPS_mode_set
。 FIPS_mode_set(1)
應啓用該模式,前提是該庫具有FIPS功能,而FIPS_mode_set(0)
則禁用FIPS算法。
我認爲按照您的期望用法,當加載libA
時,它會檢查臨時文件,並且只在文件存在時才調用FIPS_mode_set(1)
。
如果您編譯並鏈接到支持FIPS且FIPS不支持的功能,那麼您應該使用OPENSSL_FIPS
來保護代碼。
因此,也許是這樣的:
#ifdef OPENSSL_FIPS
int mode, ret = 0; unsigned long err = 0;
mode = FIPS_mode();
if (temp_file_exsts && mode == 0)
{
ret = FIPS_mode_set(1 /*on*/);
err = ERR_get_error();
}
else if (temp_file_exsts && mode != 0))
{
ret = FIPS_mode_set(0 /*off*/);
err = ERR_get_error();
}
else
{
printf("Who knows...");
}
if(ret != 1)
{
printf("FIPS_mode_set failed: %lx.", err);
}
#endif
如何動態地使用經過FIPS和非FIPS
您使用dlopen
和朋友。您將不得不執行一些技巧,以確保libA
總是在加載/運行時鏈接libB
之前。如果遇到問題,請研究並提出一個新問題。
倒是在/ tmp目錄下的文件&重啓系統
研究如何寫一個臨時文件,以及如何以編程方式重新啓動系統。如果遇到問題,請提出一個新問題。
來源
2016-09-21 14:31:19
jww
我能夠實現第一和最後一部分。我在使用基於fips標誌的FIPS和非FIPS庫時被封鎖。讓我試試你的建議。謝謝。 – 0x07FC