pub trait ConstantTimeEq {
fn ct_eq(&self, other: &Self) -> Choice;
}An Eq-like trait that produces a Choice instead of a bool.
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);
fn ct_eq(&self, other: &Self) -> Choice
Determine if two items are equal.
The ct_eq function should execute in constant time.
Choice(1u8) if self == other;
Choice(0u8) if self != other.
Check whether two slices of ConstantTimeEq types are equal.
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);