pub trait ConstantTimeEq {
fn ct_eq(&self, other: &Self) -> Choice;
}
Expand description
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);
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);
Two CtOption<T>
s are equal if they are both Some
and
their values are equal, or both None
.