Я хочу иметь следующее решение:
- Либа -> OpenSSL + FIPS
- LibB -> OpenSLL только
Чтобы включить или отключить FIPS, вы звоните FIPS_mode_set
, FIPS_mode_set(1)
должен включить режим, если библиотека поддерживает FIPS, а FIPS_mode_set(0)
отключает алгоритмы FIPS.
Я думаю, что в вашем желаемом использовании, когда загружается libA
, он проверяет файл temp и только вызывает 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 & перезагружает систему
научно-исследовательский, как написать временный файл и как программно перезагрузить систему. Задайте новый вопрос, если у вас есть проблемы.
Я могу достичь 1-й и последней части. Я был заблокирован во время использования библиотек FIPS и non-FIPS на основе флагов. позвольте мне попробовать ваше предложение. Благодарю. – 0x07FC