refactor(shortint): make a difference between PBS and Wopbs parameters

- preparatory work to manage several PBS implementations and harmonize
parameters management

BREAKING CHANGE:
- parameters structures changed
- gen_keys for integer now takes parameters by value to uniformize with
shortint
This commit is contained in:
Arthur Meyre
2023-05-03 14:45:56 +02:00
parent 62d94dbee8
commit b2fc1d5266
106 changed files with 1418 additions and 1394 deletions

View File

@@ -132,7 +132,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
// We create keys to create 16 bits integers
// using 8 blocks of 2 bits
let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, 8);
let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, 8);
let clear_a = 2382u16;
let clear_b = 29374u16;

View File

@@ -7,9 +7,9 @@ use tfhe::boolean::parameters::{BooleanParameters, DEFAULT_PARAMETERS, TFHE_LIB_
use tfhe::core_crypto::prelude::*;
use tfhe::shortint::keycache::NamedParam;
use tfhe::shortint::parameters::*;
use tfhe::shortint::Parameters;
use tfhe::shortint::PBSParameters;
const SHORTINT_BENCH_PARAMS: [Parameters; 15] = [
const SHORTINT_BENCH_PARAMS: [PBSParameters; 15] = [
PARAM_MESSAGE_1_CARRY_0,
PARAM_MESSAGE_1_CARRY_1,
PARAM_MESSAGE_2_CARRY_0,

View File

@@ -23,13 +23,13 @@ use tfhe::shortint::parameters::{
/// in radix decomposition
struct ParamsAndNumBlocksIter {
params_and_bit_sizes:
itertools::Product<IntoIter<tfhe::shortint::Parameters, 1>, IntoIter<usize, 7>>,
itertools::Product<IntoIter<tfhe::shortint::PBSParameters, 1>, IntoIter<usize, 7>>,
}
impl Default for ParamsAndNumBlocksIter {
fn default() -> Self {
// FIXME One set of parameter is tested since we want to benchmark only quickest operations.
const PARAMS: [tfhe::shortint::Parameters; 1] = [
const PARAMS: [tfhe::shortint::PBSParameters; 1] = [
PARAM_MESSAGE_2_CARRY_2,
// PARAM_MESSAGE_3_CARRY_3,
// PARAM_MESSAGE_4_CARRY_4,
@@ -42,7 +42,7 @@ impl Default for ParamsAndNumBlocksIter {
}
}
impl Iterator for ParamsAndNumBlocksIter {
type Item = (tfhe::shortint::Parameters, usize, usize);
type Item = (tfhe::shortint::PBSParameters, usize, usize);
fn next(&mut self) -> Option<Self::Item> {
let (param, bit_size) = self.params_and_bit_sizes.next()?;

View File

@@ -5,7 +5,7 @@ use crate::utilities::{write_to_json, OperatorType};
use criterion::{criterion_group, criterion_main, Criterion};
use tfhe::shortint::keycache::NamedParam;
use tfhe::shortint::parameters::*;
use tfhe::shortint::{CiphertextBig, Parameters, ServerKey};
use tfhe::shortint::{CiphertextBig, PBSParameters, ServerKey, ShortintParameterSet};
use rand::Rng;
use tfhe::shortint::keycache::KEY_CACHE;
@@ -13,14 +13,14 @@ use tfhe::shortint::keycache::KEY_CACHE;
use tfhe::shortint::keycache::KEY_CACHE_WOPBS;
use tfhe::shortint::parameters::parameters_wopbs::WOPBS_PARAM_MESSAGE_4_NORM2_6;
const SERVER_KEY_BENCH_PARAMS: [Parameters; 4] = [
const SERVER_KEY_BENCH_PARAMS: [PBSParameters; 4] = [
PARAM_MESSAGE_1_CARRY_1,
PARAM_MESSAGE_2_CARRY_2,
PARAM_MESSAGE_3_CARRY_3,
PARAM_MESSAGE_4_CARRY_4,
];
const SERVER_KEY_BENCH_PARAMS_EXTENDED: [Parameters; 15] = [
const SERVER_KEY_BENCH_PARAMS_EXTENDED: [PBSParameters; 15] = [
PARAM_MESSAGE_1_CARRY_0,
PARAM_MESSAGE_1_CARRY_1,
PARAM_MESSAGE_2_CARRY_0,
@@ -43,7 +43,7 @@ fn bench_server_key_unary_function<F>(
bench_name: &str,
display_name: &str,
unary_op: F,
params: &[Parameters],
params: &[PBSParameters],
) where
F: Fn(&ServerKey, &mut CiphertextBig),
{
@@ -55,7 +55,7 @@ fn bench_server_key_unary_function<F>(
let mut rng = rand::thread_rng();
let modulus = cks.parameters.message_modulus.0 as u64;
let modulus = cks.parameters.message_modulus().0 as u64;
let clear_text = rng.gen::<u64>() % modulus;
@@ -87,7 +87,7 @@ fn bench_server_key_binary_function<F>(
bench_name: &str,
display_name: &str,
binary_op: F,
params: &[Parameters],
params: &[PBSParameters],
) where
F: Fn(&ServerKey, &mut CiphertextBig, &mut CiphertextBig),
{
@@ -99,7 +99,7 @@ fn bench_server_key_binary_function<F>(
let mut rng = rand::thread_rng();
let modulus = cks.parameters.message_modulus.0 as u64;
let modulus = cks.parameters.message_modulus().0 as u64;
let clear_0 = rng.gen::<u64>() % modulus;
let clear_1 = rng.gen::<u64>() % modulus;
@@ -133,7 +133,7 @@ fn bench_server_key_binary_scalar_function<F>(
bench_name: &str,
display_name: &str,
binary_op: F,
params: &[Parameters],
params: &[PBSParameters],
) where
F: Fn(&ServerKey, &mut CiphertextBig, u8),
{
@@ -145,7 +145,7 @@ fn bench_server_key_binary_scalar_function<F>(
let mut rng = rand::thread_rng();
let modulus = cks.parameters.message_modulus.0 as u64;
let modulus = cks.parameters.message_modulus().0 as u64;
let clear_0 = rng.gen::<u64>() % modulus;
let clear_1 = rng.gen::<u64>() % modulus;
@@ -178,7 +178,7 @@ fn bench_server_key_binary_scalar_division_function<F>(
bench_name: &str,
display_name: &str,
binary_op: F,
params: &[Parameters],
params: &[PBSParameters],
) where
F: Fn(&ServerKey, &mut CiphertextBig, u8),
{
@@ -190,7 +190,7 @@ fn bench_server_key_binary_scalar_division_function<F>(
let mut rng = rand::thread_rng();
let modulus = cks.parameters.message_modulus.0 as u64;
let modulus = cks.parameters.message_modulus().0 as u64;
assert_ne!(modulus, 1);
let clear_0 = rng.gen::<u64>() % modulus;
@@ -231,7 +231,7 @@ fn carry_extract(c: &mut Criterion) {
let mut rng = rand::thread_rng();
let modulus = cks.parameters.message_modulus.0 as u64;
let modulus = cks.parameters.message_modulus().0 as u64;
let clear_0 = rng.gen::<u64>() % modulus;
@@ -267,7 +267,7 @@ fn programmable_bootstrapping(c: &mut Criterion) {
let mut rng = rand::thread_rng();
let modulus = cks.parameters.message_modulus.0 as u64;
let modulus = cks.parameters.message_modulus().0 as u64;
let acc = sks.generate_accumulator(|x| x);
@@ -297,12 +297,15 @@ fn programmable_bootstrapping(c: &mut Criterion) {
bench_group.finish();
}
// TODO: remove?
fn _bench_wopbs_param_message_8_norm2_5(c: &mut Criterion) {
let mut bench_group = c.benchmark_group("programmable_bootstrap");
let param = WOPBS_PARAM_MESSAGE_4_NORM2_6;
let param_set: ShortintParameterSet = param.try_into().unwrap();
let pbs_params = param_set.pbs_parameters().unwrap();
let keys = KEY_CACHE_WOPBS.get_from_param((param, param));
let keys = KEY_CACHE_WOPBS.get_from_param((pbs_params, param));
let (cks, _, wopbs_key) = (keys.client_key(), keys.server_key(), keys.wopbs_key());
let mut rng = rand::thread_rng();

View File

@@ -5,7 +5,7 @@ use std::path::PathBuf;
use tfhe::boolean::parameters::BooleanParameters;
use tfhe::core_crypto::prelude::*;
#[cfg(feature = "shortint")]
use tfhe::shortint::Parameters;
use tfhe::shortint::PBSParameters;
#[derive(Clone, Copy, Default, Serialize)]
pub struct CryptoParametersRecord {
@@ -52,8 +52,8 @@ impl From<BooleanParameters> for CryptoParametersRecord {
}
#[cfg(feature = "shortint")]
impl From<Parameters> for CryptoParametersRecord {
fn from(params: Parameters) -> Self {
impl From<PBSParameters> for CryptoParametersRecord {
fn from(params: PBSParameters) -> Self {
CryptoParametersRecord {
lwe_dimension: Some(params.lwe_dimension),
glwe_dimension: Some(params.glwe_dimension),
@@ -64,11 +64,11 @@ impl From<Parameters> for CryptoParametersRecord {
pbs_level: Some(params.pbs_level),
ks_base_log: Some(params.ks_base_log),
ks_level: Some(params.ks_level),
pfks_level: Some(params.pfks_level),
pfks_base_log: Some(params.pfks_base_log),
pfks_modular_std_dev: Some(params.pfks_modular_std_dev),
cbs_level: Some(params.cbs_level),
cbs_base_log: Some(params.cbs_base_log),
pfks_level: None,
pfks_base_log: None,
pfks_modular_std_dev: None,
cbs_level: None,
cbs_base_log: None,
message_modulus: Some(params.message_modulus.0),
carry_modulus: Some(params.carry_modulus.0),
}

View File

@@ -108,9 +108,8 @@ void test_custom_keygen(void) {
ShortintServerKey *sks = NULL;
ShortintParameters *params = NULL;
int params_ok =
shortint_create_parameters(10, 1, 1024, 10e-100, 10e-100, 2, 3, 2, 3, 2, 3, 10e-100, 2, 3, 2,
2, 64, ShortintEncryptionKeyChoiceBig, &params);
int params_ok = shortint_create_parameters(10, 1, 1024, 10e-100, 10e-100, 2, 3, 2, 3, 2, 2, 64,
ShortintEncryptionKeyChoiceBig, &params);
assert(params_ok == 0);
int gen_keys_ok = shortint_gen_keys_with_parameters(params, &cks, &sks);

View File

@@ -115,7 +115,7 @@ fn main() {
let msg1 = 1;
let msg2 = 0;
let modulus = client_key.parameters.message_modulus.0;
let modulus = client_key.parameters.message_modulus().0;
// We use the client key to encrypt two messages:
let ct_1 = client_key.encrypt(msg1);
@@ -143,7 +143,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
// We create keys for radix represention to create 16 bits integers
// using 8 blocks of 2 bits
let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, 8);
let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, 8);
let clear_a = 2382u16;
let clear_b = 29374u16;

View File

@@ -26,7 +26,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
// We generate a set of client/server keys, using the default parameters:
let num_block = 4;
let (client_key, server_key) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_block);
let (client_key, server_key) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_block);
}
```
@@ -105,7 +105,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
let num_block = 4;
let (client_key, server_key) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_block);
let (client_key, server_key) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_block);
let msg1 = 12u64;
let msg2 = 11u64;
@@ -143,7 +143,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
let num_block = 2;
let (client_key, server_key) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_block);
let (client_key, server_key) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_block);
let msg1 = 12u64;
let msg2 = 11u64;
@@ -181,7 +181,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
let num_block = 4;
let (client_key, server_key) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_block);
let (client_key, server_key) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_block);
let msg1 = 12;
let msg2 = 11;
@@ -220,7 +220,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
let num_block = 4;
let (client_key, server_key) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_block);
let (client_key, server_key) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_block);
let msg1 = 12;
let msg2 = 11;

View File

@@ -27,7 +27,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// We generate a set of client/server keys, using the default parameters:
let num_block = 4;
let (client_key, server_key) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_block);
let (client_key, server_key) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_block);
let msg1 = 201;
let msg2 = 12;

View File

@@ -34,7 +34,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
// We generate a set of client/server keys, using the default parameters:
let num_block = 4;
let (client_key, server_key) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_block);
let (client_key, server_key) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_block);
}
```
@@ -49,7 +49,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
// We generate a set of client/server keys, using the default parameters:
let num_block = 4;
let (client_key, server_key) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_block);
let (client_key, server_key) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_block);
let msg1 = 128u64;
let msg2 = 13u64;
@@ -72,7 +72,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
// We generate a set of client/server keys, using the default parameters:
let num_block = 4;
let (client_key, _) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_block);
let (client_key, _) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_block);
//We generate the public key from the secret client key:
let public_key = PublicKeyBig::new(&client_key);
@@ -98,7 +98,7 @@ use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
fn main() {
// We generate a set of client/server keys, using the default parameters:
let num_block = 4;
let (client_key, server_key) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_block);
let (client_key, server_key) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_block);
let msg1 = 128;
let msg2 = 13;

View File

@@ -55,7 +55,7 @@ fn main() {
let msg2 = 3;
let scalar = 4;
let modulus = client_key.parameters.message_modulus.0;
let modulus = client_key.parameters.message_modulus().0;
// We use the client key to encrypt two messages:
let mut ct_1 = client_key.encrypt(msg1);
@@ -88,7 +88,7 @@ fn main() {
let msg2 = 3;
let scalar = 4;
let modulus = client_key.parameters.message_modulus.0;
let modulus = client_key.parameters.message_modulus().0;
// We use the client key to encrypt two messages:
let mut ct_1 = client_key.encrypt(msg1);
@@ -131,7 +131,7 @@ fn main() {
let msg2 = 3;
let scalar = 4;
let modulus = client_key.parameters.message_modulus.0;
let modulus = client_key.parameters.message_modulus().0;
// We use the client key to encrypt two messages:
let mut ct_1 = client_key.encrypt(msg1);
@@ -165,7 +165,7 @@ fn main() {
let msg2 = 3;
let scalar = 4;
let modulus = client_key.parameters.message_modulus.0;
let modulus = client_key.parameters.message_modulus().0;
// We use the client key to encrypt two messages:
let mut ct_1 = client_key.encrypt(msg1);
@@ -241,7 +241,7 @@ fn main() {
let msg1 = 2;
let msg2 = 1;
let modulus = client_key.parameters.message_modulus.0;
let modulus = client_key.parameters.message_modulus().0;
// We use the private client key to encrypt two messages:
let ct_1 = client_key.encrypt(msg1);
@@ -272,7 +272,7 @@ fn main() {
let msg1 = 2;
let msg2 = 1;
let modulus = client_key.parameters.message_modulus.0;
let modulus = client_key.parameters.message_modulus().0;
// We use the private client key to encrypt two messages:
let ct_1 = client_key.encrypt(msg1);
@@ -303,7 +303,7 @@ fn main() {
let msg1 = 2;
let msg2 = 1;
let modulus = client_key.parameters.message_modulus.0;
let modulus = client_key.parameters.message_modulus().0;
// We use the private client key to encrypt two messages:
let ct_1 = client_key.encrypt(msg1);
@@ -331,7 +331,7 @@ fn main() {
let msg1 = 3;
let modulus = client_key.parameters.message_modulus.0;
let modulus = client_key.parameters.message_modulus().0;
// We use the private client key to encrypt two messages:
let ct_1 = client_key.encrypt(msg1);
@@ -365,7 +365,7 @@ fn main() {
let msg1 = 3;
let msg2 = 2;
let modulus = client_key.parameters.message_modulus.0 as u64;
let modulus = client_key.parameters.message_modulus().0 as u64;
// We use the private client key to encrypt two messages:
let ct_1 = client_key.encrypt(msg1);

View File

@@ -44,7 +44,7 @@ In the case of multiplication, two algorithms are implemented: the first one rel
## User-defined parameter sets
It is possible to define new parameter sets. To do so, it is sufficient to use the function `unsecure_parameters()` or to manually fill the `Parameter` structure fields.
It is possible to define new parameter sets. To do so, it is sufficient to use the function `unsecure_parameters()` or to manually fill the `PBSParameters` structure fields.
For instance:
@@ -53,7 +53,7 @@ use tfhe::shortint::prelude::*;
fn main() {
let param = unsafe {
Parameters::new(
PBSParameters::new(
LweDimension(656),
GlweDimension(2),
PolynomialSize(512),
@@ -63,11 +63,6 @@ fn main() {
DecompositionLevelCount(2),
DecompositionBaseLog(3),
DecompositionLevelCount(4),
StandardDev(0.00000000037411618952047216),
DecompositionBaseLog(15),
DecompositionLevelCount(1),
DecompositionLevelCount(0),
DecompositionBaseLog(0),
MessageModulus(4),
CarryModulus(1),
CiphertextModulus::new_native(),

View File

@@ -82,7 +82,7 @@ fn main() {
let msg1 = 1;
let msg2 = 0;
let modulus = client_key.parameters.message_modulus.0;
let modulus = client_key.parameters.message_modulus().0;
// We use the client key to encrypt two messages:
let ct_1 = client_key.encrypt(msg1);

View File

@@ -4,8 +4,8 @@ use tfhe::shortint::parameters::parameters_wopbs_message_carry::{
WOPBS_PARAM_MESSAGE_4_CARRY_4,
};
use tfhe::shortint::parameters::{
Parameters, ALL_PARAMETER_VEC, PARAM_MESSAGE_1_CARRY_1, PARAM_MESSAGE_2_CARRY_2,
PARAM_MESSAGE_3_CARRY_3, PARAM_MESSAGE_4_CARRY_4,
PBSParameters, WopbsParameters, ALL_PARAMETER_VEC, PARAM_MESSAGE_1_CARRY_1,
PARAM_MESSAGE_2_CARRY_2, PARAM_MESSAGE_3_CARRY_3, PARAM_MESSAGE_4_CARRY_4,
};
fn client_server_keys() {
@@ -30,7 +30,7 @@ fn client_server_keys() {
KEY_CACHE.clear_in_memory_cache()
}
const WOPBS_PARAMS: [(Parameters, Parameters); 4] = [
const WOPBS_PARAMS: [(PBSParameters, WopbsParameters); 4] = [
(PARAM_MESSAGE_1_CARRY_1, WOPBS_PARAM_MESSAGE_1_CARRY_1),
(PARAM_MESSAGE_2_CARRY_2, WOPBS_PARAM_MESSAGE_2_CARRY_2),
(PARAM_MESSAGE_3_CARRY_3, WOPBS_PARAM_MESSAGE_3_CARRY_3),

View File

@@ -34,7 +34,7 @@ pub unsafe extern "C" fn shortint_gen_keys_with_parameters(
let shortint_parameters = get_ref_checked(shortint_parameters).unwrap();
let client_key = shortint::client_key::ClientKey::new(shortint_parameters.0.to_owned());
let client_key = shortint::client_key::ClientKey::new(shortint_parameters.0);
let server_key = shortint::server_key::ServerKey::new(&client_key);
let heap_allocated_client_key = Box::new(ShortintClientKey(client_key));

View File

@@ -26,7 +26,7 @@ impl From<ShortintEncryptionKeyChoice> for crate::shortint::parameters::Encrypti
}
}
pub struct ShortintParameters(pub(in crate::c_api) shortint::parameters::Parameters);
pub struct ShortintParameters(pub(in crate::c_api) shortint::parameters::PBSParameters);
#[no_mangle]
pub unsafe extern "C" fn shortint_get_parameters(
@@ -123,11 +123,6 @@ pub unsafe extern "C" fn shortint_create_parameters(
pbs_level: usize,
ks_base_log: usize,
ks_level: usize,
pfks_level: usize,
pfks_base_log: usize,
pfks_modular_std_dev: f64,
cbs_level: usize,
cbs_base_log: usize,
message_modulus: usize,
carry_modulus: usize,
modulus_power_of_2_exponent: usize,
@@ -142,7 +137,7 @@ pub unsafe extern "C" fn shortint_create_parameters(
*result = std::ptr::null_mut();
let heap_allocated_parameters =
Box::new(ShortintParameters(shortint::parameters::Parameters {
Box::new(ShortintParameters(shortint::parameters::PBSParameters {
lwe_dimension: LweDimension(lwe_dimension),
glwe_dimension: GlweDimension(glwe_dimension),
polynomial_size: PolynomialSize(polynomial_size),
@@ -152,11 +147,6 @@ pub unsafe extern "C" fn shortint_create_parameters(
pbs_level: DecompositionLevelCount(pbs_level),
ks_base_log: DecompositionBaseLog(ks_base_log),
ks_level: DecompositionLevelCount(ks_level),
pfks_level: DecompositionLevelCount(pfks_level),
pfks_base_log: DecompositionBaseLog(pfks_base_log),
pfks_modular_std_dev: StandardDev(pfks_modular_std_dev),
cbs_level: DecompositionLevelCount(cbs_level),
cbs_base_log: DecompositionBaseLog(cbs_base_log),
message_modulus: crate::shortint::parameters::MessageModulus(message_modulus),
carry_modulus: crate::shortint::parameters::CarryModulus(carry_modulus),
ciphertext_modulus:

View File

@@ -122,8 +122,8 @@ impl ConfigBuilder {
#[cfg(feature = "integer")]
pub fn enable_default_custom_integers(
mut self,
block_parameters: crate::shortint::Parameters,
wopbs_block_parameters: crate::shortint::Parameters,
block_parameters: crate::shortint::PBSParameters,
wopbs_block_parameters: crate::shortint::WopbsParameters,
) -> Self {
self.config.integer_config =
Some(IntegerConfig::new(block_parameters, wopbs_block_parameters));

View File

@@ -65,7 +65,7 @@ In practice it is a bit more complex as we have to introduce traits to internall
"parameter struct", eg a trait to convert the `FheUint2Parameters` and `FheUint4Parameters` back into `shortint::Parameters`,
```rust
pub trait ShortIntegerParameter: Copy + Into<crate::shortint::Parameters> {
pub trait ShortIntegerParameter: Copy + Into< crate::shortint::PBSParameters> {
// ...
}
```

View File

@@ -1,13 +1,13 @@
#[derive(Copy, Clone, Debug, serde::Serialize, serde::Deserialize)]
pub(crate) struct IntegerConfig {
pub(crate) block_parameters: crate::shortint::Parameters,
pub(crate) wopbs_block_parameters: crate::shortint::Parameters,
pub(crate) block_parameters: crate::shortint::PBSParameters,
pub(crate) wopbs_block_parameters: crate::shortint::WopbsParameters,
}
impl IntegerConfig {
pub(crate) fn new(
block_parameters: crate::shortint::Parameters,
wopbs_block_parameters: crate::shortint::Parameters,
block_parameters: crate::shortint::PBSParameters,
wopbs_block_parameters: crate::shortint::WopbsParameters,
) -> Self {
Self {
block_parameters,

View File

@@ -8,7 +8,7 @@ pub trait EvaluationIntegerKey<ClientKey> {
fn new_wopbs_key(
client_key: &ClientKey,
server_key: &Self,
wopbs_block_parameters: crate::shortint::Parameters,
wopbs_block_parameters: crate::shortint::WopbsParameters,
) -> crate::integer::wopbs::WopbsKey;
}

View File

@@ -152,7 +152,7 @@ where
fn new_wopbs_key(
client_key: &C,
server_key: &Self,
wopbs_block_parameters: crate::shortint::Parameters,
wopbs_block_parameters: crate::shortint::WopbsParameters,
) -> WopbsKey {
#[cfg(not(feature = "internal-keycache"))]
{

View File

@@ -28,7 +28,10 @@ where
.client_key()
.clone();
#[cfg(not(feature = "internal-keycache"))]
let key = ClientKey::new(parameters.into());
let key = {
let parameters: crate::shortint::PBSParameters = parameters.into();
ClientKey::new(parameters)
};
Self {
key,

View File

@@ -1,4 +1,4 @@
pub trait ShortIntegerParameter: Copy + Into<crate::shortint::Parameters> {
pub trait ShortIntegerParameter: Copy + Into<crate::shortint::PBSParameters> {
type Id: Copy;
}

View File

@@ -29,7 +29,7 @@ where
pub(crate) fn new(client_key: &GenericShortIntClientKey<P>) -> Self {
#[cfg(feature = "internal-keycache")]
let key = KEY_CACHE
.get_from_param(client_key.key.parameters)
.get_from_param(client_key.key.parameters.pbs_parameters().unwrap())
.server_key()
.clone();
#[cfg(not(feature = "internal-keycache"))]

View File

@@ -3,8 +3,8 @@ use std::fmt::Formatter;
use crate::shortint::parameters::{
CarryModulus, CoreCiphertextModulus, DecompositionBaseLog, DecompositionLevelCount,
EncryptionKeyChoice, GlweDimension, LweDimension, MessageModulus, Parameters, PolynomialSize,
StandardDev,
EncryptionKeyChoice, GlweDimension, LweDimension, MessageModulus, PBSParameters,
PolynomialSize, StandardDev,
};
use crate::high_level_api::shortints::{CompressedGenericShortint, GenericShortInt};
@@ -36,18 +36,13 @@ pub struct ShortIntegerParameterSet<const MESSAGE_BITS: u8> {
pub pbs_level: DecompositionLevelCount,
pub ks_base_log: DecompositionBaseLog,
pub ks_level: DecompositionLevelCount,
pub pfks_level: DecompositionLevelCount,
pub pfks_base_log: DecompositionBaseLog,
pub pfks_modular_std_dev: StandardDev,
pub cbs_level: DecompositionLevelCount,
pub cbs_base_log: DecompositionBaseLog,
pub carry_modulus: CarryModulus,
pub ciphertext_modulus: CoreCiphertextModulus<u64>,
pub encryption_key_choice: EncryptionKeyChoice,
}
impl<const MESSAGE_BITS: u8> ShortIntegerParameterSet<MESSAGE_BITS> {
const fn from_static(params: &'static Parameters) -> Self {
const fn from_static(params: &'static PBSParameters) -> Self {
if params.message_modulus.0 != 1 << MESSAGE_BITS as usize {
panic!("Invalid bit number");
}
@@ -61,11 +56,6 @@ impl<const MESSAGE_BITS: u8> ShortIntegerParameterSet<MESSAGE_BITS> {
pbs_level: params.pbs_level,
ks_base_log: params.ks_base_log,
ks_level: params.ks_level,
pfks_level: params.pfks_level,
pfks_base_log: params.pfks_base_log,
pfks_modular_std_dev: params.pfks_modular_std_dev,
cbs_level: params.cbs_level,
cbs_base_log: params.cbs_base_log,
carry_modulus: params.carry_modulus,
ciphertext_modulus: params.ciphertext_modulus,
encryption_key_choice: params.encryption_key_choice,
@@ -73,7 +63,7 @@ impl<const MESSAGE_BITS: u8> ShortIntegerParameterSet<MESSAGE_BITS> {
}
}
impl<const MESSAGE_BITS: u8> From<ShortIntegerParameterSet<MESSAGE_BITS>> for Parameters {
impl<const MESSAGE_BITS: u8> From<ShortIntegerParameterSet<MESSAGE_BITS>> for PBSParameters {
fn from(params: ShortIntegerParameterSet<MESSAGE_BITS>) -> Self {
Self {
lwe_dimension: params.lwe_dimension,
@@ -85,11 +75,6 @@ impl<const MESSAGE_BITS: u8> From<ShortIntegerParameterSet<MESSAGE_BITS>> for Pa
pbs_level: params.pbs_level,
ks_base_log: params.ks_base_log,
ks_level: params.ks_level,
pfks_level: params.pfks_level,
pfks_base_log: params.pfks_base_log,
pfks_modular_std_dev: params.pfks_modular_std_dev,
cbs_level: params.cbs_level,
cbs_base_log: params.cbs_base_log,
message_modulus: MessageModulus(1 << MESSAGE_BITS as usize),
carry_modulus: params.carry_modulus,
ciphertext_modulus: params.ciphertext_modulus,
@@ -264,10 +249,6 @@ impl FheUint2Parameters {
pub fn with_carry_6() -> Self {
Self::from_static(&crate::shortint::parameters::PARAM_MESSAGE_2_CARRY_6)
}
pub fn wopbs_default() -> Self {
Self::from_static(&crate::shortint::parameters::parameters_wopbs_message_carry::WOPBS_PARAM_MESSAGE_2_CARRY_2)
}
}
impl Default for FheUint2Parameters {
@@ -296,10 +277,6 @@ impl FheUint3Parameters {
pub fn with_carry_5() -> Self {
Self::from_static(&crate::shortint::parameters::PARAM_MESSAGE_3_CARRY_5)
}
pub fn wopbs_default() -> Self {
Self::from_static(&crate::shortint::parameters::parameters_wopbs_message_carry::WOPBS_PARAM_MESSAGE_3_CARRY_3)
}
}
impl Default for FheUint3Parameters {
@@ -324,10 +301,6 @@ impl FheUint4Parameters {
pub fn with_carry_4() -> Self {
Self::from_static(&crate::shortint::parameters::PARAM_MESSAGE_4_CARRY_4)
}
pub fn wopbs_default() -> Self {
Self::from_static(&crate::shortint::parameters::parameters_wopbs_message_carry::WOPBS_PARAM_MESSAGE_4_CARRY_4)
}
}
impl Default for FheUint4Parameters {

View File

@@ -39,7 +39,7 @@ impl AsRef<ClientKey> for CrtClientKey {
}
impl CrtClientKey {
pub fn new(parameters: crate::shortint::Parameters, moduli: Vec<u64>) -> Self {
pub fn new(parameters: crate::shortint::PBSParameters, moduli: Vec<u64>) -> Self {
Self {
key: ClientKey::new(parameters),
moduli,
@@ -55,7 +55,7 @@ impl CrtClientKey {
}
/// Returns the parameters used by the client key.
pub fn parameters(&self) -> crate::shortint::Parameters {
pub fn parameters(&self) -> crate::shortint::PBSParameters {
self.key.parameters()
}

View File

@@ -16,7 +16,7 @@ use crate::integer::encryption::{encrypt_crt, encrypt_words_radix_impl, AsLittle
use crate::shortint::parameters::MessageModulus;
use crate::shortint::{
CiphertextBase, CiphertextBig, CiphertextSmall, ClientKey as ShortintClientKey, PBSOrderMarker,
Parameters as ShortintParameters,
ShortintParameterSet as ShortintParameters,
};
use serde::{Deserialize, Serialize};
pub use utils::radix_decomposition;
@@ -71,14 +71,18 @@ impl ClientKey {
/// // have over 2 bits of message modulus.
/// let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);
/// ```
pub fn new(parameter_set: ShortintParameters) -> Self {
pub fn new<P>(parameter_set: P) -> Self
where
P: TryInto<ShortintParameters>,
<P as TryInto<ShortintParameters>>::Error: std::fmt::Debug,
{
Self {
key: ShortintClientKey::new(parameter_set),
}
}
pub fn parameters(&self) -> ShortintParameters {
self.key.parameters
pub fn parameters(&self) -> crate::shortint::PBSParameters {
self.key.parameters.pbs_parameters().unwrap()
}
/// Encrypts an integer in radix decomposition
@@ -365,7 +369,7 @@ impl ClientKey {
let shifted_block_value = block_value * valid_until_power;
bit_buffer += shifted_block_value;
valid_until_power *= self.key.parameters.message_modulus.0 as u128;
valid_until_power *= self.key.parameters.message_modulus().0 as u128;
if valid_until_power >= U64_MODULUS {
// We have enough data to fill the current word

View File

@@ -6,7 +6,7 @@ use crate::integer::encryption::AsLittleEndianWords;
use crate::integer::{RadixCiphertextBig, RadixCiphertextSmall};
use crate::shortint::{
CiphertextBase, CiphertextBig as ShortintCiphertext, PBSOrderMarker,
Parameters as ShortintParameters,
PBSParameters as ShortintParameters,
};
use serde::{Deserialize, Serialize};

View File

@@ -115,7 +115,7 @@ pub(crate) trait KnowsMessageModulus {
impl KnowsMessageModulus for crate::shortint::ClientKey {
fn message_modulus(&self) -> MessageModulus {
self.parameters.message_modulus
self.parameters.message_modulus()
}
}
@@ -123,7 +123,7 @@ impl<OpOrder: crate::shortint::PBSOrderMarker> KnowsMessageModulus
for crate::shortint::PublicKeyBase<OpOrder>
{
fn message_modulus(&self) -> MessageModulus {
self.parameters.message_modulus
self.parameters.message_modulus()
}
}
@@ -131,7 +131,7 @@ impl<OpOrder: crate::shortint::PBSOrderMarker> KnowsMessageModulus
for crate::shortint::CompressedPublicKeyBase<OpOrder>
{
fn message_modulus(&self) -> MessageModulus {
self.parameters.message_modulus
self.parameters.message_modulus()
}
}

View File

@@ -1,4 +1,4 @@
use crate::shortint::Parameters;
use crate::shortint::{PBSParameters, WopbsParameters};
use lazy_static::lazy_static;
use crate::integer::wopbs::WopbsKey;
@@ -8,7 +8,7 @@ use crate::integer::{ClientKey, ServerKey};
pub struct IntegerKeyCache;
impl IntegerKeyCache {
pub fn get_from_params(&self, params: Parameters) -> (ClientKey, ServerKey) {
pub fn get_from_params(&self, params: PBSParameters) -> (ClientKey, ServerKey) {
let keys = crate::shortint::keycache::KEY_CACHE.get_from_param(params);
let (client_key, server_key) = (keys.client_key(), keys.server_key());
@@ -20,7 +20,7 @@ impl IntegerKeyCache {
pub fn get_shortint_from_params(
&self,
params: Parameters,
params: PBSParameters,
) -> (crate::shortint::ClientKey, crate::shortint::ServerKey) {
let keys = crate::shortint::keycache::KEY_CACHE.get_from_param(params);
(keys.client_key().clone(), keys.server_key().clone())
@@ -31,7 +31,7 @@ impl IntegerKeyCache {
pub struct WopbsKeyCache;
impl WopbsKeyCache {
pub fn get_from_params(&self, params: (Parameters, Parameters)) -> WopbsKey {
pub fn get_from_params(&self, params: (PBSParameters, WopbsParameters)) -> WopbsKey {
let shortint_wops_key = crate::shortint::keycache::KEY_CACHE_WOPBS.get_from_param(params);
WopbsKey::from(shortint_wops_key.wopbs_key().clone())
}

View File

@@ -24,7 +24,7 @@
//!
//! // Generation of the client/server keys, using the default parameters:
//! let (mut client_key, mut server_key) =
//! gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, number_of_blocks);
//! gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, number_of_blocks);
//!
//! let msg1 = 153;
//! let msg2 = 125;
@@ -84,21 +84,67 @@ pub use u256::U256;
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
/// ```
pub fn gen_keys(
parameters_set: &crate::shortint::parameters::Parameters,
) -> (ClientKey, ServerKey) {
#[cfg(any(test, feature = "internal-keycache"))]
{
keycache::KEY_CACHE.get_from_params(*parameters_set)
}
#[cfg(all(not(test), not(feature = "internal-keycache")))]
{
let cks = ClientKey::new(*parameters_set);
pub fn gen_keys<P>(parameters_set: P) -> (ClientKey, ServerKey)
where
P: TryInto<crate::shortint::parameters::ShortintParameterSet>,
<P as TryInto<crate::shortint::parameters::ShortintParameterSet>>::Error: std::fmt::Debug,
{
let shortint_parameters_set: crate::shortint::parameters::ShortintParameterSet =
parameters_set.try_into().unwrap();
let is_wopbs_only_params = shortint_parameters_set.wopbs_only();
// TODO
// Manually manage the wopbs only case as a workaround pending wopbs rework
let shortint_parameters_set = if is_wopbs_only_params {
let wopbs_params = shortint_parameters_set.wopbs_parameters().unwrap();
let pbs_params = crate::shortint::parameters::PBSParameters {
lwe_dimension: wopbs_params.lwe_dimension,
glwe_dimension: wopbs_params.glwe_dimension,
polynomial_size: wopbs_params.polynomial_size,
lwe_modular_std_dev: wopbs_params.lwe_modular_std_dev,
glwe_modular_std_dev: wopbs_params.glwe_modular_std_dev,
pbs_base_log: wopbs_params.pbs_base_log,
pbs_level: wopbs_params.pbs_level,
ks_base_log: wopbs_params.ks_base_log,
ks_level: wopbs_params.ks_level,
message_modulus: wopbs_params.message_modulus,
carry_modulus: wopbs_params.carry_modulus,
ciphertext_modulus: wopbs_params.ciphertext_modulus,
encryption_key_choice: wopbs_params.encryption_key_choice,
};
crate::shortint::parameters::ShortintParameterSet::try_new_pbs_and_wopbs_param_set((
pbs_params,
wopbs_params,
))
.unwrap()
} else {
shortint_parameters_set
};
let gen_keys_inner = |parameters_set| {
let cks = ClientKey::new(parameters_set);
let sks = ServerKey::new(&cks);
(cks, sks)
};
#[cfg(any(test, feature = "internal-keycache"))]
{
if is_wopbs_only_params {
// TODO
// Keycache is broken for the wopbs only case, so generate keys instead
gen_keys_inner(shortint_parameters_set)
} else {
keycache::KEY_CACHE.get_from_params(shortint_parameters_set.pbs_parameters().unwrap())
}
}
#[cfg(all(not(test), not(feature = "internal-keycache")))]
{
gen_keys_inner(shortint_parameters_set)
}
}
@@ -112,12 +158,13 @@ pub fn gen_keys(
///
/// // generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// ```
pub fn gen_keys_radix(
parameters_set: &crate::shortint::parameters::Parameters,
num_blocks: usize,
) -> (RadixClientKey, ServerKey) {
pub fn gen_keys_radix<P>(parameters_set: P, num_blocks: usize) -> (RadixClientKey, ServerKey)
where
P: TryInto<crate::shortint::parameters::ShortintParameterSet>,
<P as TryInto<crate::shortint::parameters::ShortintParameterSet>>::Error: std::fmt::Debug,
{
let (cks, sks) = gen_keys(parameters_set);
(RadixClientKey::from((cks, num_blocks)), sks)
@@ -133,10 +180,10 @@ pub fn gen_keys_radix(
///
/// // generate the client key and the server key:
/// let basis = vec![2, 3, 5];
/// let (cks, sks) = gen_keys_crt(&PARAM_MESSAGE_2_CARRY_2, basis);
/// let (cks, sks) = gen_keys_crt(PARAM_MESSAGE_2_CARRY_2, basis);
/// ```
pub fn gen_keys_crt(
parameters_set: &crate::shortint::parameters::Parameters,
parameters_set: crate::shortint::parameters::PBSParameters,
basis: Vec<u64>,
) -> (CrtClientKey, ServerKey) {
let (cks, sks) = gen_keys(parameters_set);

View File

@@ -1,18 +1,19 @@
#![allow(clippy::excessive_precision)]
pub use crate::shortint::{CiphertextModulus, Parameters};
pub use crate::shortint::{CiphertextModulus, PBSParameters, WopbsParameters};
pub use crate::shortint::parameters::parameters_wopbs::PARAM_4_BITS_5_BLOCKS;
use crate::shortint::parameters::{CarryModulus, EncryptionKeyChoice, MessageModulus};
pub use crate::shortint::parameters::{
DecompositionBaseLog, DecompositionLevelCount, DispersionParameter, GlweDimension,
LweDimension, PolynomialSize, StandardDev,
};
pub const ALL_PARAMETER_VEC_INTEGER_16_BITS: [Parameters; 2] = [
pub const ALL_PARAMETER_VEC_INTEGER_16_BITS: [WopbsParameters; 2] = [
PARAM_MESSAGE_4_CARRY_4_16_BITS,
PARAM_MESSAGE_2_CARRY_2_16_BITS,
];
pub const PARAM_MESSAGE_4_CARRY_4_16_BITS: Parameters = Parameters {
pub const PARAM_MESSAGE_4_CARRY_4_16_BITS: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -33,7 +34,7 @@ pub const PARAM_MESSAGE_4_CARRY_4_16_BITS: Parameters = Parameters {
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const PARAM_MESSAGE_2_CARRY_2_16_BITS: Parameters = Parameters {
pub const PARAM_MESSAGE_2_CARRY_2_16_BITS: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -54,7 +55,7 @@ pub const PARAM_MESSAGE_2_CARRY_2_16_BITS: Parameters = Parameters {
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const PARAM_MESSAGE_4_CARRY_4_32_BITS: Parameters = Parameters {
pub const PARAM_MESSAGE_4_CARRY_4_32_BITS: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -75,7 +76,7 @@ pub const PARAM_MESSAGE_4_CARRY_4_32_BITS: Parameters = Parameters {
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const PARAM_MESSAGE_2_CARRY_2_32_BITS: Parameters = Parameters {
pub const PARAM_MESSAGE_2_CARRY_2_32_BITS: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -96,7 +97,7 @@ pub const PARAM_MESSAGE_2_CARRY_2_32_BITS: Parameters = Parameters {
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const PARAM_MESSAGE_1_CARRY_1_32_BITS: Parameters = Parameters {
pub const PARAM_MESSAGE_1_CARRY_1_32_BITS: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -116,24 +117,3 @@ pub const PARAM_MESSAGE_1_CARRY_1_32_BITS: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const PARAM_4_BITS_5_BLOCKS: Parameters = Parameters {
lwe_dimension: LweDimension(667),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
lwe_modular_std_dev: StandardDev(0.0000000004168323308734758),
glwe_modular_std_dev: StandardDev(0.00000000000000000000000000000004905643852600863),
pbs_base_log: DecompositionBaseLog(7),
pbs_level: DecompositionLevelCount(6),
ks_base_log: DecompositionBaseLog(1),
ks_level: DecompositionLevelCount(14),
pfks_level: DecompositionLevelCount(6),
pfks_base_log: DecompositionBaseLog(7),
pfks_modular_std_dev: StandardDev(0.00000000000000000000000000000004905643852600863),
cbs_level: DecompositionLevelCount(7),
cbs_base_log: DecompositionBaseLog(4),
message_modulus: MessageModulus(16),
carry_modulus: CarryModulus(1),
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};

View File

@@ -67,8 +67,8 @@ impl CompressedPublicKeySmall {
}
impl<OpOrder: PBSOrderMarker> CompressedPublicKeyBase<OpOrder> {
pub fn parameters(&self) -> crate::shortint::Parameters {
self.key.parameters
pub fn parameters(&self) -> crate::shortint::PBSParameters {
self.key.parameters.pbs_parameters().unwrap()
}
pub fn encrypt_radix<T: AsLittleEndianWords>(

View File

@@ -63,8 +63,8 @@ impl PublicKeySmall {
}
impl<PBSOrder: PBSOrderMarker> PublicKey<PBSOrder> {
pub fn parameters(&self) -> crate::shortint::Parameters {
self.key.parameters
pub fn parameters(&self) -> crate::shortint::PBSParameters {
self.key.parameters.pbs_parameters().unwrap()
}
pub fn encrypt_radix<T: AsLittleEndianWords>(

View File

@@ -2,7 +2,7 @@ use rand::Rng;
use crate::integer::{CompressedPublicKeyBig, PublicKeyBig};
use crate::shortint::parameters::*;
use crate::shortint::Parameters;
use crate::shortint::PBSParameters;
use crate::integer::keycache::KEY_CACHE;
@@ -19,7 +19,7 @@ create_parametrized_test!(radix_encrypt_decrypt_compressed_128_bits {
/// Test that the public key can encrypt a 128 bit number
/// in radix decomposition, and that the client key can decrypt it
fn big_radix_encrypt_decrypt_128_bits(param: Parameters) {
fn big_radix_encrypt_decrypt_128_bits(param: PBSParameters) {
let (cks, _) = KEY_CACHE.get_from_params(param);
let public_key = PublicKeyBig::new(&cks);
@@ -40,7 +40,7 @@ fn big_radix_encrypt_decrypt_128_bits(param: Parameters) {
assert_eq!(clear, dec);
}
fn radix_encrypt_decrypt_compressed_128_bits(param: Parameters) {
fn radix_encrypt_decrypt_compressed_128_bits(param: PBSParameters) {
let (cks, _) = KEY_CACHE.get_from_params(param);
let public_key = CompressedPublicKeyBig::new(&cks);

View File

@@ -1156,7 +1156,7 @@ impl<'a> Comparator<'a> {
mod tests {
use super::Comparator;
use crate::integer::{gen_keys, RadixCiphertextBig, U256};
use crate::shortint::Parameters;
use crate::shortint::PBSParameters;
use rand;
use rand::prelude::*;
@@ -1165,7 +1165,7 @@ mod tests {
/// This calls the `unchecked_comparator_method` with fresh ciphertexts
/// and compares that it gives the same results as the `clear_fn`.
fn test_unchecked_function<UncheckedFn, ClearF>(
param: Parameters,
param: PBSParameters,
num_test: usize,
unchecked_comparator_method: UncheckedFn,
clear_fn: ClearF,
@@ -1181,7 +1181,7 @@ mod tests {
let num_block = (256f64 / (param.message_modulus.0 as f64).log(2.0)).ceil() as usize;
let (cks, sks) = gen_keys(&param);
let (cks, sks) = gen_keys(param);
let comparator = Comparator::new(&sks);
for _ in 0..num_test {
@@ -1207,7 +1207,7 @@ mod tests {
/// that is ciphertexts that have non-zero carries, and compares that the result is
/// the same as the one of`clear_fn`.
fn test_smart_function<SmartFn, ClearF>(
param: Parameters,
param: PBSParameters,
num_test: usize,
smart_comparator_method: SmartFn,
clear_fn: ClearF,
@@ -1219,7 +1219,7 @@ mod tests {
) -> RadixCiphertextBig,
ClearF: Fn(U256, U256) -> U256,
{
let (cks, sks) = gen_keys(&param);
let (cks, sks) = gen_keys(param);
let num_block = (256f64 / (param.message_modulus.0 as f64).log(2.0)).ceil() as usize;
let comparator = Comparator::new(&sks);
@@ -1285,7 +1285,7 @@ mod tests {
/// that is ciphertexts that have non-zero carries, and compares that the result is
/// the same as the one of`clear_fn`.
fn test_default_function<SmartFn, ClearF>(
param: Parameters,
param: PBSParameters,
num_test: usize,
default_comparator_method: SmartFn,
clear_fn: ClearF,
@@ -1297,7 +1297,7 @@ mod tests {
) -> RadixCiphertextBig,
ClearF: Fn(U256, U256) -> U256,
{
let (cks, sks) = gen_keys(&param);
let (cks, sks) = gen_keys(param);
let num_block = (256f64 / (param.message_modulus.0 as f64).log(2.0)).ceil() as usize;
let comparator = Comparator::new(&sks);
@@ -1356,7 +1356,7 @@ mod tests {
}
}
fn test_unchecked_min_256_bits(params: crate::shortint::Parameters, num_tests: usize) {
fn test_unchecked_min_256_bits(params: crate::shortint::PBSParameters, num_tests: usize) {
test_unchecked_function(
params,
num_tests,
@@ -1365,7 +1365,7 @@ mod tests {
)
}
fn test_unchecked_max_256_bits(params: crate::shortint::Parameters, num_tests: usize) {
fn test_unchecked_max_256_bits(params: crate::shortint::PBSParameters, num_tests: usize) {
test_unchecked_function(
params,
num_tests,
@@ -1375,7 +1375,7 @@ mod tests {
}
fn test_unchecked_min_parallelized_256_bits(
params: crate::shortint::Parameters,
params: crate::shortint::PBSParameters,
num_tests: usize,
) {
test_unchecked_function(
@@ -1387,7 +1387,7 @@ mod tests {
}
fn test_unchecked_max_parallelized_256_bits(
params: crate::shortint::Parameters,
params: crate::shortint::PBSParameters,
num_tests: usize,
) {
test_unchecked_function(
@@ -1398,7 +1398,7 @@ mod tests {
)
}
fn test_min_parallelized_256_bits(params: crate::shortint::Parameters, num_tests: usize) {
fn test_min_parallelized_256_bits(params: crate::shortint::PBSParameters, num_tests: usize) {
test_default_function(
params,
num_tests,
@@ -1407,7 +1407,7 @@ mod tests {
)
}
fn test_max_parallelized_256_bits(params: crate::shortint::Parameters, num_tests: usize) {
fn test_max_parallelized_256_bits(params: crate::shortint::PBSParameters, num_tests: usize) {
test_default_function(
params,
num_tests,
@@ -1443,7 +1443,7 @@ mod tests {
macro_rules! define_comparison_test_functions {
($comparison_name:ident) => {
paste::paste!{
fn [<unchecked_ $comparison_name _256_bits>](params: crate::shortint::Parameters) {
fn [<unchecked_ $comparison_name _256_bits>](params: crate::shortint::PBSParameters) {
let num_tests = 1;
test_unchecked_function(
params,
@@ -1453,7 +1453,7 @@ mod tests {
)
}
fn [<unchecked_ $comparison_name _parallelized_256_bits>](params: crate::shortint::Parameters) {
fn [<unchecked_ $comparison_name _parallelized_256_bits>](params: crate::shortint::PBSParameters) {
let num_tests = 1;
test_unchecked_function(
params,
@@ -1463,7 +1463,7 @@ mod tests {
)
}
fn [<smart_ $comparison_name _256_bits>](params: crate::shortint::Parameters) {
fn [<smart_ $comparison_name _256_bits>](params: crate::shortint::PBSParameters) {
let num_tests = 1;
test_smart_function(
params,
@@ -1473,7 +1473,7 @@ mod tests {
)
}
fn [<smart_ $comparison_name _parallelized_256_bits>](params: crate::shortint::Parameters) {
fn [<smart_ $comparison_name _parallelized_256_bits>](params: crate::shortint::PBSParameters) {
let num_tests = 1;
test_smart_function(
params,
@@ -1483,7 +1483,7 @@ mod tests {
)
}
fn [<$comparison_name _parallelized_256_bits>](params: crate::shortint::Parameters) {
fn [<$comparison_name _parallelized_256_bits>](params: crate::shortint::PBSParameters) {
let num_tests = 1;
test_default_function(
params,

View File

@@ -10,7 +10,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;

View File

@@ -22,7 +22,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -61,7 +61,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let basis = vec![2, 3, 5];
/// let (cks, sks) = gen_keys_crt(&PARAM_MESSAGE_2_CARRY_2, basis);
/// let (cks, sks) = gen_keys_crt(PARAM_MESSAGE_2_CARRY_2, basis);
///
/// let clear_1 = 28;
///

View File

@@ -11,7 +11,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_3_CARRY_3;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_3_CARRY_3);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_3_CARRY_3);
///
/// let clear_1 = 29;
/// let clear_2 = 23;
@@ -54,7 +54,7 @@ impl ServerKey {
/// use tfhe::integer::gen_keys;
/// use tfhe::shortint::parameters::PARAM_MESSAGE_3_CARRY_3;
///
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_3_CARRY_3);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_3_CARRY_3);
///
/// let clear_1 = 29;
/// let clear_2 = 29;

View File

@@ -14,7 +14,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear = 14_u64;
/// let basis = vec![2, 3, 5];
@@ -56,7 +56,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear = 14_u64;
/// let basis = vec![2, 3, 5];

View File

@@ -17,7 +17,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -61,7 +61,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -98,7 +98,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -154,7 +154,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -189,7 +189,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;

View File

@@ -17,7 +17,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 2;
@@ -54,7 +54,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 2;
@@ -91,7 +91,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 2;
@@ -158,7 +158,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -194,7 +194,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;

View File

@@ -17,7 +17,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 7;
@@ -55,7 +55,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 7;
@@ -93,7 +93,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 8;
@@ -134,7 +134,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 7;
@@ -172,7 +172,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 7;

View File

@@ -14,7 +14,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 5;
@@ -52,7 +52,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 5;
@@ -85,7 +85,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 5;
@@ -126,7 +126,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 5;

View File

@@ -1,6 +1,6 @@
use crate::integer::keycache::KEY_CACHE;
use crate::shortint::parameters::*;
use crate::shortint::Parameters;
use crate::shortint::PBSParameters;
use rand::Rng;
create_parametrized_test!(integer_unchecked_crt_mul);
@@ -31,7 +31,7 @@ fn make_basis(message_modulus: usize) -> Vec<u64> {
}
}
fn integer_unchecked_crt_mul(param: Parameters) {
fn integer_unchecked_crt_mul(param: PBSParameters) {
// generate the server-client key set
let (cks, sks) = KEY_CACHE.get_from_params(param);
@@ -61,7 +61,7 @@ fn integer_unchecked_crt_mul(param: Parameters) {
}
}
fn integer_smart_crt_add(param: Parameters) {
fn integer_smart_crt_add(param: PBSParameters) {
// Define CRT basis, and global modulus
let basis = make_basis(param.message_modulus.0);
let modulus = basis.iter().product::<u64>();
@@ -91,7 +91,7 @@ fn integer_smart_crt_add(param: Parameters) {
}
}
fn integer_smart_crt_mul(param: Parameters) {
fn integer_smart_crt_mul(param: PBSParameters) {
// generate the server-client key set
let (cks, sks) = KEY_CACHE.get_from_params(param);
@@ -123,7 +123,7 @@ fn integer_smart_crt_mul(param: Parameters) {
}
}
fn integer_smart_crt_neg(param: Parameters) {
fn integer_smart_crt_neg(param: PBSParameters) {
// Define CRT basis, and global modulus
let basis = make_basis(param.message_modulus.0);
let modulus = basis.iter().product::<u64>();
@@ -153,7 +153,7 @@ fn integer_smart_crt_neg(param: Parameters) {
}
}
fn integer_smart_crt_scalar_add(param: Parameters) {
fn integer_smart_crt_scalar_add(param: PBSParameters) {
// Define CRT basis, and global modulus
let basis = make_basis(param.message_modulus.0);
let modulus = basis.iter().product::<u64>();
@@ -181,7 +181,7 @@ fn integer_smart_crt_scalar_add(param: Parameters) {
}
}
fn integer_smart_crt_scalar_mul(param: Parameters) {
fn integer_smart_crt_scalar_mul(param: PBSParameters) {
// Define CRT basis, and global modulus
let basis = make_basis(param.message_modulus.0);
let modulus = basis.iter().product::<u64>();
@@ -209,7 +209,7 @@ fn integer_smart_crt_scalar_mul(param: Parameters) {
}
}
fn integer_smart_crt_scalar_sub(param: Parameters) {
fn integer_smart_crt_scalar_sub(param: PBSParameters) {
// Define CRT basis, and global modulus
let basis = make_basis(param.message_modulus.0);
let modulus = basis.iter().product::<u64>();
@@ -240,7 +240,7 @@ fn integer_smart_crt_scalar_sub(param: Parameters) {
}
}
fn integer_smart_crt_sub(param: Parameters) {
fn integer_smart_crt_sub(param: PBSParameters) {
// Define CRT basis, and global modulus
let basis = make_basis(param.message_modulus.0);
let modulus = basis.iter().product::<u64>();

View File

@@ -14,7 +14,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let basis = vec![2, 3, 5];
/// let (cks, sks) = gen_keys_crt(&PARAM_MESSAGE_2_CARRY_2, basis);
/// let (cks, sks) = gen_keys_crt(PARAM_MESSAGE_2_CARRY_2, basis);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -69,7 +69,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let basis = vec![2, 3, 5];
/// let (cks, sks) = gen_keys_crt(&PARAM_MESSAGE_2_CARRY_2, basis);
/// let (cks, sks) = gen_keys_crt(PARAM_MESSAGE_2_CARRY_2, basis);
///
/// let clear_1 = 29;
/// let clear_2 = 29;

View File

@@ -20,7 +20,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -60,7 +60,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let basis = vec![2, 3, 5];
/// let (cks, sks) = gen_keys_crt(&PARAM_MESSAGE_2_CARRY_2, basis);
/// let (cks, sks) = gen_keys_crt(PARAM_MESSAGE_2_CARRY_2, basis);
///
/// let clear_1 = 28;
///

View File

@@ -15,7 +15,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let basis = vec![2, 3, 5];
/// let (cks, sks) = gen_keys_crt(&PARAM_MESSAGE_3_CARRY_3, basis);
/// let (cks, sks) = gen_keys_crt(PARAM_MESSAGE_3_CARRY_3, basis);
///
/// let clear_1 = 29;
/// let clear_2 = 23;
@@ -67,7 +67,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_3_CARRY_3;
///
/// let basis = vec![2, 3, 5];
/// let (cks, sks) = gen_keys_crt(&PARAM_MESSAGE_3_CARRY_3, basis);
/// let (cks, sks) = gen_keys_crt(PARAM_MESSAGE_3_CARRY_3, basis);
///
/// let clear_1 = 29;
/// let clear_2 = 29;

View File

@@ -15,7 +15,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear = 14_u64;
/// let basis = vec![2, 3, 5];
@@ -55,7 +55,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear = 14_u64;
/// let basis = vec![2, 3, 5];

View File

@@ -18,7 +18,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -76,7 +76,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -132,7 +132,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -171,7 +171,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;

View File

@@ -18,7 +18,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 2;
@@ -69,7 +69,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 2;
@@ -136,7 +136,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;
@@ -176,7 +176,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 14;

View File

@@ -18,7 +18,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 7;
@@ -71,7 +71,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 8;
@@ -112,7 +112,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 7;
@@ -150,7 +150,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 7;

View File

@@ -14,7 +14,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 5;
@@ -52,7 +52,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 5;
@@ -85,7 +85,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 5;
@@ -125,7 +125,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// let clear_1 = 14;
/// let clear_2 = 5;

View File

@@ -51,8 +51,8 @@ impl ServerKey {
{
// It should remain just enough space to add a carry
let client_key = cks.as_ref();
let max = (client_key.key.parameters.message_modulus.0 - 1)
* client_key.key.parameters.carry_modulus.0
let max = (client_key.key.parameters.message_modulus().0 - 1)
* client_key.key.parameters.carry_modulus().0
- 1;
let sks = crate::shortint::server_key::ServerKey::new_with_max_degree(
@@ -85,7 +85,7 @@ impl ServerKey {
) -> ServerKey {
// It should remain just enough space add a carry
let max =
(cks.key.parameters.message_modulus.0 - 1) * cks.key.parameters.carry_modulus.0 - 1;
(cks.key.parameters.message_modulus().0 - 1) * cks.key.parameters.carry_modulus().0 - 1;
key.max_degree = MaxDegree(max);
ServerKey { key }

View File

@@ -20,7 +20,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 10;
/// let msg2 = 127;
@@ -56,7 +56,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 28;
/// let msg2 = 127;
@@ -91,7 +91,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 46u64;
/// let msg2 = 87u64;
@@ -130,7 +130,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 41;
/// let msg2 = 101;
@@ -177,7 +177,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 41;
/// let msg2 = 101;
@@ -216,7 +216,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 14;
/// let msg2 = 97;

View File

@@ -19,7 +19,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 201u64;
/// let msg2 = 1u64;
@@ -65,7 +65,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 46u64;
/// let msg2 = 87u64;
@@ -107,7 +107,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 41;
/// let msg2 = 101;
@@ -151,7 +151,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 41;
/// let msg2 = 101;
@@ -190,7 +190,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14;
/// let msg2 = 97;
@@ -243,7 +243,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 200;
/// let msg2 = 1;
@@ -292,7 +292,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 41;
/// let msg2 = 101;
@@ -337,7 +337,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 41;
/// let msg2 = 101;
@@ -377,7 +377,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14;
/// let msg2 = 97;
@@ -430,7 +430,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 49;
/// let msg2 = 64;
@@ -479,7 +479,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 41;
/// let msg2 = 101;
@@ -524,7 +524,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 41;
/// let msg2 = 101;
@@ -564,7 +564,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14;
/// let msg2 = 97;

View File

@@ -20,7 +20,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14u64;
/// let msg2 = 97u64;
@@ -57,7 +57,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14u64;
/// let msg2 = 97u64;
@@ -94,7 +94,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 97u64;
/// let msg2 = 97u64;
@@ -131,7 +131,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 237u64;
/// let msg2 = 23u64;
@@ -168,7 +168,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 237u64;
/// let msg2 = 23u64;
@@ -204,7 +204,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 237u64;
/// let msg2 = 23u64;
@@ -240,7 +240,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 237u64;
/// let msg2 = 23u64;
@@ -275,7 +275,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14u64;
/// let msg2 = 97u64;
@@ -310,7 +310,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14u64;
/// let msg2 = 97u64;
@@ -345,7 +345,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14u64;
/// let msg2 = 97u64;
@@ -380,7 +380,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14u64;
/// let msg2 = 97u64;
@@ -415,7 +415,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14u64;
/// let msg2 = 97u64;
@@ -450,7 +450,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14u64;
/// let msg2 = 97u64;
@@ -485,7 +485,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg1 = 14u64;
/// let msg2 = 97u64;

View File

@@ -30,7 +30,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let ctxt: RadixCiphertextBig = sks.create_trivial_zero_radix(num_blocks);
///
@@ -63,7 +63,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let ctxt: RadixCiphertextBig = sks.create_trivial_radix(212u64, num_blocks);
///
@@ -100,7 +100,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 7u64;
///
@@ -141,7 +141,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 7u64;
///
@@ -184,7 +184,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 7u64;
///
@@ -222,7 +222,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 7u64;
///
@@ -261,7 +261,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 119u64;
///
@@ -298,7 +298,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 119u64;
///
@@ -337,7 +337,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 119u64;
///
@@ -374,7 +374,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 119u64;
///
@@ -412,7 +412,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 7u64;
///
@@ -454,7 +454,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 10;
///

View File

@@ -19,7 +19,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let clear_1 = 170;
/// let clear_2 = 3;
@@ -60,7 +60,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let clear_1 = 55;
/// let clear_2 = 3;
@@ -114,7 +114,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let clear_1 = 170;
/// let clear_2 = 3;
@@ -181,7 +181,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let clear_1 = 255;
/// let clear_2 = 143;
@@ -239,7 +239,7 @@ impl ServerKey {
/// let size = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let clear_1 = 170;
/// let clear_2 = 6;

View File

@@ -22,7 +22,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let modulus = 1 << 8;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 159u64;
///
@@ -85,7 +85,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 2u64;
///
@@ -124,7 +124,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 1u64;
///
@@ -170,7 +170,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let modulus = 1 << 8;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 1;
///
@@ -208,7 +208,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 1u64;
///

View File

@@ -20,7 +20,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 4;
/// let scalar = 40;
@@ -82,7 +82,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 2u64;
/// let scalar = 40;
@@ -135,7 +135,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 4;
/// let scalar = 40;
@@ -192,7 +192,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 4;
/// let scalar = 40;
@@ -232,7 +232,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 129;
/// let scalar = 40;

View File

@@ -21,7 +21,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 30;
/// let scalar = 3;
@@ -65,7 +65,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 25u64;
/// let scalar1 = 3;
@@ -108,7 +108,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 33;
/// let scalar = 3;
@@ -157,7 +157,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 33;
/// let scalar = 3;
@@ -201,7 +201,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let modulus = 1 << 8;
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 13;
/// let scalar = 5;
@@ -243,7 +243,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let modulus = 1 << 8;
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 9;
/// let scalar = 3;
@@ -276,7 +276,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 1u64;
/// let power = 2;
@@ -320,7 +320,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let modulus = 1 << 8;
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 230;
/// let scalar = 376;

View File

@@ -20,7 +20,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 40;
/// let scalar = 3;
@@ -85,7 +85,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 40u64;
/// let scalar = 2;
@@ -144,7 +144,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 40;
/// let scalar = 4;
@@ -186,7 +186,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 232;
/// let scalar = 83;
@@ -225,7 +225,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 165;
/// let scalar = 112;

View File

@@ -16,7 +16,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 16;
/// let shift = 2;
@@ -71,7 +71,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 128u64;
/// let shift = 2;
@@ -107,7 +107,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 18u64;
/// let shift = 4;
@@ -207,7 +207,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 21u64;
/// let shift = 2;
@@ -252,7 +252,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 13u64;
/// let shift = 2;

View File

@@ -19,7 +19,7 @@ impl ServerKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
///
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg_1 = 12;
/// let msg_2 = 10;
@@ -60,7 +60,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg_1 = 128;
/// let msg_2 = 99;
@@ -95,7 +95,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg_1 = 182u64;
/// let msg_2 = 120u64;
@@ -137,7 +137,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 1u64;
///
@@ -184,7 +184,7 @@ impl ServerKey {
/// let num_blocks = 4;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 41u8;
/// let msg2 = 101u8;
@@ -223,7 +223,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg_1 = 120u8;
/// let msg_2 = 181u8;
@@ -271,7 +271,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg_1 = 120u8;
/// let msg_2 = 181u8;

View File

@@ -1,6 +1,6 @@
use crate::integer::keycache::KEY_CACHE;
use crate::shortint::parameters::*;
use crate::shortint::Parameters;
use crate::shortint::PBSParameters;
use rand::Rng;
/// Number of loop iteration within randomized tests
@@ -56,7 +56,7 @@ create_parametrized_test!(integer_unchecked_scalar_add);
create_parametrized_test!(integer_unchecked_scalar_decomposition_overflow);
fn integer_encrypt_decrypt(param: Parameters) {
fn integer_encrypt_decrypt(param: PBSParameters) {
let (cks, _) = KEY_CACHE.get_from_params(param);
// RNG
@@ -79,7 +79,7 @@ fn integer_encrypt_decrypt(param: Parameters) {
}
}
fn integer_encrypt_decrypt_128_bits(param: Parameters) {
fn integer_encrypt_decrypt_128_bits(param: PBSParameters) {
let (cks, _) = KEY_CACHE.get_from_params(param);
// RNG
@@ -100,7 +100,7 @@ fn integer_encrypt_decrypt_128_bits(param: Parameters) {
}
}
fn integer_encrypt_decrypt_128_bits_specific_values(param: Parameters) {
fn integer_encrypt_decrypt_128_bits_specific_values(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let num_block = (128f64 / (param.message_modulus.0 as f64).log(2.0)).ceil() as usize;
@@ -156,7 +156,7 @@ fn integer_encrypt_decrypt_128_bits_specific_values(param: Parameters) {
}
}
fn integer_encrypt_decrypt_256_bits_specific_values(param: Parameters) {
fn integer_encrypt_decrypt_256_bits_specific_values(param: PBSParameters) {
let (cks, _) = KEY_CACHE.get_from_params(param);
let num_block = (256f64 / (param.message_modulus.0 as f64).log(2.0)).ceil() as usize;
@@ -184,7 +184,7 @@ fn integer_encrypt_decrypt_256_bits_specific_values(param: Parameters) {
}
}
fn integer_encrypt_decrypt_256_bits(param: Parameters) {
fn integer_encrypt_decrypt_256_bits(param: PBSParameters) {
let (cks, _) = KEY_CACHE.get_from_params(param);
// RNG
@@ -209,7 +209,7 @@ fn integer_encrypt_decrypt_256_bits(param: Parameters) {
}
}
fn integer_smart_add_128_bits(param: Parameters) {
fn integer_smart_add_128_bits(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let mut rng = rand::thread_rng();
@@ -248,7 +248,7 @@ fn integer_smart_add_128_bits(param: Parameters) {
}
}
fn integer_unchecked_add(param: Parameters) {
fn integer_unchecked_add(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -279,7 +279,7 @@ fn integer_unchecked_add(param: Parameters) {
}
}
fn integer_smart_add(param: Parameters) {
fn integer_smart_add(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -322,7 +322,7 @@ fn integer_smart_add(param: Parameters) {
}
}
fn integer_unchecked_bitand(param: Parameters) {
fn integer_unchecked_bitand(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -353,7 +353,7 @@ fn integer_unchecked_bitand(param: Parameters) {
}
}
fn integer_unchecked_bitor(param: Parameters) {
fn integer_unchecked_bitor(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -384,7 +384,7 @@ fn integer_unchecked_bitor(param: Parameters) {
}
}
fn integer_unchecked_bitxor(param: Parameters) {
fn integer_unchecked_bitxor(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -415,7 +415,7 @@ fn integer_unchecked_bitxor(param: Parameters) {
}
}
fn integer_smart_bitand(param: Parameters) {
fn integer_smart_bitand(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -460,7 +460,7 @@ fn integer_smart_bitand(param: Parameters) {
}
}
fn integer_smart_bitor(param: Parameters) {
fn integer_smart_bitor(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -505,7 +505,7 @@ fn integer_smart_bitor(param: Parameters) {
}
}
fn integer_smart_bitxor(param: Parameters) {
fn integer_smart_bitxor(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -550,7 +550,7 @@ fn integer_smart_bitxor(param: Parameters) {
}
}
fn integer_unchecked_small_scalar_mul(param: Parameters) {
fn integer_unchecked_small_scalar_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -580,7 +580,7 @@ fn integer_unchecked_small_scalar_mul(param: Parameters) {
}
}
fn integer_smart_small_scalar_mul(param: Parameters) {
fn integer_smart_small_scalar_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -617,7 +617,7 @@ fn integer_smart_small_scalar_mul(param: Parameters) {
}
}
fn integer_blockshift(param: Parameters) {
fn integer_blockshift(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -648,7 +648,7 @@ fn integer_blockshift(param: Parameters) {
}
}
fn integer_blockshift_right(param: Parameters) {
fn integer_blockshift_right(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -679,7 +679,7 @@ fn integer_blockshift_right(param: Parameters) {
}
}
fn integer_smart_scalar_mul(param: Parameters) {
fn integer_smart_scalar_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -707,7 +707,7 @@ fn integer_smart_scalar_mul(param: Parameters) {
}
}
fn integer_unchecked_scalar_left_shift(param: Parameters) {
fn integer_unchecked_scalar_left_shift(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let mut rng = rand::thread_rng();
@@ -741,7 +741,7 @@ fn integer_unchecked_scalar_left_shift(param: Parameters) {
}
}
fn integer_unchecked_scalar_right_shift(param: Parameters) {
fn integer_unchecked_scalar_right_shift(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -776,7 +776,7 @@ fn integer_unchecked_scalar_right_shift(param: Parameters) {
}
}
fn integer_unchecked_negation(param: Parameters) {
fn integer_unchecked_negation(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -808,7 +808,7 @@ fn integer_unchecked_negation(param: Parameters) {
}
}
fn integer_smart_neg(param: Parameters) {
fn integer_smart_neg(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -837,7 +837,7 @@ fn integer_smart_neg(param: Parameters) {
}
}
fn integer_unchecked_sub(param: Parameters) {
fn integer_unchecked_sub(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
// RNG
@@ -867,7 +867,7 @@ fn integer_unchecked_sub(param: Parameters) {
}
}
fn integer_smart_sub(param: Parameters) {
fn integer_smart_sub(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -901,7 +901,7 @@ fn integer_smart_sub(param: Parameters) {
}
}
fn integer_unchecked_block_mul(param: Parameters) {
fn integer_unchecked_block_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -934,7 +934,7 @@ fn integer_unchecked_block_mul(param: Parameters) {
}
}
fn integer_smart_block_mul(param: Parameters) {
fn integer_smart_block_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -971,7 +971,7 @@ fn integer_smart_block_mul(param: Parameters) {
}
}
fn integer_unchecked_mul(param: Parameters) {
fn integer_unchecked_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -1000,7 +1000,7 @@ fn integer_unchecked_mul(param: Parameters) {
}
}
fn integer_smart_mul(param: Parameters) {
fn integer_smart_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -1037,7 +1037,7 @@ fn integer_smart_mul(param: Parameters) {
}
}
fn integer_unchecked_scalar_add(param: Parameters) {
fn integer_unchecked_scalar_add(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -1065,7 +1065,7 @@ fn integer_unchecked_scalar_add(param: Parameters) {
}
}
fn integer_smart_scalar_add(param: Parameters) {
fn integer_smart_scalar_add(param: PBSParameters) {
// generate the server-client key set
let (cks, sks) = KEY_CACHE.get_from_params(param);
@@ -1106,7 +1106,7 @@ fn integer_smart_scalar_add(param: Parameters) {
}
}
fn integer_unchecked_scalar_sub(param: Parameters) {
fn integer_unchecked_scalar_sub(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
//RNG
@@ -1134,7 +1134,7 @@ fn integer_unchecked_scalar_sub(param: Parameters) {
}
}
fn integer_smart_scalar_sub(param: Parameters) {
fn integer_smart_scalar_sub(param: PBSParameters) {
// generate the server-client key set
let (cks, sks) = KEY_CACHE.get_from_params(param);
@@ -1175,7 +1175,7 @@ fn integer_smart_scalar_sub(param: Parameters) {
}
}
fn integer_unchecked_scalar_decomposition_overflow(param: Parameters) {
fn integer_unchecked_scalar_decomposition_overflow(param: PBSParameters) {
// This is a regression test. The purpose here is to check if the number of decomposition
// blocks doesn't exceed 64 bits. This is why we test only 128 bits size.
// If overflow occurs the test case will panic.

View File

@@ -61,7 +61,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 14;
/// let msg2 = 97;
@@ -127,7 +127,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 14;
/// let msg2 = 97;

View File

@@ -42,7 +42,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 14;
/// let msg2 = 97;
@@ -107,7 +107,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 14;
/// let msg2 = 97;
@@ -203,7 +203,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 14;
/// let msg2 = 97;
@@ -268,7 +268,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 14;
/// let msg2 = 97;
@@ -364,7 +364,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 14;
/// let msg2 = 97;
@@ -429,7 +429,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg1 = 14;
/// let msg2 = 97;

View File

@@ -29,7 +29,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 7u64;
///
@@ -83,7 +83,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let msg = 10u64;
///

View File

@@ -24,7 +24,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let clear_1 = 170;
/// let clear_2 = 3;
@@ -69,7 +69,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let clear_1 = 55;
/// let clear_2 = 3;
@@ -118,7 +118,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let clear_1 = 170;
/// let clear_2 = 3;
@@ -179,7 +179,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let clear_1 = 170;
/// let clear_2 = 3;
@@ -458,7 +458,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let clear_1 = 255;
/// let clear_2 = 143;
@@ -527,7 +527,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let clear_1 = 170;
/// let clear_2 = 6;
@@ -616,7 +616,7 @@ impl ServerKey {
///
/// // Generate the client key and the server key:
/// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, num_blocks);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, num_blocks);
///
/// let clear_1 = 170;
/// let clear_2 = 6;

View File

@@ -15,7 +15,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 1u64;
///
@@ -60,7 +60,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 1u64;
///

View File

@@ -25,7 +25,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -66,7 +66,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -115,7 +115,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -153,7 +153,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -202,7 +202,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -249,7 +249,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -354,7 +354,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -395,7 +395,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -444,7 +444,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -482,7 +482,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -531,7 +531,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;
@@ -578,7 +578,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128u8;
/// let n = 2;

View File

@@ -15,7 +15,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 4;
/// let scalar = 40;
@@ -52,7 +52,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 129;
/// let scalar = 40;
@@ -98,7 +98,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 4;
/// let scalar = 40;
@@ -143,7 +143,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 129;
/// let scalar = 40;

View File

@@ -21,7 +21,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 30;
/// let scalar = 3;
@@ -67,7 +67,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 33;
/// let scalar = 3;
@@ -112,7 +112,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 33;
/// let scalar = 3;
@@ -156,7 +156,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let modulus = 1 << 8;
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 13;
/// let scalar = 3;
@@ -198,7 +198,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let modulus = 1 << 8;
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 9;
/// let scalar = 3;
@@ -249,7 +249,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let modulus = 1 << 8;
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 13;
/// let scalar = 3;
@@ -299,7 +299,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let modulus = 1 << 8;
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 9;
/// let scalar = 3;
@@ -443,7 +443,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let modulus = 1 << 8;
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 230;
/// let scalar = 376;
@@ -501,7 +501,7 @@ impl ServerKey {
/// // We have 4 * 2 = 8 bits of message
/// let modulus = 1 << 8;
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 230;
/// let scalar = 376;

View File

@@ -13,7 +13,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 165;
/// let scalar = 112;
@@ -68,7 +68,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 165;
/// let scalar = 112;

View File

@@ -27,7 +27,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128;
/// let shift = 2;
@@ -70,7 +70,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 18;
/// let shift = 4;
@@ -205,7 +205,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 128;
/// let shift = 2;
@@ -250,7 +250,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 18;
/// let shift = 4;
@@ -297,7 +297,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 21;
/// let shift = 2;
@@ -342,7 +342,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 13;
/// let shift = 2;
@@ -475,7 +475,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 21;
/// let shift = 2;
@@ -520,7 +520,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg = 13;
/// let shift = 2;

View File

@@ -15,7 +15,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg_1 = 120u8;
/// let msg_2 = 181u8;
@@ -65,7 +65,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg_1 = 120u8;
/// let msg_2 = 181u8;
@@ -121,7 +121,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg_1 = 120u8;
/// let msg_2 = 181u8;
@@ -166,7 +166,7 @@ impl ServerKey {
///
/// // We have 4 * 2 = 8 bits of message
/// let size = 4;
/// let (cks, sks) = gen_keys_radix(&PARAM_MESSAGE_2_CARRY_2, size);
/// let (cks, sks) = gen_keys_radix(PARAM_MESSAGE_2_CARRY_2, size);
///
/// let msg_1 = 120u8;
/// let msg_2 = 181u8;

View File

@@ -1,7 +1,7 @@
use crate::integer::keycache::KEY_CACHE;
use crate::integer::{RadixClientKey, ServerKey};
use crate::shortint::parameters::*;
use crate::shortint::Parameters;
use crate::shortint::PBSParameters;
use paste::paste;
use rand::Rng;
@@ -101,7 +101,7 @@ create_parametrized_test!(integer_default_scalar_sub);
create_parametrized_test!(integer_smart_scalar_add);
create_parametrized_test!(integer_default_scalar_add);
fn integer_smart_add(param: Parameters) {
fn integer_smart_add(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -144,7 +144,7 @@ fn integer_smart_add(param: Parameters) {
}
}
fn integer_smart_add_sequence_multi_thread(param: Parameters) {
fn integer_smart_add_sequence_multi_thread(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -178,7 +178,7 @@ fn integer_smart_add_sequence_multi_thread(param: Parameters) {
}
}
fn integer_smart_add_sequence_single_thread(param: Parameters) {
fn integer_smart_add_sequence_single_thread(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -218,7 +218,7 @@ fn integer_smart_add_sequence_single_thread(param: Parameters) {
}
}
fn integer_default_add(param: Parameters) {
fn integer_default_add(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -266,7 +266,7 @@ fn integer_default_add(param: Parameters) {
}
// Smaller test for this one
fn integer_default_add_work_efficient(param: Parameters) {
fn integer_default_add_work_efficient(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -296,7 +296,7 @@ fn integer_default_add_work_efficient(param: Parameters) {
}
}
fn integer_default_add_sequence_multi_thread(param: Parameters) {
fn integer_default_add_sequence_multi_thread(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -335,7 +335,7 @@ fn integer_default_add_sequence_multi_thread(param: Parameters) {
}
}
fn integer_default_add_sequence_single_thread(param: Parameters) {
fn integer_default_add_sequence_single_thread(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -376,7 +376,7 @@ fn integer_default_add_sequence_single_thread(param: Parameters) {
}
}
fn integer_smart_bitand(param: Parameters) {
fn integer_smart_bitand(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -421,7 +421,7 @@ fn integer_smart_bitand(param: Parameters) {
}
}
fn integer_smart_bitor(param: Parameters) {
fn integer_smart_bitor(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -466,7 +466,7 @@ fn integer_smart_bitor(param: Parameters) {
}
}
fn integer_smart_bitxor(param: Parameters) {
fn integer_smart_bitxor(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -511,7 +511,7 @@ fn integer_smart_bitxor(param: Parameters) {
}
}
fn integer_default_bitand(param: Parameters) {
fn integer_default_bitand(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -560,7 +560,7 @@ fn integer_default_bitand(param: Parameters) {
}
}
fn integer_default_bitor(param: Parameters) {
fn integer_default_bitor(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -609,7 +609,7 @@ fn integer_default_bitor(param: Parameters) {
}
}
fn integer_default_bitxor(param: Parameters) {
fn integer_default_bitxor(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -658,7 +658,7 @@ fn integer_default_bitxor(param: Parameters) {
}
}
fn integer_unchecked_small_scalar_mul(param: Parameters) {
fn integer_unchecked_small_scalar_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -688,7 +688,7 @@ fn integer_unchecked_small_scalar_mul(param: Parameters) {
}
}
fn integer_smart_small_scalar_mul(param: Parameters) {
fn integer_smart_small_scalar_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -726,7 +726,7 @@ fn integer_smart_small_scalar_mul(param: Parameters) {
}
}
fn integer_default_small_scalar_mul(param: Parameters) {
fn integer_default_small_scalar_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -768,7 +768,7 @@ fn integer_default_small_scalar_mul(param: Parameters) {
}
}
fn integer_smart_scalar_mul(param: Parameters) {
fn integer_smart_scalar_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -797,7 +797,7 @@ fn integer_smart_scalar_mul(param: Parameters) {
}
}
fn integer_default_scalar_mul(param: Parameters) {
fn integer_default_scalar_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -829,7 +829,7 @@ fn integer_default_scalar_mul(param: Parameters) {
}
}
fn integer_unchecked_mul_corner_cases(param: Parameters) {
fn integer_unchecked_mul_corner_cases(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
// This example will not pass if the terms reduction is wrong
@@ -892,7 +892,7 @@ fn integer_unchecked_mul_corner_cases(param: Parameters) {
}
}
fn integer_smart_scalar_mul_u128_fix_non_reg_test(param: Parameters) {
fn integer_smart_scalar_mul_u128_fix_non_reg_test(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let nb_ct = (128f64 / (param.message_modulus.0 as f64).log2().ceil()).ceil() as usize;
let cks = RadixClientKey::from((cks, nb_ct));
@@ -917,7 +917,7 @@ fn integer_smart_scalar_mul_u128_fix_non_reg_test(param: Parameters) {
assert_eq!(clear.wrapping_mul(scalar as u128), dec_res);
}
fn integer_default_scalar_mul_u128_fix_non_reg_test(param: Parameters) {
fn integer_default_scalar_mul_u128_fix_non_reg_test(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let nb_ct = (128f64 / (param.message_modulus.0 as f64).log2().ceil()).ceil() as usize;
let cks = RadixClientKey::from((cks, nb_ct));
@@ -942,7 +942,7 @@ fn integer_default_scalar_mul_u128_fix_non_reg_test(param: Parameters) {
assert_eq!(clear.wrapping_mul(scalar as u128), dec_res);
}
fn integer_unchecked_scalar_left_shift(param: Parameters) {
fn integer_unchecked_scalar_left_shift(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -986,7 +986,7 @@ fn integer_unchecked_scalar_left_shift(param: Parameters) {
}
}
fn integer_default_scalar_left_shift(param: Parameters) {
fn integer_default_scalar_left_shift(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1035,7 +1035,7 @@ fn integer_default_scalar_left_shift(param: Parameters) {
}
}
fn integer_unchecked_scalar_right_shift(param: Parameters) {
fn integer_unchecked_scalar_right_shift(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1088,7 +1088,7 @@ fn integer_unchecked_scalar_right_shift(param: Parameters) {
}
}
fn integer_default_scalar_right_shift(param: Parameters) {
fn integer_default_scalar_right_shift(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1186,7 +1186,7 @@ fn rotate_right_helper(value: u64, n: u32, actual_bit_size: u32) -> u64 {
(rotated & mask) | ((rotated & shifted_mask) >> (u64::BITS - actual_bit_size))
}
fn integer_unchecked_scalar_rotate_right(param: Parameters) {
fn integer_unchecked_scalar_rotate_right(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1249,7 +1249,7 @@ fn integer_unchecked_scalar_rotate_right(param: Parameters) {
}
}
fn integer_unchecked_scalar_rotate_left(param: Parameters) {
fn integer_unchecked_scalar_rotate_left(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1312,7 +1312,7 @@ fn integer_unchecked_scalar_rotate_left(param: Parameters) {
}
}
fn integer_scalar_rotate_right(param: Parameters) {
fn integer_scalar_rotate_right(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1375,7 +1375,7 @@ fn integer_scalar_rotate_right(param: Parameters) {
}
}
fn integer_scalar_rotate_left(param: Parameters) {
fn integer_scalar_rotate_left(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1438,7 +1438,7 @@ fn integer_scalar_rotate_left(param: Parameters) {
}
}
fn integer_smart_neg(param: Parameters) {
fn integer_smart_neg(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1468,7 +1468,7 @@ fn integer_smart_neg(param: Parameters) {
}
}
fn integer_default_neg(param: Parameters) {
fn integer_default_neg(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1501,7 +1501,7 @@ fn integer_default_neg(param: Parameters) {
}
}
fn integer_smart_sub(param: Parameters) {
fn integer_smart_sub(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1536,7 +1536,7 @@ fn integer_smart_sub(param: Parameters) {
}
}
fn integer_default_sub(param: Parameters) {
fn integer_default_sub(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1574,7 +1574,7 @@ fn integer_default_sub(param: Parameters) {
}
}
fn integer_default_sub_work_efficient(param: Parameters) {
fn integer_default_sub_work_efficient(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1606,7 +1606,7 @@ fn integer_default_sub_work_efficient(param: Parameters) {
}
}
fn integer_unchecked_block_mul(param: Parameters) {
fn integer_unchecked_block_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1639,7 +1639,7 @@ fn integer_unchecked_block_mul(param: Parameters) {
}
}
fn integer_smart_block_mul(param: Parameters) {
fn integer_smart_block_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1677,7 +1677,7 @@ fn integer_smart_block_mul(param: Parameters) {
}
}
fn integer_default_block_mul(param: Parameters) {
fn integer_default_block_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1719,7 +1719,7 @@ fn integer_default_block_mul(param: Parameters) {
}
}
fn integer_smart_mul(param: Parameters) {
fn integer_smart_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1757,7 +1757,7 @@ fn integer_smart_mul(param: Parameters) {
}
}
fn integer_default_mul(param: Parameters) {
fn integer_default_mul(param: PBSParameters) {
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1799,7 +1799,7 @@ fn integer_default_mul(param: Parameters) {
}
}
fn integer_smart_scalar_add(param: Parameters) {
fn integer_smart_scalar_add(param: PBSParameters) {
// generate the server-client key set
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1840,7 +1840,7 @@ fn integer_smart_scalar_add(param: Parameters) {
}
}
fn integer_default_scalar_add(param: Parameters) {
fn integer_default_scalar_add(param: PBSParameters) {
// generate the server-client key set
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1885,7 +1885,7 @@ fn integer_default_scalar_add(param: Parameters) {
}
}
fn integer_smart_scalar_sub(param: Parameters) {
fn integer_smart_scalar_sub(param: PBSParameters) {
// generate the server-client key set
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));
@@ -1926,7 +1926,7 @@ fn integer_smart_scalar_sub(param: Parameters) {
}
}
fn integer_default_scalar_sub(param: Parameters) {
fn integer_default_scalar_sub(param: PBSParameters) {
// generate the server-client key set
let (cks, sks) = KEY_CACHE.get_from_params(param);
let cks = RadixClientKey::from((cks, NB_CTXT));

View File

@@ -6,19 +6,17 @@
#[cfg(test)]
mod test;
use super::ciphertext::RadixCiphertext;
pub use crate::core_crypto::commons::parameters::{CiphertextCount, PlaintextCount};
use crate::core_crypto::prelude::*;
use crate::integer::client_key::utils::i_crt;
use crate::integer::{ClientKey, CrtCiphertext, IntegerCiphertext, ServerKey};
use crate::shortint::ciphertext::Degree;
use crate::shortint::wopbs::WopbsLUTBase;
use crate::shortint::{PBSOrderMarker, WopbsParameters};
use rayon::prelude::*;
use crate::shortint::{PBSOrderMarker, Parameters};
use serde::{Deserialize, Serialize};
use super::ciphertext::RadixCiphertext;
#[derive(Clone, Serialize, Deserialize)]
pub struct WopbsKey {
wopbs_key: crate::shortint::wopbs::WopbsKey,
@@ -196,10 +194,14 @@ impl WopbsKey {
/// use tfhe::shortint::parameters::PARAM_MESSAGE_1_CARRY_1;
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_1_CARRY_1);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_1_CARRY_1);
/// let wopbs_key = WopbsKey::new_wopbs_key(&cks, &sks, &WOPBS_PARAM_MESSAGE_1_CARRY_1);
/// ```
pub fn new_wopbs_key(cks: &ClientKey, sks: &ServerKey, parameters: &Parameters) -> WopbsKey {
pub fn new_wopbs_key(
cks: &ClientKey,
sks: &ServerKey,
parameters: &WopbsParameters,
) -> WopbsKey {
WopbsKey {
wopbs_key: crate::shortint::wopbs::WopbsKey::new_wopbs_key(
&cks.key, &sks.key, parameters,
@@ -234,7 +236,7 @@ impl WopbsKey {
///
/// let nb_block = 3;
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
/// let wopbs_key = WopbsKey::new_wopbs_key(&cks, &sks, &WOPBS_PARAM_MESSAGE_2_CARRY_2);
/// let mut moduli = 1_u64;
/// for _ in 0..nb_block {
@@ -321,7 +323,7 @@ impl WopbsKey {
///
/// let nb_block = 3;
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&WOPBS_PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(WOPBS_PARAM_MESSAGE_2_CARRY_2);
/// let wopbs_key = WopbsKey::new_wopbs_key_only_for_wopbs(&cks, &sks);
/// let mut moduli = 1_u64;
/// for _ in 0..nb_block {
@@ -408,7 +410,7 @@ impl WopbsKey {
///
/// let param = PARAM_4_BITS_5_BLOCKS;
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&param);
/// let (cks, sks) = gen_keys(param);
/// let wopbs_key = WopbsKey::new_wopbs_key_only_for_wopbs(&cks, &sks);
///
/// let mut msg_space = 1;
@@ -435,7 +437,7 @@ impl WopbsKey {
///
/// let nb_block = 3;
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// //Generate wopbs_v0 key ///
/// let wopbs_key = WopbsKey::new_wopbs_key(&cks, &sks, &WOPBS_PARAM_MESSAGE_2_CARRY_2);
@@ -475,7 +477,7 @@ impl WopbsKey {
///
/// let nb_block = 3;
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// //Generate wopbs_v0 key ///
/// let wopbs_key = WopbsKey::new_wopbs_key(&cks, &sks, &WOPBS_PARAM_MESSAGE_2_CARRY_2);
@@ -546,7 +548,7 @@ impl WopbsKey {
///
/// let nb_block = 3;
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
/// //Generate wopbs_v0 key
/// let wopbs_key = WopbsKey::new_wopbs_key(&cks, &sks, &WOPBS_PARAM_MESSAGE_2_CARRY_2);
/// let mut moduli = 1_u64;
@@ -614,7 +616,7 @@ impl WopbsKey {
///
/// let param = PARAM_4_BITS_5_BLOCKS;
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&param);
/// let (cks, sks) = gen_keys(param);
/// let wopbs_key = WopbsKey::new_wopbs_key_only_for_wopbs(&cks, &sks);
///
/// let mut msg_space = 1;
@@ -676,7 +678,7 @@ impl WopbsKey {
/// let nb_block = basis.len();
///
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_3_CARRY_3);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_3_CARRY_3);
/// let wopbs_key = WopbsKey::new_wopbs_key(&cks, &sks, &WOPBS_PARAM_MESSAGE_3_CARRY_3);
///
/// let mut msg_space = 1;
@@ -740,7 +742,7 @@ impl WopbsKey {
///
/// let nb_block = 3;
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_2_CARRY_2);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
///
/// //Generate wopbs_v0 key ///
/// let wopbs_key = WopbsKey::new_wopbs_key(&cks, &sks, &WOPBS_PARAM_MESSAGE_2_CARRY_2);
@@ -837,7 +839,7 @@ impl WopbsKey {
///
/// let basis: Vec<u64> = vec![5, 7];
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&PARAM_MESSAGE_3_CARRY_3);
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_3_CARRY_3);
/// let wopbs_key = WopbsKey::new_wopbs_key(&cks, &sks, &WOPBS_PARAM_MESSAGE_3_CARRY_3);
///
/// let mut msg_space = 1;
@@ -930,7 +932,7 @@ impl WopbsKey {
///
/// let param = PARAM_4_BITS_5_BLOCKS;
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&param);
/// let (cks, sks) = gen_keys(param);
/// let wopbs_key = WopbsKey::new_wopbs_key_only_for_wopbs(&cks, &sks);
///
/// let mut msg_space = 1;
@@ -1002,7 +1004,7 @@ impl WopbsKey {
///
/// let param = PARAM_4_BITS_5_BLOCKS;
/// //Generate the client key and the server key:
/// let (cks, sks) = gen_keys(&param);
/// let (cks, sks) = gen_keys(param);
/// let wopbs_key = WopbsKey::new_wopbs_key_only_for_wopbs(&cks, &sks);
///
/// let mut msg_space = 1;

View File

@@ -5,7 +5,7 @@ use crate::integer::parameters::*;
use crate::integer::wopbs::{encode_radix, WopbsKey};
use crate::shortint::parameters::parameters_wopbs::*;
use crate::shortint::parameters::parameters_wopbs_message_carry::*;
use crate::shortint::parameters::{Parameters, *};
use crate::shortint::parameters::{PBSParameters, *};
use rand::Rng;
use std::cmp::max;
@@ -56,12 +56,9 @@ pub fn wopbs_native_crt() {
let basis: Vec<u64> = vec![2, 3];
let nb_block = basis.len();
let params = (
crate::shortint::parameters::parameters_wopbs::PARAM_4_BITS_5_BLOCKS,
crate::shortint::parameters::parameters_wopbs::PARAM_4_BITS_5_BLOCKS,
);
let params = crate::shortint::parameters::parameters_wopbs::PARAM_4_BITS_5_BLOCKS;
let (cks, sks) = gen_keys(&params.1);
let (cks, sks) = gen_keys(params);
let wopbs_key = WopbsKey::new_wopbs_key_only_for_wopbs(&cks, &sks);
let mut msg_space = 1;
@@ -91,12 +88,27 @@ pub fn wopbs_native_crt_bivariate() {
let nb_block = basis.len();
let params = (
crate::shortint::parameters::parameters_wopbs::PARAM_4_BITS_5_BLOCKS,
crate::shortint::parameters::parameters_wopbs::PARAM_4_BITS_5_BLOCKS,
);
let wopbs_params = crate::shortint::parameters::parameters_wopbs::PARAM_4_BITS_5_BLOCKS;
let (cks, sks) = gen_keys(&params.1);
let pbs_params = PBSParameters {
lwe_dimension: wopbs_params.lwe_dimension,
glwe_dimension: wopbs_params.glwe_dimension,
polynomial_size: wopbs_params.polynomial_size,
lwe_modular_std_dev: wopbs_params.lwe_modular_std_dev,
glwe_modular_std_dev: wopbs_params.glwe_modular_std_dev,
pbs_base_log: wopbs_params.pbs_base_log,
pbs_level: wopbs_params.pbs_level,
ks_base_log: wopbs_params.ks_base_log,
ks_level: wopbs_params.ks_level,
message_modulus: wopbs_params.message_modulus,
carry_modulus: wopbs_params.carry_modulus,
ciphertext_modulus: wopbs_params.ciphertext_modulus,
encryption_key_choice: wopbs_params.encryption_key_choice,
};
let params = (pbs_params, wopbs_params);
let (cks, sks) = gen_keys(params.0);
let wopbs_key = KEY_CACHE_WOPBS.get_from_params(params);
let mut msg_space = 1;
@@ -124,14 +136,14 @@ pub fn wopbs_native_crt_bivariate() {
}
// test wopbs fake crt with different degree for each Ct
pub fn wopbs_crt(params: (Parameters, Parameters)) {
pub fn wopbs_crt(params: (PBSParameters, WopbsParameters)) {
let mut rng = rand::thread_rng();
let basis = make_basis(params.1.message_modulus.0);
let nb_block = basis.len();
let (cks, sks) = gen_keys(&params.0);
let (cks, sks) = gen_keys(params.0);
let wopbs_key = KEY_CACHE_WOPBS.get_from_params(params);
let mut msg_space = 1;
@@ -169,12 +181,12 @@ pub fn wopbs_crt(params: (Parameters, Parameters)) {
}
// test wopbs radix with different degree for each Ct
pub fn wopbs_radix(params: (Parameters, Parameters)) {
pub fn wopbs_radix(params: (PBSParameters, WopbsParameters)) {
let mut rng = rand::thread_rng();
let nb_block = 2;
let (cks, sks) = gen_keys(&params.0);
let (cks, sks) = gen_keys(params.0);
let wopbs_key = KEY_CACHE_WOPBS.get_from_params(params);
let mut msg_space: u64 = params.0.message_modulus.0 as u64;
@@ -206,12 +218,12 @@ pub fn wopbs_radix(params: (Parameters, Parameters)) {
}
// test wopbs radix with different degree for each Ct
pub fn wopbs_bivariate_radix(params: (Parameters, Parameters)) {
pub fn wopbs_bivariate_radix(params: (PBSParameters, WopbsParameters)) {
let mut rng = rand::thread_rng();
let nb_block = 2;
let (cks, sks) = gen_keys(&params.0);
let (cks, sks) = gen_keys(params.0);
let wopbs_key = KEY_CACHE_WOPBS.get_from_params(params);
let mut msg_space: u64 = params.0.message_modulus.0 as u64;
@@ -248,13 +260,13 @@ pub fn wopbs_bivariate_radix(params: (Parameters, Parameters)) {
}
// test wopbs bivariate fake crt with different degree for each Ct
pub fn wopbs_bivariate_crt(params: (Parameters, Parameters)) {
pub fn wopbs_bivariate_crt(params: (PBSParameters, WopbsParameters)) {
let mut rng = rand::thread_rng();
let basis = make_basis(params.1.message_modulus.0);
let modulus = basis.iter().product::<u64>();
let (cks, sks) = gen_keys(&params.0);
let (cks, sks) = gen_keys(params.0);
let wopbs_key = KEY_CACHE_WOPBS.get_from_params(params);
let mut msg_space: u64 = 1;

View File

@@ -51,7 +51,7 @@ pub struct ShortintCompressedServerKey(pub(crate) crate::shortint::CompressedSer
pub struct Shortint {}
#[wasm_bindgen]
pub struct ShortintParameters(pub(crate) crate::shortint::Parameters);
pub struct ShortintParameters(pub(crate) crate::shortint::PBSParameters);
#[wasm_bindgen]
pub enum ShortintEncryptionKeyChoice {
@@ -160,11 +160,6 @@ impl Shortint {
pbs_level: usize,
ks_base_log: usize,
ks_level: usize,
pfks_level: usize,
pfks_base_log: usize,
pfks_modular_std_dev: f64,
cbs_level: usize,
cbs_base_log: usize,
message_modulus: usize,
carry_modulus: usize,
modulus_power_of_2_exponent: usize,
@@ -172,7 +167,7 @@ impl Shortint {
) -> ShortintParameters {
set_hook(Box::new(console_error_panic_hook::hook));
use crate::core_crypto::prelude::*;
ShortintParameters(crate::shortint::Parameters {
ShortintParameters(crate::shortint::PBSParameters {
lwe_dimension: LweDimension(lwe_dimension),
glwe_dimension: GlweDimension(glwe_dimension),
polynomial_size: PolynomialSize(polynomial_size),
@@ -182,11 +177,6 @@ impl Shortint {
pbs_level: DecompositionLevelCount(pbs_level),
ks_base_log: DecompositionBaseLog(ks_base_log),
ks_level: DecompositionLevelCount(ks_level),
pfks_level: DecompositionLevelCount(pfks_level),
pfks_base_log: DecompositionBaseLog(pfks_base_log),
pfks_modular_std_dev: StandardDev(pfks_modular_std_dev),
cbs_level: DecompositionLevelCount(cbs_level),
cbs_base_log: DecompositionBaseLog(cbs_base_log),
message_modulus: crate::shortint::parameters::MessageModulus(message_modulus),
carry_modulus: crate::shortint::parameters::CarryModulus(carry_modulus),
ciphertext_modulus: crate::shortint::parameters::CiphertextModulus::try_new_power_of_2(
@@ -216,7 +206,7 @@ impl Shortint {
crate::shortint::engine::ShortintEngine::new_from_seeder(constant_seeder.as_mut());
tmp_shortint_engine
.new_client_key(parameters.0.to_owned())
.new_client_key(parameters.0.try_into().unwrap())
.map_err(|e| wasm_bindgen::JsError::new(format!("{e:?}").as_str()))
.map(ShortintClientKey)
}

View File

@@ -6,7 +6,7 @@ use crate::shortint::ciphertext::{
CompressedCiphertextSmall, PBSOrderMarker,
};
use crate::shortint::engine::ShortintEngine;
use crate::shortint::parameters::{MessageModulus, Parameters};
use crate::shortint::parameters::{MessageModulus, ShortintParameterSet};
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
@@ -25,7 +25,7 @@ pub struct ClientKey {
pub(crate) glwe_secret_key: GlweSecretKeyOwned<u64>,
/// Key used as the output of the keyswitch operation
pub(crate) small_lwe_secret_key: LweSecretKeyOwned<u64>,
pub parameters: Parameters,
pub parameters: ShortintParameterSet,
}
impl ClientKey {
@@ -40,8 +40,16 @@ impl ClientKey {
/// // Generate the client key:
/// let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);
/// ```
pub fn new(parameters: Parameters) -> ClientKey {
ShortintEngine::with_thread_local_mut(|engine| engine.new_client_key(parameters).unwrap())
pub fn new<P>(parameters: P) -> ClientKey
where
P: TryInto<ShortintParameterSet>,
<P as TryInto<ShortintParameterSet>>::Error: Debug,
{
ShortintEngine::with_thread_local_mut(|engine| {
engine
.new_client_key(parameters.try_into().unwrap())
.unwrap()
})
}
/// Encrypt a small integer message using the client key.
@@ -68,7 +76,7 @@ impl ClientKey {
/// let ct = cks.encrypt(msg);
///
/// let dec = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(msg % modulus, dec);
/// ```
pub fn encrypt(&self, message: u64) -> CiphertextBig {
@@ -99,7 +107,7 @@ impl ClientKey {
/// let ct = cks.encrypt_small(msg);
///
/// let dec = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(msg % modulus, dec);
/// ```
pub fn encrypt_small(&self, message: u64) -> CiphertextSmall {
@@ -134,7 +142,7 @@ impl ClientKey {
/// let ct = ct.decompress();
///
/// let dec = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(msg % modulus, dec);
/// ```
pub fn encrypt_compressed(&self, message: u64) -> CompressedCiphertextBig {
@@ -171,7 +179,7 @@ impl ClientKey {
/// let ct = ct.decompress();
///
/// let dec = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(msg % modulus, dec);
/// ```
pub fn encrypt_compressed_small(&self, message: u64) -> CompressedCiphertextSmall {
@@ -412,7 +420,7 @@ impl ClientKey {
///
/// ```rust
/// use tfhe::shortint::parameters::{PARAM_MESSAGE_2_CARRY_2, PARAM_SMALL_MESSAGE_2_CARRY_2};
/// use tfhe::shortint::{ClientKey, Parameters};
/// use tfhe::shortint::ClientKey;
///
/// // Generate the client key
/// let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);

View File

@@ -6,7 +6,8 @@ use crate::core_crypto::entities::*;
use crate::shortint::ciphertext::Degree;
use crate::shortint::parameters::{CarryModulus, MessageModulus};
use crate::shortint::{
CiphertextBase, ClientKey, CompressedCiphertextBase, PBSOrder, PBSOrderMarker, Parameters,
CiphertextBase, ClientKey, CompressedCiphertextBase, PBSOrder, PBSOrderMarker,
ShortintParameterSet,
};
use std::fmt::{Display, Formatter};
@@ -39,17 +40,17 @@ impl Display for EncryptionError {
impl std::error::Error for EncryptionError {}
impl ShortintEngine {
pub fn new_client_key(&mut self, parameters: Parameters) -> EngineResult<ClientKey> {
pub fn new_client_key(&mut self, parameters: ShortintParameterSet) -> EngineResult<ClientKey> {
// generate the lwe secret key
let small_lwe_secret_key = allocate_and_generate_new_binary_lwe_secret_key(
parameters.lwe_dimension,
parameters.lwe_dimension(),
&mut self.secret_generator,
);
// generate the rlwe secret key
let glwe_secret_key = allocate_and_generate_new_binary_glwe_secret_key(
parameters.glwe_dimension,
parameters.polynomial_size,
parameters.glwe_dimension(),
parameters.polynomial_size(),
&mut self.secret_generator,
);
@@ -79,7 +80,7 @@ impl ShortintEngine {
///
/// let mut engine = ShortintEngine::new();
///
/// let cks = engine.new_client_key(PARAM_MESSAGE_2_CARRY_2).unwrap();
/// let cks = engine.new_client_key(PARAM_MESSAGE_2_CARRY_2.try_into().unwrap()).unwrap();
///
/// // Encryption of one message that is within the encrypted message modulus:
/// let msg = 3;
@@ -109,7 +110,7 @@ impl ShortintEngine {
self.encrypt_with_message_modulus(
client_key,
message,
client_key.parameters.message_modulus,
client_key.parameters.message_modulus(),
)
}
@@ -121,13 +122,13 @@ impl ShortintEngine {
self.encrypt_with_message_modulus_compressed(
client_key,
message,
client_key.parameters.message_modulus,
client_key.parameters.message_modulus(),
)
}
fn encrypt_inner_ct(
&mut self,
client_key_parameters: &Parameters,
client_key_parameters: &ShortintParameterSet,
client_lwe_sk: &LweSecretKeyOwned<u64>,
noise_parameter: impl DispersionParameter,
message: u64,
@@ -135,7 +136,7 @@ impl ShortintEngine {
) -> LweCiphertextOwned<u64> {
//The delta is the one defined by the parameters
let delta = (1_u64 << 63)
/ (client_key_parameters.message_modulus.0 * client_key_parameters.carry_modulus.0)
/ (client_key_parameters.message_modulus().0 * client_key_parameters.carry_modulus().0)
as u64;
//The input is reduced modulus the message_modulus
@@ -149,7 +150,7 @@ impl ShortintEngine {
client_lwe_sk,
encoded,
noise_parameter,
client_key_parameters.ciphertext_modulus,
client_key_parameters.ciphertext_modulus(),
&mut self.encryption_generator,
)
}
@@ -160,16 +161,16 @@ impl ShortintEngine {
message: u64,
message_modulus: MessageModulus,
) -> EngineResult<CiphertextBase<OpOrder>> {
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice.into();
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice().into();
let (encryption_lwe_sk, encryption_noise) = match (OpOrder::pbs_order(), params_op_order) {
(PBSOrder::KeyswitchBootstrap, PBSOrder::KeyswitchBootstrap) => (
&client_key.large_lwe_secret_key,
client_key.parameters.glwe_modular_std_dev,
client_key.parameters.glwe_modular_std_dev(),
),
(PBSOrder::BootstrapKeyswitch, PBSOrder::BootstrapKeyswitch) => (
&client_key.small_lwe_secret_key,
client_key.parameters.lwe_modular_std_dev,
client_key.parameters.lwe_modular_std_dev(),
),
(ct_order, params_order) => {
return Err(EncryptionError::EncryptionKeyMismatch {
@@ -190,8 +191,8 @@ impl ShortintEngine {
//This ensures that the space message_modulus*carry_modulus < param.message_modulus *
// param.carry_modulus
let carry_modulus = (client_key.parameters.message_modulus.0
* client_key.parameters.carry_modulus.0)
let carry_modulus = (client_key.parameters.message_modulus().0
* client_key.parameters.carry_modulus().0)
/ message_modulus.0;
Ok(CiphertextBase {
@@ -211,13 +212,13 @@ impl ShortintEngine {
) -> EngineResult<CompressedCiphertextBase<OpOrder>> {
//This ensures that the space message_modulus*carry_modulus < param.message_modulus *
// param.carry_modulus
let carry_modulus = (client_key.parameters.message_modulus.0
* client_key.parameters.carry_modulus.0)
let carry_modulus = (client_key.parameters.message_modulus().0
* client_key.parameters.carry_modulus().0)
/ message_modulus.0;
//The delta is the one defined by the parameters
let delta = (1_u64 << 63)
/ (client_key.parameters.message_modulus.0 * client_key.parameters.carry_modulus.0)
/ (client_key.parameters.message_modulus().0 * client_key.parameters.carry_modulus().0)
as u64;
//The input is reduced modulus the message_modulus
@@ -227,16 +228,16 @@ impl ShortintEngine {
let encoded = Plaintext(shifted_message);
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice.into();
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice().into();
let (encryption_lwe_sk, encryption_noise) = match (OpOrder::pbs_order(), params_op_order) {
(PBSOrder::KeyswitchBootstrap, PBSOrder::KeyswitchBootstrap) => (
&client_key.large_lwe_secret_key,
client_key.parameters.glwe_modular_std_dev,
client_key.parameters.glwe_modular_std_dev(),
),
(PBSOrder::BootstrapKeyswitch, PBSOrder::BootstrapKeyswitch) => (
&client_key.small_lwe_secret_key,
client_key.parameters.lwe_modular_std_dev,
client_key.parameters.lwe_modular_std_dev(),
),
(ct_order, params_order) => {
return Err(EncryptionError::EncryptionKeyMismatch {
@@ -251,7 +252,7 @@ impl ShortintEngine {
encryption_lwe_sk,
encoded,
encryption_noise,
client_key.parameters.ciphertext_modulus,
client_key.parameters.ciphertext_modulus(),
&mut self.seeder,
);
@@ -269,16 +270,16 @@ impl ShortintEngine {
client_key: &ClientKey,
message: u64,
) -> EngineResult<CiphertextBase<OpOrder>> {
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice.into();
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice().into();
let (encryption_lwe_sk, encryption_noise) = match (OpOrder::pbs_order(), params_op_order) {
(PBSOrder::KeyswitchBootstrap, PBSOrder::KeyswitchBootstrap) => (
&client_key.large_lwe_secret_key,
client_key.parameters.glwe_modular_std_dev,
client_key.parameters.glwe_modular_std_dev(),
),
(PBSOrder::BootstrapKeyswitch, PBSOrder::BootstrapKeyswitch) => (
&client_key.small_lwe_secret_key,
client_key.parameters.lwe_modular_std_dev,
client_key.parameters.lwe_modular_std_dev(),
),
(ct_order, params_order) => {
return Err(EncryptionError::EncryptionKeyMismatch {
@@ -290,7 +291,7 @@ impl ShortintEngine {
};
let delta = (1_u64 << 63)
/ (client_key.parameters.message_modulus.0 * client_key.parameters.carry_modulus.0)
/ (client_key.parameters.message_modulus().0 * client_key.parameters.carry_modulus().0)
as u64;
let shifted_message = message * delta;
@@ -300,17 +301,18 @@ impl ShortintEngine {
encryption_lwe_sk,
encoded,
encryption_noise,
client_key.parameters.ciphertext_modulus,
client_key.parameters.ciphertext_modulus(),
&mut self.encryption_generator,
);
Ok(CiphertextBase {
ct,
degree: Degree(
client_key.parameters.message_modulus.0 * client_key.parameters.carry_modulus.0 - 1,
client_key.parameters.message_modulus().0 * client_key.parameters.carry_modulus().0
- 1,
),
message_modulus: client_key.parameters.message_modulus,
carry_modulus: client_key.parameters.carry_modulus,
message_modulus: client_key.parameters.message_modulus(),
carry_modulus: client_key.parameters.carry_modulus(),
_order_marker: Default::default(),
})
}
@@ -331,7 +333,7 @@ impl ShortintEngine {
let decrypted_u64: u64 = decrypted_encoded.0;
let delta = (1_u64 << 63)
/ (client_key.parameters.message_modulus.0 * client_key.parameters.carry_modulus.0)
/ (client_key.parameters.message_modulus().0 * client_key.parameters.carry_modulus().0)
as u64;
//The bit before the message
@@ -359,7 +361,7 @@ impl ShortintEngine {
) -> EngineResult<CiphertextBase<OpOrder>> {
//Multiply by 2 to reshift and exclude the padding bit
let delta = ((1_u64 << 63)
/ (client_key.parameters.message_modulus.0 * client_key.parameters.carry_modulus.0)
/ (client_key.parameters.message_modulus().0 * client_key.parameters.carry_modulus().0)
as u64)
* 2;
@@ -367,16 +369,16 @@ impl ShortintEngine {
let encoded = Plaintext(shifted_message);
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice.into();
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice().into();
let (encryption_lwe_sk, encryption_noise) = match (OpOrder::pbs_order(), params_op_order) {
(PBSOrder::KeyswitchBootstrap, PBSOrder::KeyswitchBootstrap) => (
&client_key.large_lwe_secret_key,
client_key.parameters.glwe_modular_std_dev,
client_key.parameters.glwe_modular_std_dev(),
),
(PBSOrder::BootstrapKeyswitch, PBSOrder::BootstrapKeyswitch) => (
&client_key.small_lwe_secret_key,
client_key.parameters.lwe_modular_std_dev,
client_key.parameters.lwe_modular_std_dev(),
),
(ct_order, params_order) => {
return Err(EncryptionError::EncryptionKeyMismatch {
@@ -391,15 +393,15 @@ impl ShortintEngine {
encryption_lwe_sk,
encoded,
encryption_noise,
client_key.parameters.ciphertext_modulus,
client_key.parameters.ciphertext_modulus(),
&mut self.encryption_generator,
);
Ok(CiphertextBase {
ct,
degree: Degree(client_key.parameters.message_modulus.0 - 1),
message_modulus: client_key.parameters.message_modulus,
carry_modulus: client_key.parameters.carry_modulus,
degree: Degree(client_key.parameters.message_modulus().0 - 1),
message_modulus: client_key.parameters.message_modulus(),
carry_modulus: client_key.parameters.carry_modulus(),
_order_marker: Default::default(),
})
}
@@ -411,7 +413,7 @@ impl ShortintEngine {
) -> EngineResult<CompressedCiphertextBase<OpOrder>> {
//Multiply by 2 to reshift and exclude the padding bit
let delta = ((1_u64 << 63)
/ (client_key.parameters.message_modulus.0 * client_key.parameters.carry_modulus.0)
/ (client_key.parameters.message_modulus().0 * client_key.parameters.carry_modulus().0)
as u64)
* 2;
@@ -419,16 +421,16 @@ impl ShortintEngine {
let encoded = Plaintext(shifted_message);
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice.into();
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice().into();
let (encryption_lwe_sk, encryption_noise) = match (OpOrder::pbs_order(), params_op_order) {
(PBSOrder::KeyswitchBootstrap, PBSOrder::KeyswitchBootstrap) => (
&client_key.large_lwe_secret_key,
client_key.parameters.glwe_modular_std_dev,
client_key.parameters.glwe_modular_std_dev(),
),
(PBSOrder::BootstrapKeyswitch, PBSOrder::BootstrapKeyswitch) => (
&client_key.small_lwe_secret_key,
client_key.parameters.lwe_modular_std_dev,
client_key.parameters.lwe_modular_std_dev(),
),
(ct_order, params_order) => {
return Err(EncryptionError::EncryptionKeyMismatch {
@@ -443,15 +445,15 @@ impl ShortintEngine {
encryption_lwe_sk,
encoded,
encryption_noise,
client_key.parameters.ciphertext_modulus,
client_key.parameters.ciphertext_modulus(),
&mut self.seeder,
);
Ok(CompressedCiphertextBase {
ct,
degree: Degree(client_key.parameters.message_modulus.0 - 1),
message_modulus: client_key.parameters.message_modulus,
carry_modulus: client_key.parameters.carry_modulus,
degree: Degree(client_key.parameters.message_modulus().0 - 1),
message_modulus: client_key.parameters.message_modulus(),
carry_modulus: client_key.parameters.carry_modulus(),
_order_marker: Default::default(),
})
}
@@ -472,7 +474,7 @@ impl ShortintEngine {
let decrypted_u64: u64 = decrypted_encoded.0;
let delta = ((1_u64 << 63)
/ (client_key.parameters.message_modulus.0 * client_key.parameters.carry_modulus.0)
/ (client_key.parameters.message_modulus().0 * client_key.parameters.carry_modulus().0)
as u64)
* 2;
@@ -506,16 +508,16 @@ impl ShortintEngine {
let encoded = Plaintext(shifted_message);
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice.into();
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice().into();
let (encryption_lwe_sk, encryption_noise) = match (OpOrder::pbs_order(), params_op_order) {
(PBSOrder::KeyswitchBootstrap, PBSOrder::KeyswitchBootstrap) => (
&client_key.large_lwe_secret_key,
client_key.parameters.glwe_modular_std_dev,
client_key.parameters.glwe_modular_std_dev(),
),
(PBSOrder::BootstrapKeyswitch, PBSOrder::BootstrapKeyswitch) => (
&client_key.small_lwe_secret_key,
client_key.parameters.lwe_modular_std_dev,
client_key.parameters.lwe_modular_std_dev(),
),
(ct_order, params_order) => {
return Err(EncryptionError::EncryptionKeyMismatch {
@@ -530,7 +532,7 @@ impl ShortintEngine {
encryption_lwe_sk,
encoded,
encryption_noise,
client_key.parameters.ciphertext_modulus,
client_key.parameters.ciphertext_modulus(),
&mut self.encryption_generator,
);
@@ -555,16 +557,16 @@ impl ShortintEngine {
let encoded = Plaintext(shifted_message);
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice.into();
let params_op_order: PBSOrder = client_key.parameters.encryption_key_choice().into();
let (encryption_lwe_sk, encryption_noise) = match (OpOrder::pbs_order(), params_op_order) {
(PBSOrder::KeyswitchBootstrap, PBSOrder::KeyswitchBootstrap) => (
&client_key.large_lwe_secret_key,
client_key.parameters.glwe_modular_std_dev,
client_key.parameters.glwe_modular_std_dev(),
),
(PBSOrder::BootstrapKeyswitch, PBSOrder::BootstrapKeyswitch) => (
&client_key.small_lwe_secret_key,
client_key.parameters.lwe_modular_std_dev,
client_key.parameters.lwe_modular_std_dev(),
),
(ct_order, params_order) => {
return Err(EncryptionError::EncryptionKeyMismatch {
@@ -579,7 +581,7 @@ impl ShortintEngine {
encryption_lwe_sk,
encoded,
encryption_noise,
client_key.parameters.ciphertext_modulus,
client_key.parameters.ciphertext_modulus(),
&mut self.seeder,
);

View File

@@ -31,11 +31,11 @@ impl ShortintEngine {
let (secret_encryption_key, encryption_noise) = match OpOrder::pbs_order() {
crate::shortint::PBSOrder::KeyswitchBootstrap => (
&client_key.large_lwe_secret_key,
client_parameters.glwe_modular_std_dev,
client_parameters.glwe_modular_std_dev(),
),
crate::shortint::PBSOrder::BootstrapKeyswitch => (
&client_key.small_lwe_secret_key,
client_parameters.lwe_modular_std_dev,
client_parameters.lwe_modular_std_dev(),
),
};
@@ -48,7 +48,7 @@ impl ShortintEngine {
secret_encryption_key,
zero_encryption_count,
encryption_noise,
client_key.parameters.ciphertext_modulus,
client_key.parameters.ciphertext_modulus(),
&mut self.encryption_generator,
);
@@ -57,7 +57,7 @@ impl ShortintEngine {
secret_encryption_key,
zero_encryption_count,
encryption_noise,
client_key.parameters.ciphertext_modulus,
client_key.parameters.ciphertext_modulus(),
&mut self.encryption_generator,
);
@@ -77,11 +77,11 @@ impl ShortintEngine {
let (secret_encryption_key, encryption_noise) = match OpOrder::pbs_order() {
crate::shortint::PBSOrder::KeyswitchBootstrap => (
&client_key.large_lwe_secret_key,
client_parameters.glwe_modular_std_dev,
client_parameters.glwe_modular_std_dev(),
),
crate::shortint::PBSOrder::BootstrapKeyswitch => (
&client_key.small_lwe_secret_key,
client_parameters.lwe_modular_std_dev,
client_parameters.lwe_modular_std_dev(),
),
};
@@ -94,7 +94,7 @@ impl ShortintEngine {
secret_encryption_key,
zero_encryption_count,
encryption_noise,
client_parameters.ciphertext_modulus,
client_parameters.ciphertext_modulus(),
&mut self.seeder,
);
@@ -103,7 +103,7 @@ impl ShortintEngine {
secret_encryption_key,
zero_encryption_count,
encryption_noise,
client_parameters.ciphertext_modulus,
client_parameters.ciphertext_modulus(),
&mut self.seeder,
);
@@ -122,7 +122,7 @@ impl ShortintEngine {
let ciphertext = self.encrypt_with_message_modulus_and_public_key(
public_key,
message,
public_key.parameters.message_modulus,
public_key.parameters.message_modulus(),
)?;
Ok(ciphertext)
@@ -136,7 +136,7 @@ impl ShortintEngine {
let ciphertext = self.encrypt_with_message_modulus_and_compressed_public_key(
public_key,
message,
public_key.parameters.message_modulus,
public_key.parameters.message_modulus(),
)?;
Ok(ciphertext)
@@ -150,13 +150,13 @@ impl ShortintEngine {
) -> EngineResult<CiphertextBase<OpOrder>> {
//This ensures that the space message_modulus*carry_modulus < param.message_modulus *
// param.carry_modulus
let carry_modulus = (public_key.parameters.message_modulus.0
* public_key.parameters.carry_modulus.0)
let carry_modulus = (public_key.parameters.message_modulus().0
* public_key.parameters.carry_modulus().0)
/ message_modulus.0;
//The delta is the one defined by the parameters
let delta = (1_u64 << 63)
/ (public_key.parameters.message_modulus.0 * public_key.parameters.carry_modulus.0)
/ (public_key.parameters.message_modulus().0 * public_key.parameters.carry_modulus().0)
as u64;
//The input is reduced modulus the message_modulus
@@ -199,13 +199,13 @@ impl ShortintEngine {
) -> EngineResult<CiphertextBase<OpOrder>> {
//This ensures that the space message_modulus*carry_modulus < param.message_modulus *
// param.carry_modulus
let carry_modulus = (public_key.parameters.message_modulus.0
* public_key.parameters.carry_modulus.0)
let carry_modulus = (public_key.parameters.message_modulus().0
* public_key.parameters.carry_modulus().0)
/ message_modulus.0;
//The delta is the one defined by the parameters
let delta = (1_u64 << 63)
/ (public_key.parameters.message_modulus.0 * public_key.parameters.carry_modulus.0)
/ (public_key.parameters.message_modulus().0 * public_key.parameters.carry_modulus().0)
as u64;
//The input is reduced modulus the message_modulus
@@ -246,7 +246,7 @@ impl ShortintEngine {
) -> EngineResult<CiphertextBase<OpOrder>> {
//Multiply by 2 to reshift and exclude the padding bit
let delta = ((1_u64 << 63)
/ (public_key.parameters.message_modulus.0 * public_key.parameters.carry_modulus.0)
/ (public_key.parameters.message_modulus().0 * public_key.parameters.carry_modulus().0)
as u64)
* 2;
@@ -271,9 +271,9 @@ impl ShortintEngine {
Ok(CiphertextBase {
ct: encrypted_ct,
degree: Degree(public_key.parameters.message_modulus.0 - 1),
message_modulus: public_key.parameters.message_modulus,
carry_modulus: public_key.parameters.carry_modulus,
degree: Degree(public_key.parameters.message_modulus().0 - 1),
message_modulus: public_key.parameters.message_modulus(),
carry_modulus: public_key.parameters.carry_modulus(),
_order_marker: Default::default(),
})
}
@@ -285,7 +285,7 @@ impl ShortintEngine {
) -> EngineResult<CiphertextBase<OpOrder>> {
//Multiply by 2 to reshift and exclude the padding bit
let delta = ((1_u64 << 63)
/ (public_key.parameters.message_modulus.0 * public_key.parameters.carry_modulus.0)
/ (public_key.parameters.message_modulus().0 * public_key.parameters.carry_modulus().0)
as u64)
* 2;
@@ -310,9 +310,9 @@ impl ShortintEngine {
Ok(CiphertextBase {
ct: encrypted_ct,
degree: Degree(public_key.parameters.message_modulus.0 - 1),
message_modulus: public_key.parameters.message_modulus,
carry_modulus: public_key.parameters.carry_modulus,
degree: Degree(public_key.parameters.message_modulus().0 - 1),
message_modulus: public_key.parameters.message_modulus(),
carry_modulus: public_key.parameters.carry_modulus(),
_order_marker: Default::default(),
})
}
@@ -395,7 +395,7 @@ impl ShortintEngine {
message: u64,
) -> EngineResult<CiphertextBase<OpOrder>> {
let delta = (1_u64 << 63)
/ (public_key.parameters.message_modulus.0 * public_key.parameters.carry_modulus.0)
/ (public_key.parameters.message_modulus().0 * public_key.parameters.carry_modulus().0)
as u64;
let shifted_message = message * delta;
// encode the message
@@ -418,10 +418,11 @@ impl ShortintEngine {
Ok(CiphertextBase {
ct: encrypted_ct,
degree: Degree(
public_key.parameters.message_modulus.0 * public_key.parameters.carry_modulus.0 - 1,
public_key.parameters.message_modulus().0 * public_key.parameters.carry_modulus().0
- 1,
),
message_modulus: public_key.parameters.message_modulus,
carry_modulus: public_key.parameters.carry_modulus,
message_modulus: public_key.parameters.message_modulus(),
carry_modulus: public_key.parameters.carry_modulus(),
_order_marker: Default::default(),
})
}
@@ -432,7 +433,7 @@ impl ShortintEngine {
message: u64,
) -> EngineResult<CiphertextBase<OpOrder>> {
let delta = (1_u64 << 63)
/ (public_key.parameters.message_modulus.0 * public_key.parameters.carry_modulus.0)
/ (public_key.parameters.message_modulus().0 * public_key.parameters.carry_modulus().0)
as u64;
let shifted_message = message * delta;
// encode the message
@@ -455,10 +456,11 @@ impl ShortintEngine {
Ok(CiphertextBase {
ct: encrypted_ct,
degree: Degree(
public_key.parameters.message_modulus.0 * public_key.parameters.carry_modulus.0 - 1,
public_key.parameters.message_modulus().0 * public_key.parameters.carry_modulus().0
- 1,
),
message_modulus: public_key.parameters.message_modulus,
carry_modulus: public_key.parameters.carry_modulus,
message_modulus: public_key.parameters.message_modulus(),
carry_modulus: public_key.parameters.carry_modulus(),
_order_marker: Default::default(),
})
}

View File

@@ -28,7 +28,7 @@ mod sub;
impl ShortintEngine {
pub(crate) fn new_server_key(&mut self, cks: &ClientKey) -> EngineResult<ServerKey> {
// Plaintext Max Value
let max_value = cks.parameters.message_modulus.0 * cks.parameters.carry_modulus.0 - 1;
let max_value = cks.parameters.message_modulus().0 * cks.parameters.carry_modulus().0 - 1;
// The maximum number of operations before we need to clean the carry buffer
let max = MaxDegree(max_value);
@@ -44,10 +44,10 @@ impl ShortintEngine {
par_allocate_and_generate_new_lwe_bootstrap_key(
&cks.small_lwe_secret_key,
&cks.glwe_secret_key,
cks.parameters.pbs_base_log,
cks.parameters.pbs_level,
cks.parameters.glwe_modular_std_dev,
cks.parameters.ciphertext_modulus,
cks.parameters.pbs_base_log(),
cks.parameters.pbs_level(),
cks.parameters.glwe_modular_std_dev(),
cks.parameters.ciphertext_modulus(),
&mut self.encryption_generator,
);
@@ -81,10 +81,10 @@ impl ShortintEngine {
let key_switching_key = allocate_and_generate_new_lwe_keyswitch_key(
&cks.large_lwe_secret_key,
&cks.small_lwe_secret_key,
cks.parameters.ks_base_log,
cks.parameters.ks_level,
cks.parameters.lwe_modular_std_dev,
cks.parameters.ciphertext_modulus,
cks.parameters.ks_base_log(),
cks.parameters.ks_level(),
cks.parameters.lwe_modular_std_dev(),
cks.parameters.ciphertext_modulus(),
&mut self.encryption_generator,
);
@@ -92,10 +92,10 @@ impl ShortintEngine {
Ok(ServerKey {
key_switching_key,
bootstrapping_key: fourier_bsk,
message_modulus: cks.parameters.message_modulus,
carry_modulus: cks.parameters.carry_modulus,
message_modulus: cks.parameters.message_modulus(),
carry_modulus: cks.parameters.carry_modulus(),
max_degree,
ciphertext_modulus: cks.parameters.ciphertext_modulus,
ciphertext_modulus: cks.parameters.ciphertext_modulus(),
})
}
@@ -104,7 +104,7 @@ impl ShortintEngine {
cks: &ClientKey,
) -> EngineResult<CompressedServerKey> {
// Plaintext Max Value
let max_value = cks.parameters.message_modulus.0 * cks.parameters.carry_modulus.0 - 1;
let max_value = cks.parameters.message_modulus().0 * cks.parameters.carry_modulus().0 - 1;
// The maximum number of operations before we need to clean the carry buffer
let max = MaxDegree(max_value);
@@ -120,10 +120,10 @@ impl ShortintEngine {
let bootstrapping_key = par_allocate_and_generate_new_seeded_lwe_bootstrap_key(
&cks.small_lwe_secret_key,
&cks.glwe_secret_key,
cks.parameters.pbs_base_log,
cks.parameters.pbs_level,
cks.parameters.glwe_modular_std_dev,
cks.parameters.ciphertext_modulus,
cks.parameters.pbs_base_log(),
cks.parameters.pbs_level(),
cks.parameters.glwe_modular_std_dev(),
cks.parameters.ciphertext_modulus(),
&mut self.seeder,
);
@@ -131,10 +131,10 @@ impl ShortintEngine {
let bootstrapping_key = allocate_and_generate_new_seeded_lwe_bootstrap_key(
&cks.small_lwe_secret_key,
&cks.glwe_secret_key,
cks.parameters.pbs_base_log,
cks.parameters.pbs_level,
cks.parameters.glwe_modular_std_dev,
cks.parameters.ciphertext_modulus,
cks.parameters.pbs_base_log(),
cks.parameters.pbs_level(),
cks.parameters.glwe_modular_std_dev(),
cks.parameters.ciphertext_modulus(),
&mut self.seeder,
);
@@ -142,10 +142,10 @@ impl ShortintEngine {
let key_switching_key = allocate_and_generate_new_seeded_lwe_keyswitch_key(
&cks.large_lwe_secret_key,
&cks.small_lwe_secret_key,
cks.parameters.ks_base_log,
cks.parameters.ks_level,
cks.parameters.lwe_modular_std_dev,
cks.parameters.ciphertext_modulus,
cks.parameters.ks_base_log(),
cks.parameters.ks_level(),
cks.parameters.lwe_modular_std_dev(),
cks.parameters.ciphertext_modulus(),
&mut self.seeder,
);
@@ -153,10 +153,10 @@ impl ShortintEngine {
Ok(CompressedServerKey {
key_switching_key,
bootstrapping_key,
message_modulus: cks.parameters.message_modulus,
carry_modulus: cks.parameters.carry_modulus,
message_modulus: cks.parameters.message_modulus(),
carry_modulus: cks.parameters.carry_modulus(),
max_degree,
ciphertext_modulus: cks.parameters.ciphertext_modulus,
ciphertext_modulus: cks.parameters.ciphertext_modulus(),
})
}

View File

@@ -9,7 +9,7 @@ use crate::shortint::ciphertext::Degree;
use crate::shortint::engine::{EngineResult, ShortintEngine};
use crate::shortint::server_key::MaxDegree;
use crate::shortint::wopbs::{WopbsKey, WopbsLUTBase};
use crate::shortint::{CiphertextBase, ClientKey, PBSOrderMarker, Parameters, ServerKey};
use crate::shortint::{CiphertextBase, ClientKey, PBSOrderMarker, ServerKey, WopbsParameters};
impl ShortintEngine {
// Creates a key when ONLY a wopbs is used.
@@ -18,13 +18,15 @@ impl ShortintEngine {
cks: &ClientKey,
sks: &ServerKey,
) -> EngineResult<WopbsKey> {
let wop_params = cks.parameters.wopbs_parameters().unwrap();
let cbs_pfpksk = par_allocate_and_generate_new_circuit_bootstrap_lwe_pfpksk_list(
&cks.large_lwe_secret_key,
&cks.glwe_secret_key,
cks.parameters.pfks_base_log,
cks.parameters.pfks_level,
cks.parameters.pfks_modular_std_dev,
cks.parameters.ciphertext_modulus,
wop_params.pfks_base_log,
wop_params.pfks_level,
wop_params.pfks_modular_std_dev,
wop_params.ciphertext_modulus,
&mut self.encryption_generator,
);
@@ -34,7 +36,7 @@ impl ShortintEngine {
wopbs_server_key: sks_cpy.clone(),
cbs_pfpksk,
ksk_pbs_to_wopbs: sks.key_switching_key.clone(),
param: cks.parameters,
param: wop_params.to_owned(),
pbs_server_key: sks_cpy,
};
Ok(wopbs_key)
@@ -45,7 +47,7 @@ impl ShortintEngine {
&mut self,
cks: &ClientKey,
sks: &ServerKey,
parameters: &Parameters,
parameters: &WopbsParameters,
) -> EngineResult<WopbsKey> {
//Independent client key generation dedicated to the WoPBS
let small_lwe_secret_key = allocate_and_generate_new_binary_lwe_secret_key(
@@ -114,8 +116,8 @@ impl ShortintEngine {
let ksk_pbs_large_to_wopbs_large = allocate_and_generate_new_lwe_keyswitch_key(
&cks.large_lwe_secret_key,
&large_lwe_secret_key,
cks.parameters.ks_base_log,
cks.parameters.ks_level,
cks.parameters.ks_base_log(),
cks.parameters.ks_level(),
parameters.lwe_modular_std_dev,
parameters.ciphertext_modulus,
&mut self.encryption_generator,
@@ -126,9 +128,9 @@ impl ShortintEngine {
let ksk_wopbs_large_to_pbs_small = allocate_and_generate_new_lwe_keyswitch_key(
&large_lwe_secret_key,
&cks.small_lwe_secret_key,
cks.parameters.ks_base_log,
cks.parameters.ks_level,
cks.parameters.lwe_modular_std_dev,
cks.parameters.ks_base_log(),
cks.parameters.ks_level(),
cks.parameters.lwe_modular_std_dev(),
parameters.ciphertext_modulus,
&mut self.encryption_generator,
);
@@ -155,12 +157,12 @@ impl ShortintEngine {
let pbs_server_key = ServerKey {
key_switching_key: ksk_wopbs_large_to_pbs_small,
bootstrapping_key: sks.bootstrapping_key.clone(),
message_modulus: cks.parameters.message_modulus,
carry_modulus: cks.parameters.carry_modulus,
message_modulus: cks.parameters.message_modulus(),
carry_modulus: cks.parameters.carry_modulus(),
max_degree: MaxDegree(
cks.parameters.message_modulus.0 * cks.parameters.carry_modulus.0 - 1,
cks.parameters.message_modulus().0 * cks.parameters.carry_modulus().0 - 1,
),
ciphertext_modulus: cks.parameters.ciphertext_modulus,
ciphertext_modulus: cks.parameters.ciphertext_modulus(),
};
let wopbs_key = WopbsKey {

View File

@@ -212,7 +212,7 @@ pub mod utils {
}
}
impl NamedParam for Parameters {
impl NamedParam for PBSParameters {
fn name(&self) -> String {
named_params_impl!(
self == (
@@ -257,7 +257,16 @@ impl NamedParam for Parameters {
PARAM_SMALL_MESSAGE_2_CARRY_2,
PARAM_SMALL_MESSAGE_3_CARRY_3,
PARAM_SMALL_MESSAGE_4_CARRY_4,
// Wops
)
);
}
}
impl NamedParam for WopbsParameters {
fn name(&self) -> String {
named_params_impl!(
self == (
// Wopbs
WOPBS_PARAM_MESSAGE_1_NORM2_2,
WOPBS_PARAM_MESSAGE_1_NORM2_4,
WOPBS_PARAM_MESSAGE_1_NORM2_6,
@@ -380,8 +389,8 @@ impl NamedParam for Parameters {
}
}
impl From<Parameters> for (ClientKey, ServerKey) {
fn from(param: Parameters) -> Self {
impl From<PBSParameters> for (ClientKey, ServerKey) {
fn from(param: PBSParameters) -> Self {
let cks = ClientKey::new(param);
let sks = ServerKey::new(&cks);
(cks, sks)
@@ -389,7 +398,7 @@ impl From<Parameters> for (ClientKey, ServerKey) {
}
pub struct Keycache {
inner: ImplKeyCache<Parameters, (ClientKey, ServerKey), FileStorage>,
inner: ImplKeyCache<PBSParameters, (ClientKey, ServerKey), FileStorage>,
}
impl Default for Keycache {
@@ -433,7 +442,7 @@ impl SharedWopbsKey {
}
impl Keycache {
pub fn get_from_param(&self, param: Parameters) -> SharedKey {
pub fn get_from_param(&self, param: PBSParameters) -> SharedKey {
SharedKey {
inner: self.inner.get(param),
}
@@ -445,10 +454,10 @@ impl Keycache {
}
#[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct WopbsParamPair(pub Parameters, pub Parameters);
pub struct WopbsParamPair(pub PBSParameters, pub WopbsParameters);
impl From<(Parameters, Parameters)> for WopbsParamPair {
fn from(tuple: (Parameters, Parameters)) -> Self {
impl From<(PBSParameters, WopbsParameters)> for WopbsParamPair {
fn from(tuple: (PBSParameters, WopbsParameters)) -> Self {
Self(tuple.0, tuple.1)
}
}

View File

@@ -64,7 +64,8 @@ pub use ciphertext::{
};
pub use client_key::ClientKey;
pub use parameters::{
CarryModulus, CiphertextModulus, EncryptionKeyChoice, MessageModulus, Parameters,
CarryModulus, CiphertextModulus, EncryptionKeyChoice, MessageModulus, PBSParameters,
ShortintParameterSet, WopbsParameters,
};
pub use public_key::{
CompressedPublicKeyBase, CompressedPublicKeyBig, CompressedPublicKeySmall, PublicKeyBase,
@@ -85,8 +86,12 @@ pub use server_key::{CheckError, CompressedServerKey, ServerKey};
/// // generate the client key and the server key:
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2);
/// ```
pub fn gen_keys(parameters_set: Parameters) -> (ClientKey, ServerKey) {
let cks = ClientKey::new(parameters_set);
pub fn gen_keys<P>(parameters_set: P) -> (ClientKey, ServerKey)
where
P: TryInto<ShortintParameterSet>,
<P as TryInto<ShortintParameterSet>>::Error: std::fmt::Debug,
{
let cks = ClientKey::new(parameters_set.try_into().unwrap());
let sks = ServerKey::new(&cks);
(cks, sks)

File diff suppressed because it is too large Load Diff

View File

@@ -7,9 +7,33 @@ pub use crate::core_crypto::commons::parameters::{
use crate::shortint::parameters::{
CarryModulus, CiphertextModulus, EncryptionKeyChoice, MessageModulus,
};
use crate::shortint::Parameters;
use serde::{Deserialize, Serialize};
pub const ALL_PARAMETER_VEC_WOPBS_NORM2: [Parameters; 31] = [
/// A structure defining the set of cryptographic parameters for homomorphic integer circuit
/// evaluation, this structure contains parameters to exclusively perform a so-called Wopbs.
#[derive(Serialize, Copy, Clone, Deserialize, Debug, PartialEq)]
pub struct WopbsParameters {
pub lwe_dimension: LweDimension,
pub glwe_dimension: GlweDimension,
pub polynomial_size: PolynomialSize,
pub lwe_modular_std_dev: StandardDev,
pub glwe_modular_std_dev: StandardDev,
pub pbs_base_log: DecompositionBaseLog,
pub pbs_level: DecompositionLevelCount,
pub ks_level: DecompositionLevelCount,
pub ks_base_log: DecompositionBaseLog,
pub pfks_level: DecompositionLevelCount,
pub pfks_base_log: DecompositionBaseLog,
pub pfks_modular_std_dev: StandardDev,
pub cbs_level: DecompositionLevelCount,
pub cbs_base_log: DecompositionBaseLog,
pub message_modulus: MessageModulus,
pub carry_modulus: CarryModulus,
pub ciphertext_modulus: CiphertextModulus,
pub encryption_key_choice: EncryptionKeyChoice,
}
pub const ALL_PARAMETER_VEC_WOPBS_NORM2: [WopbsParameters; 31] = [
WOPBS_PARAM_MESSAGE_1_NORM2_2,
WOPBS_PARAM_MESSAGE_1_NORM2_4,
WOPBS_PARAM_MESSAGE_1_NORM2_6,
@@ -43,7 +67,7 @@ pub const ALL_PARAMETER_VEC_WOPBS_NORM2: [Parameters; 31] = [
WOPBS_PARAM_MESSAGE_8_NORM2_6,
];
pub const WOPBS_PARAM_MESSAGE_1_NORM2_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(512),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -63,7 +87,7 @@ pub const WOPBS_PARAM_MESSAGE_1_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_NORM2_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(502),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -83,7 +107,7 @@ pub const WOPBS_PARAM_MESSAGE_1_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_NORM2_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(499),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -103,7 +127,7 @@ pub const WOPBS_PARAM_MESSAGE_1_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_NORM2_8: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(500),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -123,7 +147,7 @@ pub const WOPBS_PARAM_MESSAGE_1_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_NORM2_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(488),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -143,7 +167,7 @@ pub const WOPBS_PARAM_MESSAGE_2_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_NORM2_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(488),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -163,7 +187,7 @@ pub const WOPBS_PARAM_MESSAGE_2_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_NORM2_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -183,7 +207,7 @@ pub const WOPBS_PARAM_MESSAGE_2_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_NORM2_8: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -203,7 +227,7 @@ pub const WOPBS_PARAM_MESSAGE_2_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_NORM2_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(488),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -223,7 +247,7 @@ pub const WOPBS_PARAM_MESSAGE_3_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_NORM2_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -243,7 +267,7 @@ pub const WOPBS_PARAM_MESSAGE_3_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_NORM2_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(494),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -263,7 +287,7 @@ pub const WOPBS_PARAM_MESSAGE_3_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_NORM2_8: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(494),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -283,7 +307,7 @@ pub const WOPBS_PARAM_MESSAGE_3_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_4_NORM2_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_4_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(486),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -303,7 +327,7 @@ pub const WOPBS_PARAM_MESSAGE_4_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_4_NORM2_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_4_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -323,7 +347,7 @@ pub const WOPBS_PARAM_MESSAGE_4_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_4_NORM2_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_4_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -343,7 +367,7 @@ pub const WOPBS_PARAM_MESSAGE_4_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_4_NORM2_8: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_4_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -363,7 +387,7 @@ pub const WOPBS_PARAM_MESSAGE_4_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_5_NORM2_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_5_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -383,7 +407,7 @@ pub const WOPBS_PARAM_MESSAGE_5_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_5_NORM2_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_5_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -403,7 +427,7 @@ pub const WOPBS_PARAM_MESSAGE_5_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_5_NORM2_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_5_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -423,7 +447,7 @@ pub const WOPBS_PARAM_MESSAGE_5_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_5_NORM2_8: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_5_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -443,7 +467,7 @@ pub const WOPBS_PARAM_MESSAGE_5_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_6_NORM2_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_6_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -463,7 +487,7 @@ pub const WOPBS_PARAM_MESSAGE_6_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_6_NORM2_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_6_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -483,7 +507,7 @@ pub const WOPBS_PARAM_MESSAGE_6_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_6_NORM2_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_6_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -503,7 +527,7 @@ pub const WOPBS_PARAM_MESSAGE_6_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_6_NORM2_8: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_6_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -523,7 +547,7 @@ pub const WOPBS_PARAM_MESSAGE_6_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_7_NORM2_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_7_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -543,7 +567,7 @@ pub const WOPBS_PARAM_MESSAGE_7_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_7_NORM2_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_7_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -563,7 +587,7 @@ pub const WOPBS_PARAM_MESSAGE_7_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_7_NORM2_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_7_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -583,7 +607,7 @@ pub const WOPBS_PARAM_MESSAGE_7_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_7_NORM2_8: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_7_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -603,7 +627,7 @@ pub const WOPBS_PARAM_MESSAGE_7_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_8_NORM2_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_8_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -623,7 +647,7 @@ pub const WOPBS_PARAM_MESSAGE_8_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_8_NORM2_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_8_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -643,7 +667,7 @@ pub const WOPBS_PARAM_MESSAGE_8_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_8_NORM2_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_8_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -664,7 +688,7 @@ pub const WOPBS_PARAM_MESSAGE_8_NORM2_6: Parameters = Parameters {
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const PARAM_4_BITS_5_BLOCKS: Parameters = Parameters {
pub const PARAM_4_BITS_5_BLOCKS: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(667),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),

View File

@@ -7,12 +7,10 @@ pub use crate::core_crypto::commons::parameters::{
};
use crate::shortint::parameters::parameters_wopbs::*;
use crate::shortint::parameters::parameters_wopbs_prime_moduli::*;
use crate::shortint::parameters::{
CarryModulus, EncryptionKeyChoice, MessageModulus, PARAM_MESSAGE_2_CARRY_2,
};
use crate::shortint::Parameters;
use crate::shortint::parameters::{CarryModulus, EncryptionKeyChoice, MessageModulus};
use crate::shortint::WopbsParameters;
pub const ALL_PARAMETER_VEC_WOPBS: [Parameters; 116] = [
pub const ALL_PARAMETER_VEC_WOPBS: [WopbsParameters; 116] = [
WOPBS_PARAM_MESSAGE_1_CARRY_0,
WOPBS_PARAM_MESSAGE_1_CARRY_1,
WOPBS_PARAM_MESSAGE_1_CARRY_2,
@@ -131,7 +129,7 @@ pub const ALL_PARAMETER_VEC_WOPBS: [Parameters; 116] = [
WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_8,
];
pub const WOPBS_PARAM_MESSAGE_1_CARRY_5: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_CARRY_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -151,7 +149,7 @@ pub const WOPBS_PARAM_MESSAGE_1_CARRY_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_CARRY_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_CARRY_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -171,7 +169,7 @@ pub const WOPBS_PARAM_MESSAGE_1_CARRY_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_CARRY_7: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_CARRY_7: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -191,7 +189,7 @@ pub const WOPBS_PARAM_MESSAGE_1_CARRY_7: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_CARRY_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_CARRY_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -211,7 +209,7 @@ pub const WOPBS_PARAM_MESSAGE_1_CARRY_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_CARRY_8: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_CARRY_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -231,7 +229,7 @@ pub const WOPBS_PARAM_MESSAGE_1_CARRY_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_CARRY_3: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_CARRY_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -251,7 +249,7 @@ pub const WOPBS_PARAM_MESSAGE_1_CARRY_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_CARRY_0: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_CARRY_0: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(498),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -271,7 +269,7 @@ pub const WOPBS_PARAM_MESSAGE_1_CARRY_0: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_CARRY_1: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_CARRY_1: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(653),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -291,7 +289,7 @@ pub const WOPBS_PARAM_MESSAGE_1_CARRY_1: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_1_CARRY_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_1_CARRY_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(487),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -311,7 +309,7 @@ pub const WOPBS_PARAM_MESSAGE_1_CARRY_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_CARRY_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_CARRY_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -331,7 +329,7 @@ pub const WOPBS_PARAM_MESSAGE_2_CARRY_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_CARRY_5: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_CARRY_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -351,7 +349,7 @@ pub const WOPBS_PARAM_MESSAGE_2_CARRY_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_CARRY_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_CARRY_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -371,7 +369,7 @@ pub const WOPBS_PARAM_MESSAGE_2_CARRY_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_CARRY_7: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_CARRY_7: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -391,7 +389,7 @@ pub const WOPBS_PARAM_MESSAGE_2_CARRY_7: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_CARRY_3: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_CARRY_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -411,7 +409,7 @@ pub const WOPBS_PARAM_MESSAGE_2_CARRY_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_CARRY_0: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_CARRY_0: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(500),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -431,7 +429,7 @@ pub const WOPBS_PARAM_MESSAGE_2_CARRY_0: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_CARRY_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_CARRY_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(769),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -451,7 +449,7 @@ pub const WOPBS_PARAM_MESSAGE_2_CARRY_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_2_CARRY_1: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_2_CARRY_1: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(487),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -471,7 +469,7 @@ pub const WOPBS_PARAM_MESSAGE_2_CARRY_1: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_CARRY_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_CARRY_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -491,7 +489,7 @@ pub const WOPBS_PARAM_MESSAGE_3_CARRY_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_CARRY_5: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_CARRY_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -511,7 +509,7 @@ pub const WOPBS_PARAM_MESSAGE_3_CARRY_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_CARRY_3: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_CARRY_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(873),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -531,7 +529,7 @@ pub const WOPBS_PARAM_MESSAGE_3_CARRY_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_CARRY_6: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_CARRY_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -551,7 +549,7 @@ pub const WOPBS_PARAM_MESSAGE_3_CARRY_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_CARRY_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_CARRY_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -571,7 +569,7 @@ pub const WOPBS_PARAM_MESSAGE_3_CARRY_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_CARRY_1: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_CARRY_1: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(486),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -591,7 +589,7 @@ pub const WOPBS_PARAM_MESSAGE_3_CARRY_1: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_3_CARRY_0: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_3_CARRY_0: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(487),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -611,7 +609,7 @@ pub const WOPBS_PARAM_MESSAGE_3_CARRY_0: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_4_CARRY_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_4_CARRY_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(953),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -631,7 +629,7 @@ pub const WOPBS_PARAM_MESSAGE_4_CARRY_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_4_CARRY_3: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_4_CARRY_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -651,7 +649,7 @@ pub const WOPBS_PARAM_MESSAGE_4_CARRY_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_4_CARRY_5: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_4_CARRY_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -671,7 +669,7 @@ pub const WOPBS_PARAM_MESSAGE_4_CARRY_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_4_CARRY_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_4_CARRY_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -691,7 +689,7 @@ pub const WOPBS_PARAM_MESSAGE_4_CARRY_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_4_CARRY_1: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_4_CARRY_1: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(486),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -711,7 +709,7 @@ pub const WOPBS_PARAM_MESSAGE_4_CARRY_1: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_4_CARRY_0: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_4_CARRY_0: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(486),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -731,7 +729,7 @@ pub const WOPBS_PARAM_MESSAGE_4_CARRY_0: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_5_CARRY_3: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_5_CARRY_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -751,7 +749,7 @@ pub const WOPBS_PARAM_MESSAGE_5_CARRY_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_5_CARRY_4: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_5_CARRY_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -771,7 +769,7 @@ pub const WOPBS_PARAM_MESSAGE_5_CARRY_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_5_CARRY_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_5_CARRY_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -791,7 +789,7 @@ pub const WOPBS_PARAM_MESSAGE_5_CARRY_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_5_CARRY_1: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_5_CARRY_1: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -811,7 +809,7 @@ pub const WOPBS_PARAM_MESSAGE_5_CARRY_1: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_5_CARRY_0: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_5_CARRY_0: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(486),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -831,7 +829,7 @@ pub const WOPBS_PARAM_MESSAGE_5_CARRY_0: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_6_CARRY_3: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_6_CARRY_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -851,7 +849,7 @@ pub const WOPBS_PARAM_MESSAGE_6_CARRY_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_6_CARRY_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_6_CARRY_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -871,7 +869,7 @@ pub const WOPBS_PARAM_MESSAGE_6_CARRY_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_6_CARRY_1: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_6_CARRY_1: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -891,7 +889,7 @@ pub const WOPBS_PARAM_MESSAGE_6_CARRY_1: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_6_CARRY_0: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_6_CARRY_0: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(486),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
@@ -911,7 +909,7 @@ pub const WOPBS_PARAM_MESSAGE_6_CARRY_0: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_7_CARRY_2: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_7_CARRY_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(481),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -931,7 +929,7 @@ pub const WOPBS_PARAM_MESSAGE_7_CARRY_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_7_CARRY_1: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_7_CARRY_1: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -951,7 +949,7 @@ pub const WOPBS_PARAM_MESSAGE_7_CARRY_1: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_7_CARRY_0: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_7_CARRY_0: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -971,7 +969,7 @@ pub const WOPBS_PARAM_MESSAGE_7_CARRY_0: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_8_CARRY_1: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_8_CARRY_1: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -991,7 +989,7 @@ pub const WOPBS_PARAM_MESSAGE_8_CARRY_1: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_8_CARRY_0: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_8_CARRY_0: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(497),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -1011,7 +1009,7 @@ pub const WOPBS_PARAM_MESSAGE_8_CARRY_0: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PARAM_MESSAGE_9_CARRY_0: Parameters = Parameters {
pub const WOPBS_PARAM_MESSAGE_9_CARRY_0: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(493),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -1031,32 +1029,3 @@ pub const WOPBS_PARAM_MESSAGE_9_CARRY_0: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub fn get_parameters_from_message_and_carry_wopbs(
msg_space: usize,
carry_space: usize,
) -> Parameters {
let mut out = PARAM_MESSAGE_2_CARRY_2;
let mut flag: bool = false;
let mut rescaled_message_space = f64::ceil(f64::log2(msg_space as f64)) as usize;
rescaled_message_space = 1 << rescaled_message_space;
let mut rescaled_carry_space = f64::ceil(f64::log2(carry_space as f64)) as usize;
rescaled_carry_space = 1 << rescaled_carry_space;
for param in ALL_PARAMETER_VEC_WOPBS {
if param.message_modulus.0 == rescaled_message_space
&& param.carry_modulus.0 == rescaled_carry_space
{
out = param;
flag = true;
break;
}
}
if !flag {
println!(
"### WARNING: NO PARAMETERS FOUND for msg_space = {rescaled_message_space} and \
carry_space = {rescaled_carry_space} ### ",
);
}
out
}

View File

@@ -5,9 +5,9 @@ pub use crate::core_crypto::commons::parameters::{
use crate::shortint::parameters::{
CarryModulus, CiphertextModulus, EncryptionKeyChoice, MessageModulus,
};
use crate::shortint::Parameters;
use crate::shortint::WopbsParameters;
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_2: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(689),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -27,7 +27,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_3: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(693),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -47,7 +47,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_4: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(757),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -67,7 +67,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_5: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(689),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -87,7 +87,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_6: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(695),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -107,7 +107,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_7: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_7: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(705),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -127,7 +127,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_7: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_8: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(710),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -147,7 +147,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_2_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_2: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(697),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -167,7 +167,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_3: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(728),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -187,7 +187,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_4: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(690),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -207,7 +207,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_5: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(699),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -227,7 +227,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_6: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(694),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -247,7 +247,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_7: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_7: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(730),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -267,7 +267,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_7: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_8: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(706),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -287,7 +287,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_3_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_2: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(702),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -307,7 +307,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_3: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(689),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -327,7 +327,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_4: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(696),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -347,7 +347,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_5: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(713),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -367,7 +367,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_6: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(716),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -387,7 +387,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_7: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_7: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(745),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -407,7 +407,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_7: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_8: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(692),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -427,7 +427,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_4_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_2: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(702),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -447,7 +447,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_3: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(689),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -467,7 +467,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_4: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(696),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -487,7 +487,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_5: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(713),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -507,7 +507,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_6: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(716),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -527,7 +527,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_7: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_7: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(745),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -547,7 +547,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_7: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_8: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(692),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -567,7 +567,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_5_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_2: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(702),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -587,7 +587,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_3: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(689),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -607,7 +607,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_4: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(696),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -627,7 +627,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_5: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(713),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -647,7 +647,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_6: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(716),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -667,7 +667,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_7: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_7: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(745),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -687,7 +687,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_7: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_8: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(692),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -707,7 +707,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_6_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_2: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(702),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -727,7 +727,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_3: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(689),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -747,7 +747,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_4: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(696),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -767,7 +767,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_5: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(713),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -787,7 +787,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_6: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(716),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -807,7 +807,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_7: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_7: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(745),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -827,7 +827,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_7: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_8: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(692),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -847,7 +847,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_7_NORM2_8: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_2: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_2: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(702),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -867,7 +867,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_2: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_3: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_3: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(689),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -887,7 +887,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_3: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_4: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_4: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(696),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -907,7 +907,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_4: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_5: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_5: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(713),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(2048),
@@ -927,7 +927,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_5: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_6: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_6: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(716),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -947,7 +947,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_6: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_7: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_7: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(745),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
@@ -967,7 +967,7 @@ pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_7: Parameters = Parameters {
ciphertext_modulus: CiphertextModulus::new_native(),
encryption_key_choice: EncryptionKeyChoice::Big,
};
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_8: Parameters = Parameters {
pub const WOPBS_PRIME_PARAM_MESSAGE_8_NORM2_8: WopbsParameters = WopbsParameters {
lwe_dimension: LweDimension(692),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),

View File

@@ -11,13 +11,13 @@ pub use super::client_key::ClientKey;
pub use super::gen_keys;
pub use super::parameters::{
CarryModulus, CiphertextModulus, DecompositionBaseLog, DecompositionLevelCount,
EncryptionKeyChoice, GlweDimension, LweDimension, MessageModulus, Parameters, PolynomialSize,
StandardDev, PARAM_MESSAGE_1_CARRY_1, PARAM_MESSAGE_1_CARRY_2, PARAM_MESSAGE_1_CARRY_3,
PARAM_MESSAGE_1_CARRY_4, PARAM_MESSAGE_1_CARRY_5, PARAM_MESSAGE_1_CARRY_6,
PARAM_MESSAGE_1_CARRY_7, PARAM_MESSAGE_2_CARRY_2, PARAM_MESSAGE_2_CARRY_3,
PARAM_MESSAGE_2_CARRY_4, PARAM_MESSAGE_2_CARRY_5, PARAM_MESSAGE_2_CARRY_6,
PARAM_MESSAGE_3_CARRY_3, PARAM_MESSAGE_3_CARRY_4, PARAM_MESSAGE_3_CARRY_5,
PARAM_MESSAGE_4_CARRY_4,
EncryptionKeyChoice, GlweDimension, LweDimension, MessageModulus, PBSParameters,
PolynomialSize, StandardDev, PARAM_MESSAGE_1_CARRY_1, PARAM_MESSAGE_1_CARRY_2,
PARAM_MESSAGE_1_CARRY_3, PARAM_MESSAGE_1_CARRY_4, PARAM_MESSAGE_1_CARRY_5,
PARAM_MESSAGE_1_CARRY_6, PARAM_MESSAGE_1_CARRY_7, PARAM_MESSAGE_2_CARRY_2,
PARAM_MESSAGE_2_CARRY_3, PARAM_MESSAGE_2_CARRY_4, PARAM_MESSAGE_2_CARRY_5,
PARAM_MESSAGE_2_CARRY_6, PARAM_MESSAGE_3_CARRY_3, PARAM_MESSAGE_3_CARRY_4,
PARAM_MESSAGE_3_CARRY_5, PARAM_MESSAGE_4_CARRY_4,
};
pub use super::public_key::{PublicKeyBase, PublicKeyBig, PublicKeySmall};
pub use super::server_key::ServerKey;

View File

@@ -4,7 +4,7 @@ use crate::shortint::ciphertext::{
BootstrapKeyswitch, CiphertextBase, KeyswitchBootstrap, PBSOrderMarker,
};
use crate::shortint::engine::ShortintEngine;
use crate::shortint::parameters::{MessageModulus, Parameters};
use crate::shortint::parameters::{MessageModulus, ShortintParameterSet};
use crate::shortint::ClientKey;
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
@@ -13,7 +13,7 @@ use std::fmt::Debug;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct CompressedPublicKeyBase<OpOrder: PBSOrderMarker> {
pub(crate) lwe_public_key: SeededLwePublicKeyOwned<u64>,
pub parameters: Parameters,
pub parameters: ShortintParameterSet,
pub _order_marker: std::marker::PhantomData<OpOrder>,
}
@@ -92,7 +92,7 @@ impl<OpOrder: PBSOrderMarker> CompressedPublicKeyBase<OpOrder> {
/// let ct = pk.encrypt(msg);
///
/// let dec = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(msg % modulus, dec);
///
/// let pk = CompressedPublicKeySmall::new(&cks);
@@ -109,7 +109,7 @@ impl<OpOrder: PBSOrderMarker> CompressedPublicKeyBase<OpOrder> {
/// let ct = pk.encrypt(msg);
///
/// let dec = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(msg % modulus, dec);
/// ```
pub fn encrypt(&self, message: u64) -> CiphertextBase<OpOrder> {

View File

@@ -4,7 +4,7 @@ use crate::shortint::ciphertext::{
BootstrapKeyswitch, CiphertextBase, KeyswitchBootstrap, PBSOrderMarker,
};
use crate::shortint::engine::ShortintEngine;
use crate::shortint::parameters::{MessageModulus, Parameters};
use crate::shortint::parameters::{MessageModulus, ShortintParameterSet};
use crate::shortint::{ClientKey, CompressedPublicKeyBase};
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
@@ -13,7 +13,7 @@ use std::fmt::Debug;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct PublicKeyBase<OpOrder: PBSOrderMarker> {
pub(crate) lwe_public_key: LwePublicKeyOwned<u64>,
pub parameters: Parameters,
pub parameters: ShortintParameterSet,
pub _order_marker: std::marker::PhantomData<OpOrder>,
}
@@ -88,7 +88,7 @@ impl<OpOrder: PBSOrderMarker> PublicKeyBase<OpOrder> {
/// let ct = pk.encrypt(msg);
///
/// let dec = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(msg % modulus, dec);
///
/// let pk = PublicKeySmall::new(&cks);
@@ -105,7 +105,7 @@ impl<OpOrder: PBSOrderMarker> PublicKeyBase<OpOrder> {
/// let ct = pk.encrypt(msg);
///
/// let dec = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(msg % modulus, dec);
/// ```
pub fn encrypt(&self, message: u64) -> CiphertextBase<OpOrder> {
@@ -165,7 +165,7 @@ impl<OpOrder: PBSOrderMarker> PublicKeyBase<OpOrder> {
///
/// ```rust
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2;
/// use tfhe::shortint::{ClientKey, Parameters, PublicKeyBig, PublicKeySmall};
/// use tfhe::shortint::{ClientKey, PublicKeyBig, PublicKeySmall};
///
/// // Generate the client key:
/// let cks = ClientKey::new(PARAM_MESSAGE_2_CARRY_2);

View File

@@ -95,7 +95,7 @@ impl ServerKey {
/// let two = cks.decrypt(&ct1);
///
/// // 15 + 3 mod 4 -> 3 + 3 mod 4 -> 2 mod 4
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((msg2 + msg1) % modulus, two);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -111,7 +111,7 @@ impl ServerKey {
/// let two = cks.decrypt(&ct1);
///
/// // 15 + 3 mod 4 -> 3 + 3 mod 4 -> 2 mod 4
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((msg2 + msg1) % modulus, two);
/// ```
pub fn add_assign<OpOrder: PBSOrderMarker>(
@@ -472,7 +472,7 @@ impl ServerKey {
/// let two = cks.decrypt(&ct1);
///
/// // 15 + 3 mod 4 -> 3 + 3 mod 4 -> 2 mod 4
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((msg2 + msg1) % modulus, two);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -488,7 +488,7 @@ impl ServerKey {
/// let two = cks.decrypt(&ct1);
///
/// // 15 + 3 mod 4 -> 3 + 3 mod 4 -> 2 mod 4
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((msg2 + msg1) % modulus, two);
/// ```
pub fn smart_add_assign<OpOrder: PBSOrderMarker>(

View File

@@ -336,7 +336,7 @@ impl ServerKey {
/// let msg: u64 = 3;
/// let ct1 = cks.encrypt(msg);
/// let ct2 = cks.encrypt(msg);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
///
/// // Generate the accumulator for the function f: x -> x^3 mod 2^2
/// let acc = sks.generate_accumulator_bivariate(|x, y| x * y * x % modulus);
@@ -386,7 +386,7 @@ impl ServerKey {
/// let msg: u64 = 3;
/// let ct1 = cks.encrypt(msg);
/// let mut ct2 = cks.encrypt(msg);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
///
/// // Generate the accumulator for the function f: x -> x^3 mod 2^2
/// let acc = sks.generate_accumulator_bivariate(|x, y| x * y * x % modulus);
@@ -435,7 +435,7 @@ impl ServerKey {
///
/// let msg: u64 = 3;
/// let ct = cks.encrypt(msg);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
///
/// // Generate the accumulator for the function f: x -> x^3 mod 2^2
/// let acc = sks.generate_accumulator(|x| x * x * x % modulus);

View File

@@ -40,7 +40,7 @@ impl ServerKey {
///
/// // Decrypt
/// let res = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((clear_1 * clear_2) % modulus, res);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -60,7 +60,7 @@ impl ServerKey {
///
/// // Decrypt
/// let res = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((clear_1 * clear_2) % modulus, res);
/// ```
pub fn unchecked_mul_lsb<OpOrder: PBSOrderMarker>(
@@ -101,7 +101,7 @@ impl ServerKey {
///
/// // Decrypt
/// let res = cks.decrypt(&ct_1);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((clear_1 * clear_2) % modulus, res);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -115,7 +115,7 @@ impl ServerKey {
///
/// // Decrypt
/// let res = cks.decrypt(&ct_1);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((clear_1 * clear_2) % modulus, res);
/// ```
pub fn unchecked_mul_lsb_assign<OpOrder: PBSOrderMarker>(
@@ -165,7 +165,7 @@ impl ServerKey {
///
/// // Decrypt
/// let res = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((clear_1 * clear_2) / modulus, res);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -186,7 +186,7 @@ impl ServerKey {
///
/// // Decrypt
/// let res = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((clear_1 * clear_2) / modulus, res);
/// ```
pub fn unchecked_mul_msb<OpOrder: PBSOrderMarker>(
@@ -280,7 +280,7 @@ impl ServerKey {
///
/// let ct_res = ct_res.unwrap();
/// let clear_res = cks.decrypt_message_and_carry(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res % modulus, 2);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -296,7 +296,7 @@ impl ServerKey {
///
/// let ct_res = ct_res.unwrap();
/// let clear_res = cks.decrypt_message_and_carry(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res % modulus, 2);
/// ```
pub fn checked_mul_lsb<OpOrder: PBSOrderMarker>(
@@ -340,7 +340,7 @@ impl ServerKey {
/// assert!(ct_res.is_ok());
///
/// let clear_res = cks.decrypt_message_and_carry(&ct_1);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res % modulus, 2);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -355,7 +355,7 @@ impl ServerKey {
/// assert!(ct_res.is_ok());
///
/// let clear_res = cks.decrypt_message_and_carry(&ct_1);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res % modulus, 2);
/// ```
pub fn checked_mul_lsb_assign<OpOrder: PBSOrderMarker>(
@@ -411,7 +411,7 @@ impl ServerKey {
/// let clear_res = cks.decrypt(&ct_res);
/// assert_eq!(
/// clear_res,
/// (msg_1 * msg_2) / cks.parameters.message_modulus.0 as u64
/// (msg_1 * msg_2) / cks.parameters.message_modulus().0 as u64
/// );
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -436,7 +436,7 @@ impl ServerKey {
/// let clear_res = cks.decrypt(&ct_res);
/// assert_eq!(
/// clear_res,
/// (msg_1 * msg_2) / cks.parameters.message_modulus.0 as u64
/// (msg_1 * msg_2) / cks.parameters.message_modulus().0 as u64
/// );
/// ```
pub fn checked_mul_msb<OpOrder: PBSOrderMarker>(
@@ -612,7 +612,7 @@ impl ServerKey {
///
/// let ct_res = ct_res.unwrap();
/// let clear_res = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res % modulus, (msg_1 * msg_2) % modulus);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -628,7 +628,7 @@ impl ServerKey {
///
/// let ct_res = ct_res.unwrap();
/// let clear_res = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res % modulus, (msg_1 * msg_2) % modulus);
/// ```
pub fn checked_mul_lsb_with_small_carry<OpOrder: PBSOrderMarker>(
@@ -827,8 +827,8 @@ impl ServerKey {
/// # Example
///
/// ```rust
/// use tfhe::shortint::gen_keys;
/// use tfhe::shortint::parameters::{PARAM_MESSAGE_2_CARRY_1, PARAM_SMALL_MESSAGE_2_CARRY_2};
/// use tfhe::shortint::{gen_keys, Parameters};
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_1);
@@ -911,8 +911,8 @@ impl ServerKey {
/// # Example
///
/// ```rust
/// use tfhe::shortint::gen_keys;
/// use tfhe::shortint::parameters::{PARAM_MESSAGE_2_CARRY_1, PARAM_SMALL_MESSAGE_2_CARRY_2};
/// use tfhe::shortint::{gen_keys, Parameters};
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_1);
@@ -1096,8 +1096,8 @@ impl ServerKey {
/// # Example
///
/// ```rust
/// use tfhe::shortint::gen_keys;
/// use tfhe::shortint::parameters::{PARAM_MESSAGE_2_CARRY_1, PARAM_SMALL_MESSAGE_2_CARRY_2};
/// use tfhe::shortint::{gen_keys, Parameters};
///
/// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_1);

View File

@@ -37,7 +37,7 @@ impl ServerKey {
///
/// // Decrypt
/// let clear_res = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -50,7 +50,7 @@ impl ServerKey {
///
/// // Decrypt
/// let clear_res = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
/// ```
pub fn neg<OpOrder: PBSOrderMarker>(
@@ -94,7 +94,7 @@ impl ServerKey {
///
/// // Decrypt
/// let clear_res = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -107,7 +107,7 @@ impl ServerKey {
///
/// // Decrypt
/// let clear_res = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
/// ```
pub fn neg_assign<OpOrder: PBSOrderMarker>(&self, ct: &mut CiphertextBase<OpOrder>) {
@@ -144,7 +144,7 @@ impl ServerKey {
///
/// // Decrypt
/// let three = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(modulus - msg, three);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -157,7 +157,7 @@ impl ServerKey {
///
/// // Decrypt
/// let three = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(modulus - msg, three);
/// ```
pub fn unchecked_neg<OpOrder: PBSOrderMarker>(
@@ -198,7 +198,7 @@ impl ServerKey {
/// sks.unchecked_neg_assign(&mut ct);
///
/// // Decrypt
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(modulus - msg, cks.decrypt(&ct));
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -210,7 +210,7 @@ impl ServerKey {
/// sks.unchecked_neg_assign(&mut ct);
///
/// // Decrypt
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(modulus - msg, cks.decrypt(&ct));
/// ```
pub fn unchecked_neg_assign<OpOrder: PBSOrderMarker>(&self, ct: &mut CiphertextBase<OpOrder>) {
@@ -298,7 +298,7 @@ impl ServerKey {
/// assert!(ct_res.is_ok());
///
/// let clear_res = cks.decrypt(&ct_res.unwrap());
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -312,7 +312,7 @@ impl ServerKey {
/// assert!(ct_res.is_ok());
///
/// let clear_res = cks.decrypt(&ct_res.unwrap());
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
/// ```
pub fn checked_neg<OpOrder: PBSOrderMarker>(
@@ -355,7 +355,7 @@ impl ServerKey {
/// assert!(res.is_ok());
///
/// let clear_res = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -369,7 +369,7 @@ impl ServerKey {
/// assert!(res.is_ok());
///
/// let clear_res = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
/// ```
pub fn checked_neg_assign<OpOrder: PBSOrderMarker>(
@@ -408,7 +408,7 @@ impl ServerKey {
///
/// // Decrypt
/// let clear_res = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -421,7 +421,7 @@ impl ServerKey {
///
/// // Decrypt
/// let clear_res = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
/// ```
pub fn smart_neg<OpOrder: PBSOrderMarker>(
@@ -454,7 +454,7 @@ impl ServerKey {
///
/// // Decrypt
/// let clear_res = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -467,7 +467,7 @@ impl ServerKey {
///
/// // Decrypt
/// let clear_res = cks.decrypt(&ct);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(clear_res, modulus - msg);
/// ```
pub fn smart_neg_assign<OpOrder: PBSOrderMarker>(&self, ct: &mut CiphertextBase<OpOrder>) {

View File

@@ -40,7 +40,7 @@ impl ServerKey {
///
/// // Our result is what we expect
/// let clear = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((msg + scalar as u64) % modulus, clear);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -56,7 +56,7 @@ impl ServerKey {
///
/// // Our result is what we expect
/// let clear = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!((msg + scalar as u64) % modulus, clear);
/// ```
pub fn scalar_add<OpOrder: PBSOrderMarker>(
@@ -102,7 +102,7 @@ impl ServerKey {
/// // Our result is what we expect
/// let clear = cks.decrypt(&ct);
/// assert_eq!(
/// (msg + scalar as u64) % cks.parameters.message_modulus.0 as u64,
/// (msg + scalar as u64) % cks.parameters.message_modulus().0 as u64,
/// clear
/// );
///
@@ -117,7 +117,7 @@ impl ServerKey {
/// // Our result is what we expect
/// let clear = cks.decrypt(&ct);
/// assert_eq!(
/// (msg + scalar as u64) % cks.parameters.message_modulus.0 as u64,
/// (msg + scalar as u64) % cks.parameters.message_modulus().0 as u64,
/// clear
/// );
/// ```
@@ -407,7 +407,7 @@ impl ServerKey {
///
/// // Our result is what we expect
/// let clear = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(2, clear % modulus);
///
/// let (cks, sks) = gen_keys(PARAM_SMALL_MESSAGE_2_CARRY_2);
@@ -423,7 +423,7 @@ impl ServerKey {
///
/// // Our result is what we expect
/// let clear = cks.decrypt(&ct_res);
/// let modulus = cks.parameters.message_modulus.0 as u64;
/// let modulus = cks.parameters.message_modulus().0 as u64;
/// assert_eq!(2, clear % modulus);
/// ```
pub fn smart_scalar_add<OpOrder: PBSOrderMarker>(

Some files were not shown because too many files have changed in this diff Show More