pub enum Distribution {
TernaryFixed(usize),
TernaryProb(f64),
BinaryFixed(usize),
BinaryProb(f64),
BinaryBlock(usize),
ZERO,
NONE,
}Expand description
Describes the probability distribution used to sample secret-key coefficients.
Each variant encodes either a fixed Hamming weight or a per-coefficient
probability. The enum is serialised as a single little-endian u64
word via write_to / read_from.
For probabilistic variants the f64 payload is stored with a
precision loss below 2^-44 (8 least-significant mantissa bits
are discarded to fit the tag byte).
Variants§
TernaryFixed(usize)
Ternary in {-1, 0, 1} with exactly h non-zero coefficients.
TernaryProb(f64)
Ternary in {-1, 0, 1} where each coefficient is non-zero with probability p.
BinaryFixed(usize)
Binary in {0, 1} with exactly h ones.
BinaryProb(f64)
Binary in {0, 1} where each coefficient is 1 with probability p.
BinaryBlock(usize)
Binary in {0, 1} split into blocks of size 2^k, with one 1 per block.
ZERO
All-zero secret (debug / testing only).
NONE
Uninitialized — no distribution has been set yet.
Implementations§
Source§impl Distribution
impl Distribution
Sourcepub fn write_to<W: Write>(&self, writer: &mut W) -> Result<()>
pub fn write_to<W: Write>(&self, writer: &mut W) -> Result<()>
Serialises this distribution as a single little-endian u64 word.
The top byte carries a variant tag; the lower 56 bits carry either
a usize payload (for fixed/block variants) or a truncated f64
(for probabilistic variants).
Sourcepub fn read_from<R: Read>(reader: &mut R) -> Result<Self>
pub fn read_from<R: Read>(reader: &mut R) -> Result<Self>
Deserialises a Distribution from a single little-endian u64 word.
Returns std::io::ErrorKind::InvalidData if the tag byte is unrecognised.
Trait Implementations§
Source§impl Clone for Distribution
impl Clone for Distribution
Source§fn clone(&self) -> Distribution
fn clone(&self) -> Distribution
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Distribution
impl Debug for Distribution
Source§impl PartialEq for Distribution
impl PartialEq for Distribution
impl Copy for Distribution
impl Eq for Distribution
Auto Trait Implementations§
impl Freeze for Distribution
impl RefUnwindSafe for Distribution
impl Send for Distribution
impl Sync for Distribution
impl Unpin for Distribution
impl UnsafeUnpin for Distribution
impl UnwindSafe for Distribution
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more