LweBootstrapKeyMutView32

Struct LweBootstrapKeyMutView32 

Source
pub struct LweBootstrapKeyMutView32<'a>(/* private fields */);
Expand description

A structure representing an LWE bootstrap key with 32 bits of precision.

By view here, we mean that the entity does not own the data, but mutably borrows it.

§Notes:

This view is not Clone as Clone for a slice is not defined. It is not Deserialize either, as Deserialize of a slice is not defined. Mutable variant.

Trait Implementations§

Source§

impl AbstractEntity for LweBootstrapKeyMutView32<'_>

Source§

type Kind = LweBootstrapKeyKind

The kind of the entity.
Source§

impl<'a> Debug for LweBootstrapKeyMutView32<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'data> LweBootstrapKeyConsumingRetrievalEngine<LweBootstrapKeyMutView32<'data>, &'data mut [u32]> for DefaultEngine

Source§

fn consume_retrieve_lwe_bootstrap_key( &mut self, bootstrap_key: LweBootstrapKeyMutView32<'data>, ) -> Result<&'data mut [u32], LweBootstrapKeyConsumingRetrievalError<Self::EngineError>>

§Example:
use concrete_core::prelude::{
    DecompositionBaseLog, DecompositionLevelCount, GlweDimension, LweDimension, PolynomialSize,
    *,
};

// DISCLAIMER: the parameters used here are only for test purpose, and are not secure.
let lwe_dimension = LweDimension(2);
let glwe_size = GlweSize(2);
let polynomial_size = PolynomialSize(256);
let level = DecompositionLevelCount(2);
let base_log = DecompositionBaseLog(1);

// Unix seeder must be given a secret input.
// Here we just give it 0, which is totally unsafe.
const UNSAFE_SECRET: u128 = 0;
let mut engine = DefaultEngine::new(Box::new(UnixSeeder::new(UNSAFE_SECRET)))?;

let mut owned_container =
    vec![0_u32; lwe_dimension.0 * level.0 * glwe_size.0 * glwe_size.0 * polynomial_size.0];

let mut slice = owned_container.as_mut_slice();
// Required as we can't borrow a mut slice more than once
let underlying_ptr = slice.as_ptr();

let lwe_bootstrap_key: LweBootstrapKeyMutView32 =
    engine.create_lwe_bootstrap_key_from(slice, glwe_size, polynomial_size, base_log, level)?;
let retrieved_slice = engine.consume_retrieve_lwe_bootstrap_key(lwe_bootstrap_key)?;

assert_eq!(underlying_ptr, retrieved_slice.as_ptr());
Source§

unsafe fn consume_retrieve_lwe_bootstrap_key_unchecked( &mut self, bootstrap_key: LweBootstrapKeyMutView32<'data>, ) -> &'data mut [u32]

Unsafely retrieves the content of the container from an LWE bootstrap key, consuming it in the process. Read more
Source§

impl<'data> LweBootstrapKeyCreationEngine<&'data mut [u32], LweBootstrapKeyMutView32<'data>> for DefaultEngine

Source§

fn create_lwe_bootstrap_key_from( &mut self, container: &'data mut [u32], glwe_size: GlweSize, poly_size: PolynomialSize, decomposition_base_log: DecompositionBaseLog, decomposition_level_count: DecompositionLevelCount, ) -> Result<LweBootstrapKeyMutView32<'data>, LweBootstrapKeyCreationError<Self::EngineError>>

§Example:
use concrete_core::prelude::{
    DecompositionBaseLog, DecompositionLevelCount, GlweDimension, LweDimension, PolynomialSize,
    *,
};

// DISCLAIMER: the parameters used here are only for test purpose, and are not secure.
let lwe_dimension = LweDimension(2);
let glwe_size = GlweSize(2);
let polynomial_size = PolynomialSize(256);
let level = DecompositionLevelCount(2);
let base_log = DecompositionBaseLog(1);

// Unix seeder must be given a secret input.
// Here we just give it 0, which is totally unsafe.
const UNSAFE_SECRET: u128 = 0;
let mut engine = DefaultEngine::new(Box::new(UnixSeeder::new(UNSAFE_SECRET)))?;

let mut owned_container =
    vec![0_u32; lwe_dimension.0 * level.0 * glwe_size.0 * glwe_size.0 * polynomial_size.0];

let mut slice = owned_container.as_mut_slice();

let lwe_bootstrap_key: LweBootstrapKeyMutView32 =
    engine.create_lwe_bootstrap_key_from(slice, glwe_size, polynomial_size, base_log, level)?;
Source§

unsafe fn create_lwe_bootstrap_key_from_unchecked( &mut self, container: &'data mut [u32], glwe_size: GlweSize, poly_size: PolynomialSize, decomposition_base_log: DecompositionBaseLog, decomposition_level_count: DecompositionLevelCount, ) -> LweBootstrapKeyMutView32<'data>

Unsafely creates an LWE bootstrap key from an existing container. Read more
Source§

impl LweBootstrapKeyDiscardingConversionEngine<LweBootstrapKey32, LweBootstrapKeyMutView32<'_>> for DefaultEngine

Source§

fn discard_convert_lwe_bootstrap_key( &mut self, output: &mut LweBootstrapKeyMutView32<'_>, input: &LweBootstrapKey32, ) -> Result<(), LweBootstrapKeyDiscardingConversionError<Self::EngineError>>

§Example
use concrete_core::prelude::{
    DecompositionBaseLog, DecompositionLevelCount, GlweDimension, LweDimension, PolynomialSize,
    Variance, *,
};

// DISCLAIMER: the parameters used here are only for test purpose, and are not secure.
let (lwe_dim, glwe_dim, poly_size) = (LweDimension(4), GlweDimension(6), PolynomialSize(256));
let (dec_lc, dec_bl) = (DecompositionLevelCount(3), DecompositionBaseLog(5));
let noise = Variance(2_f64.powf(-25.));

// Unix seeder must be given a secret input.
// Here we just give it 0, which is totally unsafe.
const UNSAFE_SECRET: u128 = 0;
let mut default_engine = DefaultEngine::new(Box::new(UnixSeeder::new(UNSAFE_SECRET)))?;
let lwe_sk: LweSecretKey32 = default_engine.generate_new_lwe_secret_key(lwe_dim)?;
let glwe_sk: GlweSecretKey32 =
    default_engine.generate_new_glwe_secret_key(glwe_dim, poly_size)?;
let bsk: LweBootstrapKey32 =
    default_engine.generate_new_lwe_bootstrap_key(&lwe_sk, &glwe_sk, dec_bl, dec_lc, noise)?;

let mut owned_container = vec![
    0_u32;
    lwe_dim.0
        * dec_lc.0
        * glwe_dim.to_glwe_size().0
        * glwe_dim.to_glwe_size().0
        * poly_size.0
];

let mut out_bsk_mut_view: LweBootstrapKeyMutView32 = default_engine
    .create_lwe_bootstrap_key_from(
        owned_container.as_mut_slice(),
        glwe_dim.to_glwe_size(),
        poly_size,
        dec_bl,
        dec_lc,
    )?;

default_engine.discard_convert_lwe_bootstrap_key(&mut out_bsk_mut_view, &bsk)?;
assert_eq!(out_bsk_mut_view.glwe_dimension(), glwe_dim);
assert_eq!(out_bsk_mut_view.polynomial_size(), poly_size);
assert_eq!(out_bsk_mut_view.input_lwe_dimension(), lwe_dim);
assert_eq!(out_bsk_mut_view.decomposition_base_log(), dec_bl);
assert_eq!(out_bsk_mut_view.decomposition_level_count(), dec_lc);

// Check content is the same

let original_bsk_container = default_engine.consume_retrieve_lwe_bootstrap_key(bsk)?;
let mut_view_bsk_container =
    default_engine.consume_retrieve_lwe_bootstrap_key(out_bsk_mut_view)?;

assert_eq!(original_bsk_container, mut_view_bsk_container);
Source§

unsafe fn discard_convert_lwe_bootstrap_key_unchecked( &mut self, output: &mut LweBootstrapKeyMutView32<'_>, input: &LweBootstrapKey32, )

Unsafely converts a LWE bootstrap key . Read more
Source§

impl LweBootstrapKeyEntity for LweBootstrapKeyMutView32<'_>

Source§

fn glwe_dimension(&self) -> GlweDimension

Returns the GLWE dimension of the key.
Source§

fn polynomial_size(&self) -> PolynomialSize

Returns the polynomial size of the key.
Source§

fn input_lwe_dimension(&self) -> LweDimension

Returns the input LWE dimension of the key.
Source§

fn decomposition_base_log(&self) -> DecompositionBaseLog

Returns the number of decomposition levels of the key.
Source§

fn decomposition_level_count(&self) -> DecompositionLevelCount

Returns the logarithm of the base used in the key.
Source§

fn output_lwe_dimension(&self) -> LweDimension

Returns the output LWE dimension of the key.
Source§

impl<'a> PartialEq for LweBootstrapKeyMutView32<'a>

Source§

fn eq(&self, other: &LweBootstrapKeyMutView32<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a> Eq for LweBootstrapKeyMutView32<'a>

Source§

impl<'a> StructuralPartialEq for LweBootstrapKeyMutView32<'a>

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.