pub trait ConstantTimeEq {
// Required method
fn ct_eq(&self, other: &Self) -> Choice;
// Provided method
fn ct_ne(&self, other: &Self) -> Choice { ... }
}Expand description
An Eq-like trait that produces a Choice instead of a bool.
§Example
use subtle::ConstantTimeEq;
let x: u8 = 5;
let y: u8 = 13;
assert_eq!(x.ct_eq(&y).unwrap_u8(), 0);
assert_eq!(x.ct_eq(&x).unwrap_u8(), 1);Required Methods§
Provided Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl ConstantTimeEq for Ordering
Ordering is #[repr(i8)] making it possible to leverage i8::ct_eq.
impl ConstantTimeEq for Ordering
Ordering is #[repr(i8)] making it possible to leverage i8::ct_eq.
Source§impl<T: ConstantTimeEq> ConstantTimeEq for [T]
impl<T: ConstantTimeEq> ConstantTimeEq for [T]
Source§fn ct_eq(&self, _rhs: &[T]) -> Choice
fn ct_eq(&self, _rhs: &[T]) -> Choice
Check whether two slices of ConstantTimeEq types are equal.
§Note
This function short-circuits if the lengths of the input slices are different. Otherwise, it should execute in time independent of the slice contents.
Since arrays coerce to slices, this function works with fixed-size arrays:
let a: [u8; 8] = [0,1,2,3,4,5,6,7];
let b: [u8; 8] = [0,1,2,3,0,1,2,3];
let a_eq_a = a.ct_eq(&a);
let a_eq_b = a.ct_eq(&b);
assert_eq!(a_eq_a.unwrap_u8(), 1);
assert_eq!(a_eq_b.unwrap_u8(), 0);