[−][src]Struct subtle::Choice
The Choice struct represents a choice for use in conditional
assignment.
It is a wrapper around a u8, which should have the value either
1 (true) or 0 (false).
With the nightly feature enabled, the conversion from u8 to
Choice passes the value through an optimization barrier, as a
best-effort attempt to prevent the compiler from inferring that the
Choice value is a boolean. This strategy is based on Tim
Maclean's work on rust-timing-shield,
which attempts to provide a more comprehensive approach for
preventing software side-channels in Rust code.
The Choice struct implements operators for AND, OR, XOR, and
NOT, to allow combining Choice values.
These operations do not short-circuit.
Methods
impl Choice[src]
pub fn unwrap_u8(&self) -> u8[src]
Unwrap the Choice wrapper to reveal the underlying u8.
Note
This function only exists as an escape hatch for the rare case
where it's not possible to use one of the subtle-provided
trait impls.
To convert a Choice to a bool, use the From implementation instead.
Trait Implementations
impl BitAnd<Choice> for Choice[src]
type Output = Choice
The resulting type after applying the & operator.
fn bitand(self, rhs: Choice) -> Choice[src]
impl BitAndAssign<Choice> for Choice[src]
fn bitand_assign(&mut self, rhs: Choice)[src]
impl BitOr<Choice> for Choice[src]
type Output = Choice
The resulting type after applying the | operator.
fn bitor(self, rhs: Choice) -> Choice[src]
impl BitOrAssign<Choice> for Choice[src]
fn bitor_assign(&mut self, rhs: Choice)[src]
impl BitXor<Choice> for Choice[src]
type Output = Choice
The resulting type after applying the ^ operator.
fn bitxor(self, rhs: Choice) -> Choice[src]
impl BitXorAssign<Choice> for Choice[src]
fn bitxor_assign(&mut self, rhs: Choice)[src]
impl Clone for Choice[src]
impl ConditionallySelectable for Choice[src]
fn conditional_select(a: &Self, b: &Self, choice: Choice) -> Self[src]
fn conditional_assign(&mut self, other: &Self, choice: Choice)[src]
fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)[src]
impl Copy for Choice[src]
impl Debug for Choice[src]
impl From<Choice> for bool[src]
fn from(source: Choice) -> bool[src]
Convert the Choice wrapper into a bool, depending on whether
the underlying u8 was a 0 or a 1.
Note
This function exists to avoid having higher-level cryptographic protocol implementations duplicating this pattern.
The intended use case for this conversion is at the end of a
higher-level primitive implementation: for example, in checking a keyed
MAC, where the verification should happen in constant-time (and thus use
a Choice) but it is safe to return a bool at the end of the
verification.
impl From<u8> for Choice[src]
impl Not for Choice[src]
Auto Trait Implementations
impl RefUnwindSafe for Choice
impl Send for Choice
impl Sync for Choice
impl Unpin for Choice
impl UnwindSafe for Choice
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone, [src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T[src]
fn clone_into(&self, target: &mut T)[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = !
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,