[−][src]Trait arx_kw::ConstantTimeEq
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
pub fn ct_eq(&self, other: &Self) -> Choice
[src]
Determine if two items are equal.
The ct_eq
function should execute in constant time.
Returns
Choice(1u8)
ifself == other
;Choice(0u8)
ifself != other
.
Implementations on Foreign Types
impl ConstantTimeEq for i32
[src]
impl ConstantTimeEq for i16
[src]
impl<T> ConstantTimeEq for CtOption<T> where
T: ConstantTimeEq,
[src]
T: ConstantTimeEq,
pub fn ct_eq(&self, rhs: &CtOption<T>) -> Choice
[src]
Two CtOption<T>
s are equal if they are both Some
and
their values are equal, or both None
.
impl ConstantTimeEq for usize
[src]
impl ConstantTimeEq for i8
[src]
impl ConstantTimeEq for u16
[src]
impl ConstantTimeEq for i128
[src]
impl<T> ConstantTimeEq for [T] where
T: ConstantTimeEq,
[src]
T: ConstantTimeEq,
pub fn ct_eq(&self, _rhs: &[T]) -> Choice
[src]
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);