#[repr(transparent)]pub struct TorusPrecision(pub u32);Tuple Fields§
§0: u32Implementations§
Source§impl TorusPrecision
impl TorusPrecision
Sourcepub const fn as_u32(self) -> u32
pub const fn as_u32(self) -> u32
Examples found in repository?
examples/encryption.rs (line 88)
15fn main() {
16 // Ring degree
17 let log_n: usize = 10;
18
19 let n: Degree = Degree(1 << log_n);
20
21 // Base-2-k (implicit digit decomposition)
22 let base2k: Base2K = Base2K(14);
23
24 // Ciphertext Torus precision (equivalent to ciphertext modulus)
25 let k_ct: TorusPrecision = TorusPrecision(27);
26
27 // Plaintext Torus precision (equivament to plaintext modulus)
28 let k_pt: TorusPrecision = TorusPrecision(base2k.into());
29
30 // GLWE rank
31 let rank: Rank = Rank(1);
32
33 // Instantiate Module (DFT Tables)
34 let module: Module<FFT64Spqlios> = Module::<FFT64Spqlios>::new(n.0 as u64);
35
36 let glwe_ct_infos: GLWELayout = GLWELayout {
37 n,
38 base2k,
39 k: k_ct,
40 rank,
41 };
42
43 let glwe_pt_infos: GLWEPlaintextLayout = GLWEPlaintextLayout { n, base2k, k: k_pt };
44
45 // Allocates ciphertext & plaintexts
46 let mut ct: GLWE<Vec<u8>> = GLWE::alloc_from_infos(&glwe_ct_infos);
47 let mut pt_want: GLWEPlaintext<Vec<u8>> = GLWEPlaintext::alloc_from_infos(&glwe_pt_infos);
48 let mut pt_have: GLWEPlaintext<Vec<u8>> = GLWEPlaintext::alloc_from_infos(&glwe_pt_infos);
49
50 // CPRNG
51 let mut source_xs: Source = Source::new([0u8; 32]);
52 let mut source_xe: Source = Source::new([1u8; 32]);
53 let mut source_xa: Source = Source::new([2u8; 32]);
54
55 // Scratch space
56 let mut scratch: ScratchOwned<FFT64Spqlios> = ScratchOwned::alloc(
57 GLWE::encrypt_sk_tmp_bytes(&module, &glwe_ct_infos) | GLWE::decrypt_tmp_bytes(&module, &glwe_ct_infos),
58 );
59
60 // Generate secret-key
61 let mut sk: GLWESecret<Vec<u8>> = GLWESecret::alloc_from_infos(&glwe_ct_infos);
62 sk.fill_ternary_prob(0.5, &mut source_xs);
63
64 // Backend-prepared secret
65 let mut sk_prepared: GLWESecretPrepared<Vec<u8>, FFT64Spqlios> = GLWESecretPrepared::alloc(&module, rank);
66 sk_prepared.prepare(&module, &sk);
67
68 // Uniform plaintext
69 module.vec_znx_fill_uniform(base2k.into(), &mut pt_want.data, 0, &mut source_xa);
70
71 // Encryption
72 ct.encrypt_sk(
73 &module,
74 &pt_want,
75 &sk_prepared,
76 &mut source_xa,
77 &mut source_xe,
78 scratch.borrow(),
79 );
80
81 // Decryption
82 ct.decrypt(&module, &mut pt_have, &sk_prepared, scratch.borrow());
83
84 // Diff between pt - Dec(Enc(pt))
85 module.glwe_sub_inplace(&mut pt_want, &pt_have);
86
87 // Ideal vs. actual noise
88 let noise_have: f64 = pt_want.data.std(base2k.into(), 0) * (ct.k().as_u32() as f64).exp2();
89 let noise_want: f64 = SIGMA;
90
91 // Check
92 assert!(noise_have <= noise_want + 0.2);
93}pub const fn as_usize(self) -> usize
pub fn div_ceil<T: Into<u32>>(self, rhs: T) -> u32
Trait Implementations§
Source§impl Add<TorusPrecision> for u32
impl Add<TorusPrecision> for u32
Source§type Output = TorusPrecision
type Output = TorusPrecision
The resulting type after applying the
+ operator.Source§fn add(self, rhs: TorusPrecision) -> TorusPrecision
fn add(self, rhs: TorusPrecision) -> TorusPrecision
Performs the
+ operation. Read moreSource§impl Add<u32> for TorusPrecision
impl Add<u32> for TorusPrecision
Source§type Output = TorusPrecision
type Output = TorusPrecision
The resulting type after applying the
+ operator.Source§impl Add for TorusPrecision
impl Add for TorusPrecision
Source§type Output = TorusPrecision
type Output = TorusPrecision
The resulting type after applying the
+ operator.Source§fn add(self, rhs: TorusPrecision) -> TorusPrecision
fn add(self, rhs: TorusPrecision) -> TorusPrecision
Performs the
+ operation. Read moreSource§impl Clone for TorusPrecision
impl Clone for TorusPrecision
Source§fn clone(&self) -> TorusPrecision
fn clone(&self) -> TorusPrecision
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for TorusPrecision
impl Debug for TorusPrecision
Source§impl Display for TorusPrecision
impl Display for TorusPrecision
Source§impl From<TorusPrecision> for u32
impl From<TorusPrecision> for u32
Source§fn from(v: TorusPrecision) -> u32
fn from(v: TorusPrecision) -> u32
Converts to this type from the input type.
Source§impl From<TorusPrecision> for usize
impl From<TorusPrecision> for usize
Source§fn from(v: TorusPrecision) -> usize
fn from(v: TorusPrecision) -> usize
Converts to this type from the input type.
Source§impl From<u32> for TorusPrecision
impl From<u32> for TorusPrecision
Source§fn from(v: u32) -> TorusPrecision
fn from(v: u32) -> TorusPrecision
Converts to this type from the input type.
Source§impl From<usize> for TorusPrecision
impl From<usize> for TorusPrecision
Source§fn from(v: usize) -> TorusPrecision
fn from(v: usize) -> TorusPrecision
Converts to this type from the input type.
Source§impl Mul<TorusPrecision> for u32
impl Mul<TorusPrecision> for u32
Source§type Output = TorusPrecision
type Output = TorusPrecision
The resulting type after applying the
* operator.Source§fn mul(self, rhs: TorusPrecision) -> TorusPrecision
fn mul(self, rhs: TorusPrecision) -> TorusPrecision
Performs the
* operation. Read moreSource§impl Mul<u32> for TorusPrecision
impl Mul<u32> for TorusPrecision
Source§type Output = TorusPrecision
type Output = TorusPrecision
The resulting type after applying the
* operator.Source§impl Mul for TorusPrecision
impl Mul for TorusPrecision
Source§type Output = TorusPrecision
type Output = TorusPrecision
The resulting type after applying the
* operator.Source§fn mul(self, rhs: TorusPrecision) -> TorusPrecision
fn mul(self, rhs: TorusPrecision) -> TorusPrecision
Performs the
* operation. Read moreSource§impl Ord for TorusPrecision
impl Ord for TorusPrecision
Source§fn cmp(&self, other: &TorusPrecision) -> Ordering
fn cmp(&self, other: &TorusPrecision) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl PartialEq<TorusPrecision> for u32
impl PartialEq<TorusPrecision> for u32
Source§impl PartialEq<u32> for TorusPrecision
impl PartialEq<u32> for TorusPrecision
Source§impl PartialEq for TorusPrecision
impl PartialEq for TorusPrecision
Source§impl PartialOrd<TorusPrecision> for u32
impl PartialOrd<TorusPrecision> for u32
Source§impl PartialOrd<u32> for TorusPrecision
impl PartialOrd<u32> for TorusPrecision
Source§impl PartialOrd for TorusPrecision
impl PartialOrd for TorusPrecision
Source§impl Sub<TorusPrecision> for u32
impl Sub<TorusPrecision> for u32
Source§type Output = TorusPrecision
type Output = TorusPrecision
The resulting type after applying the
- operator.Source§fn sub(self, rhs: TorusPrecision) -> TorusPrecision
fn sub(self, rhs: TorusPrecision) -> TorusPrecision
Performs the
- operation. Read moreSource§impl Sub<u32> for TorusPrecision
impl Sub<u32> for TorusPrecision
Source§type Output = TorusPrecision
type Output = TorusPrecision
The resulting type after applying the
- operator.Source§impl Sub for TorusPrecision
impl Sub for TorusPrecision
Source§type Output = TorusPrecision
type Output = TorusPrecision
The resulting type after applying the
- operator.Source§fn sub(self, rhs: TorusPrecision) -> TorusPrecision
fn sub(self, rhs: TorusPrecision) -> TorusPrecision
Performs the
- operation. Read moreimpl Copy for TorusPrecision
impl Eq for TorusPrecision
impl StructuralPartialEq for TorusPrecision
Auto Trait Implementations§
impl Freeze for TorusPrecision
impl RefUnwindSafe for TorusPrecision
impl Send for TorusPrecision
impl Sync for TorusPrecision
impl Unpin for TorusPrecision
impl UnwindSafe for TorusPrecision
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
Mutably borrows from an owned value. Read more
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Casts the value.
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Casts the value.
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>
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 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>
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 moreSource§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Casts the value.
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> UnwrappedAs for T
impl<T> UnwrappedAs for T
Source§fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
Casts the value.
Source§impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
Source§fn unwrapped_cast_from(src: Src) -> Dst
fn unwrapped_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> WrappingAs for T
impl<T> WrappingAs for T
Source§fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
Source§fn wrapping_cast_from(src: Src) -> Dst
fn wrapping_cast_from(src: Src) -> Dst
Casts the value.