     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    //! FIPS 140-2 support.
    //!
    //! See [OpenSSL's documentation] for details.
    //!
    //! [OpenSSL's documentation]: https://www.openssl.org/docs/fips/UserGuide-2.0.pdf
    use cvt;
    use error::ErrorStack;
    use ffi;

    /// Moves the library into or out of the FIPS 140-2 mode of operation.
    ///
    /// This corresponds to `FIPS_mode_set`.
    pub fn enable(enabled: bool) -> Result<(), ErrorStack> {
        unsafe { cvt(ffi::FIPS_mode_set(enabled as _)).map(|_| ()) }
    }

    /// Determines if the library is running in the FIPS 140-2 mode of operation.
    ///
    /// This corresponds to `FIPS_mode`.
    pub fn enabled() -> bool {
        unsafe { ffi::FIPS_mode() != 0 }
    }