| 
									
										
										
										
											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-01-22 10:42:12 +08:00
										 |  |  | Conditional test that is run during the generation or importing 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>) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 |