Ich möchte folgende Lösung haben:
- Liba -> OpenSSL + FIPS
- libb -> OpenSLL nur
FIPS aktivieren oder zu deaktivieren, rufen Sie FIPS_mode_set
. FIPS_mode_set(1)
sollte den Modus aktivieren, wenn die Bibliothek FIPS-fähig ist, während FIPS_mode_set(0)
FIPS-Algorithmen deaktiviert.
Ich denke in Ihrer gewünschten Verwendung, wenn libA
geladen wird, sucht es nach der temporären Datei und ruft nur FIPS_mode_set(1)
auf, wenn die Datei vorhanden ist.
Wenn Sie kompilieren und verknüpfen gegen FIPS fähig und FIPS nicht fähig, dann sollten Sie den Code mit OPENSSL_FIPS
schützen.
Also vielleicht so etwas wie:
#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
Wie dynamisch FIPS verwenden, um und Nicht-FIPS
Sie dlopen
und Freunde verwenden. Sie müssen einige Tricks ausführen, um sicherzustellen, dass libA
immer Lasten/Laufzeit-Links vor libB
ist. Recherchiere es und stelle eine neue Frage, wenn du Probleme hast.
es berührt eine Datei im Verzeichnis/tmp & dem System
Forschung neu startet, wie eine temporäre Datei zu schreiben und wie programmatisch das System neu zu starten. Stellen Sie eine neue Frage, wenn Sie Probleme haben.
Ich bin in der Lage, den ersten und letzten Teil zu erreichen. Ich wurde blockiert, während ich FIPS- und Nicht-FIPS-Bibliotheken benutzte, die auf fips-Flags basierten. Lass mich deinen Vorschlag ausprobieren. Vielen Dank. – 0x07FC