pub struct CompactCiphertextList { /* private fields */ }Implementations§
Source§impl CompactCiphertextList
impl CompactCiphertextList
pub fn is_packed(&self) -> bool
pub fn needs_casting(&self) -> bool
pub fn builder(pk: &CompactPublicKey) -> CompactCiphertextListBuilder
pub fn len(&self) -> usize
pub fn is_empty(&self) -> bool
pub fn get_kind_of(&self, index: usize) -> Option<DataKind>
Sourcepub fn into_raw_parts(self) -> (CompactCiphertextList, Vec<DataKind>)
pub fn into_raw_parts(self) -> (CompactCiphertextList, Vec<DataKind>)
Deconstruct a CompactCiphertextList into its constituents.
Sourcepub fn from_raw_parts(
ct_list: CompactCiphertextList,
info: Vec<DataKind>,
) -> Self
pub fn from_raw_parts( ct_list: CompactCiphertextList, info: Vec<DataKind>, ) -> Self
Construct a CompactCiphertextList from its constituents.
§Panics
Panics if the constituents are not compatible with each others.
Sourcepub fn reinterpret_data(&mut self, info: &[DataKind]) -> Result<(), Error>
pub fn reinterpret_data(&mut self, info: &[DataKind]) -> Result<(), Error>
Allows to change the info about the data kind store in the CompactCiphertextList.
This can be useful if you are loading an old version of the CompactCiphertextList which
did not store the metadata before.
The user is responsible of ensuring data consistency as the library cannot do that automatically. This can be a problem for boolean data if a block does not encrypt a 0 or a 1.
use tfhe::integer::ciphertext::{
CompactCiphertextList, DataKind, IntegerCompactCiphertextListExpansionMode,
RadixCiphertext, SignedRadixCiphertext,
};
use tfhe::integer::{ClientKey, CompactPublicKey};
use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128;
let fhe_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128;
let num_blocks = 4usize;
let cks = ClientKey::new(fhe_params);
let pk = CompactPublicKey::new(&cks);
let mut compact_ct = CompactCiphertextList::builder(&pk).push(-1i8).build();
let sanity_check_expander = compact_ct
.expand(IntegerCompactCiphertextListExpansionMode::NoCastingAndNoUnpacking)
.unwrap();
let sanity_expanded = sanity_check_expander
.get::<SignedRadixCiphertext>(0)
.unwrap()
.unwrap();
let sanity_decrypted: i8 = cks.decrypt_signed_radix(&sanity_expanded);
assert_eq!(-1i8, sanity_decrypted);
compact_ct
.reinterpret_data(&[DataKind::Unsigned(num_blocks.try_into().unwrap())])
.unwrap();
let expander = compact_ct
.expand(IntegerCompactCiphertextListExpansionMode::NoCastingAndNoUnpacking)
.unwrap();
let expanded = expander.get::<RadixCiphertext>(0).unwrap().unwrap();
let decrypted: u8 = cks.decrypt_radix(&expanded);
// -1i8 == u8::MAX
assert_eq!(u8::MAX, decrypted);pub fn ciphertext_count(&self) -> usize
pub fn expand( &self, expansion_mode: IntegerCompactCiphertextListExpansionMode<'_>, ) -> Result<CompactCiphertextListExpander>
pub fn size_elements(&self) -> usize
pub fn size_bytes(&self) -> usize
pub fn message_modulus(&self) -> MessageModulus
Trait Implementations§
Source§impl Clone for CompactCiphertextList
impl Clone for CompactCiphertextList
Source§fn clone(&self) -> CompactCiphertextList
fn clone(&self) -> CompactCiphertextList
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<'de> Deserialize<'de> for CompactCiphertextList
impl<'de> Deserialize<'de> for CompactCiphertextList
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl ParameterSetConformant for CompactCiphertextList
impl ParameterSetConformant for CompactCiphertextList
type ParameterSet = CompactCiphertextListConformanceParams
fn is_conformant(&self, params: &CompactCiphertextListConformanceParams) -> bool
Source§impl Serialize for CompactCiphertextList
impl Serialize for CompactCiphertextList
Source§impl Unversionize for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
impl Unversionize for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
Source§fn unversionize(
versioned: Self::VersionedOwned,
) -> Result<Self, UnversionizeError>
fn unversionize( versioned: Self::VersionedOwned, ) -> Result<Self, UnversionizeError>
Creates an object from a versioned enum, and eventually upgrades from previous
variants.
Source§impl UnversionizeVec for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
impl UnversionizeVec for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
fn unversionize_vec( versioned: Self::VersionedVec, ) -> Result<Vec<Self>, UnversionizeError>
Source§impl Version for CompactCiphertextListwhere
CompactCiphertextList: VersionizeOwned + Unversionize + Versionize,
Vec<DataKind>: VersionizeOwned + Unversionize + Versionize,
impl Version for CompactCiphertextListwhere
CompactCiphertextList: VersionizeOwned + Unversionize + Versionize,
Vec<DataKind>: VersionizeOwned + Unversionize + Versionize,
Source§impl Versionize for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
impl Versionize for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
Source§type Versioned<'vers> = <CompactCiphertextListVersions as VersionsDispatch<CompactCiphertextList>>::Ref<'vers>
type Versioned<'vers> = <CompactCiphertextListVersions as VersionsDispatch<CompactCiphertextList>>::Ref<'vers>
The equivalent versioned type. It should have a variant for each version.
It may own the underlying data or only hold a read-only reference to it.
Source§fn versionize(&self) -> Self::Versioned<'_>
fn versionize(&self) -> Self::Versioned<'_>
Wraps the object into a versioned enum with a variant for each version. This will
use references on the underlying types if possible.
Source§impl VersionizeOwned for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
impl VersionizeOwned for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
type VersionedOwned = <CompactCiphertextListVersions as VersionsDispatch<CompactCiphertextList>>::Owned
Source§fn versionize_owned(self) -> Self::VersionedOwned
fn versionize_owned(self) -> Self::VersionedOwned
Wraps the object into a versioned enum with a variant for each version. This will
clone the underlying types.
Source§impl VersionizeSlice for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
impl VersionizeSlice for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
type VersionedSlice<'vers> = Vec<<CompactCiphertextList as Versionize>::Versioned<'vers>>
fn versionize_slice(slice: &[Self]) -> Self::VersionedSlice<'_>
Source§impl VersionizeVec for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
impl VersionizeVec for CompactCiphertextListwhere
CompactCiphertextListVersions: VersionsDispatch<Self>,
type VersionedVec = Vec<<CompactCiphertextList as VersionizeOwned>::VersionedOwned>
fn versionize_vec(vec: Vec<Self>) -> Self::VersionedVec
Auto Trait Implementations§
impl Freeze for CompactCiphertextList
impl RefUnwindSafe for CompactCiphertextList
impl Send for CompactCiphertextList
impl Sync for CompactCiphertextList
impl Unpin for CompactCiphertextList
impl UnwindSafe for CompactCiphertextList
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 more