navajo 0.0.4

cryptographic APIs
Documentation
///! Constant-time operations
///
///
use crate::error::UnspecifiedError;
/// Compares `a` and `b` at constant-time with repect to each other, unless the
/// lengths are not equal.
///
/// ## Errors
/// Returns [`Err(UnspecifiedError)`](crate::error::UnspecifiedError) if `a` and `b` are not equal.
pub fn verify_slices_are_equal(a: &[u8], b: &[u8]) -> Result<(), UnspecifiedError> {
    if a.len() != b.len() {
        return Err(UnspecifiedError);
    }
    #[cfg(feature = "ring")]
    {
        ring::constant_time::verify_slices_are_equal(a, b).map_err(|_| UnspecifiedError)
    }
    #[cfg(not(feature = "ring"))]
    {
        use subtle::ConstantTimeEq;
        if a.ct_eq(b).unwrap_u8() == 1 {
            Ok(())
        } else {
            Err(UnspecifiedError)
        }
    }
}