Struct ClientKey

Source
pub struct ClientKey { /* private fields */ }
Expand description

A structure containing the client key, which must be kept secret.

This key can be used to encrypt both in Radix and CRT decompositions.

Using this key, for both decompositions, each block will use the same crypto parameters.

Implementations§

Source§

impl ClientKey

Source

pub fn new(parameter_set: Parameters) -> Self

Creates a Client Key.

§Example
use concrete_integer::ClientKey;
use concrete_shortint::parameters::PARAM_MESSAGE_2_CARRY_2;

// Generate the client key, that can encrypt in
// radix and crt decomposition, where each block of the decomposition
// have over 2 bits of message modulus.
let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);
Source

pub fn parameters(&self) -> Parameters

Source

pub fn encrypt_radix(&self, message: u64, num_blocks: usize) -> RadixCiphertext

Encrypts an integer in radix decomposition

§Example
use concrete_integer::ClientKey;
use concrete_shortint::parameters::PARAM_MESSAGE_2_CARRY_2;

let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);
let num_block = 4;

let msg = 167_u64;

// 2 * 4 = 8 bits of message
let ct = cks.encrypt_radix(msg, num_block);

// Decryption
let dec = cks.decrypt_radix(&ct);
assert_eq!(msg, dec);
Source

pub fn encrypt_radix_without_padding( &self, message: u64, num_blocks: usize, ) -> RadixCiphertext

Encrypts an integer in radix decomposition without padding bit

§Example
use concrete_integer::ClientKey;
use concrete_shortint::parameters::PARAM_MESSAGE_2_CARRY_2;

let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);
let num_block = 4;

let msg = 167_u64;

// 2 * 4 = 8 bits of message
let ct = cks.encrypt_radix_without_padding(msg, num_block);

// Decryption
let dec = cks.decrypt_radix_without_padding(&ct);
assert_eq!(msg, dec);
Source

pub fn encrypt_one_block(&self, message: u64) -> Ciphertext

Encrypts one block.

This returns a shortint ciphertext.

§Example
use concrete_integer::ClientKey;
use concrete_shortint::parameters::PARAM_MESSAGE_2_CARRY_2;

let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);
let num_block = 4;

let msg = 2_u64;

// Encryption
let ct = cks.encrypt_one_block(msg);

// Decryption
let dec = cks.decrypt_one_block(&ct);
assert_eq!(msg, dec);
Source

pub fn decrypt_one_block(&self, ct: &Ciphertext) -> u64

Decrypts one block.

This takes a shortint ciphertext as input.

Source

pub fn decrypt_radix(&self, ctxt: &RadixCiphertext) -> u64

Decrypts a ciphertext encrypting an radix integer

§Example
use concrete_integer::ClientKey;
use concrete_shortint::parameters::PARAM_MESSAGE_2_CARRY_2;

let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);
let num_block = 4;

let msg = 191_u64;

// Encryption
let ct = cks.encrypt_radix(msg, num_block);

// Decryption
let dec = cks.decrypt_radix(&ct);
assert_eq!(msg, dec);
Source

pub fn decrypt_radix_without_padding(&self, ctxt: &RadixCiphertext) -> u64

Decrypts a ciphertext encrypting an radix integer encrypted without padding

§Example
use concrete_integer::ClientKey;
use concrete_shortint::parameters::PARAM_MESSAGE_2_CARRY_2;

let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);
let num_block = 4;

let msg = 191_u64;

// Encryption
let ct = cks.encrypt_radix_without_padding(msg, num_block);

// Decryption
let dec = cks.decrypt_radix_without_padding(&ct);
assert_eq!(msg, dec);
Source

pub fn encrypt_crt(&self, message: u64, base_vec: Vec<u64>) -> CrtCiphertext

Encrypts an integer using crt representation

§Example
use concrete_integer::ClientKey;
use concrete_shortint::parameters::PARAM_MESSAGE_2_CARRY_2;

let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);

let msg = 13_u64;

// Encryption:
let basis: Vec<u64> = vec![2, 3, 5];
let ct = cks.encrypt_crt(msg, basis);

// Decryption:
let dec = cks.decrypt_crt(&ct);
assert_eq!(msg, dec);
Source

pub fn decrypt_crt(&self, ctxt: &CrtCiphertext) -> u64

Decrypts an integer in crt decomposition

§Example
use concrete_integer::ClientKey;
use concrete_shortint::parameters::PARAM_MESSAGE_2_CARRY_2;

// Generate the client key and the server key:
let mut cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);

let msg = 27_u64;
let basis: Vec<u64> = vec![2, 3, 5];

// Encryption:
let mut ct = cks.encrypt_crt(msg, basis);

// Decryption:
let dec = cks.decrypt_crt(&ct);
assert_eq!(msg, dec);
Source

pub fn encrypt_native_crt( &self, message: u64, base_vec: Vec<u64>, ) -> CrtCiphertext

Encrypts a small integer message using the client key and some moduli without padding bit.

§Example
use concrete_integer::ClientKey;
use concrete_shortint::parameters::PARAM_MESSAGE_3_CARRY_3;

let cks = ClientKey::new(PARAM_MESSAGE_3_CARRY_3);

let msg = 13_u64;

// Encryption of one message:
let basis: Vec<u64> = vec![2, 3, 5];
let ct = cks.encrypt_native_crt(msg, basis);

// Decryption:
let dec = cks.decrypt_native_crt(&ct);
assert_eq!(msg, dec);
Source

pub fn decrypt_native_crt(&self, ct: &CrtCiphertext) -> u64

Decrypts a ciphertext encrypting an integer message with some moduli basis without padding bit.

§Example
use concrete_integer::ClientKey;
use concrete_shortint::parameters::PARAM_MESSAGE_3_CARRY_3;

let cks = ClientKey::new(PARAM_MESSAGE_3_CARRY_3);

let msg = 27_u64;
let basis: Vec<u64> = vec![2, 3, 5];
// Encryption of one message:
let mut ct = cks.encrypt_native_crt(msg, basis);

// Decryption:
let dec = cks.decrypt_native_crt(&ct);
assert_eq!(msg, dec);

Trait Implementations§

Source§

impl AsRef<ClientKey> for ClientKey

Source§

fn as_ref(&self) -> &ClientKey

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<ClientKey> for CrtClientKey

Source§

fn as_ref(&self) -> &ClientKey

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<ClientKey> for RadixClientKey

Source§

fn as_ref(&self) -> &ClientKey

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Clone for ClientKey

Source§

fn clone(&self) -> ClientKey

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClientKey

Source§

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

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

impl<'de> Deserialize<'de> for ClientKey

Source§

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 From<ClientKey> for ClientKey

Source§

fn from(key: ClientKey) -> Self

Converts to this type from the input type.
Source§

impl From<ClientKey> for ClientKey

Source§

fn from(key: ClientKey) -> ClientKey

Converts to this type from the input type.
Source§

impl PartialEq for ClientKey

Source§

fn eq(&self, other: &ClientKey) -> 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 Serialize for ClientKey

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for ClientKey

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<'short, T, Target> AsGeneralizedRef<'short, &'short Target> for T
where T: AsRef<Target> + ?Sized, Target: ?Sized,

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,