Trait subtle::ConditionallyAssignable [] [src]

pub trait ConditionallyAssignable {
    fn conditional_assign(&mut self, other: &Self, choice: Mask);
}

Trait for items which can be conditionally assigned in constant time.

Required Methods

Conditionally assign other to self in constant time.

If choice == 1, assign other to self. Otherwise, leave self unchanged.

Examples

Several implementations of constant-time conditional assignment are provided within subtle.

Integer Types

This crate includes implementations of ConditionallyAssignable for the following integer types:

  • u8,
  • u16,
  • u32,
  • u64,
  • i8,
  • i16,
  • i32, and
  • i64.
let mut x: u8 = 13;
let y:     u8 = 42;

x.conditional_assign(&y, 0);
assert_eq!(x, 13);
x.conditional_assign(&y, 1);
assert_eq!(x, 42);

If you need conditional assignment for u128 ori128 on Rust nightly, these definitions are provided if you compile subtle with the nightly feature:

[dependencies.subtle]
features = ["nightly"]

Integer Arrays

Additionally, subtle provides implementations of conditional assignment for fixed-size arrays (between [1, 32] elements in length, inclusive) of integers (for the integer types listed above):

let mut x: [u32; 17] = [13; 17];
let y:     [u32; 17] = [42; 17];

x.conditional_assign(&y, 0);
assert_eq!(x, [13; 17]);
x.conditional_assign(&y, 1);
assert_eq!(x, [42; 17]);

If you need conditional assignment for u128 ori128 on Rust nightly, these definitions are provided if you compile subtle with the nightly feature (as above).

Implementors