dwww Home | Manual pages | Find package

OSSL_PROVIDER-FIPS(7SSL)            OpenSSL            OSSL_PROVIDER-FIPS(7SSL)

NAME
       OSSL_PROVIDER-FIPS - OpenSSL FIPS provider

DESCRIPTION
       The OpenSSL FIPS provider is a special provider that conforms to the
       Federal Information Processing Standards (FIPS) specified in FIPS 140-3.
       This 'module' contains an approved set of cryptographic algorithms that
       is validated by an accredited testing laboratory.

   Properties
       The implementations in this provider specifically have these properties
       defined for approved algorithms:

       "provider=fips"
       "fips=yes"

       It  may  be used in a property query string with fetching functions such
       as  EVP_MD_fetch(3)  or  EVP_CIPHER_fetch(3),  as  well  as  with  other
       functions    that    take    a    property   query   string,   such   as
       EVP_PKEY_CTX_new_from_name(3).

       To be FIPS compliant, it is mandatory to include "fips=yes" as  part  of
       all   property   queries.    This   ensures   that  only  FIPS  approved
       implementations are used for cryptographic operations.   The  "fips=yes"
       query  may also include other non-crypto support operations that are not
       in the FIPS provider, such as asymmetric key encoders,  see  "Asymmetric
       Key Management" in OSSL_PROVIDER-default(7).

       It  is not mandatory to include "provider=fips" as part of your property
       query.  Including "provider=fips" in your property query guarantees that
       the OpenSSL FIPS provider is used for  cryptographic  operations  rather
       than other FIPS capable providers.

   Approved algorithms
       Algorithms  that are fetched using "fips=yes" may still be unapproved if
       certain conditions are not met. See "FIPS indicators" in  fips_module(7)
       for additional information.

   Provider parameters
       See  "Provider  parameters"  in  provider-base(7)  for  a  list  of base
       parameters.  The OpenSSL  FIPS  provider  also  handles  FIPS  indicator
       related   parameters   as  specified  by  "FIPS  indicator  options"  in
       fips_config(5).

OPERATIONS AND ALGORITHMS
       The OpenSSL FIPS provider supports these operations and algorithms:

   Hashing Algorithms / Message Digests
       SHA1, see EVP_MD-SHA1(7)
       SHA2, see EVP_MD-SHA2(7)
       SHA3, see EVP_MD-SHA3(7)
       KECCAK-KMAC, see EVP_MD-KECCAK-KMAC(7)
       SHAKE, see EVP_MD-SHAKE(7)

   Symmetric Ciphers
       AES, see EVP_CIPHER-AES(7)
       3DES, see EVP_CIPHER-DES(7)

   Message Authentication Code (MAC)
       CMAC, see EVP_MAC-CMAC(7)
       GMAC, see EVP_MAC-GMAC(7)
       HMAC, see EVP_MAC-HMAC(7)
       KMAC, see EVP_MAC-KMAC(7)

   Key Derivation Function (KDF)
       HKDF, see EVP_KDF-HKDF(7)
       TLS13-KDF, see EVP_KDF-TLS13_KDF(7)
       SSKDF, see EVP_KDF-SS(7)
       PBKDF2, see EVP_KDF-PBKDF2(7)
       SSHKDF, see EVP_KDF-SSHKDF(7)
       TLS1-PRF, see EVP_KDF-TLS1_PRF(7)
       KBKDF, see EVP_KDF-KB(7)
       X942KDF-ASN1, see EVP_KDF-X942-ASN1(7)
       X942KDF-CONCAT, see EVP_KDF-X942-CONCAT(7)
       X963KDF, see EVP_KDF-X963(7)

   Key Exchange
       DH, see EVP_KEYEXCH-DH(7)
       ECDH, see EVP_KEYEXCH-ECDH(7)
       X25519, see EVP_KEYEXCH-X25519(7)
       X448, see EVP_KEYEXCH-X448(7)
       ML-KEM, see EVP_KEM-ML-KEM(7)
       TLS1-PRF
       HKDF

   Asymmetric Signature
       RSA, see EVP_SIGNATURE-RSA(7)
           The 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)

       DSA, see EVP_SIGNATURE-DSA(7)
       ED25519, see EVP_SIGNATURE-ED25519(7)
       ED448, see EVP_SIGNATURE-ED448(7)
       ECDSA, see EVP_SIGNATURE-ECDSA(7)
       ML-DSA-44, see EVP_SIGNATURE-ML-DSA(7)
       ML-DSA-65, see EVP_SIGNATURE-ML-DSA(7)
       ML-DSA-87, see EVP_SIGNATURE-ML-DSA(7)
       SLH-DSA, see EVP_SIGNATURE-SLH-DSA(7)
       HMAC, see EVP_SIGNATURE-HMAC(7)
       CMAC, see EVP_SIGNATURE-CMAC(7)

   Asymmetric Cipher
       RSA, see EVP_ASYM_CIPHER-RSA(7)

   Asymmetric Key Encapsulation
       RSA, see EVP_KEM-RSA(7)

   Asymmetric Key Management
       DH, see EVP_KEYMGMT-DH(7)
       DHX, see EVP_KEYMGMT-DHX(7)
       DSA, see EVP_KEYMGMT-DSA(7)
       RSA, see EVP_KEYMGMT-RSA(7)
       RSA-PSS
       EC, see EVP_KEYMGMT-EC(7)
       ED25519, see EVP_KEYMGMT-ED25519(7)
       ED448, see EVP_KEYMGMT-ED448(7)
       X25519, see EVP_KEYMGMT-X25519(7)
           This  is  an  unapproved  algorithm.   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".

       X448, see EVP_KEYMGMT-X448(7)
           This  is  an  unapproved  algorithm.   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".

       TLS1-PRF
       HKDF
       HMAC, see EVP_KEYMGMT-HMAC(7)
       CMAC, see EVP_KEYMGMT-CMAC(7)
       ML-DSA-44, see EVP_KEYMGMT-ML-DSA(7)
       ML-DSA-65, see EVP_KEYMGMT-ML-DSA(7)
       ML-DSA-87, see EVP_KEYMGMT-ML-DSA(7)
       SLH-DSA-SHA2-128s, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHA2-128f, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHA2-192s, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHA2-192f, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHA2-256s, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHA2-256f, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHAKE-128s, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHAKE-128f, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHAKE-192s, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHAKE-192f, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHAKE-256s, see EVP_KEYMGMT-SLH-DSA(7)
       SLH-DSA-SHAKE-256f, see EVP_KEYMGMT-SLH-DSA(7)

   Random Number Generation
       CRNG-TEST, see EVP_RAND-CRNG-TEST(7)
       CTR-DRBG, see EVP_RAND-CTR-DRBG(7)
       HASH-DRBG, see EVP_RAND-HASH-DRBG(7)
       HMAC-DRBG, see EVP_RAND-HMAC-DRBG(7)
       TEST-RAND, see EVP_RAND-TEST-RAND(7)
           TEST-RAND is an unapproved algorithm.

SELF TESTING
       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 OSSL_SELF_TEST_set_callback(3).

       The    parameters    passed   to   the   callback   are   described   in
       OSSL_SELF_TEST_new(3)

       The  OpenSSL  FIPS  module  uses  the  following  mechanism  to  provide
       information  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.

       The     FIPS     module     passes     the    following    type(s)    to
       OSSL_SELF_TEST_onbegin().

       "Module_Integrity" (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.

       "KAT_Integrity" (OSSL_SELF_TEST_TYPE_KAT_INTEGRITY)
           Used during the Module Integrity test to perform a known answer test
           on HMAC SHA256 prior to using it.

       "KAT_Cipher" (OSSL_SELF_TEST_TYPE_KAT_CIPHER)
           Known answer test for a symmetric cipher.

       "KAT_AsymmetricCipher" (OSSL_SELF_TEST_TYPE_KAT_ASYM_CIPHER)
           Known answer test for a asymmetric cipher.

       "KAT_Digest" (OSSL_SELF_TEST_TYPE_KAT_DIGEST)
           Known answer test for a digest.

       "KAT_AsymmetricKeyGeneration" (OSSL_SELF_TEST_TYPE_KAT_ASYM_KEYGEN)
           Known answer test for asymmetric key generation.

       "KAT_Signature" (OSSL_SELF_TEST_TYPE_KAT_SIGNATURE)
           Known answer test for a signature.

       "PCT_Signature" (OSSL_SELF_TEST_TYPE_PCT_SIGNATURE)
           Pairwise Consistency check for a signature.

       "KAT_KDF" (OSSL_SELF_TEST_TYPE_KAT_KDF)
           Known answer test for a key derivation function.

       "KAT_KA" (OSSL_SELF_TEST_TYPE_KAT_KA)
           Known answer test for key agreement.

       "KAT_KEM" (OSSL_SELF_TEST_TYPE_KAT_KEM)
           Known answer test for key encapsulation.

       "DRBG" (OSSL_SELF_TEST_TYPE_DRBG)
           Known answer test for a Deterministic Random Bit Generator.

       "Conditional_PCT" (OSSL_SELF_TEST_TYPE_PCT)
           Conditional test that is run during the generation of key pairs.

       "Import_PCT" (OSSL_SELF_TEST_TYPE_PCT_IMPORT)
           Conditional test that is run during the import of key pairs.

       "Conditional_KAT" (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.

       "Continuous_RNG_Test" (OSSL_SELF_TEST_TYPE_CRNG)
           Continuous random number generator test.

       "Install_Integrity" (OSSL_SELF_TEST_TYPE_INSTALL_INTEGRITY)
           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.

       The    FIPS    module    passes   the   following   descriptions(s)   to
       OSSL_SELF_TEST_onbegin().

       "HMAC" (OSSL_SELF_TEST_DESC_INTEGRITY_HMAC)
           "Module_Integrity" uses this.

       "RSA" (OSSL_SELF_TEST_DESC_PCT_RSA_PKCS1)
       "RSA" (OSSL_SELF_TEST_DESC_PCT_RSA)
       "ECDSA" (OSSL_SELF_TEST_DESC_PCT_ECDSA)
       "EDDSA" (OSSL_SELF_TEST_DESC_PCT_EDDSA)
       "DSA" (OSSL_SELF_TEST_DESC_PCT_DSA)
       "ML-DSA" (OSSL_SELF_TEST_DESC_PCT_ML_DSA)
       "ML-KEM" (OSSL_SELF_TEST_DESC_PCT_ML_KEM)
       "SLH-DSA" (OSSL_SELF_TEST_DESC_PCT_SLH_DSA)
           Key generation tests used with the "Pairwise_Consistency_Test" type.

       "RSA_Encrypt" (OSSL_SELF_TEST_DESC_ASYM_RSA_ENC)
       "RSA_Decrypt" (OSSL_SELF_TEST_DESC_ASYM_RSA_DEC)
           "KAT_AsymmetricCipher" uses this to indicate an encrypt  or  decrypt
           KAT.

       "ML-DSA" (OSSL_SELF_TEST_DESC_KEYGEN_ML_DSA)
       "ML-KEM" (OSSL_SELF_TEST_DESC_KEYGEN_ML_KEM)
       "SLH-DSA" (OSSL_SELF_TEST_DESC_KEYGEN_SLH_DSA)
           "KAT_AsymmetricKeyGeneration" uses this to indicate a key generation
           KAT.

       "AES_GCM" (OSSL_SELF_TEST_DESC_CIPHER_AES_GCM)
       "AES_ECB_Decrypt" (OSSL_SELF_TEST_DESC_CIPHER_AES_ECB)
       "TDES" (OSSL_SELF_TEST_DESC_CIPHER_TDES)
           Symmetric cipher tests used with the "KAT_Cipher" type.

       "SHA1" (OSSL_SELF_TEST_DESC_MD_SHA1)
       "SHA2" (OSSL_SELF_TEST_DESC_MD_SHA2)
       "SHA3" (OSSL_SELF_TEST_DESC_MD_SHA3)
           Digest tests used with the "KAT_Digest" type.

       "DSA" (OSSL_SELF_TEST_DESC_SIGN_DSA)
       "RSA" (OSSL_SELF_TEST_DESC_SIGN_RSA)
       "ECDSA" (OSSL_SELF_TEST_DESC_SIGN_ECDSA)
       "EDDSA" (OSSL_SELF_TEST_DESC_SIGN_EDDSA)
       "ML-DSA" (OSSL_SELF_TEST_DESC_SIGN_ML_DSA)
       "SLH-DSA" (OSSL_SELF_TEST_DESC_SIGN_SLH_DSA)
           Signature tests used with the "KAT_Signature" type.

       "ECDH" (OSSL_SELF_TEST_DESC_KA_ECDH)
       "DH" (OSSL_SELF_TEST_DESC_KA_DH)
           Key agreement tests used with the "KAT_KA" type.

       "HKDF" (OSSL_SELF_TEST_DESC_KDF_HKDF)
       "TLS13_KDF_EXTRACT" (OSSL_SELF_TEST_DESC_KDF_TLS13_EXTRACT)
       "TLS13_KDF_EXPAND" (OSSL_SELF_TEST_DESC_KDF_TLS13_EXPAND)
       "SSKDF" (OSSL_SELF_TEST_DESC_KDF_SSKDF)
       "X963KDF" (OSSL_SELF_TEST_DESC_KDF_X963KDF)
       "X942KDF" (OSSL_SELF_TEST_DESC_KDF_X942KDF)
       "PBKDF2" (OSSL_SELF_TEST_DESC_KDF_PBKDF2)
       "SSHKDF" (OSSL_SELF_TEST_DESC_KDF_SSHKDF)
       "TLS12_PRF" (OSSL_SELF_TEST_DESC_KDF_TLS12_PRF)
       "KBKDF" (OSSL_SELF_TEST_DESC_KDF_KBKDF)
           Key Encapsulation Function tests used with the "KAT_KEM" type.

       "KEM_Encap" (OSSL_SELF_TEST_DESC_ENCAP_KEM)
       "KEM_Decap" (OSSL_SELF_TEST_DESC_DECAP_KEM)
       "KEM_Decap_Reject" (OSSL_SELF_TEST_DESC_DECAP_REJ_KEM)
           Key Derivation Function tests used with the "KAT_KDF" type.

       "CTR" (OSSL_SELF_TEST_DESC_DRBG_CTR)
       "HASH" (OSSL_SELF_TEST_DESC_DRBG_HASH)
       "HMAC" (OSSL_SELF_TEST_DESC_DRBG_HMAC)
           DRBG tests used with the "DRBG" type.

       "RNG" (OSSL_SELF_TEST_DESC_RNG)
           "Continuous_RNG_Test" uses this.

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;
         }

NOTES
       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    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 libcrypto and 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.

       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.

SEE ALSO
       openssl-fipsinstall(1),  fips_config(5), OSSL_SELF_TEST_set_callback(3),
       OSSL_SELF_TEST_new(3),         OSSL_PARAM(3),         openssl-core.h(7),
       openssl-core_dispatch.h(7),                                 provider(7),
       <https://www.openssl.org/source/>

HISTORY
       This functionality was added in OpenSSL 3.0.

COPYRIGHT
       Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved.

       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
       <https://www.openssl.org/source/license.html>.

3.5.4                              2025-09-30          OSSL_PROVIDER-FIPS(7SSL)

Generated by dwww version 1.16 on Tue Dec 16 04:20:06 CET 2025.