[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
B.2 FIPS Finite State Machine
The FIPS mode of libgcrypt implements a finite state machine (FSM) using 8 states (see Table B.1) and checks at runtime that only valid transitions (see Table B.2) may happen.
Figure B.1: FIPS mode state diagram
States used by the FIPS FSM:
- Power-Off
Libgcrypt is not runtime linked to another application. This usually means that the library is not loaded into main memory. This state is documentation only.
- Power-On
Libgcrypt is loaded into memory and API calls may be made. Compiler introduced constructor functions may be run. Note that Libgcrypt does not implement any arbitrary constructor functions to be called by the operating system
- Init
The Libgcrypt initialization functions are performed and the library has not yet run any self-test.
- Self-Test
Libgcrypt is performing self-tests.
- Operational
Libgcrypt is in the operational state and all interfaces may be used.
- Error
Libgrypt is in the error state. When calling any FIPS relevant interfaces they either return an error (
GPG_ERR_NOT_OPERATIONAL
) or put Libgcrypt into the Fatal-Error state and won’t return.- Fatal-Error
Libgcrypt is in a non-recoverable error state and will automatically transit into the Shutdown state.
- Shutdown
Libgcrypt is about to be terminated and removed from the memory. The application may at this point still running cleanup handlers.
Table B.1: FIPS mode states
The valid state transitions (see Figure B.1) are:
1
Power-Off to Power-On is implicitly done by the OS loading Libgcrypt as a shared library and having it linked to an application.
2
Power-On to Init is triggered by the application calling the Libgcrypt initialization function
gcry_check_version
.3
Init to Self-Test is either triggered by a dedicated API call or implicit by invoking a libgrypt service controlled by the FSM.
4
Self-Test to Operational is triggered after all self-tests passed successfully.
5
Operational to Shutdown is an artificial state without any direct action in Libgcrypt. When reaching the Shutdown state the library is deinitialized and can’t return to any other state again.
6
Shutdown to Power-off is the process of removing Libgcrypt from the computer’s memory. For obvious reasons the Power-Off state can’t be represented within Libgcrypt and thus this transition is for documentation only.
7
Operational to Error is triggered if Libgcrypt detected an application error which can’t be returned to the caller but still allows Libgcrypt to properly run. In the Error state all FIPS relevant interfaces return an error code.
8
Error to Shutdown is similar to the Operational to Shutdown transition (5).
9
Error to Fatal-Error is triggered if Libgrypt detects an fatal error while already being in Error state.
10
Fatal-Error to Shutdown is automatically entered by Libgcrypt after having reported the error.
11
Power-On to Shutdown is an artificial state to document that Libgcrypt has not ye been initialized but the process is about to terminate.
12
Power-On to Fatal-Error will be triggered if certain Libgcrypt functions are used without having reached the Init state.
13
Self-Test to Fatal-Error is triggered by severe errors in Libgcrypt while running self-tests.
14
Self-Test to Error is triggered by a failed self-test.
15
Operational to Fatal-Error is triggered if Libcrypt encountered a non-recoverable error.
16
Operational to Self-Test is triggered if the application requested to run the self-tests again.
17
Error to Self-Test is triggered if the application has requested to run self-tests to get to get back into operational state after an error.
18
Init to Error is triggered by errors in the initialization code.
19
Init to Fatal-Error is triggered by non-recoverable errors in the initialization code.
20
Error to Error is triggered by errors while already in the Error state.
Table B.2: FIPS mode state transitions
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on February 9, 2014 using texi2html 5.0.