Crate consistenttime [] [src]

Consistent Time

The goal of this crate is to offer constant time functions which most cryptographic computing protocols require to prevent side channel timing attacks.

These algorithms are not implemented to be efficient. But to take the same number of processor cycles if their outcome/path is true, or false. The reference used for this crate is Go-Lang's crypto/subtile Which implements a handful of constant time algorithms.

I took the liberity of generalizing them out to all unsigned sizes supported by Rust-Lang. Everything inside of this crate is defined as a macro. This makes writing the extremely repetive code for all types a lot easier.

There is internal unsafe code to handle converting bool to u8 and vice versa. The machine instructions generated for these operations involve no branches or comparison operators, see the notes in the source code.

As of the most recent commit there has been an extreme divergence from the Go-Lang source. LLVM does MUCH heavier optimizations then Go-ASM does and some combat was necessary. As of

consistenttime = "0.2"

I am reasonably confident it provides the advertised guarantees.

Functions

ct_copy_u8

Optional buffer copying

ct_copy_u16

Optional buffer copying

ct_copy_u32

Optional buffer copying

ct_copy_u64

Optional buffer copying

ct_copy_usize

Optional buffer copying

ct_select_u8

Optional swapping.

ct_select_u16

Optional swapping.

ct_select_u32

Optional swapping.

ct_select_u64

Optional swapping.

ct_select_usize

Optional swapping.

ct_u16_eq

Tests if two values are equal in constant time.

ct_u16_slice_eq

Check the equality of slices.

ct_u32_eq

Tests if two values are equal in constant time.

ct_u32_slice_eq

Check the equality of slices.

ct_u64_eq

Tests if two values are equal in constant time.

ct_u64_slice_eq

Check the equality of slices.

ct_u8_eq

Tests if two values are equal in constant time.

ct_u8_slice_eq

Check the equality of slices.

ct_usize_eq

Tests if two values are equal in constant time.

ct_usize_slice_eq

Check the equality of slices.