2020-01-15 08:48:01 +08:00
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
OSSL_PROVIDER-FIPS - OpenSSL FIPS provider
|
2020-01-15 08:48:01 +08:00
|
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
2021-09-21 08:59:56 +08:00
|
|
|
The OpenSSL FIPS provider is a special provider that conforms to the Federal
|
2023-01-19 08:16:40 +08:00
|
|
|
Information Processing Standards (FIPS) specified in FIPS 140-3. This 'module'
|
2020-01-15 08:48:01 +08:00
|
|
|
contains an approved set of cryptographic algorithms that is validated by an
|
|
|
|
accredited testing laboratory.
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=head2 Properties
|
|
|
|
|
|
|
|
The implementations in this provider specifically have these properties
|
2025-06-26 11:18:18 +08:00
|
|
|
defined for approved algorithms:
|
2020-03-06 21:25:42 +08:00
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
2021-06-09 22:03:10 +08:00
|
|
|
=item "provider=fips"
|
2020-03-06 21:25:42 +08:00
|
|
|
|
2020-05-26 11:53:07 +08:00
|
|
|
=item "fips=yes"
|
2020-03-06 21:25:42 +08:00
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
It may be used in a property query string with fetching functions such as
|
|
|
|
L<EVP_MD_fetch(3)> or L<EVP_CIPHER_fetch(3)>, as well as with other
|
|
|
|
functions that take a property query string, such as
|
|
|
|
L<EVP_PKEY_CTX_new_from_name(3)>.
|
|
|
|
|
2023-02-27 07:14:43 +08:00
|
|
|
To be FIPS compliant, it is mandatory to include C<fips=yes> as
|
|
|
|
part of all property queries. This ensures that only FIPS approved
|
|
|
|
implementations are used for cryptographic operations. The C<fips=yes>
|
|
|
|
query may also include other non-crypto support operations that
|
|
|
|
are not in the FIPS provider, such as asymmetric key encoders, see
|
|
|
|
L<OSSL_PROVIDER-default(7)/Asymmetric Key Management>.
|
|
|
|
|
|
|
|
It is not mandatory to include C<provider=fips> as part of your property
|
|
|
|
query. Including C<provider=fips> in your property query guarantees
|
|
|
|
that the OpenSSL FIPS provider is used for cryptographic operations
|
|
|
|
rather than other FIPS capable providers.
|
2020-03-06 21:25:42 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
=head2 Approved algorithms
|
2023-02-08 15:22:43 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
Algorithms that are fetched using "fips=yes" may still be unapproved if certain
|
|
|
|
conditions are not met. See L<fips_module(7)/FIPS indicators> for additional
|
|
|
|
information.
|
2023-02-08 15:22:43 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
=head2 Provider parameters
|
2023-02-08 15:22:43 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
See L<provider-base(7)/Provider parameters> for a list of base parameters.
|
|
|
|
The OpenSSL FIPS provider also handles FIPS indicator related parameters as
|
|
|
|
specified by L<fips_config(5)/FIPS indicator options>.
|
2023-02-08 15:22:43 +08:00
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=head1 OPERATIONS AND ALGORITHMS
|
|
|
|
|
|
|
|
The OpenSSL FIPS provider supports these operations and algorithms:
|
|
|
|
|
|
|
|
=head2 Hashing Algorithms / Message Digests
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item SHA1, see L<EVP_MD-SHA1(7)>
|
|
|
|
|
|
|
|
=item SHA2, see L<EVP_MD-SHA2(7)>
|
|
|
|
|
|
|
|
=item SHA3, see L<EVP_MD-SHA3(7)>
|
|
|
|
|
2025-07-07 15:04:09 +08:00
|
|
|
=item SHAKE, see L<EVP_MD-SHAKE(7)>
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=item KECCAK-KMAC, see L<EVP_MD-KECCAK-KMAC(7)>
|
|
|
|
|
2025-07-07 15:04:09 +08:00
|
|
|
KECCAK-KMAC is only used internally as a sub algorithm of KMAC.
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=back
|
|
|
|
|
|
|
|
=head2 Symmetric Ciphers
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item AES, see L<EVP_CIPHER-AES(7)>
|
|
|
|
|
2023-11-10 23:33:21 +08:00
|
|
|
=item 3DES, see L<EVP_CIPHER-DES(7)>
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=back
|
|
|
|
|
|
|
|
=head2 Message Authentication Code (MAC)
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item CMAC, see L<EVP_MAC-CMAC(7)>
|
|
|
|
|
|
|
|
=item GMAC, see L<EVP_MAC-GMAC(7)>
|
|
|
|
|
|
|
|
=item HMAC, see L<EVP_MAC-HMAC(7)>
|
|
|
|
|
|
|
|
=item KMAC, see L<EVP_MAC-KMAC(7)>
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
|
|
|
=head2 Key Derivation Function (KDF)
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item HKDF, see L<EVP_KDF-HKDF(7)>
|
|
|
|
|
2025-04-04 17:25:48 +08:00
|
|
|
=item HKDF-SHA256, see L<EVP_KDF-HKDF(7)>
|
|
|
|
|
|
|
|
=item HKDF-SHA384, see L<EVP_KDF-HKDF(7)>
|
|
|
|
|
|
|
|
=item HKDF-SHA512, see L<EVP_KDF-HKDF(7)>
|
|
|
|
|
2021-08-03 13:42:13 +08:00
|
|
|
=item TLS13-KDF, see L<EVP_KDF-TLS13_KDF(7)>
|
|
|
|
|
2022-11-16 13:40:09 +08:00
|
|
|
=item SSKDF, see L<EVP_KDF-SS(7)>
|
2020-03-06 21:25:42 +08:00
|
|
|
|
|
|
|
=item PBKDF2, see L<EVP_KDF-PBKDF2(7)>
|
|
|
|
|
2020-11-16 10:42:18 +08:00
|
|
|
=item SSHKDF, see L<EVP_KDF-SSHKDF(7)>
|
|
|
|
|
2021-08-03 13:42:13 +08:00
|
|
|
=item TLS1-PRF, see L<EVP_KDF-TLS1_PRF(7)>
|
2020-03-06 21:25:42 +08:00
|
|
|
|
2022-11-16 13:40:09 +08:00
|
|
|
=item KBKDF, see L<EVP_KDF-KB(7)>
|
2020-03-06 21:25:42 +08:00
|
|
|
|
2020-11-16 10:42:18 +08:00
|
|
|
=item X942KDF-ASN1, see L<EVP_KDF-X942-ASN1(7)>
|
|
|
|
|
|
|
|
=item X942KDF-CONCAT, see L<EVP_KDF-X942-CONCAT(7)>
|
|
|
|
|
|
|
|
=item X963KDF, see L<EVP_KDF-X963(7)>
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=back
|
|
|
|
|
|
|
|
=head2 Key Exchange
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item DH, see L<EVP_KEYEXCH-DH(7)>
|
|
|
|
|
2020-05-26 11:53:07 +08:00
|
|
|
=item ECDH, see L<EVP_KEYEXCH-ECDH(7)>
|
|
|
|
|
|
|
|
=item X25519, see L<EVP_KEYEXCH-X25519(7)>
|
|
|
|
|
|
|
|
=item X448, see L<EVP_KEYEXCH-X448(7)>
|
|
|
|
|
2025-01-08 11:17:47 +08:00
|
|
|
=item ML-KEM, see L<EVP_KEM-ML-KEM(7)>
|
2024-12-20 09:36:09 +08:00
|
|
|
|
2023-11-10 23:33:21 +08:00
|
|
|
=item TLS1-PRF
|
|
|
|
|
|
|
|
=item HKDF
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=back
|
|
|
|
|
|
|
|
=head2 Asymmetric Signature
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
2020-08-27 19:52:17 +08:00
|
|
|
=item RSA, see L<EVP_SIGNATURE-RSA(7)>
|
|
|
|
|
2024-07-29 08:16:30 +08:00
|
|
|
The B<X931> padding mode "OSSL_PKEY_RSA_PAD_MODE_X931" is no longer supported
|
|
|
|
for signature generation, but may be used for verification for legacy use cases.
|
|
|
|
(This is a FIPS 140-3 requirement)
|
|
|
|
|
2023-11-10 23:33:21 +08:00
|
|
|
=item DSA, see L<EVP_SIGNATURE-DSA(7)>
|
|
|
|
|
|
|
|
=item ED25519, see L<EVP_SIGNATURE-ED25519(7)>
|
|
|
|
|
|
|
|
=item ED448, see L<EVP_SIGNATURE-ED448(7)>
|
|
|
|
|
|
|
|
=item ECDSA, see L<EVP_SIGNATURE-ECDSA(7)>
|
2021-08-06 07:16:38 +08:00
|
|
|
|
2025-01-22 10:42:12 +08:00
|
|
|
=item ML-DSA-44, see L<EVP_SIGNATURE-ML-DSA(7)>
|
|
|
|
|
|
|
|
=item ML-DSA-65, see L<EVP_SIGNATURE-ML-DSA(7)>
|
|
|
|
|
|
|
|
=item ML-DSA-87, see L<EVP_SIGNATURE-ML-DSA(7)>
|
|
|
|
|
2024-11-08 13:16:59 +08:00
|
|
|
=item SLH-DSA, see L<EVP_SIGNATURE-SLH-DSA(7)>
|
|
|
|
|
2020-08-27 19:52:17 +08:00
|
|
|
=item HMAC, see L<EVP_SIGNATURE-HMAC(7)>
|
|
|
|
|
|
|
|
=item CMAC, see L<EVP_SIGNATURE-CMAC(7)>
|
|
|
|
|
2024-10-03 15:52:49 +08:00
|
|
|
=item LMS, see L<EVP_SIGNATURE-LMS(7)>
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=back
|
|
|
|
|
|
|
|
=head2 Asymmetric Cipher
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
2022-11-16 13:40:09 +08:00
|
|
|
=item RSA, see L<EVP_ASYM_CIPHER-RSA(7)>
|
2020-03-06 21:25:42 +08:00
|
|
|
|
|
|
|
=back
|
|
|
|
|
2020-09-19 16:08:46 +08:00
|
|
|
=head2 Asymmetric Key Encapsulation
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item RSA, see L<EVP_KEM-RSA(7)>
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=head2 Asymmetric Key Management
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item DH, see L<EVP_KEYMGMT-DH(7)>
|
|
|
|
|
2022-05-04 10:04:43 +08:00
|
|
|
=item DHX, see L<EVP_KEYMGMT-DHX(7)>
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=item DSA, see L<EVP_KEYMGMT-DSA(7)>
|
|
|
|
|
|
|
|
=item RSA, see L<EVP_KEYMGMT-RSA(7)>
|
|
|
|
|
2023-11-10 23:33:21 +08:00
|
|
|
=item RSA-PSS
|
|
|
|
|
2022-05-04 10:04:43 +08:00
|
|
|
=item EC, see L<EVP_KEYMGMT-EC(7)>
|
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
=item ED25519, see L<EVP_KEYMGMT-ED25519(7)>
|
2022-05-04 10:04:43 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
=item ED448, see L<EVP_KEYMGMT-ED448(7)>
|
2024-04-11 14:57:51 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
=item X25519, see L<EVP_KEYMGMT-X25519(7)>
|
2023-11-10 23:33:21 +08:00
|
|
|
|
|
|
|
This is an unapproved algorithm.
|
2025-06-26 11:18:18 +08:00
|
|
|
The FIPS 140-3 IG states that "Curves that are included in SP 800-186 but not
|
|
|
|
included in SP 800-56Arev3 are not approved for key agreement".
|
2023-11-10 23:33:21 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
=item X448, see L<EVP_KEYMGMT-X448(7)>
|
2023-11-10 23:33:21 +08:00
|
|
|
|
|
|
|
This is an unapproved algorithm.
|
2025-06-26 11:18:18 +08:00
|
|
|
The FIPS 140-3 IG states that "Curves that are included in SP 800-186 but not"
|
|
|
|
included in SP 800-56Arev3 are not approved for key agreement".
|
2023-11-10 23:33:21 +08:00
|
|
|
|
|
|
|
=item TLS1-PRF
|
|
|
|
|
|
|
|
=item HKDF
|
|
|
|
|
|
|
|
=item HMAC, see L<EVP_KEYMGMT-HMAC(7)>
|
|
|
|
|
|
|
|
=item CMAC, see L<EVP_KEYMGMT-CMAC(7)>
|
|
|
|
|
2025-01-22 10:42:12 +08:00
|
|
|
=item ML-DSA-44, see L<EVP_KEYMGMT-ML-DSA(7)>
|
|
|
|
|
|
|
|
=item ML-DSA-65, see L<EVP_KEYMGMT-ML-DSA(7)>
|
|
|
|
|
|
|
|
=item ML-DSA-87, see L<EVP_KEYMGMT-ML-DSA(7)>
|
|
|
|
|
2024-11-19 12:40:13 +08:00
|
|
|
=item SLH-DSA-SHA2-128s, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHA2-128f, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHA2-192s, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHA2-192f, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHA2-256s, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHA2-256f, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHAKE-128s, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHAKE-128f, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHAKE-192s, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHAKE-192f, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHAKE-256s, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
|
|
|
=item SLH-DSA-SHAKE-256f, see L<EVP_KEYMGMT-SLH-DSA(7)>
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
=back
|
|
|
|
|
2023-02-23 07:09:57 +08:00
|
|
|
=head2 Random Number Generation
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
2024-09-09 08:46:05 +08:00
|
|
|
=item CRNG-TEST, see L<EVP_RAND-CRNG-TEST(7)>
|
|
|
|
|
2023-02-23 07:09:57 +08:00
|
|
|
=item CTR-DRBG, see L<EVP_RAND-CTR-DRBG(7)>
|
|
|
|
|
|
|
|
=item HASH-DRBG, see L<EVP_RAND-HASH-DRBG(7)>
|
|
|
|
|
|
|
|
=item HMAC-DRBG, see L<EVP_RAND-HMAC-DRBG(7)>
|
|
|
|
|
|
|
|
=item TEST-RAND, see L<EVP_RAND-TEST-RAND(7)>
|
|
|
|
|
|
|
|
TEST-RAND is an unapproved algorithm.
|
|
|
|
|
|
|
|
=back
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
=head1 SELF TESTING
|
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
A requirement of FIPS modules is to run cryptographic algorithm self tests.
|
|
|
|
FIPS 140-3 requires known answer tests to be run on startup as well as
|
|
|
|
conditional tests that run during cryptographic operations.
|
|
|
|
|
|
|
|
An optional callback mechanism is available to return information to the user using
|
2019-10-25 04:40:11 +08:00
|
|
|
L<OSSL_SELF_TEST_set_callback(3)>.
|
2020-01-15 08:48:01 +08:00
|
|
|
|
2020-03-03 12:02:36 +08:00
|
|
|
The parameters passed to the callback are described in L<OSSL_SELF_TEST_new(3)>
|
|
|
|
|
2020-03-06 21:25:42 +08:00
|
|
|
The OpenSSL FIPS module uses the following mechanism to provide information
|
2020-01-15 08:48:01 +08:00
|
|
|
about the self tests as they run.
|
|
|
|
This is useful for debugging if a self test is failing.
|
|
|
|
The callback also allows forcing any self test to fail, in order to check that
|
|
|
|
it operates correctly on failure.
|
|
|
|
Note that all self tests run even if a self test failure occurs.
|
|
|
|
|
2020-03-03 12:02:36 +08:00
|
|
|
The FIPS module passes the following type(s) to OSSL_SELF_TEST_onbegin().
|
2020-01-15 08:48:01 +08:00
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item "Module_Integrity" (B<OSSL_SELF_TEST_TYPE_MODULE_INTEGRITY>)
|
|
|
|
|
|
|
|
Uses HMAC SHA256 on the module file to validate that the module has not been
|
|
|
|
modified. The integrity value is compared to a value written to a configuration
|
|
|
|
file during installation.
|
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
=item "KAT_Integrity" (B<OSSL_SELF_TEST_TYPE_KAT_INTEGRITY>)
|
2020-01-15 08:48:01 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
Used during the Module Integrity test to perform a known answer test on
|
|
|
|
HMAC SHA256 prior to using it.
|
2020-01-15 08:48:01 +08:00
|
|
|
|
|
|
|
=item "KAT_Cipher" (B<OSSL_SELF_TEST_TYPE_KAT_CIPHER>)
|
|
|
|
|
|
|
|
Known answer test for a symmetric cipher.
|
|
|
|
|
2020-09-16 12:10:23 +08:00
|
|
|
=item "KAT_AsymmetricCipher" (B<OSSL_SELF_TEST_TYPE_KAT_ASYM_CIPHER>)
|
|
|
|
|
|
|
|
Known answer test for a asymmetric cipher.
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
=item "KAT_Digest" (B<OSSL_SELF_TEST_TYPE_KAT_DIGEST>)
|
|
|
|
|
|
|
|
Known answer test for a digest.
|
|
|
|
|
2025-02-21 09:22:15 +08:00
|
|
|
=item "KAT_AsymmetricKeyGeneration" (B<OSSL_SELF_TEST_TYPE_KAT_ASYM_KEYGEN>)
|
|
|
|
|
|
|
|
Known answer test for asymmetric key generation.
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
=item "KAT_Signature" (B<OSSL_SELF_TEST_TYPE_KAT_SIGNATURE>)
|
|
|
|
|
|
|
|
Known answer test for a signature.
|
|
|
|
|
2021-09-21 08:59:56 +08:00
|
|
|
=item "PCT_Signature" (B<OSSL_SELF_TEST_TYPE_PCT_SIGNATURE>)
|
2021-08-30 07:59:54 +08:00
|
|
|
|
|
|
|
Pairwise Consistency check for a signature.
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
=item "KAT_KDF" (B<OSSL_SELF_TEST_TYPE_KAT_KDF>)
|
|
|
|
|
|
|
|
Known answer test for a key derivation function.
|
|
|
|
|
|
|
|
=item "KAT_KA" (B<OSSL_SELF_TEST_TYPE_KAT_KA>)
|
|
|
|
|
|
|
|
Known answer test for key agreement.
|
|
|
|
|
2025-01-08 11:17:47 +08:00
|
|
|
=item "KAT_KEM" (B<OSSL_SELF_TEST_TYPE_KAT_KEM>)
|
|
|
|
|
|
|
|
Known answer test for key encapsulation.
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
=item "DRBG" (B<OSSL_SELF_TEST_TYPE_DRBG>)
|
|
|
|
|
|
|
|
Known answer test for a Deterministic Random Bit Generator.
|
|
|
|
|
2021-08-30 07:59:54 +08:00
|
|
|
=item "Conditional_PCT" (B<OSSL_SELF_TEST_TYPE_PCT>)
|
2020-01-15 08:48:01 +08:00
|
|
|
|
2025-08-29 10:47:35 +08:00
|
|
|
Conditional test that is run during the generation of key pairs.
|
|
|
|
|
|
|
|
=item "Import_PCT" (B<OSSL_SELF_TEST_TYPE_PCT_IMPORT>)
|
|
|
|
|
|
|
|
Conditional test that is run during the import of key pairs.
|
2020-01-15 08:48:01 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
=item "Conditional_KAT" (B<OSSL_SELF_TEST_TYPE_PCT_KAT>)
|
|
|
|
|
|
|
|
Conditional test run during generation that derive the public key from the
|
|
|
|
private key and checks that the public key matches. This is a SP 800-56A requirement.
|
|
|
|
|
2020-09-02 07:08:09 +08:00
|
|
|
=item "Continuous_RNG_Test" (B<OSSL_SELF_TEST_TYPE_CRNG>)
|
|
|
|
|
|
|
|
Continuous random number generator test.
|
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
=item "Install_Integrity" (B<OSSL_SELF_TEST_TYPE_INSTALL_INTEGRITY>)
|
2020-01-15 08:48:01 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
This is deprecated. The option is no longer used since FIPS 140-3 requires
|
|
|
|
self tests to always run on startup. Previous FIPS 140-2 validations allowed
|
|
|
|
the self tests to be run just once.
|
2020-01-15 08:48:01 +08:00
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
=back
|
2020-01-15 08:48:01 +08:00
|
|
|
|
2020-03-03 12:02:36 +08:00
|
|
|
The FIPS module passes the following descriptions(s) to OSSL_SELF_TEST_onbegin().
|
2020-01-15 08:48:01 +08:00
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
|
|
|
=item "HMAC" (B<OSSL_SELF_TEST_DESC_INTEGRITY_HMAC>)
|
|
|
|
|
2025-06-26 11:18:18 +08:00
|
|
|
"Module_Integrity" uses this.
|
2020-01-15 08:48:01 +08:00
|
|
|
|
|
|
|
=item "RSA" (B<OSSL_SELF_TEST_DESC_PCT_RSA_PKCS1>)
|
|
|
|
|
2024-03-16 00:34:12 +08:00
|
|
|
=item "RSA" (B<OSSL_SELF_TEST_DESC_PCT_RSA>)
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
=item "ECDSA" (B<OSSL_SELF_TEST_DESC_PCT_ECDSA>)
|
|
|
|
|
2024-01-28 18:18:02 +08:00
|
|
|
=item "EDDSA" (B<OSSL_SELF_TEST_DESC_PCT_EDDSA>)
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
=item "DSA" (B<OSSL_SELF_TEST_DESC_PCT_DSA>)
|
|
|
|
|
2025-01-22 10:42:12 +08:00
|
|
|
=item "ML-DSA" (B<OSSL_SELF_TEST_DESC_PCT_ML_DSA>)
|
|
|
|
|
2025-01-08 11:17:47 +08:00
|
|
|
=item "ML-KEM" (B<OSSL_SELF_TEST_DESC_PCT_ML_KEM>)
|
|
|
|
|
2025-02-21 09:22:15 +08:00
|
|
|
=item "SLH-DSA" (B<OSSL_SELF_TEST_DESC_PCT_SLH_DSA>)
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
Key generation tests used with the "Pairwise_Consistency_Test" type.
|
|
|
|
|
2020-09-16 12:10:23 +08:00
|
|
|
=item "RSA_Encrypt" (B<OSSL_SELF_TEST_DESC_ASYM_RSA_ENC>)
|
|
|
|
|
|
|
|
=item "RSA_Decrypt" (B<OSSL_SELF_TEST_DESC_ASYM_RSA_DEC>)
|
|
|
|
|
|
|
|
"KAT_AsymmetricCipher" uses this to indicate an encrypt or decrypt KAT.
|
|
|
|
|
2025-02-21 09:22:15 +08:00
|
|
|
=item "ML-DSA" (B<OSSL_SELF_TEST_DESC_KEYGEN_ML_DSA>)
|
|
|
|
|
|
|
|
=item "ML-KEM" (B<OSSL_SELF_TEST_DESC_KEYGEN_ML_KEM>)
|
|
|
|
|
|
|
|
=item "SLH-DSA" (B<OSSL_SELF_TEST_DESC_KEYGEN_SLH_DSA>)
|
|
|
|
|
|
|
|
"KAT_AsymmetricKeyGeneration" uses this to indicate a key generation KAT.
|
|
|
|
|
2021-06-21 12:01:36 +08:00
|
|
|
=item "AES_GCM" (B<OSSL_SELF_TEST_DESC_CIPHER_AES_GCM>)
|
2021-04-12 08:38:16 +08:00
|
|
|
|
|
|
|
=item "AES_ECB_Decrypt" (B<OSSL_SELF_TEST_DESC_CIPHER_AES_ECB>)
|
2020-01-15 08:48:01 +08:00
|
|
|
|
|
|
|
=item "TDES" (B<OSSL_SELF_TEST_DESC_CIPHER_TDES>)
|
|
|
|
|
|
|
|
Symmetric cipher tests used with the "KAT_Cipher" type.
|
|
|
|
|
|
|
|
=item "SHA1" (B<OSSL_SELF_TEST_DESC_MD_SHA1>)
|
|
|
|
|
|
|
|
=item "SHA2" (B<OSSL_SELF_TEST_DESC_MD_SHA2>)
|
|
|
|
|
|
|
|
=item "SHA3" (B<OSSL_SELF_TEST_DESC_MD_SHA3>)
|
|
|
|
|
|
|
|
Digest tests used with the "KAT_Digest" type.
|
|
|
|
|
|
|
|
=item "DSA" (B<OSSL_SELF_TEST_DESC_SIGN_DSA>)
|
|
|
|
|
|
|
|
=item "RSA" (B<OSSL_SELF_TEST_DESC_SIGN_RSA>)
|
|
|
|
|
|
|
|
=item "ECDSA" (B<OSSL_SELF_TEST_DESC_SIGN_ECDSA>)
|
|
|
|
|
2025-08-11 21:14:34 +08:00
|
|
|
=item "DetECDSA" (B<OSSL_SELF_TEST_DESC_SIGN_DetECDSA>)
|
|
|
|
|
2023-09-15 10:40:39 +08:00
|
|
|
=item "EDDSA" (B<OSSL_SELF_TEST_DESC_SIGN_EDDSA>)
|
|
|
|
|
2025-01-13 09:43:10 +08:00
|
|
|
=item "LMS" (B<OSSL_SELF_TEST_DESC_SIGN_LMS>)
|
|
|
|
|
2025-01-22 10:42:12 +08:00
|
|
|
=item "ML-DSA" (B<OSSL_SELF_TEST_DESC_SIGN_ML_DSA>)
|
|
|
|
|
2025-02-21 09:22:15 +08:00
|
|
|
=item "SLH-DSA" (B<OSSL_SELF_TEST_DESC_SIGN_SLH_DSA>)
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
Signature tests used with the "KAT_Signature" type.
|
|
|
|
|
|
|
|
=item "ECDH" (B<OSSL_SELF_TEST_DESC_KA_ECDH>)
|
|
|
|
|
2020-04-03 14:50:36 +08:00
|
|
|
=item "DH" (B<OSSL_SELF_TEST_DESC_KA_DH>)
|
2020-01-15 08:48:01 +08:00
|
|
|
|
|
|
|
Key agreement tests used with the "KAT_KA" type.
|
|
|
|
|
|
|
|
=item "HKDF" (B<OSSL_SELF_TEST_DESC_KDF_HKDF>)
|
|
|
|
|
2021-08-03 13:42:13 +08:00
|
|
|
=item "TLS13_KDF_EXTRACT" (B<OSSL_SELF_TEST_DESC_KDF_TLS13_EXTRACT>)
|
|
|
|
|
|
|
|
=item "TLS13_KDF_EXPAND" (B<OSSL_SELF_TEST_DESC_KDF_TLS13_EXPAND>)
|
|
|
|
|
2020-04-03 14:50:36 +08:00
|
|
|
=item "SSKDF" (B<OSSL_SELF_TEST_DESC_KDF_SSKDF>)
|
|
|
|
|
2020-11-23 12:55:48 +08:00
|
|
|
=item "X963KDF" (B<OSSL_SELF_TEST_DESC_KDF_X963KDF>)
|
|
|
|
|
|
|
|
=item "X942KDF" (B<OSSL_SELF_TEST_DESC_KDF_X942KDF>)
|
|
|
|
|
|
|
|
=item "PBKDF2" (B<OSSL_SELF_TEST_DESC_KDF_PBKDF2>)
|
|
|
|
|
|
|
|
=item "SSHKDF" (B<OSSL_SELF_TEST_DESC_KDF_SSHKDF>)
|
|
|
|
|
|
|
|
=item "TLS12_PRF" (B<OSSL_SELF_TEST_DESC_KDF_TLS12_PRF>)
|
|
|
|
|
|
|
|
=item "KBKDF" (B<OSSL_SELF_TEST_DESC_KDF_KBKDF>)
|
|
|
|
|
2025-01-08 11:17:47 +08:00
|
|
|
Key Encapsulation Function tests used with the "KAT_KEM" type.
|
|
|
|
|
|
|
|
=item "KEM_Encap" (B<OSSL_SELF_TEST_DESC_ENCAP_KEM>)
|
|
|
|
|
|
|
|
=item "KEM_Decap" (B<OSSL_SELF_TEST_DESC_DECAP_KEM>)
|
|
|
|
|
|
|
|
=item "KEM_Decap_Reject" (B<OSSL_SELF_TEST_DESC_DECAP_REJ_KEM>)
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
Key Derivation Function tests used with the "KAT_KDF" type.
|
|
|
|
|
|
|
|
=item "CTR" (B<OSSL_SELF_TEST_DESC_DRBG_CTR>)
|
|
|
|
|
|
|
|
=item "HASH" (B<OSSL_SELF_TEST_DESC_DRBG_HASH>)
|
|
|
|
|
|
|
|
=item "HMAC" (B<OSSL_SELF_TEST_DESC_DRBG_HMAC>)
|
|
|
|
|
|
|
|
DRBG tests used with the "DRBG" type.
|
|
|
|
|
2023-12-07 08:54:34 +08:00
|
|
|
=item "RNG" (B<OSSL_SELF_TEST_DESC_RNG>)
|
2020-09-02 07:08:09 +08:00
|
|
|
|
|
|
|
"Continuous_RNG_Test" uses this.
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
=back
|
|
|
|
|
|
|
|
=head1 EXAMPLES
|
|
|
|
|
|
|
|
A simple self test callback is shown below for illustrative purposes.
|
|
|
|
|
|
|
|
#include <openssl/self_test.h>
|
|
|
|
|
|
|
|
static OSSL_CALLBACK self_test_cb;
|
|
|
|
|
|
|
|
static int self_test_cb(const OSSL_PARAM params[], void *arg)
|
|
|
|
{
|
|
|
|
int ret = 0;
|
|
|
|
const OSSL_PARAM *p = NULL;
|
|
|
|
const char *phase = NULL, *type = NULL, *desc = NULL;
|
|
|
|
|
|
|
|
p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_PHASE);
|
|
|
|
if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
|
|
|
|
goto err;
|
|
|
|
phase = (const char *)p->data;
|
|
|
|
|
|
|
|
p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_DESC);
|
|
|
|
if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
|
|
|
|
goto err;
|
|
|
|
desc = (const char *)p->data;
|
|
|
|
|
|
|
|
p = OSSL_PARAM_locate_const(params, OSSL_PROV_PARAM_SELF_TEST_TYPE);
|
|
|
|
if (p == NULL || p->data_type != OSSL_PARAM_UTF8_STRING)
|
|
|
|
goto err;
|
|
|
|
type = (const char *)p->data;
|
|
|
|
|
|
|
|
/* Do some logging */
|
|
|
|
if (strcmp(phase, OSSL_SELF_TEST_PHASE_START) == 0)
|
|
|
|
BIO_printf(bio_out, "%s : (%s) : ", desc, type);
|
|
|
|
if (strcmp(phase, OSSL_SELF_TEST_PHASE_PASS) == 0
|
|
|
|
|| strcmp(phase, OSSL_SELF_TEST_PHASE_FAIL) == 0)
|
|
|
|
BIO_printf(bio_out, "%s\n", phase);
|
|
|
|
|
|
|
|
/* Corrupt the SHA1 self test during the 'corrupt' phase by returning 0 */
|
|
|
|
if (strcmp(phase, OSSL_SELF_TEST_PHASE_CORRUPT) == 0
|
|
|
|
&& strcmp(desc, OSSL_SELF_TEST_DESC_MD_SHA1) == 0) {
|
|
|
|
BIO_printf(bio_out, "%s %s", phase, desc);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
ret = 1;
|
|
|
|
err:
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2023-01-19 08:16:40 +08:00
|
|
|
=head1 NOTES
|
|
|
|
|
2023-05-25 09:31:36 +08:00
|
|
|
Some released versions of OpenSSL do not include a validated
|
|
|
|
FIPS provider. To determine which versions have undergone
|
|
|
|
the validation process, please refer to the
|
|
|
|
L<OpenSSL Downloads page|https://www.openssl.org/source/>. If you
|
|
|
|
require FIPS-approved functionality, it is essential to build your FIPS
|
|
|
|
provider using one of the validated versions listed there. Normally,
|
|
|
|
it is possible to utilize a FIPS provider constructed from one of the
|
|
|
|
validated versions alongside F<libcrypto> and F<libssl> compiled from any
|
|
|
|
release within the same major release series. This flexibility enables
|
|
|
|
you to address bug fixes and CVEs that fall outside the FIPS boundary.
|
|
|
|
|
2025-05-27 17:36:31 +08:00
|
|
|
You can load the FIPS provider into multiple library contexts as any other
|
|
|
|
provider. However the following restriction applies. The FIPS provider cannot
|
|
|
|
be used by multiple copies of OpenSSL libcrypto in a single process.
|
|
|
|
|
|
|
|
As the provider saves core callbacks to the libcrypto obtained in the
|
|
|
|
OSSL_provider_init() call to global data it will fail if subsequent
|
|
|
|
invocations of its OSSL_provider_init() function yield different addresses
|
|
|
|
of these callbacks than in the initial call. This happens when different
|
|
|
|
copies of libcrypto are present in the memory of the process and both try
|
|
|
|
to load the same FIPS provider. A workaround is to have a different copy
|
|
|
|
of the FIPS provider loaded for each of the libcrypto instances in the
|
|
|
|
process.
|
|
|
|
|
2020-01-15 08:48:01 +08:00
|
|
|
=head1 SEE ALSO
|
|
|
|
|
|
|
|
L<openssl-fipsinstall(1)>,
|
|
|
|
L<fips_config(5)>,
|
2019-10-25 04:40:11 +08:00
|
|
|
L<OSSL_SELF_TEST_set_callback(3)>,
|
2020-03-03 12:02:36 +08:00
|
|
|
L<OSSL_SELF_TEST_new(3)>,
|
2020-01-15 08:48:01 +08:00
|
|
|
L<OSSL_PARAM(3)>,
|
2020-03-06 21:25:42 +08:00
|
|
|
L<openssl-core.h(7)>,
|
2020-06-21 07:21:19 +08:00
|
|
|
L<openssl-core_dispatch.h(7)>,
|
2023-05-25 09:31:36 +08:00
|
|
|
L<provider(7)>,
|
|
|
|
L<https://www.openssl.org/source/>
|
2020-01-15 08:48:01 +08:00
|
|
|
|
|
|
|
=head1 HISTORY
|
|
|
|
|
2025-04-07 19:21:47 +08:00
|
|
|
The HKDF-SHA256, HKDF-SHA384 and HKDF-SHA512 algorithms were added in OpenSSL 3.6.
|
2025-04-04 17:25:48 +08:00
|
|
|
|
|
|
|
All other functionality was added in OpenSSL 3.0.
|
2020-01-15 08:48:01 +08:00
|
|
|
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
|
2025-03-12 21:35:59 +08:00
|
|
|
Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved.
|
2020-01-15 08:48:01 +08:00
|
|
|
|
|
|
|
Licensed under the Apache License 2.0 (the "License"). You may not use
|
|
|
|
this file except in compliance with the License. You can obtain a copy
|
|
|
|
in the file LICENSE in the source distribution or at
|
|
|
|
L<https://www.openssl.org/source/license.html>.
|
|
|
|
|
|
|
|
=cut
|