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:

Be careful when using this code, it's not being tested!
[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).

Implementations on Foreign Types

impl ConditionallyAssignable for u8
[src]

[src]

impl ConditionallyAssignable for u16
[src]

[src]

impl ConditionallyAssignable for u32
[src]

[src]

impl ConditionallyAssignable for u64
[src]

[src]

impl ConditionallyAssignable for i8
[src]

[src]

impl ConditionallyAssignable for i16
[src]

[src]

impl ConditionallyAssignable for i32
[src]

[src]

impl ConditionallyAssignable for i64
[src]

[src]

impl ConditionallyAssignable for [u8; 1]
[src]

[src]

impl ConditionallyAssignable for [u8; 2]
[src]

[src]

impl ConditionallyAssignable for [u8; 3]
[src]

[src]

impl ConditionallyAssignable for [u8; 4]
[src]

[src]

impl ConditionallyAssignable for [u8; 5]
[src]

[src]

impl ConditionallyAssignable for [u8; 6]
[src]

[src]

impl ConditionallyAssignable for [u8; 7]
[src]

[src]

impl ConditionallyAssignable for [u8; 8]
[src]

[src]

impl ConditionallyAssignable for [u8; 9]
[src]

[src]

impl ConditionallyAssignable for [u8; 10]
[src]

[src]

impl ConditionallyAssignable for [u8; 11]
[src]

[src]

impl ConditionallyAssignable for [u8; 12]
[src]

[src]

impl ConditionallyAssignable for [u8; 13]
[src]

[src]

impl ConditionallyAssignable for [u8; 14]
[src]

[src]

impl ConditionallyAssignable for [u8; 15]
[src]

[src]

impl ConditionallyAssignable for [u8; 16]
[src]

[src]

impl ConditionallyAssignable for [u8; 17]
[src]

[src]

impl ConditionallyAssignable for [u8; 18]
[src]

[src]

impl ConditionallyAssignable for [u8; 19]
[src]

[src]

impl ConditionallyAssignable for [u8; 20]
[src]

[src]

impl ConditionallyAssignable for [u8; 21]
[src]

[src]

impl ConditionallyAssignable for [u8; 22]
[src]

[src]

impl ConditionallyAssignable for [u8; 23]
[src]

[src]

impl ConditionallyAssignable for [u8; 24]
[src]

[src]

impl ConditionallyAssignable for [u8; 25]
[src]

[src]

impl ConditionallyAssignable for [u8; 26]
[src]

[src]

impl ConditionallyAssignable for [u8; 27]
[src]

[src]

impl ConditionallyAssignable for [u8; 28]
[src]

[src]

impl ConditionallyAssignable for [u8; 29]
[src]

[src]

impl ConditionallyAssignable for [u8; 30]
[src]

[src]

impl ConditionallyAssignable for [u8; 31]
[src]

[src]

impl ConditionallyAssignable for [u8; 32]
[src]

[src]

impl ConditionallyAssignable for [u16; 1]
[src]

[src]

impl ConditionallyAssignable for [u16; 2]
[src]

[src]

impl ConditionallyAssignable for [u16; 3]
[src]

[src]

impl ConditionallyAssignable for [u16; 4]
[src]

[src]

impl ConditionallyAssignable for [u16; 5]
[src]

[src]

impl ConditionallyAssignable for [u16; 6]
[src]

[src]

impl ConditionallyAssignable for [u16; 7]
[src]

[src]

impl ConditionallyAssignable for [u16; 8]
[src]

[src]

impl ConditionallyAssignable for [u16; 9]
[src]

[src]

impl ConditionallyAssignable for [u16; 10]
[src]

[src]

impl ConditionallyAssignable for [u16; 11]
[src]

[src]

impl ConditionallyAssignable for [u16; 12]
[src]

[src]

impl ConditionallyAssignable for [u16; 13]
[src]

[src]

impl ConditionallyAssignable for [u16; 14]
[src]

[src]

impl ConditionallyAssignable for [u16; 15]
[src]

[src]

impl ConditionallyAssignable for [u16; 16]
[src]

[src]

impl ConditionallyAssignable for [u16; 17]
[src]

[src]

impl ConditionallyAssignable for [u16; 18]
[src]

[src]

impl ConditionallyAssignable for [u16; 19]
[src]

[src]

impl ConditionallyAssignable for [u16; 20]
[src]

[src]

impl ConditionallyAssignable for [u16; 21]
[src]

[src]

impl ConditionallyAssignable for [u16; 22]
[src]

[src]

impl ConditionallyAssignable for [u16; 23]
[src]

[src]

impl ConditionallyAssignable for [u16; 24]
[src]

[src]

impl ConditionallyAssignable for [u16; 25]
[src]

[src]

impl ConditionallyAssignable for [u16; 26]
[src]

[src]

impl ConditionallyAssignable for [u16; 27]
[src]

[src]

impl ConditionallyAssignable for [u16; 28]
[src]

[src]

impl ConditionallyAssignable for [u16; 29]
[src]

[src]

impl ConditionallyAssignable for [u16; 30]
[src]

[src]

impl ConditionallyAssignable for [u16; 31]
[src]

[src]

impl ConditionallyAssignable for [u16; 32]
[src]

[src]

impl ConditionallyAssignable for [u32; 1]
[src]

[src]

impl ConditionallyAssignable for [u32; 2]
[src]

[src]

impl ConditionallyAssignable for [u32; 3]
[src]

[src]

impl ConditionallyAssignable for [u32; 4]
[src]

[src]

impl ConditionallyAssignable for [u32; 5]
[src]

[src]

impl ConditionallyAssignable for [u32; 6]
[src]

[src]

impl ConditionallyAssignable for [u32; 7]
[src]

[src]

impl ConditionallyAssignable for [u32; 8]
[src]

[src]

impl ConditionallyAssignable for [u32; 9]
[src]

[src]

impl ConditionallyAssignable for [u32; 10]
[src]

[src]

impl ConditionallyAssignable for [u32; 11]
[src]

[src]

impl ConditionallyAssignable for [u32; 12]
[src]

[src]

impl ConditionallyAssignable for [u32; 13]
[src]

[src]

impl ConditionallyAssignable for [u32; 14]
[src]

[src]

impl ConditionallyAssignable for [u32; 15]
[src]

[src]

impl ConditionallyAssignable for [u32; 16]
[src]

[src]

impl ConditionallyAssignable for [u32; 17]
[src]

[src]

impl ConditionallyAssignable for [u32; 18]
[src]

[src]

impl ConditionallyAssignable for [u32; 19]
[src]

[src]

impl ConditionallyAssignable for [u32; 20]
[src]

[src]

impl ConditionallyAssignable for [u32; 21]
[src]

[src]

impl ConditionallyAssignable for [u32; 22]
[src]

[src]

impl ConditionallyAssignable for [u32; 23]
[src]

[src]

impl ConditionallyAssignable for [u32; 24]
[src]

[src]

impl ConditionallyAssignable for [u32; 25]
[src]

[src]

impl ConditionallyAssignable for [u32; 26]
[src]

[src]

impl ConditionallyAssignable for [u32; 27]
[src]

[src]

impl ConditionallyAssignable for [u32; 28]
[src]

[src]

impl ConditionallyAssignable for [u32; 29]
[src]

[src]

impl ConditionallyAssignable for [u32; 30]
[src]

[src]

impl ConditionallyAssignable for [u32; 31]
[src]

[src]

impl ConditionallyAssignable for [u32; 32]
[src]

[src]

impl ConditionallyAssignable for [u64; 1]
[src]

[src]

impl ConditionallyAssignable for [u64; 2]
[src]

[src]

impl ConditionallyAssignable for [u64; 3]
[src]

[src]

impl ConditionallyAssignable for [u64; 4]
[src]

[src]

impl ConditionallyAssignable for [u64; 5]
[src]

[src]

impl ConditionallyAssignable for [u64; 6]
[src]

[src]

impl ConditionallyAssignable for [u64; 7]
[src]

[src]

impl ConditionallyAssignable for [u64; 8]
[src]

[src]

impl ConditionallyAssignable for [u64; 9]
[src]

[src]

impl ConditionallyAssignable for [u64; 10]
[src]

[src]

impl ConditionallyAssignable for [u64; 11]
[src]

[src]

impl ConditionallyAssignable for [u64; 12]
[src]

[src]

impl ConditionallyAssignable for [u64; 13]
[src]

[src]

impl ConditionallyAssignable for [u64; 14]
[src]

[src]

impl ConditionallyAssignable for [u64; 15]
[src]

[src]

impl ConditionallyAssignable for [u64; 16]
[src]

[src]

impl ConditionallyAssignable for [u64; 17]
[src]

[src]

impl ConditionallyAssignable for [u64; 18]
[src]

[src]

impl ConditionallyAssignable for [u64; 19]
[src]

[src]

impl ConditionallyAssignable for [u64; 20]
[src]

[src]

impl ConditionallyAssignable for [u64; 21]
[src]

[src]

impl ConditionallyAssignable for [u64; 22]
[src]

[src]

impl ConditionallyAssignable for [u64; 23]
[src]

[src]

impl ConditionallyAssignable for [u64; 24]
[src]

[src]

impl ConditionallyAssignable for [u64; 25]
[src]

[src]

impl ConditionallyAssignable for [u64; 26]
[src]

[src]

impl ConditionallyAssignable for [u64; 27]
[src]

[src]

impl ConditionallyAssignable for [u64; 28]
[src]

[src]

impl ConditionallyAssignable for [u64; 29]
[src]

[src]

impl ConditionallyAssignable for [u64; 30]
[src]

[src]

impl ConditionallyAssignable for [u64; 31]
[src]

[src]

impl ConditionallyAssignable for [u64; 32]
[src]

[src]

Implementors