Commit 8c3e29f7 authored by Steven Fackler's avatar Steven Fackler
Browse files

flag off deprecated sha API in 3.0

parent f7d5c509
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -90,3 +90,7 @@ RUST_CONF_OPENSSL_NO_STDIO
#ifdef OPENSSL_NO_SM3
RUST_CONF_OPENSSL_NO_SM3
#endif

#ifdef OPENSSL_NO_DEPRECATED_3_0
RUST_CONF_OPENSSL_NO_DEPRECATED_3_0
#endif
+10 −0
Original line number Diff line number Diff line
@@ -58,6 +58,16 @@ extern "C" {
        -> c_int;
    pub fn EVP_DigestUpdate(ctx: *mut EVP_MD_CTX, data: *const c_void, n: size_t) -> c_int;
    pub fn EVP_DigestFinal_ex(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
    #[cfg(ossl300)]
    pub fn EVP_Q_digest(
        libctx: *mut OSSL_LIB_CTX,
        name: *const c_char,
        propq: *const c_char,
        data: *const c_void,
        count: size_t,
        md: *mut c_uchar,
        size: *mut c_int,
    ) -> c_int;
    pub fn EVP_DigestInit(ctx: *mut EVP_MD_CTX, typ: *const EVP_MD) -> c_int;
    pub fn EVP_DigestFinal(ctx: *mut EVP_MD_CTX, res: *mut u8, n: *mut u32) -> c_int;
    #[cfg(ossl111)]
+118 −55
Original line number Diff line number Diff line
use crate::*;
use libc::*;
use std::ptr;

pub type SHA_LONG = c_uint;

pub const SHA_LBLOCK: c_int = 16;

cfg_if! {
    if #[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))] {
        #[repr(C)]
        #[derive(Clone)]
        pub struct SHA_CTX {
@@ -22,9 +26,42 @@ extern "C" {
            pub fn SHA1_Init(c: *mut SHA_CTX) -> c_int;
            pub fn SHA1_Update(c: *mut SHA_CTX, data: *const c_void, len: size_t) -> c_int;
            pub fn SHA1_Final(md: *mut c_uchar, c: *mut SHA_CTX) -> c_int;
        }
    }
}

cfg_if! {
    if #[cfg(ossl300)] {
        macro_rules! digest {
            ($name:ident) => {
                pub unsafe fn $name(d: *const c_uchar, n: size_t, md: *mut c_uchar) -> *mut c_uchar {
                    if EVP_Q_digest(
                        ptr::null_mut(),
                        concat!(stringify!($name), "\0").as_ptr() as *const c_char,
                        ptr::null(),
                        d,
                        n,
                        md,
                        ptr::null(),
                    ) != 0 {
                        md
                    } else {
                        ptr::null_mut()
                    }
                }
            }
        }

        digest!(SHA1);
    } else {
        extern "C" {
            pub fn SHA1(d: *const c_uchar, n: size_t, md: *mut c_uchar) -> *mut c_uchar;
        }
    }
}

cfg_if! {
    if #[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))] {
        #[repr(C)]
        #[derive(Clone)]
        pub struct SHA256_CTX {
@@ -40,13 +77,27 @@ extern "C" {
            pub fn SHA224_Init(c: *mut SHA256_CTX) -> c_int;
            pub fn SHA224_Update(c: *mut SHA256_CTX, data: *const c_void, len: size_t) -> c_int;
            pub fn SHA224_Final(md: *mut c_uchar, c: *mut SHA256_CTX) -> c_int;
    pub fn SHA224(d: *const c_uchar, n: size_t, md: *mut c_uchar) -> *mut c_uchar;
            pub fn SHA256_Init(c: *mut SHA256_CTX) -> c_int;
            pub fn SHA256_Update(c: *mut SHA256_CTX, data: *const c_void, len: size_t) -> c_int;
            pub fn SHA256_Final(md: *mut c_uchar, c: *mut SHA256_CTX) -> c_int;
        }
    }
}

cfg_if! {
    if #[cfg(ossl300)] {
        digest!(SHA224);
        digest!(SHA256);
    } else {
        extern "C" {
            pub fn SHA224(d: *const c_uchar, n: size_t, md: *mut c_uchar) -> *mut c_uchar;
            pub fn SHA256(d: *const c_uchar, n: size_t, md: *mut c_uchar) -> *mut c_uchar;
        }
    }
}

cfg_if! {
    if #[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))] {
        pub type SHA_LONG64 = u64;

        #[repr(C)]
@@ -65,9 +116,21 @@ extern "C" {
            pub fn SHA384_Init(c: *mut SHA512_CTX) -> c_int;
            pub fn SHA384_Update(c: *mut SHA512_CTX, data: *const c_void, len: size_t) -> c_int;
            pub fn SHA384_Final(md: *mut c_uchar, c: *mut SHA512_CTX) -> c_int;
    pub fn SHA384(d: *const c_uchar, n: size_t, md: *mut c_uchar) -> *mut c_uchar;
            pub fn SHA512_Init(c: *mut SHA512_CTX) -> c_int;
            pub fn SHA512_Update(c: *mut SHA512_CTX, data: *const c_void, len: size_t) -> c_int;
            pub fn SHA512_Final(md: *mut c_uchar, c: *mut SHA512_CTX) -> c_int;
        }
    }
}

cfg_if! {
    if #[cfg(ossl300)] {
        digest!(SHA384);
        digest!(SHA512);
    } else {
        extern "C" {
            pub fn SHA384(d: *const c_uchar, n: size_t, md: *mut c_uchar) -> *mut c_uchar;
            pub fn SHA512(d: *const c_uchar, n: size_t, md: *mut c_uchar) -> *mut c_uchar;
        }
    }
}
+214 −203
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
//! ```
use libc::c_void;
use std::mem;
use cfg_if::cfg_if;

/// Computes the SHA1 hash of some data.
///
@@ -98,6 +99,8 @@ pub fn sha512(data: &[u8]) -> [u8; 64] {
    }
}

cfg_if! {
    if #[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))] {
        /// An object which calculates a SHA1 hash of some data.
        ///
        /// # Warning
@@ -327,6 +330,8 @@ impl Sha512 {
            }
        }
    }
    }
}

#[cfg(test)]
mod test {
@@ -341,6 +346,7 @@ mod test {
    }

    #[test]
    #[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
    fn struct_1() {
        let expected = "a9993e364706816aba3e25717850c26c9cd0d89d";

@@ -351,6 +357,7 @@ mod test {
    }

    #[test]
    #[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
    fn cloning_allows_incremental_hashing() {
        let expected = "a9993e364706816aba3e25717850c26c9cd0d89d";

@@ -373,6 +380,7 @@ mod test {
    }

    #[test]
    #[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
    fn struct_224() {
        let expected = "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7";

@@ -391,6 +399,7 @@ mod test {
    }

    #[test]
    #[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
    fn struct_256() {
        let expected = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad";

@@ -411,6 +420,7 @@ mod test {
    }

    #[test]
    #[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
    fn struct_384() {
        let expected =
            "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e\
@@ -433,6 +443,7 @@ mod test {
    }

    #[test]
    #[cfg(not(osslconf = "OPENSSL_NO_DEPRECATED_3_0"))]
    fn struct_512() {
        let expected =
            "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274\