{
#ifdef ENABLE_FIPS140
/* MD5 is only allowed internally for TLS */
- if (_gnutls_get_lib_state() != LIB_STATE_SELFTEST &&
- _gnutls_get_lib_state() != LIB_STATE_ZOMBIE) {
+ if (gnutls_fips140_mode_enabled() != 0 &&
+ _gnutls_get_lib_state() != LIB_STATE_SELFTEST) {
+
if (algorithm == GNUTLS_MAC_MD5)
return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM);
}
{
#ifdef ENABLE_FIPS140
/* MD5 is only allowed internally for TLS */
- if (_gnutls_get_lib_state() != LIB_STATE_SELFTEST &&
- _gnutls_get_lib_state() != LIB_STATE_ZOMBIE) {
+ if (gnutls_fips140_mode_enabled() != 0 &&
+ _gnutls_get_lib_state() != LIB_STATE_SELFTEST) {
+
if (algorithm == GNUTLS_DIG_MD5)
return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM);
}
#include <fips.h>
#include <stdio.h>
#include <random.h>
-#include <gnutls/fips140.h>
#include <dlfcn.h>
unsigned int _gnutls_lib_mode = LIB_STATE_POWERON;
if (f2p != 0) {
/* a funny state where self tests are performed
* and ignored */
- _gnutls_switch_lib_state(LIB_STATE_ZOMBIE);
_gnutls_debug_log("FIPS140-2 ZOMBIE mode enabled\n");
return 2;
}
typedef enum {
LIB_STATE_POWERON,
- LIB_STATE_ZOMBIE,
LIB_STATE_INIT,
LIB_STATE_SELFTEST,
LIB_STATE_OPERATIONAL,
void _gnutls_switch_lib_state(gnutls_lib_state_t state)
{
/* Once into zombie state no errors can change us */
- if (_gnutls_lib_mode != LIB_STATE_ZOMBIE)
- _gnutls_lib_mode = state;
+ _gnutls_lib_mode = state;
}
inline static gnutls_lib_state_t _gnutls_get_lib_state(void)
# define FAIL_IF_LIB_ERROR \
if (_gnutls_get_lib_state() != LIB_STATE_OPERATIONAL && \
- _gnutls_get_lib_state() != LIB_STATE_SELFTEST && \
- _gnutls_get_lib_state() != LIB_STATE_ZOMBIE) return GNUTLS_E_LIB_IN_ERROR_STATE
+ _gnutls_get_lib_state() != LIB_STATE_SELFTEST) \
+ return GNUTLS_E_LIB_IN_ERROR_STATE
void _gnutls_switch_lib_state(gnutls_lib_state_t state);
* have been loaded */
if (flags & GNUTLS_GLOBAL_INIT_MINIMAL) {
res = _gnutls_fips_mode_enabled();
+ /* res == 1 -> fips140-2 mode enabled
+ * res == 2 -> only self checks performed - but no failure
+ * res == not in fips140 mode
+ */
if (res != 0) {
ret = _gnutls_fips_perform_self_checks();
- if (_gnutls_get_lib_state() != LIB_STATE_ZOMBIE) {
+ if (res != 2) {
if (ret < 0) {
gnutls_assert();
goto out;
#include <gnutls/crypto.h>
#include <gnutls/abstract.h>
#include <gnutls/x509.h>
-#include <gnutls/fips140.h>
void _gnutls_lib_simulate_error(void);