mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-09 14:47:56 -05:00
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:
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()?;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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),
|
||||
}
|
||||
|
||||
@@ -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, ¶ms);
|
||||
int params_ok = shortint_create_parameters(10, 1, 1024, 10e-100, 10e-100, 2, 3, 2, 3, 2, 2, 64,
|
||||
ShortintEncryptionKeyChoiceBig, ¶ms);
|
||||
assert(params_ok == 0);
|
||||
|
||||
int gen_keys_ok = shortint_gen_keys_with_parameters(params, &cks, &sks);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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> {
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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"))]
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pub trait ShortIntegerParameter: Copy + Into<crate::shortint::Parameters> {
|
||||
pub trait ShortIntegerParameter: Copy + Into<crate::shortint::PBSParameters> {
|
||||
type Id: Copy;
|
||||
}
|
||||
|
||||
|
||||
@@ -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"))]
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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>(
|
||||
|
||||
@@ -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>(
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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(¶m);
|
||||
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(¶m);
|
||||
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(¶m);
|
||||
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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
///
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
///
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 }
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
///
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
///
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
///
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
///
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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(¶m);
|
||||
/// 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(¶m);
|
||||
/// 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(¶m);
|
||||
/// 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(¶m);
|
||||
/// let (cks, sks) = gen_keys(param);
|
||||
/// let wopbs_key = WopbsKey::new_wopbs_key_only_for_wopbs(&cks, &sks);
|
||||
///
|
||||
/// let mut msg_space = 1;
|
||||
|
||||
@@ -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(¶ms.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(¶ms.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(¶ms.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(¶ms.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(¶ms.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(¶ms.0);
|
||||
let (cks, sks) = gen_keys(params.0);
|
||||
let wopbs_key = KEY_CACHE_WOPBS.get_from_params(params);
|
||||
|
||||
let mut msg_space: u64 = 1;
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
|
||||
|
||||
@@ -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(),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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),
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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> {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>(
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>) {
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user