chore: bump to 1.1 and add V1_1 parameters

- add aliases for tests to avoid having to upgrade too many locations
This commit is contained in:
Arthur Meyre
2025-03-19 11:55:13 +01:00
parent 8287f59ebd
commit dc9afe1146
263 changed files with 14191 additions and 1954 deletions

View File

@@ -129,7 +129,7 @@ Other sizes than 64 bit are expected to be available in the future.
# FHE shortint Trivium implementation # FHE shortint Trivium implementation
The same implementation is also available for generic Ciphertexts representing bits (meant to be used with parameters `V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128`). The same implementation is also available for generic Ciphertexts representing bits (meant to be used with parameters `V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128`).
It uses a lower level API of tfhe-rs, so the syntax is a little bit different. It also implements the `TransCiphering` trait. For optimization purposes, it does not internally run It uses a lower level API of tfhe-rs, so the syntax is a little bit different. It also implements the `TransCiphering` trait. For optimization purposes, it does not internally run
on the same cryptographic parameters as the high level API of tfhe-rs. As such, it requires the usage of a casting key, to switch from one parameter space to another, which makes on the same cryptographic parameters as the high level API of tfhe-rs. As such, it requires the usage of a casting key, to switch from one parameter space to another, which makes
its setup a little more intricate. its setup a little more intricate.
@@ -137,10 +137,10 @@ its setup a little more intricate.
Example code: Example code:
```rust ```rust
use tfhe::shortint::prelude::*; use tfhe::shortint::prelude::*;
use tfhe::shortint::parameters::v1_0::{ use tfhe::shortint::parameters::v1_1::{
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
}; };
use tfhe::{ConfigBuilder, generate_keys, FheUint64}; use tfhe::{ConfigBuilder, generate_keys, FheUint64};
use tfhe::prelude::*; use tfhe::prelude::*;
@@ -148,17 +148,17 @@ use tfhe_trivium::TriviumStreamShortint;
fn test_shortint() { fn test_shortint() {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (hl_client_key, hl_server_key) = generate_keys(config); let (hl_client_key, hl_server_key) = generate_keys(config);
let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into(); let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into();
let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into(); let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into();
let (client_key, server_key): (ClientKey, ServerKey) = gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); let (client_key, server_key): (ClientKey, ServerKey) = gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key, Some(&server_key)), (&client_key, Some(&server_key)),
(&underlying_ck, &underlying_sk), (&underlying_ck, &underlying_sk),
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128_2M128,
); );
let key_string = "0053A6F94C9FF24598EB".to_string(); let key_string = "0053A6F94C9FF24598EB".to_string();

View File

@@ -1,9 +1,9 @@
use criterion::Criterion; use criterion::Criterion;
use tfhe::prelude::*; use tfhe::prelude::*;
use tfhe::shortint::parameters::v1_0::{ use tfhe::shortint::parameters::v1_1::{
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}; };
use tfhe::shortint::prelude::*; use tfhe::shortint::prelude::*;
use tfhe::{generate_keys, ConfigBuilder, FheUint64}; use tfhe::{generate_keys, ConfigBuilder, FheUint64};
@@ -11,19 +11,19 @@ use tfhe_trivium::{KreyviumStreamShortint, TransCiphering};
pub fn kreyvium_shortint_warmup(c: &mut Criterion) { pub fn kreyvium_shortint_warmup(c: &mut Criterion) {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (hl_client_key, hl_server_key) = generate_keys(config); let (hl_client_key, hl_server_key) = generate_keys(config);
let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into(); let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into();
let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into(); let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into();
let (client_key, server_key): (ClientKey, ServerKey) = let (client_key, server_key): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key, Some(&server_key)), (&client_key, Some(&server_key)),
(&underlying_ck, &underlying_sk), (&underlying_ck, &underlying_sk),
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
); );
let key_string = "0053A6F94C9FF24598EB000000000000".to_string(); let key_string = "0053A6F94C9FF24598EB000000000000".to_string();
@@ -64,19 +64,19 @@ pub fn kreyvium_shortint_warmup(c: &mut Criterion) {
pub fn kreyvium_shortint_gen(c: &mut Criterion) { pub fn kreyvium_shortint_gen(c: &mut Criterion) {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (hl_client_key, hl_server_key) = generate_keys(config); let (hl_client_key, hl_server_key) = generate_keys(config);
let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into(); let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into();
let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into(); let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into();
let (client_key, server_key): (ClientKey, ServerKey) = let (client_key, server_key): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key, Some(&server_key)), (&client_key, Some(&server_key)),
(&underlying_ck, &underlying_sk), (&underlying_ck, &underlying_sk),
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
); );
let key_string = "0053A6F94C9FF24598EB000000000000".to_string(); let key_string = "0053A6F94C9FF24598EB000000000000".to_string();
@@ -112,19 +112,19 @@ pub fn kreyvium_shortint_gen(c: &mut Criterion) {
pub fn kreyvium_shortint_trans(c: &mut Criterion) { pub fn kreyvium_shortint_trans(c: &mut Criterion) {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (hl_client_key, hl_server_key) = generate_keys(config); let (hl_client_key, hl_server_key) = generate_keys(config);
let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into(); let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into();
let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into(); let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into();
let (client_key, server_key): (ClientKey, ServerKey) = let (client_key, server_key): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key, Some(&server_key)), (&client_key, Some(&server_key)),
(&underlying_ck, &underlying_sk), (&underlying_ck, &underlying_sk),
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
); );
let key_string = "0053A6F94C9FF24598EB000000000000".to_string(); let key_string = "0053A6F94C9FF24598EB000000000000".to_string();

View File

@@ -1,9 +1,9 @@
use criterion::Criterion; use criterion::Criterion;
use tfhe::prelude::*; use tfhe::prelude::*;
use tfhe::shortint::parameters::v1_0::{ use tfhe::shortint::parameters::v1_1::{
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}; };
use tfhe::shortint::prelude::*; use tfhe::shortint::prelude::*;
use tfhe::{generate_keys, ConfigBuilder, FheUint64}; use tfhe::{generate_keys, ConfigBuilder, FheUint64};
@@ -11,19 +11,19 @@ use tfhe_trivium::{TransCiphering, TriviumStreamShortint};
pub fn trivium_shortint_warmup(c: &mut Criterion) { pub fn trivium_shortint_warmup(c: &mut Criterion) {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (hl_client_key, hl_server_key) = generate_keys(config); let (hl_client_key, hl_server_key) = generate_keys(config);
let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into(); let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into();
let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into(); let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into();
let (client_key, server_key): (ClientKey, ServerKey) = let (client_key, server_key): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key, Some(&server_key)), (&client_key, Some(&server_key)),
(&underlying_ck, &underlying_sk), (&underlying_ck, &underlying_sk),
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
); );
let key_string = "0053A6F94C9FF24598EB".to_string(); let key_string = "0053A6F94C9FF24598EB".to_string();
@@ -64,19 +64,19 @@ pub fn trivium_shortint_warmup(c: &mut Criterion) {
pub fn trivium_shortint_gen(c: &mut Criterion) { pub fn trivium_shortint_gen(c: &mut Criterion) {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (hl_client_key, hl_server_key) = generate_keys(config); let (hl_client_key, hl_server_key) = generate_keys(config);
let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into(); let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into();
let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into(); let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into();
let (client_key, server_key): (ClientKey, ServerKey) = let (client_key, server_key): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key, Some(&server_key)), (&client_key, Some(&server_key)),
(&underlying_ck, &underlying_sk), (&underlying_ck, &underlying_sk),
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
); );
let key_string = "0053A6F94C9FF24598EB".to_string(); let key_string = "0053A6F94C9FF24598EB".to_string();
@@ -112,19 +112,19 @@ pub fn trivium_shortint_gen(c: &mut Criterion) {
pub fn trivium_shortint_trans(c: &mut Criterion) { pub fn trivium_shortint_trans(c: &mut Criterion) {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (hl_client_key, hl_server_key) = generate_keys(config); let (hl_client_key, hl_server_key) = generate_keys(config);
let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into(); let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into();
let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into(); let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into();
let (client_key, server_key): (ClientKey, ServerKey) = let (client_key, server_key): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key, Some(&server_key)), (&client_key, Some(&server_key)),
(&underlying_ck, &underlying_sk), (&underlying_ck, &underlying_sk),
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
); );
let key_string = "0053A6F94C9FF24598EB".to_string(); let key_string = "0053A6F94C9FF24598EB".to_string();

View File

@@ -1,9 +1,9 @@
use crate::{KreyviumStream, KreyviumStreamByte, KreyviumStreamShortint, TransCiphering}; use crate::{KreyviumStream, KreyviumStreamByte, KreyviumStreamShortint, TransCiphering};
use tfhe::prelude::*; use tfhe::prelude::*;
use tfhe::shortint::parameters::v1_0::{ use tfhe::shortint::parameters::v1_1::{
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}; };
use tfhe::{generate_keys, ConfigBuilder, FheBool, FheUint64, FheUint8}; use tfhe::{generate_keys, ConfigBuilder, FheBool, FheUint64, FheUint8};
// Values for these tests come from the github repo renaud1239/Kreyvium, // Values for these tests come from the github repo renaud1239/Kreyvium,
@@ -221,19 +221,19 @@ use tfhe::shortint::prelude::*;
#[test] #[test]
fn kreyvium_test_shortint_long() { fn kreyvium_test_shortint_long() {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (hl_client_key, hl_server_key) = generate_keys(config); let (hl_client_key, hl_server_key) = generate_keys(config);
let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into(); let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into();
let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into(); let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into();
let (client_key, server_key): (ClientKey, ServerKey) = let (client_key, server_key): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key, Some(&server_key)), (&client_key, Some(&server_key)),
(&underlying_ck, &underlying_sk), (&underlying_ck, &underlying_sk),
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
); );
let key_string = "0053A6F94C9FF24598EB000000000000".to_string(); let key_string = "0053A6F94C9FF24598EB000000000000".to_string();

View File

@@ -1,9 +1,9 @@
use crate::{TransCiphering, TriviumStream, TriviumStreamByte, TriviumStreamShortint}; use crate::{TransCiphering, TriviumStream, TriviumStreamByte, TriviumStreamShortint};
use tfhe::prelude::*; use tfhe::prelude::*;
use tfhe::shortint::parameters::v1_0::{ use tfhe::shortint::parameters::v1_1::{
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}; };
use tfhe::{generate_keys, ConfigBuilder, FheBool, FheUint64, FheUint8}; use tfhe::{generate_keys, ConfigBuilder, FheBool, FheUint64, FheUint8};
// Values for these tests come from the github repo cantora/avr-crypto-lib, commit 2a5b018, // Values for these tests come from the github repo cantora/avr-crypto-lib, commit 2a5b018,
@@ -357,19 +357,19 @@ use tfhe::shortint::prelude::*;
#[test] #[test]
fn trivium_test_shortint_long() { fn trivium_test_shortint_long() {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (hl_client_key, hl_server_key) = generate_keys(config); let (hl_client_key, hl_server_key) = generate_keys(config);
let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into(); let underlying_ck: tfhe::shortint::ClientKey = (*hl_client_key.as_ref()).clone().into();
let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into(); let underlying_sk: tfhe::shortint::ServerKey = (*hl_server_key.as_ref()).clone().into();
let (client_key, server_key): (ClientKey, ServerKey) = let (client_key, server_key): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key, Some(&server_key)), (&client_key, Some(&server_key)),
(&underlying_ck, &underlying_sk), (&underlying_ck, &underlying_sk),
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
); );
let key_string = "0053A6F94C9FF24598EB".to_string(); let key_string = "0053A6F94C9FF24598EB".to_string();

View File

@@ -19,17 +19,16 @@ SECURITY_LEVEL_THRESHOLD_SOFT = 132
SECURITY_LEVEL_THRESHOLD_HARD = 128 SECURITY_LEVEL_THRESHOLD_HARD = 128
def check_security(filename): def check_security(filepath):
""" """
Run lattice estimator to determine if a parameters set is secure or not. Run lattice estimator to determine if a parameters set is secure or not.
:param filename: name of the file containing parameters set :param filepath: path of the file containing parameters set
:return: :class:`list` of parameters to update :return: :class:`list` of parameters to update
""" """
filepath = pathlib.Path("ci", filename)
load(filepath)
print(f"Parsing parameters in {filepath}") print(f"Parsing parameters in {filepath}")
load(filepath)
to_update = [] to_update = []
to_watch = [] to_watch = []
@@ -92,14 +91,14 @@ if __name__ == "__main__":
params_to_update = [] params_to_update = []
params_to_watch = [] params_to_watch = []
for params_filename in ( this_file = pathlib.Path(__file__).resolve()
"boolean_parameters_lattice_estimator.sage", this_file_sage_source = this_file if this_file.suffix == ".sage" else this_file.with_suffix("")
"shortint_classic_parameters_lattice_estimator.sage", parent_dir = this_file.parent
"shortint_multi_bit_parameters_lattice_estimator.sage", parameter_files = sorted(list(parent_dir.glob("*.sage")))
"shortint_cpke_parameters_lattice_estimator.sage", parameter_files.remove(this_file_sage_source)
"shortint_list_compression_parameters_lattice_estimator.sage",
): for params_file in parameter_files:
to_update, to_watch = check_security(params_filename) to_update, to_watch = check_security(params_file)
params_to_update.extend(to_update) params_to_update.extend(to_update)
params_to_watch.extend(to_watch) params_to_watch.extend(to_watch)

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "tfhe" name = "tfhe"
version = "1.0.0" version = "1.1.0"
edition = "2021" edition = "2021"
readme = "../README.md" readme = "../README.md"
keywords = ["fully", "homomorphic", "encryption", "fhe", "cryptography"] keywords = ["fully", "homomorphic", "encryption", "fhe", "cryptography"]

View File

@@ -11,19 +11,19 @@ use tfhe::boolean::prelude::*;
use tfhe::core_crypto::prelude::*; use tfhe::core_crypto::prelude::*;
use tfhe::keycache::NamedParam; use tfhe::keycache::NamedParam;
use tfhe::shortint::parameters::current_params::{ use tfhe::shortint::parameters::current_params::{
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, VEC_ALL_MULTI_BIT_PBS_PARAMETERS, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, VEC_ALL_MULTI_BIT_PBS_PARAMETERS,
}; };
#[cfg(not(feature = "gpu"))] #[cfg(not(feature = "gpu"))]
use tfhe::shortint::parameters::current_params::{ use tfhe::shortint::parameters::current_params::{
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
}; };
use tfhe::shortint::parameters::{ use tfhe::shortint::parameters::{
COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
@@ -31,12 +31,12 @@ use tfhe::shortint::parameters::{
}; };
#[cfg(feature = "gpu")] #[cfg(feature = "gpu")]
use tfhe::shortint::parameters::{ use tfhe::shortint::parameters::{
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M128,
}; };
use tfhe::shortint::prelude::*; use tfhe::shortint::prelude::*;
use tfhe::shortint::{MultiBitPBSParameters, PBSParameters}; use tfhe::shortint::{MultiBitPBSParameters, PBSParameters};
@@ -44,38 +44,38 @@ use tfhe::shortint::{MultiBitPBSParameters, PBSParameters};
#[cfg(not(feature = "gpu"))] #[cfg(not(feature = "gpu"))]
const SHORTINT_BENCH_PARAMS: [ClassicPBSParameters; 5] = [ const SHORTINT_BENCH_PARAMS: [ClassicPBSParameters; 5] = [
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128,
]; ];
#[cfg(feature = "gpu")] #[cfg(feature = "gpu")]
const SHORTINT_BENCH_PARAMS: [ClassicPBSParameters; 4] = [ const SHORTINT_BENCH_PARAMS: [ClassicPBSParameters; 4] = [
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
]; ];
#[cfg(not(feature = "gpu"))] #[cfg(not(feature = "gpu"))]
const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [ const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
]; ];
#[cfg(feature = "gpu")] #[cfg(feature = "gpu")]
const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [ const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
]; ];
const BOOLEAN_BENCH_PARAMS: [(&str, BooleanParameters); 2] = [ const BOOLEAN_BENCH_PARAMS: [(&str, BooleanParameters); 2] = [
@@ -583,7 +583,7 @@ mod cuda {
#[cfg(feature = "gpu")] #[cfg(feature = "gpu")]
use cuda::cuda_keyswitch_group; use cuda::cuda_keyswitch_group;
use tfhe::shortint::parameters::v1_0::VEC_ALL_CLASSIC_PBS_PARAMETERS; use tfhe::shortint::parameters::v1_1::VEC_ALL_CLASSIC_PBS_PARAMETERS;
pub fn keyswitch_group() { pub fn keyswitch_group() {
let mut criterion: Criterion<_> = (Criterion::default() let mut criterion: Criterion<_> = (Criterion::default()

View File

@@ -15,37 +15,37 @@ use tfhe::shortint::parameters::current_params::*;
use tfhe::shortint::parameters::*; use tfhe::shortint::parameters::*;
const SHORTINT_BENCH_PARAMS_TUNIFORM: [ClassicPBSParameters; 4] = [ const SHORTINT_BENCH_PARAMS_TUNIFORM: [ClassicPBSParameters; 4] = [
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_TUNIFORM_2M128, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_TUNIFORM_2M128,
]; ];
const SHORTINT_BENCH_PARAMS_GAUSSIAN: [ClassicPBSParameters; 4] = [ const SHORTINT_BENCH_PARAMS_GAUSSIAN: [ClassicPBSParameters; 4] = [
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128,
]; ];
#[cfg(feature = "gpu")] #[cfg(feature = "gpu")]
const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [ const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
]; ];
#[cfg(not(feature = "gpu"))] #[cfg(not(feature = "gpu"))]
const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [ const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
]; ];
fn benchmark_parameters() -> Vec<(String, CryptoParametersRecord<u64>)> { fn benchmark_parameters() -> Vec<(String, CryptoParametersRecord<u64>)> {

View File

@@ -19,37 +19,37 @@ use tfhe::shortint::parameters::current_params::*;
use tfhe::shortint::parameters::*; use tfhe::shortint::parameters::*;
const SHORTINT_BENCH_PARAMS_TUNIFORM: [ClassicPBSParameters; 4] = [ const SHORTINT_BENCH_PARAMS_TUNIFORM: [ClassicPBSParameters; 4] = [
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_TUNIFORM_2M128, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_TUNIFORM_2M128,
]; ];
const SHORTINT_BENCH_PARAMS_GAUSSIAN: [ClassicPBSParameters; 4] = [ const SHORTINT_BENCH_PARAMS_GAUSSIAN: [ClassicPBSParameters; 4] = [
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128,
]; ];
#[cfg(feature = "gpu")] #[cfg(feature = "gpu")]
const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [ const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_3_CARRY_3_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
]; ];
#[cfg(not(feature = "gpu"))] #[cfg(not(feature = "gpu"))]
const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [ const SHORTINT_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 6] = [
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
]; ];
const BOOLEAN_BENCH_PARAMS: [(&str, BooleanParameters); 2] = [ const BOOLEAN_BENCH_PARAMS: [(&str, BooleanParameters); 2] = [
@@ -103,17 +103,17 @@ fn throughput_benchmark_parameters_64bits() -> Vec<(String, CryptoParametersReco
let parameters = if cfg!(feature = "gpu") { let parameters = if cfg!(feature = "gpu") {
vec![ vec![
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
] ]
} else { } else {
vec![ vec![
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128,
] ]
}; };

View File

@@ -273,7 +273,7 @@ fn main() {
#[cfg(not(feature = "gpu"))] #[cfg(not(feature = "gpu"))]
let params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
#[cfg(feature = "gpu")] #[cfg(feature = "gpu")]
let params = PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS; let params = PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS;
let config = ConfigBuilder::with_custom_parameters(params).build(); let config = ConfigBuilder::with_custom_parameters(params).build();
let cks = ClientKey::generate(config); let cks = ClientKey::generate(config);

View File

@@ -169,7 +169,7 @@ mod cuda {
use tfhe::integer::gpu::ciphertext::compressed_ciphertext_list::CudaCompressedCiphertextListBuilder; use tfhe::integer::gpu::ciphertext::compressed_ciphertext_list::CudaCompressedCiphertextListBuilder;
use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
use tfhe::integer::gpu::gen_keys_radix_gpu; use tfhe::integer::gpu::gen_keys_radix_gpu;
use tfhe::shortint::parameters::current_params::*; use tfhe::shortint::parameters::*;
fn gpu_glwe_packing(c: &mut Criterion) { fn gpu_glwe_packing(c: &mut Criterion) {
let bench_name = "integer::cuda::packing_compression"; let bench_name = "integer::cuda::packing_compression";
@@ -180,8 +180,8 @@ mod cuda {
let stream = CudaStreams::new_multi_gpu(); let stream = CudaStreams::new_multi_gpu();
let param = V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; let param = PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let comp_param = COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let comp_param = COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let log_message_modulus = param.message_modulus.0.ilog2() as usize; let log_message_modulus = param.message_modulus.0.ilog2() as usize;

View File

@@ -39,10 +39,10 @@ fn pke_zk_proof(c: &mut Criterion) {
PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
), ),
// Non default params use the V1_0 prefix // Non default params use the V1_1 prefix
( (
V1_0_PARAM_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1, V1_1_PARAM_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1,
V1_0_PARAM_KEYSWITCH_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1, V1_1_PARAM_KEYSWITCH_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
), ),
] { ] {
@@ -183,8 +183,8 @@ fn pke_zk_verify(c: &mut Criterion, results_file: &Path) {
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
), ),
( (
V1_0_PARAM_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1, V1_1_PARAM_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1,
V1_0_PARAM_KEYSWITCH_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1, V1_1_PARAM_KEYSWITCH_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
), ),
] { ] {

View File

@@ -13,43 +13,43 @@ use tfhe::shortint::{Ciphertext, CompressedServerKey, ServerKey};
const SERVER_KEY_BENCH_PARAMS: [ClassicPBSParameters; 5] = [ const SERVER_KEY_BENCH_PARAMS: [ClassicPBSParameters; 5] = [
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128,
]; ];
const SERVER_KEY_BENCH_PARAMS_EXTENDED: [ClassicPBSParameters; 16] = [ const SERVER_KEY_BENCH_PARAMS_EXTENDED: [ClassicPBSParameters; 16] = [
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_0_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_0_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_0_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_0_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_4_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_4_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_5_CARRY_0_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_5_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_6_CARRY_0_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_6_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_7_CARRY_0_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_7_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_8_CARRY_0_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_8_CARRY_0_KS_PBS_GAUSSIAN_2M128,
]; ];
const SERVER_KEY_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 2] = [ const SERVER_KEY_MULTI_BIT_BENCH_PARAMS: [MultiBitPBSParameters; 2] = [
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
]; ];
const SERVER_KEY_MULTI_BIT_BENCH_PARAMS_EXTENDED: [MultiBitPBSParameters; 6] = [ const SERVER_KEY_MULTI_BIT_BENCH_PARAMS_EXTENDED: [MultiBitPBSParameters; 6] = [
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
]; ];
enum BenchParamsSet { enum BenchParamsSet {

View File

@@ -2,8 +2,8 @@ use crate::utilities::{write_to_json, OperatorType};
use criterion::Criterion; use criterion::Criterion;
use rayon::prelude::*; use rayon::prelude::*;
use tfhe::shortint::parameters::current_params::{ use tfhe::shortint::parameters::current_params::{
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}; };
use tfhe::shortint::prelude::*; use tfhe::shortint::prelude::*;
@@ -12,12 +12,12 @@ pub fn pack_cast_64(c: &mut Criterion) {
let mut bench_group = c.benchmark_group(bench_name); let mut bench_group = c.benchmark_group(bench_name);
let (client_key_1, server_key_1): (ClientKey, ServerKey) = let (client_key_1, server_key_1): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let (client_key_2, server_key_2): (ClientKey, ServerKey) = let (client_key_2, server_key_2): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128);
let ks_param = V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128; let ks_param = V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128;
let ks_param_name = "V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128"; let ks_param_name = "V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128";
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key_1, Some(&server_key_1)), (&client_key_1, Some(&server_key_1)),
@@ -63,12 +63,12 @@ pub fn pack_cast(c: &mut Criterion) {
let mut bench_group = c.benchmark_group(bench_name); let mut bench_group = c.benchmark_group(bench_name);
let (client_key_1, server_key_1): (ClientKey, ServerKey) = let (client_key_1, server_key_1): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let (client_key_2, server_key_2): (ClientKey, ServerKey) = let (client_key_2, server_key_2): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128);
let ks_param = V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128; let ks_param = V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128;
let ks_param_name = "V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128"; let ks_param_name = "V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128";
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key_1, Some(&server_key_1)), (&client_key_1, Some(&server_key_1)),
@@ -104,12 +104,12 @@ pub fn cast(c: &mut Criterion) {
let mut bench_group = c.benchmark_group(bench_name); let mut bench_group = c.benchmark_group(bench_name);
let (client_key_1, server_key_1): (ClientKey, ServerKey) = let (client_key_1, server_key_1): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128);
let (client_key_2, server_key_2): (ClientKey, ServerKey) = let (client_key_2, server_key_2): (ClientKey, ServerKey) =
gen_keys(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128); gen_keys(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128);
let ks_param = V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128; let ks_param = V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128;
let ks_param_name = "V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128"; let ks_param_name = "V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128";
let ksk = KeySwitchingKey::new( let ksk = KeySwitchingKey::new(
(&client_key_1, Some(&server_key_1)), (&client_key_1, Some(&server_key_1)),

View File

@@ -40,10 +40,10 @@ pub mod shortint_utils {
use std::vec::IntoIter; use std::vec::IntoIter;
use tfhe::shortint::parameters::compact_public_key_only::CompactPublicKeyEncryptionParameters; use tfhe::shortint::parameters::compact_public_key_only::CompactPublicKeyEncryptionParameters;
#[cfg(not(feature = "gpu"))] #[cfg(not(feature = "gpu"))]
use tfhe::shortint::parameters::current_params::V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64; use tfhe::shortint::parameters::current_params::V1_1_PARAM_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128;
use tfhe::shortint::parameters::list_compression::CompressionParameters; use tfhe::shortint::parameters::list_compression::CompressionParameters;
#[cfg(feature = "gpu")] #[cfg(feature = "gpu")]
use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS; use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS;
use tfhe::shortint::parameters::{ use tfhe::shortint::parameters::{
ShortintKeySwitchingParameters, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, ShortintKeySwitchingParameters, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
}; };
@@ -66,10 +66,10 @@ pub mod shortint_utils {
if env_config.is_multi_bit { if env_config.is_multi_bit {
#[cfg(feature = "gpu")] #[cfg(feature = "gpu")]
let params = vec![PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS.into()]; let params = vec![PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS.into()];
#[cfg(not(feature = "gpu"))] #[cfg(not(feature = "gpu"))]
let params = vec![ let params = vec![
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(), V1_1_PARAM_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128.into(),
]; ];
let params_and_bit_sizes = iproduct!(params, env_config.bit_sizes()); let params_and_bit_sizes = iproduct!(params, env_config.bit_sizes());

View File

@@ -215,7 +215,7 @@ int main(void) {
config_builder_default(&builder); config_builder_default(&builder);
config_builder_use_custom_parameters(&builder, config_builder_use_custom_parameters(&builder,
SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128); SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128);
config_builder_build(builder, &config); config_builder_build(builder, &config);
ClientKey *client_key = NULL; ClientKey *client_key = NULL;
@@ -243,7 +243,7 @@ int main(void) {
config_builder_default(&builder); config_builder_default(&builder);
config_builder_use_custom_parameters(&builder, config_builder_use_custom_parameters(&builder,
SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128); SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128);
config_builder_build(builder, &config); config_builder_build(builder, &config);
ClientKey *client_key = NULL; ClientKey *client_key = NULL;

View File

@@ -647,7 +647,7 @@ int main(void) {
assert(ok == 0); assert(ok == 0);
// Then use small parameters, those are gaussians as we don't have small TUniform params // Then use small parameters, those are gaussians as we don't have small TUniform params
ok = config_builder_use_custom_parameters( ok = config_builder_use_custom_parameters(
&builder, SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128); &builder, SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128);
ok = config_builder_build(builder, &config); ok = config_builder_build(builder, &config);
assert(ok == 0); assert(ok == 0);

View File

@@ -15,7 +15,7 @@ void test_predefined_keygen_w_serde(void) {
ShortintCompressedCiphertext *cct = NULL; ShortintCompressedCiphertext *cct = NULL;
ShortintCompressedCiphertext *deser_cct = NULL; ShortintCompressedCiphertext *deser_cct = NULL;
ShortintCiphertext *decompressed_ct = NULL; ShortintCiphertext *decompressed_ct = NULL;
ShortintPBSParameters params = SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128; ShortintPBSParameters params = SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128;
int gen_keys_ok = shortint_gen_keys_with_parameters(params, &cks, &sks); int gen_keys_ok = shortint_gen_keys_with_parameters(params, &cks, &sks);
assert(gen_keys_ok == 0); assert(gen_keys_ok == 0);
@@ -79,7 +79,7 @@ void test_server_key_trivial_encrypt(void) {
ShortintClientKey *cks = NULL; ShortintClientKey *cks = NULL;
ShortintServerKey *sks = NULL; ShortintServerKey *sks = NULL;
ShortintCiphertext *ct = NULL; ShortintCiphertext *ct = NULL;
ShortintPBSParameters params = SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128; ShortintPBSParameters params = SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128;
int gen_keys_ok = shortint_gen_keys_with_parameters(params, &cks, &sks); int gen_keys_ok = shortint_gen_keys_with_parameters(params, &cks, &sks);
assert(gen_keys_ok == 0); assert(gen_keys_ok == 0);
@@ -219,10 +219,10 @@ void test_compressed_public_keygen(ShortintPBSParameters params) {
int main(void) { int main(void) {
test_predefined_keygen_w_serde(); test_predefined_keygen_w_serde();
test_custom_keygen(); test_custom_keygen();
test_public_keygen(SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128); test_public_keygen(SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128);
test_public_keygen(SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128); test_public_keygen(SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128);
test_compressed_public_keygen(SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128); test_compressed_public_keygen(SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128);
test_compressed_public_keygen(SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128); test_compressed_public_keygen(SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128);
test_server_key_trivial_encrypt(); test_server_key_trivial_encrypt();
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }

View File

@@ -41,7 +41,7 @@ void test_shortint_pbs_2_bits_message(void) {
ShortintPBSLookupTable *lookup_table = NULL; ShortintPBSLookupTable *lookup_table = NULL;
ShortintClientKey *cks = NULL; ShortintClientKey *cks = NULL;
ShortintServerKey *sks = NULL; ShortintServerKey *sks = NULL;
ShortintPBSParameters params = SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128; ShortintPBSParameters params = SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128;
int gen_keys_ok = shortint_gen_keys_with_parameters(params, &cks, &sks); int gen_keys_ok = shortint_gen_keys_with_parameters(params, &cks, &sks);
assert(gen_keys_ok == 0); assert(gen_keys_ok == 0);
@@ -115,7 +115,7 @@ void test_shortint_bivariate_pbs_2_bits_message(void) {
ShortintBivariatePBSLookupTable *lookup_table = NULL; ShortintBivariatePBSLookupTable *lookup_table = NULL;
ShortintClientKey *cks = NULL; ShortintClientKey *cks = NULL;
ShortintServerKey *sks = NULL; ShortintServerKey *sks = NULL;
ShortintPBSParameters params = SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128; ShortintPBSParameters params = SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128;
int gen_keys_ok = shortint_gen_keys_with_parameters(params, &cks, &sks); int gen_keys_ok = shortint_gen_keys_with_parameters(params, &cks, &sks);
assert(gen_keys_ok == 0); assert(gen_keys_ok == 0);

View File

@@ -541,7 +541,7 @@ void test_server_key(void) {
ShortintPBSParameters params = SHORTINT_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; ShortintPBSParameters params = SHORTINT_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
// We don't have TUniform small params, use gaussian instead // We don't have TUniform small params, use gaussian instead
ShortintPBSParameters params_small = SHORTINT_V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintPBSParameters params_small = SHORTINT_V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
assert(params.message_modulus == 1 << message_bits); assert(params.message_modulus == 1 << message_bits);
assert(params.carry_modulus == 1 << carry_bits); assert(params.carry_modulus == 1 << carry_bits);

View File

@@ -13,11 +13,11 @@ The following example shows how to use parallelized bootstrapping by choosing mu
```rust ```rust
use tfhe::prelude::*; use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint32}; use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint32};
use tfhe::shortint::parameters::v1_0::V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64; use tfhe::shortint::parameters::v1_1::V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64;
fn main() -> Result<(), Box<dyn std::error::Error>> { fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64) .use_custom_parameters(V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64)
.build(); .build();
let (keys, server_keys) = generate_keys(config); let (keys, server_keys) = generate_keys(config);
@@ -45,12 +45,12 @@ Here's an example:
```rust ```rust
use tfhe::prelude::*; use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint32}; use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint32};
use tfhe::shortint::parameters::v1_0::V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64; use tfhe::shortint::parameters::v1_1::V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64;
fn main() -> Result<(), Box<dyn std::error::Error>> { fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters( .use_custom_parameters(
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.with_deterministic_execution(), V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.with_deterministic_execution(),
) )
.build(); .build();

View File

@@ -18,7 +18,7 @@ This guide explains how to update your existing program to leverage GPU accelera
To use the **TFHE-rs** GPU backend in your project, add the following dependency in your `Cargo.toml`. To use the **TFHE-rs** GPU backend in your project, add the following dependency in your `Cargo.toml`.
```toml ```toml
tfhe = { version = "~1.0.0", features = ["boolean", "shortint", "integer", "gpu"] } tfhe = { version = "~1.1.0", features = ["boolean", "shortint", "integer", "gpu"] }
``` ```
{% hint style="success" %} {% hint style="success" %}
@@ -184,7 +184,7 @@ The way to do it is very similar to how it's done on the CPU. The following exam
```rust ```rust
use tfhe::prelude::*; use tfhe::prelude::*;
use tfhe::shortint::parameters::{ use tfhe::shortint::parameters::{
COMP_PARAM_MESSAGE_2_CARRY_2, PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS, COMP_PARAM_MESSAGE_2_CARRY_2, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS,
}; };
use tfhe::{ use tfhe::{
set_server_key, CompressedCiphertextList, CompressedCiphertextListBuilder, FheBool, set_server_key, CompressedCiphertextList, CompressedCiphertextListBuilder, FheBool,
@@ -193,7 +193,7 @@ use tfhe::{
fn main() { fn main() {
let config = let config =
tfhe::ConfigBuilder::with_custom_parameters(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS) tfhe::ConfigBuilder::with_custom_parameters(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS)
.enable_compression(COMP_PARAM_MESSAGE_2_CARRY_2) .enable_compression(COMP_PARAM_MESSAGE_2_CARRY_2)
.build(); .build();

View File

@@ -106,11 +106,11 @@ use tfhe::zk::{CompactPkeCrs, ZkComputeLoad};
pub fn main() -> Result<(), Box<dyn std::error::Error>> { pub fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut rng = thread_rng(); let mut rng = thread_rng();
let params = tfhe::shortint::parameters::v1_0::V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let params = tfhe::shortint::parameters::v1_1::V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
// Indicate which parameters to use for the Compact Public Key encryption // Indicate which parameters to use for the Compact Public Key encryption
let cpk_params = tfhe::shortint::parameters::v1_0::compact_public_key_only::p_fail_2_minus_128::ks_pbs::V1_0_PARAM_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1; let cpk_params = tfhe::shortint::parameters::v1_1::compact_public_key_only::p_fail_2_minus_128::ks_pbs::V1_1_PARAM_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1;
// And parameters allowing to keyswitch/cast to the computation parameters. // And parameters allowing to keyswitch/cast to the computation parameters.
let casting_params = tfhe::shortint::parameters::v1_0::key_switching::p_fail_2_minus_128::ks_pbs::V1_0_PARAM_KEYSWITCH_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1; let casting_params = tfhe::shortint::parameters::v1_1::key_switching::p_fail_2_minus_128::ks_pbs::V1_1_PARAM_KEYSWITCH_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1;
// Enable the dedicated parameters on the config // Enable the dedicated parameters on the config
let config = tfhe::ConfigBuilder::with_custom_parameters(params) let config = tfhe::ConfigBuilder::with_custom_parameters(params)
.use_dedicated_compact_public_key_parameters((cpk_params, casting_params)).build(); .use_dedicated_compact_public_key_parameters((cpk_params, casting_params)).build();

View File

@@ -32,10 +32,10 @@ These default parameters may be updated with in future releases of **TFHE-rs**,
Parameter sets are versioned for backward compatibility. This means that each set of parameters can be tied to a specific version of **TFHE-rs**, so that they remain unchanged and compatible after an upgrade. Parameter sets are versioned for backward compatibility. This means that each set of parameters can be tied to a specific version of **TFHE-rs**, so that they remain unchanged and compatible after an upgrade.
All parameter sets are stored as variables inside the `tfhe::shortint::parameters` module, with submodules named after the versions of **TFHE-rs** in which these parameters where added. For example, parameters added in **TFHE-rs** v1.0 can be found inside `tfhe::shortint::parameters::v1_0`. All parameter sets are stored as variables inside the `tfhe::shortint::parameters` module, with submodules named after the versions of **TFHE-rs** in which these parameters where added. For example, parameters added in **TFHE-rs** v1.0 can be found inside `tfhe::shortint::parameters::v1_1`.
The naming convention of these parameters indicates their capabilities. Taking `tfhe::parameters::v1_0::V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128` as an example: The naming convention of these parameters indicates their capabilities. Taking `tfhe::parameters::v1_1::V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128` as an example:
- `V1_0`: these parameters were introduced in **TFHE-rs** v1.0 - `V1_1`: these parameters were introduced in **TFHE-rs** v1.0
- `MESSAGE_2`: LWE blocks include 2 bits of message - `MESSAGE_2`: LWE blocks include 2 bits of message
- `CARRY_2`: LWE blocks include 2 bits of carry - `CARRY_2`: LWE blocks include 2 bits of carry
- `KS_PBS`: the keyswitch is computed before the bootstrap - `KS_PBS`: the keyswitch is computed before the bootstrap
@@ -50,11 +50,11 @@ You can override the default parameters with the `with_custom_parameters(block_p
```rust ```rust
use tfhe::{ConfigBuilder, generate_keys}; use tfhe::{ConfigBuilder, generate_keys};
use tfhe::shortint::parameters::v1_0::V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128; use tfhe::shortint::parameters::v1_1::V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128;
fn main() { fn main() {
let config = let config =
ConfigBuilder::with_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128) ConfigBuilder::with_custom_parameters(V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
// Client-side // Client-side

View File

@@ -16,7 +16,7 @@ You can load serialized data with the `unversionize` function, even in newer ver
[dependencies] [dependencies]
# ... # ...
tfhe = { version = "~1.0.0", features = ["integer"] } tfhe = { version = "~1.1.0", features = ["integer"] }
tfhe-versionable = "0.5.0" tfhe-versionable = "0.5.0"
bincode = "1.3.3" bincode = "1.3.3"
``` ```

View File

@@ -161,7 +161,7 @@ In the following example, we use [bincode](https://crates.io/crates/bincode) for
[dependencies] [dependencies]
# ... # ...
tfhe = { version = "~1.0.0", features = ["integer"] } tfhe = { version = "~1.1.0", features = ["integer"] }
bincode = "1.3.3" bincode = "1.3.3"
``` ```

View File

@@ -19,7 +19,7 @@ The following example shows a complete workflow of working with encrypted arrays
# Cargo.toml # Cargo.toml
[dependencies] [dependencies]
tfhe = { version = "~1.0.0", features = ["integer"] } tfhe = { version = "~1.1.0", features = ["integer"] }
``` ```
```rust ```rust

View File

@@ -29,7 +29,7 @@ Here is an example:
# Cargo.toml # Cargo.toml
[dependencies] [dependencies]
tfhe = { version = "~1.0.0", features = ["integer", "strings"] } tfhe = { version = "~1.1.0", features = ["integer", "strings"] }
``` ```
```rust ```rust

View File

@@ -6,7 +6,7 @@ This document details the GPU performance benchmarks of homomorphic operations o
All GPU benchmarks were launched on H100 GPUs, and rely on the multithreaded PBS algorithm. All GPU benchmarks were launched on H100 GPUs, and rely on the multithreaded PBS algorithm.
{% endhint %} {% endhint %}
The cryptographic parameters `PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS` were used. The cryptographic parameters `PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS` were used.
## 1xH100 ## 1xH100
Below come the results for the execution on a single H100. Below come the results for the execution on a single H100.

View File

@@ -7,7 +7,7 @@ This document provides instructions to set up **TFHE-rs** in your project.
First, add **TFHE-rs** as a dependency in your `Cargo.toml`. First, add **TFHE-rs** as a dependency in your `Cargo.toml`.
```toml ```toml
tfhe = { version = "~1.0.0", features = ["boolean", "shortint", "integer"] } tfhe = { version = "~1.1.0", features = ["boolean", "shortint", "integer"] }
``` ```
{% hint style="info" %} {% hint style="info" %}
@@ -35,5 +35,5 @@ By default, **TFHE-rs** makes the assumption that hardware AES features are enab
To add support for older CPU, import **TFHE-rs** with the `software-prng` feature in your `Cargo.toml`: To add support for older CPU, import **TFHE-rs** with the `software-prng` feature in your `Cargo.toml`:
```toml ```toml
tfhe = { version = "~1.0.0", features = ["boolean", "shortint", "integer", "software-prng"] } tfhe = { version = "~1.1.0", features = ["boolean", "shortint", "integer", "software-prng"] }
``` ```

View File

@@ -59,7 +59,7 @@ edition = "2021"
Then add the following configuration to include **TFHE-rs**: Then add the following configuration to include **TFHE-rs**:
```toml ```toml
tfhe = { version = "~1.0.0", features = ["integer"] } tfhe = { version = "~1.1.0", features = ["integer"] }
``` ```
Your updated `Cargo.toml` file should look like this: Your updated `Cargo.toml` file should look like this:
@@ -71,7 +71,7 @@ version = "0.1.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]
tfhe = { version = "~1.0.0", features = ["integer"] } tfhe = { version = "~1.1.0", features = ["integer"] }
``` ```
If you are on a different platform please refer to the [installation documentation](installation.md) for configuration options of other supported platforms. If you are on a different platform please refer to the [installation documentation](installation.md) for configuration options of other supported platforms.

View File

@@ -37,7 +37,7 @@ function fhe_uint32_example() {
const U32_MAX = 4294967295; const U32_MAX = 4294967295;
const block_params = new ShortintParameters(ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64); const block_params = new ShortintParameters(ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64);
let config = TfheConfigBuilder.default() let config = TfheConfigBuilder.default()
.build(); .build();
@@ -90,7 +90,7 @@ async function example() {
await initThreadPool(navigator.hardwareConcurrency); await initThreadPool(navigator.hardwareConcurrency);
await init_panic_hook(); await init_panic_hook();
const block_params = new ShortintParameters(ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64); const block_params = new ShortintParameters(ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64);
// .... // ....
} }
``` ```

View File

@@ -9,7 +9,7 @@ Welcome to this tutorial about `TFHE-rs` `core_crypto` module.
To use `TFHE-rs`, it first has to be added as a dependency in the `Cargo.toml`: To use `TFHE-rs`, it first has to be added as a dependency in the `Cargo.toml`:
```toml ```toml
tfhe = { version = "~1.0.0" } tfhe = { version = "~1.1.0" }
``` ```
### Commented code to double a 2-bit message in a leveled fashion and using a PBS with the `core_crypto` module. ### Commented code to double a 2-bit message in a leveled fashion and using a PBS with the `core_crypto` module.

View File

@@ -28,7 +28,7 @@ To use the `FheUint8` type, enable the `integer` feature:
# Cargo.toml # Cargo.toml
[dependencies] [dependencies]
tfhe = { version = "~1.0.0", features = ["integer"] } tfhe = { version = "~1.1.0", features = ["integer"] }
``` ```
The `MyFheString::encrypt` function performs data validation to ensure the input string contains only ASCII characters. The `MyFheString::encrypt` function performs data validation to ensure the input string contains only ASCII characters.
@@ -167,7 +167,7 @@ First, add the feature in your `Cargo.toml`
# Cargo.toml # Cargo.toml
[dependencies] [dependencies]
tfhe = { version = "~1.0.0", features = ["strings"] } tfhe = { version = "~1.1.0", features = ["strings"] }
``` ```
The `FheAsciiString` type allows to simply do homomorphic case changing of encrypted strings (and much more!): The `FheAsciiString` type allows to simply do homomorphic case changing of encrypted strings (and much more!):

View File

@@ -17,7 +17,7 @@ This function returns a Boolean (`true` or `false`) so that the total count of `
```toml ```toml
# Cargo.toml # Cargo.toml
tfhe = { version = "~1.0.0", features = ["integer"] } tfhe = { version = "~1.1.0", features = ["integer"] }
``` ```
First, define the verification function. First, define the verification function.

View File

@@ -4,9 +4,9 @@ use std::io::{stdin, Read};
use std::mem::MaybeUninit; use std::mem::MaybeUninit;
use std::{array, iter}; use std::{array, iter};
use tfhe::prelude::*; use tfhe::prelude::*;
use tfhe::shortint::parameters::v1_0::{ use tfhe::shortint::parameters::v1_1::{
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
}; };
use tfhe::{set_server_key, ClientKey, CompressedServerKey, ConfigBuilder, Device, FheUint32}; use tfhe::{set_server_key, ClientKey, CompressedServerKey, ConfigBuilder, Device, FheUint32};
@@ -190,10 +190,10 @@ fn main() -> Result<(), std::io::Error> {
let config = match args.multibit { let config = match args.multibit {
None => ConfigBuilder::default(), None => ConfigBuilder::default(),
Some(2) => ConfigBuilder::with_custom_parameters( Some(2) => ConfigBuilder::with_custom_parameters(
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
), ),
Some(3) => ConfigBuilder::with_custom_parameters( Some(3) => ConfigBuilder::with_custom_parameters(
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
), ),
Some(v) => { Some(v) => {
panic!("Invalid multibit setting {v}"); panic!("Invalid multibit setting {v}");

View File

@@ -32,9 +32,9 @@ const KSK_PARAMS: [(
ClassicPBSParameters, ClassicPBSParameters,
ShortintKeySwitchingParameters, ShortintKeySwitchingParameters,
); 1] = [( ); 1] = [(
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
)]; )];
fn client_server_keys() { fn client_server_keys() {
@@ -64,12 +64,12 @@ fn client_server_keys() {
let coverage_only: bool = matches.get_flag("coverage_only"); let coverage_only: bool = matches.get_flag("coverage_only");
if multi_bit_only { if multi_bit_only {
const MULTI_BIT_PARAMS: [MultiBitPBSParameters; 6] = [ const MULTI_BIT_PARAMS: [MultiBitPBSParameters; 6] = [
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
]; ];
generate_pbs_multi_bit_keys(&MULTI_BIT_PARAMS); generate_pbs_multi_bit_keys(&MULTI_BIT_PARAMS);
@@ -97,7 +97,7 @@ fn client_server_keys() {
#[cfg(feature = "experimental")] #[cfg(feature = "experimental")]
{ {
const WOPBS_PARAMS: [(ClassicPBSParameters, WopbsParameters); 1] = [( const WOPBS_PARAMS: [(ClassicPBSParameters, WopbsParameters); 1] = [(
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
LEGACY_WOPBS_PARAM_MESSAGE_2_CARRY_2_KS_PBS, LEGACY_WOPBS_PARAM_MESSAGE_2_CARRY_2_KS_PBS,
)]; )];
generate_wopbs_keys(&WOPBS_PARAMS); generate_wopbs_keys(&WOPBS_PARAMS);
@@ -111,21 +111,21 @@ fn client_server_keys() {
// TUniform // TUniform
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
// Gaussian // Gaussian
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_4_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_4_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_5_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_5_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_1_CARRY_6_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_1_CARRY_6_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_2_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_1_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128,
// 2M64 as backup as 2M128 is too slow // 2M64 as backup as 2M128 is too slow
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64,
]; ];
generate_pbs_keys(&PBS_KEYS); generate_pbs_keys(&PBS_KEYS);
@@ -133,19 +133,19 @@ fn client_server_keys() {
{ {
const WOPBS_PARAMS: [(ClassicPBSParameters, WopbsParameters); 4] = [ const WOPBS_PARAMS: [(ClassicPBSParameters, WopbsParameters); 4] = [
( (
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
LEGACY_WOPBS_PARAM_MESSAGE_1_CARRY_1_KS_PBS, LEGACY_WOPBS_PARAM_MESSAGE_1_CARRY_1_KS_PBS,
), ),
( (
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
LEGACY_WOPBS_PARAM_MESSAGE_2_CARRY_2_KS_PBS, LEGACY_WOPBS_PARAM_MESSAGE_2_CARRY_2_KS_PBS,
), ),
( (
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
LEGACY_WOPBS_PARAM_MESSAGE_3_CARRY_3_KS_PBS, LEGACY_WOPBS_PARAM_MESSAGE_3_CARRY_3_KS_PBS,
), ),
( (
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64, V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64,
LEGACY_WOPBS_PARAM_MESSAGE_4_CARRY_4_KS_PBS, LEGACY_WOPBS_PARAM_MESSAGE_4_CARRY_4_KS_PBS,
), ),
]; ];

View File

@@ -9,9 +9,10 @@ use std::path::Path;
use tfhe::integer::U256; use tfhe::integer::U256;
use tfhe::keycache::NamedParam; use tfhe::keycache::NamedParam;
use tfhe::prelude::*; use tfhe::prelude::*;
use tfhe::shortint::parameters::current_params::{ use tfhe::shortint::parameters::{
V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128, PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
}; };
use tfhe::shortint::PBSParameters; use tfhe::shortint::PBSParameters;
use tfhe::{ use tfhe::{
@@ -40,67 +41,13 @@ pub fn cpk_and_cctl_sizes(results_file: &Path) {
let operator = OperatorType::Atomic; let operator = OperatorType::Atomic;
{ {
let params = V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128; let params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let config = ConfigBuilder::default()
.use_custom_parameters(params)
.build();
let (client_key, _) = generate_keys(config);
let test_name = format!("hlapi_sizes_{}_cpk", params.name());
let params: PBSParameters = params.into();
println!("Sizes for: {} and 32 bits", params.name());
let public_key = CompactPublicKey::new(&client_key);
let cpk_size = bincode::serialize(&public_key).unwrap().len();
println!("PK size: {cpk_size} bytes");
write_result(&mut file, &test_name, cpk_size);
write_to_json::<u64, _>(
&test_name,
params,
params.name(),
"CPK",
&operator,
0,
vec![],
);
let test_name = format!("hlapi_sizes_{}_cctl_{NB_CTXT}_len_32_bits", params.name());
let vec_inputs: Vec<_> = (0..NB_CTXT).map(|_| rng.gen::<u32>()).collect();
let encrypted_inputs = CompactCiphertextList::builder(&public_key)
.extend(vec_inputs.iter().copied())
.build();
let cctl_size = bincode::serialize(&encrypted_inputs).unwrap().len();
println!("Compact CT list for {NB_CTXT} CTs: {} bytes", cctl_size);
write_result(&mut file, &test_name, cctl_size);
write_to_json::<u64, _>(
&test_name,
params,
params.name(),
"CCTL",
&operator,
0,
vec![],
);
let expander = encrypted_inputs.expand().unwrap();
for (i, input) in vec_inputs.into_iter().enumerate() {
let expanded: FheUint32 = expander.get(i).unwrap().unwrap();
let clear: u32 = expanded.decrypt(&client_key);
assert_eq!(clear, input);
}
}
{
let params = V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128;
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(params) .use_custom_parameters(params)
.use_dedicated_compact_public_key_parameters((
PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
))
.build(); .build();
let (client_key, _) = generate_keys(config); let (client_key, _) = generate_keys(config);
let test_name = format!("hlapi_sizes_{}_cpk", params.name()); let test_name = format!("hlapi_sizes_{}_cpk", params.name());
@@ -157,57 +104,13 @@ pub fn cpk_and_cctl_sizes(results_file: &Path) {
// 256 bits // 256 bits
{ {
let params = V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128; let params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let config = ConfigBuilder::default()
.use_custom_parameters(params)
.build();
let (client_key, _) = generate_keys(config);
let params: PBSParameters = params.into();
println!("Sizes for: {} and 256 bits", params.name());
let public_key = CompactPublicKey::new(&client_key);
println!(
"PK size: {} bytes",
bincode::serialize(&public_key).unwrap().len()
);
let test_name = format!("hlapi_sizes_{}_cctl_{NB_CTXT}_len_256_bits", params.name());
let vec_inputs: Vec<_> = (0..NB_CTXT).map(|_| U256::from(rng.gen::<u32>())).collect();
let encrypted_inputs = CompactCiphertextList::builder(&public_key)
.extend(vec_inputs.iter().copied())
.build();
let cctl_size = bincode::serialize(&encrypted_inputs).unwrap().len();
println!("Compact CT list for {NB_CTXT} CTs: {} bytes", cctl_size);
write_result(&mut file, &test_name, cctl_size);
write_to_json::<u64, _>(
&test_name,
params,
params.name(),
"CCTL",
&operator,
0,
vec![],
);
let expander = encrypted_inputs.expand().unwrap();
for (i, input) in vec_inputs.into_iter().enumerate() {
let expanded: FheUint256 = expander.get(i).unwrap().unwrap();
let clear: U256 = expanded.decrypt(&client_key);
assert_eq!(clear, input);
}
}
{
let params = V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128;
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(params) .use_custom_parameters(params)
.use_dedicated_compact_public_key_parameters((
PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
))
.build(); .build();
let (client_key, _) = generate_keys(config); let (client_key, _) = generate_keys(config);

View File

@@ -9,9 +9,11 @@ use tfhe::keycache::NamedParam;
use tfhe::shortint::parameters::current_params::{ use tfhe::shortint::parameters::current_params::{
VEC_ALL_CLASSIC_PBS_PARAMETERS, VEC_ALL_COMPACT_PUBLIC_KEY_ENCRYPTION_PARAMETERS, VEC_ALL_CLASSIC_PBS_PARAMETERS, VEC_ALL_COMPACT_PUBLIC_KEY_ENCRYPTION_PARAMETERS,
VEC_ALL_COMPRESSION_PARAMETERS, VEC_ALL_MULTI_BIT_PBS_PARAMETERS, VEC_ALL_COMPRESSION_PARAMETERS, VEC_ALL_MULTI_BIT_PBS_PARAMETERS,
VEC_ALL_NOISE_SQUASHING_PARAMETERS,
}; };
use tfhe::shortint::parameters::{ use tfhe::shortint::parameters::{
CompactPublicKeyEncryptionParameters, CompressionParameters, ShortintParameterSet, CompactPublicKeyEncryptionParameters, CompressionParameters, NoiseSquashingParameters,
ShortintParameterSet,
}; };
pub trait ParamDetails<T: UnsignedInteger> { pub trait ParamDetails<T: UnsignedInteger> {
@@ -127,6 +129,33 @@ impl ParamDetails<u64> for CompressionParameters {
} }
} }
impl ParamDetails<u128> for NoiseSquashingParameters {
fn lwe_dimension(&self) -> LweDimension {
panic!("lwe_dimension not applicable for NoiseSquashingParameters")
}
fn glwe_dimension(&self) -> GlweDimension {
self.glwe_dimension
}
fn lwe_noise_distribution(&self) -> DynamicDistribution<u128> {
panic!("lwe_noise_distribution not applicable for NoiseSquashingParameters")
}
fn glwe_noise_distribution(&self) -> DynamicDistribution<u128> {
self.glwe_noise_distribution
}
fn polynomial_size(&self) -> PolynomialSize {
self.polynomial_size
}
fn log_ciphertext_modulus(&self) -> usize {
assert!(self.ciphertext_modulus.is_native_modulus());
u128::BITS as usize
}
}
#[derive(Eq, PartialEq, Hash)] #[derive(Eq, PartialEq, Hash)]
enum ParametersFormat { enum ParametersFormat {
Lwe, Lwe,
@@ -146,6 +175,18 @@ struct ParamGroupKey {
parameters_format: ParametersFormat, parameters_format: ParametersFormat,
} }
fn format_modulus_as_string(log_ciphertext_modulus: usize) -> String {
if log_ciphertext_modulus > 128 {
panic!("Exponent too large");
}
if log_ciphertext_modulus == 128 {
// What are you gonna do, call the police ?
return "340282366920938463463374607431768211456".to_string();
}
format!("{}", 1u128 << log_ciphertext_modulus)
}
///Function to print in the lattice_estimator format the parameters ///Function to print in the lattice_estimator format the parameters
/// Format: LWE.Parameters(n=722, q=2^32, Xs=ND.UniformMod(2), /// Format: LWE.Parameters(n=722, q=2^32, Xs=ND.UniformMod(2),
/// Xe=ND.DiscreteGaussian(56139.60810663548), tag='test_lattice_estimator') /// Xe=ND.DiscreteGaussian(56139.60810663548), tag='test_lattice_estimator')
@@ -159,13 +200,25 @@ pub fn format_lwe_parameters_to_lattice_estimator<U: UnsignedInteger, T: ParamDe
param.log_ciphertext_modulus() as f64 + distrib.standard_dev().0.log2(); param.log_ciphertext_modulus() as f64 + distrib.standard_dev().0.log2();
format!( format!(
"{}_LWE = LWE.Parameters(\n n = {},\n q ={},\n Xs=ND.Uniform(0,1), \n Xe=ND.DiscreteGaussian({}),\n tag=('{}_lwe',) \n)\n\n", "{}_LWE = LWE.Parameters(\n n = {},\n q ={},\n Xs=ND.Uniform(0,1), \n \
name, param.lwe_dimension().0, (1u128<<param.log_ciphertext_modulus() as u128), 2.0_f64.powf(modular_std_dev), similar_params.join("_lwe', '")) Xe=ND.DiscreteGaussian({}),\n tag=('{}_lwe',) \n)\n\n",
name,
param.lwe_dimension().0,
format_modulus_as_string(param.log_ciphertext_modulus()),
2.0_f64.powf(modular_std_dev),
similar_params.join("_lwe', '")
)
} }
DynamicDistribution::TUniform(distrib) => { DynamicDistribution::TUniform(distrib) => {
format!( format!(
"{}_LWE = LWE.Parameters(\n n = {},\n q ={},\n Xs=ND.Uniform(0,1), \n Xe=ND.DiscreteGaussian({}),\n tag=('{}_lwe',) \n)\n\n", "{}_LWE = LWE.Parameters(\n n = {},\n q ={},\n Xs=ND.Uniform(0,1), \n \
name, param.lwe_dimension().0, (1u128<<param.log_ciphertext_modulus() as u128), tuniform_equivalent_gaussian_std_dev(&distrib), similar_params.join("_lwe', '")) Xe=ND.DiscreteGaussian({}),\n tag=('{}_lwe',) \n)\n\n",
name,
param.lwe_dimension().0,
format_modulus_as_string(param.log_ciphertext_modulus()),
tuniform_equivalent_gaussian_std_dev(&distrib),
similar_params.join("_lwe', '")
)
} }
} }
} }
@@ -183,13 +236,31 @@ pub fn format_glwe_parameters_to_lattice_estimator<U: UnsignedInteger, T: ParamD
param.log_ciphertext_modulus() as f64 + distrib.standard_dev().0.log2(); param.log_ciphertext_modulus() as f64 + distrib.standard_dev().0.log2();
format!( format!(
"{}_GLWE = LWE.Parameters(\n n = {},\n q = {},\n Xs=ND.Uniform(0,1), \n Xe=ND.DiscreteGaussian({}),\n tag=('{}_glwe',) \n)\n\n", "{}_GLWE = LWE.Parameters(\n n = {},\n q = {},\n Xs=ND.Uniform(0,1), \n \
name, param.glwe_dimension().to_equivalent_lwe_dimension(param.polynomial_size()).0, 1u128<<param.log_ciphertext_modulus() as u128, 2.0_f64.powf(modular_std_dev), similar_params.join("_glwe', '")) Xe=ND.DiscreteGaussian({}),\n tag=('{}_glwe',) \n)\n\n",
name,
param
.glwe_dimension()
.to_equivalent_lwe_dimension(param.polynomial_size())
.0,
format_modulus_as_string(param.log_ciphertext_modulus()),
2.0_f64.powf(modular_std_dev),
similar_params.join("_glwe', '")
)
} }
DynamicDistribution::TUniform(distrib) => { DynamicDistribution::TUniform(distrib) => {
format!( format!(
"{}_GLWE = LWE.Parameters(\n n = {},\n q ={},\n Xs=ND.Uniform(0,1), \n Xe=ND.DiscreteGaussian({}),\n tag=('{}_glwe',) \n)\n\n", "{}_GLWE = LWE.Parameters(\n n = {},\n q ={},\n Xs=ND.Uniform(0,1), \n \
name, param.glwe_dimension().to_equivalent_lwe_dimension(param.polynomial_size()).0, 1u128<<param.log_ciphertext_modulus() as u128, tuniform_equivalent_gaussian_std_dev(&distrib), similar_params.join("_glwe', '")) Xe=ND.DiscreteGaussian({}),\n tag=('{}_glwe',) \n)\n\n",
name,
param
.glwe_dimension()
.to_equivalent_lwe_dimension(param.polynomial_size())
.0,
format_modulus_as_string(param.log_ciphertext_modulus()),
tuniform_equivalent_gaussian_std_dev(&distrib),
similar_params.join("_glwe', '")
)
} }
} }
} }
@@ -355,6 +426,16 @@ fn main() {
ParametersFormat::Glwe, ParametersFormat::Glwe,
); );
let noise_squasing_params: Vec<_> = VEC_ALL_NOISE_SQUASHING_PARAMETERS
.into_iter()
.map(|p| (*p.0, Some(p.1)))
.collect();
write_all_params_in_file(
"shortint_noise_squashing_parameters_lattice_estimator.sage",
&noise_squasing_params,
ParametersFormat::Glwe,
);
// TODO perform this gathering later // TODO perform this gathering later
// let wopbs = ALL_PARAMETER_VEC_WOPBS // let wopbs = ALL_PARAMETER_VEC_WOPBS
// .iter() // .iter()

View File

@@ -1,6 +1,6 @@
use tfhe::keycache::NamedParam; use tfhe::keycache::NamedParam;
use tfhe::shortint::parameters::{ use tfhe::shortint::parameters::{
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
@@ -16,9 +16,9 @@ pub fn main() {
println!("CUDA GPU Integer parameters:\n"); println!("CUDA GPU Integer parameters:\n");
println!( println!(
"{}", "{}",
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.name() PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.name()
); );
println!("{PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64:?}"); println!("{PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:?}");
println!("\n\n===========================================================================\n\n"); println!("\n\n===========================================================================\n\n");
@@ -32,7 +32,7 @@ pub fn main() {
println!("\n===========================================================================\n\n"); println!("\n===========================================================================\n\n");
println!("CUDA GPU PBS parameters:\n"); println!("CUDA GPU PBS parameters:\n");
let param = PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; let param = PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let bits = (param.message_modulus.0 * param.carry_modulus.0).ilog2(); let bits = (param.message_modulus.0 * param.carry_modulus.0).ilog2();
println!("Precision {bits} bits"); println!("Precision {bits} bits");
println!("{}", param.name()); println!("{}", param.name());

View File

@@ -23,20 +23,20 @@ fn write_result(file: &mut File, name: &str, value: usize) {
fn client_server_key_sizes(results_file: &Path) { fn client_server_key_sizes(results_file: &Path) {
let shortint_params_vec: Vec<PBSParameters> = vec![ let shortint_params_vec: Vec<PBSParameters> = vec![
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(), PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(),
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128.into(), V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128.into(),
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128.into(), V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128.into(),
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128.into(), V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128.into(),
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128.into(), V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128.into(),
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64.into(), V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64.into(),
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(), V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(),
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64.into(), V1_1_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64.into(),
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64.into(), V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64.into(),
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(), V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(),
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64.into(), V1_1_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64.into(),
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.into(), PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.into(),
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64.into(), PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64.into(),
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(), PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(),
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64.into(), PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64.into(),
]; ];
File::create(results_file).expect("create results file failed"); File::create(results_file).expect("create results file failed");
let mut file = OpenOptions::new() let mut file = OpenOptions::new()

View File

@@ -100,7 +100,7 @@ test("hlapi_compressed_public_client_int8_big", (t) => {
test("hlapi_public_key_encrypt_decrypt_int32_small", (t) => { test("hlapi_public_key_encrypt_decrypt_int32_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -127,7 +127,7 @@ test("hlapi_public_key_encrypt_decrypt_int32_small", (t) => {
test("hlapi_decompress_public_key_then_encrypt_decrypt_int32_small", (t) => { test("hlapi_decompress_public_key_then_encrypt_decrypt_int32_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -213,7 +213,7 @@ test("hlapi_client_key_encrypt_decrypt_int128_big", (t) => {
test("hlapi_client_key_encrypt_decrypt_int128_small", (t) => { test("hlapi_client_key_encrypt_decrypt_int128_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -323,7 +323,7 @@ test("hlapi_client_key_encrypt_decrypt_int256_big", (t) => {
test("hlapi_client_key_encrypt_decrypt_int256_small", (t) => { test("hlapi_client_key_encrypt_decrypt_int256_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -384,7 +384,7 @@ test("hlapi_client_key_encrypt_decrypt_int256_small", (t) => {
test("hlapi_decompress_public_key_then_encrypt_decrypt_int256_small", (t) => { test("hlapi_decompress_public_key_then_encrypt_decrypt_int256_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -412,7 +412,7 @@ test("hlapi_decompress_public_key_then_encrypt_decrypt_int256_small", (t) => {
test("hlapi_public_key_encrypt_decrypt_int256_small", (t) => { test("hlapi_public_key_encrypt_decrypt_int256_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -470,7 +470,7 @@ function hlapi_compact_public_key_encrypt_decrypt_int32_single(config) {
test("hlapi_compact_public_key_encrypt_decrypt_int32_big_single", (t) => { test("hlapi_compact_public_key_encrypt_decrypt_int32_big_single", (t) => {
const block_params = new ShortintParameters( const block_params = new ShortintParameters(
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_128, ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_128,
); );
let config = TfheConfigBuilder.default() let config = TfheConfigBuilder.default()
.use_custom_parameters(block_params) .use_custom_parameters(block_params)
@@ -481,7 +481,7 @@ test("hlapi_compact_public_key_encrypt_decrypt_int32_big_single", (t) => {
test("hlapi_compact_public_key_encrypt_decrypt_int32_small_single", (t) => { test("hlapi_compact_public_key_encrypt_decrypt_int32_small_single", (t) => {
const block_params = new ShortintParameters( const block_params = new ShortintParameters(
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64, ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64,
); );
let config = TfheConfigBuilder.default() let config = TfheConfigBuilder.default()
.use_custom_parameters(block_params) .use_custom_parameters(block_params)

View File

@@ -80,7 +80,7 @@ test("hlapi_key_gen_big", (t) => {
test("hlapi_key_gen_small", (t) => { test("hlapi_key_gen_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -151,7 +151,7 @@ test("hlapi_compressed_public_client_uint8_big", (t) => {
test("hlapi_public_key_encrypt_decrypt_uint32_small", (t) => { test("hlapi_public_key_encrypt_decrypt_uint32_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -178,7 +178,7 @@ test("hlapi_public_key_encrypt_decrypt_uint32_small", (t) => {
test("hlapi_decompress_public_key_then_encrypt_decrypt_uint32_small", (t) => { test("hlapi_decompress_public_key_then_encrypt_decrypt_uint32_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -264,7 +264,7 @@ test("hlapi_client_key_encrypt_decrypt_uint128_big", (t) => {
test("hlapi_client_key_encrypt_decrypt_uint128_small", (t) => { test("hlapi_client_key_encrypt_decrypt_uint128_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -365,7 +365,7 @@ test("hlapi_client_key_encrypt_decrypt_uint256_big", (t) => {
test("hlapi_client_key_encrypt_decrypt_uint256_small", (t) => { test("hlapi_client_key_encrypt_decrypt_uint256_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -417,7 +417,7 @@ test("hlapi_client_key_encrypt_decrypt_uint256_small", (t) => {
test("hlapi_decompress_public_key_then_encrypt_decrypt_uint256_small", (t) => { test("hlapi_decompress_public_key_then_encrypt_decrypt_uint256_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();
@@ -445,7 +445,7 @@ test("hlapi_decompress_public_key_then_encrypt_decrypt_uint256_small", (t) => {
test("hlapi_public_key_encrypt_decrypt_uint256_small", (t) => { test("hlapi_public_key_encrypt_decrypt_uint256_small", (t) => {
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let config = TfheConfigBuilder.with_custom_parameters(params_small).build(); let config = TfheConfigBuilder.with_custom_parameters(params_small).build();

View File

@@ -128,7 +128,7 @@ test("shortint_encrypt_decrypt", (t) => {
// Encryption using small keys // Encryption using small keys
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let cks_small = Shortint.new_client_key(params_small); let cks_small = Shortint.new_client_key(params_small);
@@ -164,7 +164,7 @@ test("shortint_compressed_encrypt_decrypt", (t) => {
// Encryption using small keys // Encryption using small keys
// We don't have TUniform small params so use previous gaussian ones. // We don't have TUniform small params so use previous gaussian ones.
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let cks_small = Shortint.new_client_key(params_small); let cks_small = Shortint.new_client_key(params_small);
@@ -184,7 +184,7 @@ test("shortint_compressed_encrypt_decrypt", (t) => {
test("shortint_public_encrypt_decrypt", (t) => { test("shortint_public_encrypt_decrypt", (t) => {
let params_name_2_0 = let params_name_2_0 =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_0_KS_PBS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_0_KS_PBS_GAUSSIAN_2M128;
let params_2_0 = new ShortintParameters(params_name_2_0); let params_2_0 = new ShortintParameters(params_name_2_0);
let cks = Shortint.new_client_key(params_2_0); let cks = Shortint.new_client_key(params_2_0);
let pk = Shortint.new_public_key(cks); let pk = Shortint.new_public_key(cks);
@@ -199,7 +199,7 @@ test("shortint_public_encrypt_decrypt", (t) => {
// Small // Small
let params_name_2_2_small = let params_name_2_2_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_2_2_small = new ShortintParameters(params_name_2_2_small); let params_2_2_small = new ShortintParameters(params_name_2_2_small);
let cks_small = Shortint.new_client_key(params_2_2_small); let cks_small = Shortint.new_client_key(params_2_2_small);
@@ -238,7 +238,7 @@ test("shortint_compressed_public_encrypt_decrypt", (t) => {
// Small // Small
let params_name_small = let params_name_small =
ShortintParametersName.V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128; ShortintParametersName.V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128;
let params_small = new ShortintParameters(params_name_small); let params_small = new ShortintParameters(params_name_small);
let cks_small = Shortint.new_client_key(params_small); let cks_small = Shortint.new_client_key(params_small);

View File

@@ -4,6 +4,7 @@ use crate::shortint::parameters::v0_11::compact_public_key_only::p_fail_2_minus_
use crate::shortint::parameters::v0_11::key_switching::p_fail_2_minus_64::ks_pbs::V0_11_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; use crate::shortint::parameters::v0_11::key_switching::p_fail_2_minus_64::ks_pbs::V0_11_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
use crate::shortint::parameters::v0_11::list_compression::V0_11_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; use crate::shortint::parameters::v0_11::list_compression::V0_11_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
use crate::shortint::parameters::v1_0::*; use crate::shortint::parameters::v1_0::*;
use crate::shortint::parameters::v1_1::*;
use crate::shortint::parameters::ModulusSwitchNoiseReductionParams as RustModulusSwitchNoiseReductionParams; use crate::shortint::parameters::ModulusSwitchNoiseReductionParams as RustModulusSwitchNoiseReductionParams;
pub use crate::shortint::parameters::*; pub use crate::shortint::parameters::*;
@@ -455,6 +456,10 @@ expose_as_shortint_compact_public_key_parameters!(
PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128 PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
), ),
(
V1_1_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_1_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
),
( (
V1_0_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, V1_0_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128 V1_0_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
@@ -504,6 +509,83 @@ macro_rules! expose_as_shortint_pbs_parameters(
expose_as_shortint_pbs_parameters!( expose_as_shortint_pbs_parameters!(
// TUniform // TUniform
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
// v1.1
// Gaussian
V1_1_PARAM_MESSAGE_1_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_4_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_5_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_5_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_4_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_5_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_6_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_6_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_5_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_4_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_5_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_6_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_7_CARRY_0_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_7_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_6_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_5_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_5_CARRY_3_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_6_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_7_CARRY_1_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_8_CARRY_0_KS_PBS_GAUSSIAN_2M128,
// Small params
V1_1_PARAM_MESSAGE_1_CARRY_1_PBS_KS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_3_PBS_KS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_4_PBS_KS_GAUSSIAN_2M128,
// CPK
V1_1_PARAM_MESSAGE_1_CARRY_1_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_3_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_4_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_5_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_6_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_1_CARRY_7_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_1_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_3_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_4_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_5_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_6_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_1_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_3_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_4_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_5_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_1_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_3_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_4_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_5_CARRY_1_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_5_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_5_CARRY_3_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_6_CARRY_1_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_6_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_7_CARRY_1_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
// CPK SMALL
V1_1_PARAM_MESSAGE_1_CARRY_1_COMPACT_PK_PBS_KS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_3_CARRY_3_COMPACT_PK_PBS_KS_GAUSSIAN_2M128,
V1_1_PARAM_MESSAGE_4_CARRY_4_COMPACT_PK_PBS_KS_GAUSSIAN_2M128,
// v1.0 // v1.0
// Gaussian // Gaussian
V1_0_PARAM_MESSAGE_1_CARRY_0_KS_PBS_GAUSSIAN_2M128, V1_0_PARAM_MESSAGE_1_CARRY_0_KS_PBS_GAUSSIAN_2M128,
@@ -685,6 +767,8 @@ macro_rules! expose_as_shortint_compression_parameters(
expose_as_shortint_compression_parameters!( expose_as_shortint_compression_parameters!(
COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_1_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_1_COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, V1_0_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V0_11_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64 V0_11_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
); );

View File

@@ -700,16 +700,11 @@ pub mod gpu {
mod tests { mod tests {
use crate::prelude::*; use crate::prelude::*;
use crate::safe_serialization::{safe_deserialize, safe_serialize}; use crate::safe_serialization::{safe_deserialize, safe_serialize};
// TODO GPU DRIFT UPDATE
use crate::shortint::parameters::current_params::{
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
};
use crate::shortint::parameters::{ use crate::shortint::parameters::{
COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
}; };
use crate::shortint::PBSParameters; use crate::shortint::PBSParameters;
use crate::{ use crate::{
@@ -719,26 +714,25 @@ mod tests {
#[test] #[test]
fn test_compressed_ct_list_cpu_gpu() { fn test_compressed_ct_list_cpu_gpu() {
// TODO GPU DRIFT UPDATE for (params, comp_params) in [
let (test_params, comp_params) = if cfg!(feature = "gpu") { if cfg!(not(feature = "gpu")) {
( (
[
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.into(),
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.into(),
],
COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
)
} else {
(
[
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(), PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(),
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(), COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
], )
COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, } else {
) // TODO GPU DRIFT UPDATE
}; (
crate::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
for params in test_params { .into(),
crate::shortint::parameters::COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
)
},
(
PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(),
COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
),
] {
let config = crate::ConfigBuilder::with_custom_parameters::<PBSParameters>(params) let config = crate::ConfigBuilder::with_custom_parameters::<PBSParameters>(params)
.enable_compression(comp_params) .enable_compression(comp_params)
.build(); .build();

View File

@@ -4,11 +4,11 @@ use crate::prelude::{
CiphertextList, FheDecrypt, FheEncrypt, FheTryEncrypt, FheTryTrivialEncrypt, CiphertextList, FheDecrypt, FheEncrypt, FheTryEncrypt, FheTryTrivialEncrypt,
ParameterSetConformant, ParameterSetConformant,
}; };
use crate::shortint::parameters::current_params::{ use crate::shortint::parameters::test_params::{
V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128, TEST_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128, TEST_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128,
V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128, TEST_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128,
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, TEST_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}; };
use crate::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; use crate::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
use crate::{ use crate::{
@@ -35,7 +35,7 @@ fn test_integer_compressed_small() {
let mut rng = thread_rng(); let mut rng = thread_rng();
let config = let config =
ConfigBuilder::with_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128) ConfigBuilder::with_custom_parameters(TEST_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128)
.build(); .build();
let (client_key, _) = generate_keys(config); let (client_key, _) = generate_keys(config);
@@ -67,7 +67,7 @@ fn test_int64_rotate() {
#[test] #[test]
fn test_multi_bit_rotate() { fn test_multi_bit_rotate() {
let client_key = setup_cpu(Some( let client_key = setup_cpu(Some(
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, TEST_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
)); ));
super::test_case_int64_rotate(&client_key); super::test_case_int64_rotate(&client_key);
} }
@@ -81,7 +81,7 @@ fn test_int32_div_rem() {
#[test] #[test]
fn test_multi_div_rem() { fn test_multi_div_rem() {
let client_key = setup_cpu(Some( let client_key = setup_cpu(Some(
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, TEST_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
)); ));
super::test_case_int32_div_rem(&client_key); super::test_case_int32_div_rem(&client_key);
} }
@@ -126,7 +126,7 @@ fn test_trivial_fhe_int8() {
#[test] #[test]
fn test_trivial_fhe_int256_small() { fn test_trivial_fhe_int256_small() {
let config = let config =
ConfigBuilder::with_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128) ConfigBuilder::with_custom_parameters(TEST_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128)
.build(); .build();
let (client_key, sks) = generate_keys(config); let (client_key, sks) = generate_keys(config);
@@ -140,7 +140,7 @@ fn test_trivial_fhe_int256_small() {
#[test] #[test]
fn test_compact_public_key_big() { fn test_compact_public_key_big() {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(TEST_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (client_key, _) = generate_keys(config); let (client_key, _) = generate_keys(config);
@@ -158,7 +158,7 @@ fn test_compact_public_key_big() {
#[test] #[test]
fn test_compact_public_key_small() { fn test_compact_public_key_small() {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128) .use_custom_parameters(TEST_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128)
.build(); .build();
let (client_key, _) = generate_keys(config); let (client_key, _) = generate_keys(config);

View File

@@ -1,12 +1,12 @@
use crate::high_level_api::integers::signed::tests::{ use crate::high_level_api::integers::signed::tests::{
test_case_ilog2, test_case_leading_trailing_zeros_ones, test_case_ilog2, test_case_leading_trailing_zeros_ones,
}; };
use crate::shortint::parameters::PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS; use crate::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS;
#[test] #[test]
fn test_int32_compare() { fn test_int32_compare() {
let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some( let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some(
PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS,
)); ));
super::test_case_int32_compare(&client_key); super::test_case_int32_compare(&client_key);
} }
@@ -14,7 +14,7 @@ fn test_int32_compare() {
#[test] #[test]
fn test_int32_bitwise() { fn test_int32_bitwise() {
let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some( let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some(
PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS,
)); ));
super::test_case_int32_bitwise(&client_key); super::test_case_int32_bitwise(&client_key);
} }
@@ -22,7 +22,7 @@ fn test_int32_bitwise() {
#[test] #[test]
fn test_int64_rotate() { fn test_int64_rotate() {
let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some( let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some(
PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS,
)); ));
super::test_case_int64_rotate(&client_key); super::test_case_int64_rotate(&client_key);
} }
@@ -30,7 +30,7 @@ fn test_int64_rotate() {
#[test] #[test]
fn test_integer_casting() { fn test_integer_casting() {
let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some( let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some(
PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS,
)); ));
super::test_case_integer_casting(&client_key); super::test_case_integer_casting(&client_key);
} }
@@ -38,7 +38,7 @@ fn test_integer_casting() {
#[test] #[test]
fn test_if_then_else() { fn test_if_then_else() {
let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some( let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some(
PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS,
)); ));
super::test_case_if_then_else(&client_key); super::test_case_if_then_else(&client_key);
} }
@@ -46,7 +46,7 @@ fn test_if_then_else() {
#[test] #[test]
fn test_abs() { fn test_abs() {
let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some( let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some(
PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS,
)); ));
super::test_case_abs(&client_key); super::test_case_abs(&client_key);
} }
@@ -54,7 +54,7 @@ fn test_abs() {
#[test] #[test]
fn test_ilog2() { fn test_ilog2() {
let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some( let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some(
PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS,
)); ));
test_case_ilog2(&client_key); test_case_ilog2(&client_key);
} }
@@ -62,7 +62,7 @@ fn test_ilog2() {
#[test] #[test]
fn test_leading_trailing_zeros_ones() { fn test_leading_trailing_zeros_ones() {
let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some( let client_key = crate::high_level_api::integers::unsigned::tests::gpu::setup_gpu(Some(
PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS,
)); ));
test_case_leading_trailing_zeros_ones(&client_key); test_case_leading_trailing_zeros_ones(&client_key);
} }

View File

@@ -4,7 +4,7 @@ use crate::high_level_api::tests::{setup_cpu, setup_default_cpu};
use crate::high_level_api::{generate_keys, set_server_key, ConfigBuilder, FheUint8}; use crate::high_level_api::{generate_keys, set_server_key, ConfigBuilder, FheUint8};
use crate::integer::U256; use crate::integer::U256;
use crate::safe_serialization::{DeserializationConfig, SerializationConfig}; use crate::safe_serialization::{DeserializationConfig, SerializationConfig};
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
use crate::{ use crate::{
ClientKey, CompactCiphertextList, CompactCiphertextListConformanceParams, CompactPublicKey, ClientKey, CompactCiphertextList, CompactCiphertextListConformanceParams, CompactPublicKey,
@@ -45,7 +45,7 @@ fn test_integer_compressed() {
#[test] #[test]
fn test_integer_compressed_small() { fn test_integer_compressed_small() {
let config = let config =
ConfigBuilder::with_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128) ConfigBuilder::with_custom_parameters(TEST_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128)
.build(); .build();
let (client_key, _) = generate_keys(config); let (client_key, _) = generate_keys(config);
@@ -89,7 +89,7 @@ fn test_uint32_shift() {
#[test] #[test]
fn test_uint32_shift_multibit() { fn test_uint32_shift_multibit() {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64) .use_custom_parameters(TEST_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64)
.build(); .build();
let (client_key, server_key) = generate_keys(config); let (client_key, server_key) = generate_keys(config);
@@ -113,7 +113,7 @@ fn test_uint32_rotate() {
#[test] #[test]
fn test_multi_bit_rotate() { fn test_multi_bit_rotate() {
let client_key = setup_cpu(Some( let client_key = setup_cpu(Some(
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
)); ));
super::test_case_uint32_rotate(&client_key); super::test_case_uint32_rotate(&client_key);
} }
@@ -127,7 +127,7 @@ fn test_uint32_div_rem() {
#[test] #[test]
fn test_multi_div_rem() { fn test_multi_div_rem() {
let client_key = setup_cpu(Some( let client_key = setup_cpu(Some(
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
)); ));
super::test_case_uint32_div_rem(&client_key); super::test_case_uint32_div_rem(&client_key);
} }
@@ -135,7 +135,7 @@ fn test_multi_div_rem() {
#[test] #[test]
fn test_small_uint128() { fn test_small_uint128() {
let config = let config =
ConfigBuilder::with_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128) ConfigBuilder::with_custom_parameters(TEST_PARAM_MESSAGE_2_CARRY_2_PBS_KS_GAUSSIAN_2M128)
.build(); .build();
let (cks, sks) = generate_keys(config); let (cks, sks) = generate_keys(config);
@@ -183,7 +183,7 @@ fn test_decompressed_public_key_encrypt() {
#[test] #[test]
fn test_compact_public_key_big() { fn test_compact_public_key_big() {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128) .use_custom_parameters(TEST_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128)
.build(); .build();
let (client_key, _) = generate_keys(config); let (client_key, _) = generate_keys(config);
@@ -201,7 +201,7 @@ fn test_compact_public_key_big() {
#[test] #[test]
fn test_compact_public_key_small() { fn test_compact_public_key_small() {
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64) .use_custom_parameters(TEST_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128)
.build(); .build();
let (client_key, _) = generate_keys(config); let (client_key, _) = generate_keys(config);
@@ -482,9 +482,9 @@ fn test_safe_deserialize_conformant_compact_fhe_uint32() {
#[test] #[test]
fn test_cpk_encrypt_cast_compute_hl() { fn test_cpk_encrypt_cast_compute_hl() {
let param_pke_only = V1_0_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let param_pke_only = PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let param_fhe = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let param_fhe = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let param_ksk = V1_0_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let param_ksk = PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let num_block = 4usize; let num_block = 4usize;
@@ -531,9 +531,9 @@ fn test_cpk_encrypt_cast_compute_hl() {
#[test] #[test]
fn test_compressed_cpk_encrypt_cast_compute_hl() { fn test_compressed_cpk_encrypt_cast_compute_hl() {
let param_pke_only = V1_0_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let param_pke_only = PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let param_fhe = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let param_fhe = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let param_ksk = V1_0_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let param_ksk = PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let num_block = 4usize; let num_block = 4usize;

View File

@@ -1,4 +1,4 @@
use crate::shortint::parameters::PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS; use crate::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS;
use crate::shortint::{ClassicPBSParameters, PBSParameters}; use crate::shortint::{ClassicPBSParameters, PBSParameters};
use crate::{set_server_key, ClientKey, ConfigBuilder}; use crate::{set_server_key, ClientKey, ConfigBuilder};
@@ -34,7 +34,7 @@ fn test_uint8_quickstart_gpu() {
#[test] #[test]
fn test_uint8_quickstart_gpu_multibit() { fn test_uint8_quickstart_gpu_multibit() {
let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS)); let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS));
super::test_case_uint8_quickstart(&client_key); super::test_case_uint8_quickstart(&client_key);
} }
@@ -46,7 +46,7 @@ fn test_uint32_quickstart_gpu() {
#[test] #[test]
fn test_uint32_quickstart_gpu_multibit() { fn test_uint32_quickstart_gpu_multibit() {
let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS)); let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS));
super::test_case_uint32_quickstart(&client_key); super::test_case_uint32_quickstart(&client_key);
} }
@@ -58,7 +58,7 @@ fn test_uint64_quickstart_gpu() {
#[test] #[test]
fn test_uint64_quickstart_gpu_multibit() { fn test_uint64_quickstart_gpu_multibit() {
let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS)); let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS));
super::test_case_uint64_quickstart(&client_key); super::test_case_uint64_quickstart(&client_key);
} }
@@ -82,7 +82,7 @@ fn test_uint32_bitwise_gpu() {
#[test] #[test]
fn test_uint32_bitwise_gpu_multibit() { fn test_uint32_bitwise_gpu_multibit() {
let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS)); let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS));
super::test_case_uint32_bitwise(&client_key); super::test_case_uint32_bitwise(&client_key);
} }
@@ -94,7 +94,7 @@ fn test_if_then_else_gpu() {
#[test] #[test]
fn test_if_then_else_gpu_multibit() { fn test_if_then_else_gpu_multibit() {
let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS)); let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS));
super::test_case_if_then_else(&client_key); super::test_case_if_then_else(&client_key);
} }
@@ -106,7 +106,7 @@ fn test_sum_gpu() {
#[test] #[test]
fn test_sum_gpu_multibit() { fn test_sum_gpu_multibit() {
let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS)); let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS));
super::test_case_sum(&client_key); super::test_case_sum(&client_key);
} }
@@ -118,7 +118,7 @@ fn test_is_even_is_odd_gpu() {
#[test] #[test]
fn test_is_even_is_odd_gpu_multibit() { fn test_is_even_is_odd_gpu_multibit() {
let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS)); let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS));
super::test_case_is_even_is_odd(&client_key); super::test_case_is_even_is_odd(&client_key);
} }
@@ -130,7 +130,7 @@ fn test_leading_trailing_zeros_ones_gpu() {
#[test] #[test]
fn test_leading_trailing_zeros_ones_gpu_multibit() { fn test_leading_trailing_zeros_ones_gpu_multibit() {
let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS)); let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS));
super::test_case_leading_trailing_zeros_ones(&client_key); super::test_case_leading_trailing_zeros_ones(&client_key);
} }
@@ -142,6 +142,6 @@ fn test_ilog2_gpu() {
#[test] #[test]
fn test_ilog2_multibit() { fn test_ilog2_multibit() {
let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_3_KS_PBS)); let client_key = setup_gpu(Some(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS));
super::test_case_ilog2(&client_key); super::test_case_ilog2(&client_key);
} }

View File

@@ -70,7 +70,7 @@ impl Default for IntegerConfig {
crate::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(); crate::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into();
#[cfg(feature = "gpu")] #[cfg(feature = "gpu")]
let params = let params =
crate::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64 crate::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
.into(); .into();
Self { Self {
block_parameters: params, block_parameters: params,

View File

@@ -274,7 +274,7 @@ impl ParameterSetConformant for CompressedCompactPublicKey {
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use crate::conformance::ParameterSetConformant; use crate::conformance::ParameterSetConformant;
use crate::shortint::parameters::current_params::V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128; use crate::shortint::parameters::test_params::TEST_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
use crate::{ use crate::{
generate_keys, ClientKey, CompactPublicKey, CompressedCompactPublicKey, ConfigBuilder, generate_keys, ClientKey, CompactPublicKey, CompressedCompactPublicKey, ConfigBuilder,
@@ -282,7 +282,7 @@ mod test {
#[test] #[test]
fn conformance_compact_public_key() { fn conformance_compact_public_key() {
let params = V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128; let params = TEST_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128;
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(params) .use_custom_parameters(params)
@@ -318,7 +318,7 @@ mod test {
#[test] #[test]
fn conformance_compressed_compact_public_key() { fn conformance_compressed_compact_public_key() {
let params = V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128; let params = TEST_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128;
let config = ConfigBuilder::default() let config = ConfigBuilder::default()
.use_custom_parameters(params) .use_custom_parameters(params)

View File

@@ -152,7 +152,7 @@ fn test_tag_propagation_zk_pok() {
fn test_tag_propagation_gpu() { fn test_tag_propagation_gpu() {
test_tag_propagation( test_tag_propagation(
Device::CudaGpu, Device::CudaGpu,
// TODO GPU DRIFT_UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
None, None,
Some(COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64), Some(COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64),

View File

@@ -1152,20 +1152,16 @@ mod tests {
use crate::integer::{ use crate::integer::{
BooleanBlock, ClientKey, CompactPrivateKey, CompactPublicKey, RadixCiphertext, ServerKey, BooleanBlock, ClientKey, CompactPrivateKey, CompactPublicKey, RadixCiphertext, ServerKey,
}; };
use crate::shortint::parameters::test_params::{
TEST_PARAM_KEYSWITCH_PKE_TO_BIG_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1,
TEST_PARAM_PKE_TO_BIG_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1,
};
use crate::shortint::parameters::{ use crate::shortint::parameters::{
PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
}; };
use crate::zk::{CompactPkeCrs, ZkComputeLoad}; use crate::zk::{CompactPkeCrs, ZkComputeLoad};
use crate::shortint::parameters::current_params::compact_public_key_only::p_fail_2_minus_128::ks_pbs::{
V1_0_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_PKE_TO_BIG_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1,
};
use crate::shortint::parameters::current_params::key_switching::p_fail_2_minus_128::ks_pbs::{
V1_0_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_KEYSWITCH_PKE_TO_BIG_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1,
};
use rand::random; use rand::random;
#[test] #[test]
@@ -1233,9 +1229,9 @@ mod tests {
/// Test a compact list encryption proven with the v1 zk scheme /// Test a compact list encryption proven with the v1 zk scheme
#[test] #[test]
fn test_zkv1_compact_ciphertext_list_encryption_ci_run_filter() { fn test_zkv1_compact_ciphertext_list_encryption_ci_run_filter() {
let pke_params = V1_0_PARAM_PKE_TO_BIG_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1; let pke_params = TEST_PARAM_PKE_TO_BIG_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1;
let ksk_params = let ksk_params =
V1_0_PARAM_KEYSWITCH_PKE_TO_BIG_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1; TEST_PARAM_KEYSWITCH_PKE_TO_BIG_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128_ZKV1;
let fhe_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let fhe_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
@@ -1297,8 +1293,8 @@ mod tests {
#[test] #[test]
fn test_several_proven_lists() { fn test_several_proven_lists() {
let pke_params = V1_0_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let pke_params = PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let ksk_params = V1_0_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let ksk_params = PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let fhe_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let fhe_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let metadata = [b'i', b'n', b't', b'e', b'g', b'e', b'r']; let metadata = [b'i', b'n', b't', b'e', b'g', b'e', b'r'];
@@ -1360,8 +1356,8 @@ mod tests {
fn test_malicious_boolean_proven_lists() { fn test_malicious_boolean_proven_lists() {
use super::DataKind; use super::DataKind;
let pke_params = V1_0_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let pke_params = PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let ksk_params = V1_0_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let ksk_params = PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let fhe_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let fhe_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let metadata = [b'i', b'n', b't', b'e', b'g', b'e', b'r']; let metadata = [b'i', b'n', b't', b'e', b'g', b'e', b'r'];

View File

@@ -156,32 +156,37 @@ impl CompressedCiphertextList {
mod tests { mod tests {
use super::*; use super::*;
use crate::integer::{gen_keys, IntegerKeyKind}; use crate::integer::{gen_keys, IntegerKeyKind};
use crate::shortint::parameters::test_params::{
TEST_COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
TEST_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
TEST_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
TEST_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
};
use crate::shortint::ShortintParameterSet; use crate::shortint::ShortintParameterSet;
use crate::shortint::parameters::current_params::classic::tuniform::p_fail_2_minus_128::ks_pbs::V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
use crate::shortint::parameters::current_params::list_compression::p_fail_2_minus_128::V1_0_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
use crate::shortint::parameters::current_params::multi_bit::tuniform::p_fail_2_minus_64::ks_pbs::V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
use itertools::Itertools; use itertools::Itertools;
use rand::Rng; use rand::Rng;
const NB_TESTS: usize = 10; const NB_TESTS: usize = 10;
const NB_OPERATOR_TESTS: usize = 10; const NB_OPERATOR_TESTS: usize = 10;
const NUM_BLOCKS: usize = 32; const NUM_BLOCKS: usize = 32;
const MAX_NB_MESSAGES: usize = 2 * V1_0_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
.lwe_per_glwe
.0
/ NUM_BLOCKS;
#[test] #[test]
fn test_ciphertext_compression() { fn test_ciphertext_compression() {
for params in [ for (params, comp_params) in [
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(), (
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.into(), TEST_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(),
TEST_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
),
(
TEST_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(),
TEST_COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
),
] { ] {
let (cks, sks) = gen_keys::<ShortintParameterSet>(params, IntegerKeyKind::Radix); let (cks, sks) = gen_keys::<ShortintParameterSet>(params, IntegerKeyKind::Radix);
let private_compression_key = cks.new_compression_private_key( let max_nb_messages: usize = 2 * comp_params.lwe_per_glwe.0 / NUM_BLOCKS;
V1_0_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
); let private_compression_key = cks.new_compression_private_key(comp_params);
let (compression_key, decompression_key) = let (compression_key, decompression_key) =
cks.new_compression_decompression_keys(&private_compression_key); cks.new_compression_decompression_keys(&private_compression_key);
@@ -194,7 +199,7 @@ mod tests {
// Unsigned // Unsigned
let modulus = message_modulus.pow(NUM_BLOCKS as u32); let modulus = message_modulus.pow(NUM_BLOCKS as u32);
for _ in 0..NB_OPERATOR_TESTS { for _ in 0..NB_OPERATOR_TESTS {
let nb_messages = rng.gen_range(1..=MAX_NB_MESSAGES as u64); let nb_messages = rng.gen_range(1..=max_nb_messages as u64);
let messages = (0..nb_messages) let messages = (0..nb_messages)
.map(|_| rng.gen::<u128>() % modulus) .map(|_| rng.gen::<u128>() % modulus)
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@@ -223,7 +228,7 @@ mod tests {
// Signed // Signed
let modulus = message_modulus.pow((NUM_BLOCKS - 1) as u32) as i128; let modulus = message_modulus.pow((NUM_BLOCKS - 1) as u32) as i128;
for _ in 0..NB_OPERATOR_TESTS { for _ in 0..NB_OPERATOR_TESTS {
let nb_messages = rng.gen_range(1..=MAX_NB_MESSAGES as u64); let nb_messages = rng.gen_range(1..=max_nb_messages as u64);
let messages = (0..nb_messages) let messages = (0..nb_messages)
.map(|_| rng.gen::<i128>() % modulus) .map(|_| rng.gen::<i128>() % modulus)
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@@ -251,7 +256,7 @@ mod tests {
// Boolean // Boolean
for _ in 0..NB_OPERATOR_TESTS { for _ in 0..NB_OPERATOR_TESTS {
let nb_messages = rng.gen_range(1..=MAX_NB_MESSAGES as u64); let nb_messages = rng.gen_range(1..=max_nb_messages as u64);
let messages = (0..nb_messages) let messages = (0..nb_messages)
.map(|_| rng.gen::<i64>() % 2 != 0) .map(|_| rng.gen::<i64>() % 2 != 0)
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@@ -286,7 +291,7 @@ mod tests {
for _ in 0..NB_OPERATOR_TESTS { for _ in 0..NB_OPERATOR_TESTS {
let mut builder = CompressedCiphertextListBuilder::new(); let mut builder = CompressedCiphertextListBuilder::new();
let nb_messages = rng.gen_range(1..=MAX_NB_MESSAGES as u64); let nb_messages = rng.gen_range(1..=max_nb_messages as u64);
let mut messages = vec![]; let mut messages = vec![];
for _ in 0..nb_messages { for _ in 0..nb_messages {
let case_selector = rng.gen_range(0..3); let case_selector = rng.gen_range(0..3);

View File

@@ -110,8 +110,7 @@ impl CudaBooleanBlock {
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::BooleanBlock; /// use tfhe::integer::BooleanBlock;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let stream = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let stream = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
@@ -119,8 +118,7 @@ impl CudaBooleanBlock {
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 1; /// let num_blocks = 1;
/// let (cks, sks) = gen_keys_radix_gpu( /// let (cks, sks) = gen_keys_radix_gpu(
/// # // TODO GPU DRIFT UPDATE /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
/// num_blocks, /// num_blocks,
/// &stream, /// &stream,
/// ); /// );

View File

@@ -142,14 +142,12 @@ impl CudaCompressedCiphertextList {
/// use tfhe::integer::gpu::ciphertext::{CudaSignedRadixCiphertext, CudaUnsignedRadixCiphertext}; /// use tfhe::integer::gpu::ciphertext::{CudaSignedRadixCiphertext, CudaUnsignedRadixCiphertext};
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::shortint::parameters::{ /// use tfhe::shortint::parameters::{
/// # // TODO GPU DRIFT UPDATE /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, /// COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
/// COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
/// }; /// };
/// ///
/// # // TODO GPU DRIFT UPDATE /// let block_params = PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// let block_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; /// let compression_params = COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// let compression_params = COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// let num_blocks = 32; /// let num_blocks = 32;
/// let streams = CudaStreams::new_multi_gpu(); /// let streams = CudaStreams::new_multi_gpu();
/// ///
@@ -269,14 +267,13 @@ impl CompressedCiphertextList {
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::ClientKey; /// use tfhe::integer::ClientKey;
/// use tfhe::shortint::parameters::{ /// use tfhe::shortint::parameters::{
/// # // TODO GPU DRIFT UPDATE /// COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
/// }; /// };
/// ///
/// # // TODO GPU DRIFT UPDATE /// let block_params = PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// let block_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; /// let compression_params =
/// let compression_params = COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; /// COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// let num_blocks = 32; /// let num_blocks = 32;
/// let streams = CudaStreams::new_multi_gpu(); /// let streams = CudaStreams::new_multi_gpu();
/// ///
@@ -520,12 +517,7 @@ mod tests {
use crate::integer::ciphertext::CompressedCiphertextListBuilder; use crate::integer::ciphertext::CompressedCiphertextListBuilder;
use crate::integer::gpu::gen_keys_radix_gpu; use crate::integer::gpu::gen_keys_radix_gpu;
use crate::integer::{ClientKey, RadixCiphertext, RadixClientKey}; use crate::integer::{ClientKey, RadixCiphertext, RadixClientKey};
use crate::shortint::parameters::{ use crate::shortint::parameters::*;
// TODO GPU DRIFT UPDATE
COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
};
use crate::shortint::ShortintParameterSet; use crate::shortint::ShortintParameterSet;
use rand::Rng; use rand::Rng;
@@ -537,9 +529,8 @@ mod tests {
const NUM_BLOCKS: usize = 32; const NUM_BLOCKS: usize = 32;
let streams = CudaStreams::new_multi_gpu(); let streams = CudaStreams::new_multi_gpu();
// TODO GPU DRIFT UPDATE let params = PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64; let comp_params = COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let comp_params = COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
let cks = ClientKey::new(params); let cks = ClientKey::new(params);
@@ -562,16 +553,12 @@ mod tests {
// How many uints of NUM_BLOCKS we have to push in the list to ensure it // How many uints of NUM_BLOCKS we have to push in the list to ensure it
// internally has more than one packed GLWE // internally has more than one packed GLWE
// TODO GPU DRIFT UPDATE let max_nb_messages: usize = 1 + 2 * comp_params.lwe_per_glwe.0 / NUM_BLOCKS;
const MAX_NB_MESSAGES: usize = 1 + 2 * COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
.lwe_per_glwe
.0
/ NUM_BLOCKS;
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
let message_modulus: u128 = radix_cks.parameters().message_modulus().0 as u128; let message_modulus: u128 = radix_cks.parameters().message_modulus().0 as u128;
let modulus = message_modulus.pow(NUM_BLOCKS as u32); let modulus = message_modulus.pow(NUM_BLOCKS as u32);
let messages = (0..MAX_NB_MESSAGES) let messages = (0..max_nb_messages)
.map(|_| rng.gen::<u128>() % modulus) .map(|_| rng.gen::<u128>() % modulus)
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@@ -687,27 +674,27 @@ mod tests {
const NUM_BLOCKS: usize = 32; const NUM_BLOCKS: usize = 32;
let streams = CudaStreams::new_multi_gpu(); let streams = CudaStreams::new_multi_gpu();
for params in [ for (params, comp_params) in [
// TODO GPU DRIFT UPDATE (
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.into(), // TODO GPU DRIFT UPDATE
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.into(), PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.into(),
COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
),
(
PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(),
COMP_PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
),
] { ] {
let (radix_cks, sks) = let (radix_cks, sks) =
gen_keys_radix_gpu::<ShortintParameterSet>(params, NUM_BLOCKS, &streams); gen_keys_radix_gpu::<ShortintParameterSet>(params, NUM_BLOCKS, &streams);
let cks = radix_cks.as_ref(); let cks = radix_cks.as_ref();
// TODO GPU DRIFT UPDATE let private_compression_key = cks.new_compression_private_key(comp_params);
let private_compression_key =
cks.new_compression_private_key(COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64);
let (cuda_compression_key, cuda_decompression_key) = radix_cks let (cuda_compression_key, cuda_decompression_key) = radix_cks
.new_cuda_compression_decompression_keys(&private_compression_key, &streams); .new_cuda_compression_decompression_keys(&private_compression_key, &streams);
// TODO GPU DRIFT UPDATE let max_nb_messages: usize = 2 * comp_params.lwe_per_glwe.0 / NUM_BLOCKS;
const MAX_NB_MESSAGES: usize = 2 * COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
.lwe_per_glwe
.0
/ NUM_BLOCKS;
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
@@ -717,7 +704,7 @@ mod tests {
// Unsigned // Unsigned
let modulus = message_modulus.pow(NUM_BLOCKS as u32); let modulus = message_modulus.pow(NUM_BLOCKS as u32);
for _ in 0..NB_OPERATOR_TESTS { for _ in 0..NB_OPERATOR_TESTS {
let nb_messages = rng.gen_range(1..=MAX_NB_MESSAGES as u64); let nb_messages = rng.gen_range(1..=max_nb_messages as u64);
let messages = (0..nb_messages) let messages = (0..nb_messages)
.map(|_| rng.gen::<u128>() % modulus) .map(|_| rng.gen::<u128>() % modulus)
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@@ -757,7 +744,7 @@ mod tests {
// Signed // Signed
let modulus = message_modulus.pow((NUM_BLOCKS - 1) as u32) as i128; let modulus = message_modulus.pow((NUM_BLOCKS - 1) as u32) as i128;
for _ in 0..NB_OPERATOR_TESTS { for _ in 0..NB_OPERATOR_TESTS {
let nb_messages = rng.gen_range(1..=MAX_NB_MESSAGES as u64); let nb_messages = rng.gen_range(1..=max_nb_messages as u64);
let messages = (0..nb_messages) let messages = (0..nb_messages)
.map(|_| rng.gen::<i128>() % modulus) .map(|_| rng.gen::<i128>() % modulus)
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@@ -796,7 +783,7 @@ mod tests {
// Boolean // Boolean
for _ in 0..NB_OPERATOR_TESTS { for _ in 0..NB_OPERATOR_TESTS {
let nb_messages = rng.gen_range(1..=MAX_NB_MESSAGES as u64); let nb_messages = rng.gen_range(1..=max_nb_messages as u64);
let messages = (0..nb_messages) let messages = (0..nb_messages)
.map(|_| rng.gen::<i64>() % 2 != 0) .map(|_| rng.gen::<i64>() % 2 != 0)
.collect::<Vec<_>>(); .collect::<Vec<_>>();
@@ -845,7 +832,7 @@ mod tests {
for _ in 0..NB_OPERATOR_TESTS { for _ in 0..NB_OPERATOR_TESTS {
let mut builder = CudaCompressedCiphertextListBuilder::new(); let mut builder = CudaCompressedCiphertextListBuilder::new();
let nb_messages = rng.gen_range(1..=MAX_NB_MESSAGES as u64); let nb_messages = rng.gen_range(1..=max_nb_messages as u64);
let mut messages = vec![]; let mut messages = vec![];
for _ in 0..nb_messages { for _ in 0..nb_messages {
let case_selector = rng.gen_range(0..3); let case_selector = rng.gen_range(0..3);

View File

@@ -207,8 +207,7 @@ impl CudaUnsignedRadixCiphertext {
/// use tfhe::core_crypto::gpu::CudaStreams; /// use tfhe::core_crypto::gpu::CudaStreams;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// let size = 4; /// let size = 4;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
@@ -216,8 +215,7 @@ impl CudaUnsignedRadixCiphertext {
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu( /// let (cks, sks) = gen_keys_radix_gpu(
/// # // TODO GPU DRIFT UPDATE /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
/// size, /// size,
/// &streams, /// &streams,
/// ); /// );
@@ -274,8 +272,7 @@ impl CudaUnsignedRadixCiphertext {
/// use tfhe::core_crypto::gpu::CudaStreams; /// use tfhe::core_crypto::gpu::CudaStreams;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
@@ -283,8 +280,7 @@ impl CudaUnsignedRadixCiphertext {
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu( /// let (cks, sks) = gen_keys_radix_gpu(
/// # // TODO GPU DRIFT UPDATE /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
/// num_blocks, /// num_blocks,
/// &streams, /// &streams,
/// ); /// );
@@ -319,8 +315,7 @@ impl CudaSignedRadixCiphertext {
/// use tfhe::core_crypto::gpu::CudaStreams; /// use tfhe::core_crypto::gpu::CudaStreams;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// let size = 4; /// let size = 4;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
@@ -328,8 +323,7 @@ impl CudaSignedRadixCiphertext {
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu( /// let (cks, sks) = gen_keys_radix_gpu(
/// # // TODO GPU DRIFT UPDATE /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
/// size, /// size,
/// &streams, /// &streams,
/// ); /// );
@@ -393,8 +387,7 @@ impl CudaSignedRadixCiphertext {
/// use tfhe::core_crypto::gpu::CudaStreams; /// use tfhe::core_crypto::gpu::CudaStreams;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
@@ -402,8 +395,7 @@ impl CudaSignedRadixCiphertext {
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu( /// let (cks, sks) = gen_keys_radix_gpu(
/// # // TODO GPU DRIFT UPDATE /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
/// num_blocks, /// num_blocks,
/// &streams, /// &streams,
/// ); /// );
@@ -432,8 +424,7 @@ impl CudaRadixCiphertext {
/// use tfhe::core_crypto::gpu::CudaStreams; /// use tfhe::core_crypto::gpu::CudaStreams;
/// use tfhe::integer::gpu::ciphertext::{CudaIntegerRadixCiphertext, CudaSignedRadixCiphertext}; /// use tfhe::integer::gpu::ciphertext::{CudaIntegerRadixCiphertext, CudaSignedRadixCiphertext};
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
@@ -441,8 +432,7 @@ impl CudaRadixCiphertext {
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu( /// let (cks, sks) = gen_keys_radix_gpu(
/// # // TODO GPU DRIFT UPDATE /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
/// num_blocks, /// num_blocks,
/// &streams, /// &streams,
/// ); /// );

View File

@@ -203,15 +203,13 @@ where
/// use tfhe::core_crypto::gpu::CudaStreams; /// use tfhe::core_crypto::gpu::CudaStreams;
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// // generate the client key and the server key: /// // generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// # // TODO GPU DRIFT UPDATE /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams);
/// ``` /// ```
pub fn gen_keys_radix_gpu<P>( pub fn gen_keys_radix_gpu<P>(
parameters_set: P, parameters_set: P,

View File

@@ -50,15 +50,13 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::CudaServerKey; /// use tfhe::integer::gpu::CudaServerKey;
/// use tfhe::integer::ClientKey; /// use tfhe::integer::ClientKey;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key: /// // Generate the client key:
/// let cks = ClientKey::new(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64); /// let cks = ClientKey::new(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128);
/// ///
/// // Generate the server key: /// // Generate the server key:
/// let sks = CudaServerKey::new(&cks, &streams); /// let sks = CudaServerKey::new(&cks, &streams);
@@ -171,14 +169,12 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::CudaServerKey; /// use tfhe::integer::gpu::CudaServerKey;
/// use tfhe::integer::{ClientKey, CompressedServerKey, ServerKey}; /// use tfhe::integer::{ClientKey, CompressedServerKey, ServerKey};
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// let size = 4; /// let size = 4;
/// # // TODO GPU DRIFT UPDATE /// let cks = ClientKey::new(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128);
/// let cks = ClientKey::new(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64);
/// let compressed_sks = CompressedServerKey::new_radix_compressed_server_key(&cks); /// let compressed_sks = CompressedServerKey::new_radix_compressed_server_key(&cks);
/// let cuda_sks = CudaServerKey::decompress_from_cpu(&compressed_sks, &streams); /// let cuda_sks = CudaServerKey::decompress_from_cpu(&compressed_sks, &streams);
/// let cpu_sks = compressed_sks.decompress(); /// let cpu_sks = compressed_sks.decompress();

View File

@@ -101,16 +101,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// ///
/// let msg = -14i32; /// let msg = -14i32;
/// ///

View File

@@ -36,16 +36,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// # // TODO GPU DRIFT UPDATE /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams);
/// ///
/// let msg1 = 14; /// let msg1 = 14;
/// let msg2 = 97; /// let msg2 = 97;
@@ -138,16 +136,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// ///
/// let msg1 = 10; /// let msg1 = 10;
/// let msg2 = 127; /// let msg2 = 127;
@@ -418,16 +414,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let total_bits = num_blocks * cks.parameters().message_modulus().0.ilog2() as usize; /// let total_bits = num_blocks * cks.parameters().message_modulus().0.ilog2() as usize;
/// let modulus = 1 << total_bits; /// let modulus = 1 << total_bits;
/// ///
@@ -588,16 +582,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::{CudaSignedRadixCiphertext, CudaUnsignedRadixCiphertext}; /// use tfhe::integer::gpu::ciphertext::{CudaSignedRadixCiphertext, CudaUnsignedRadixCiphertext};
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let total_bits = num_blocks * cks.parameters().message_modulus().0.ilog2() as usize; /// let total_bits = num_blocks * cks.parameters().message_modulus().0.ilog2() as usize;
/// let modulus = 1 << total_bits; /// let modulus = 1 << total_bits;
/// ///

View File

@@ -28,16 +28,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 1u64; /// let msg = 1u64;
/// ///
@@ -123,16 +121,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 201u64; /// let msg1 = 201u64;
/// let msg2 = 1u64; /// let msg2 = 1u64;
@@ -272,16 +268,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 200u64; /// let msg1 = 200u64;
/// let msg2 = 1u64; /// let msg2 = 1u64;
@@ -341,16 +335,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 49; /// let msg1 = 49;
/// let msg2 = 64; /// let msg2 = 64;
@@ -410,16 +402,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 201u64; /// let msg1 = 201u64;
/// let msg2 = 1u64; /// let msg2 = 1u64;
@@ -518,16 +508,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 201u64; /// let msg1 = 201u64;
/// let msg2 = 1u64; /// let msg2 = 1u64;
@@ -625,16 +613,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 201u64; /// let msg1 = 201u64;
/// let msg2 = 1u64; /// let msg2 = 1u64;
@@ -733,16 +719,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 1u64; /// let msg = 1u64;
/// ///

View File

@@ -139,16 +139,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 14u64; /// let msg1 = 14u64;
/// let msg2 = 97u64; /// let msg2 = 97u64;
@@ -212,16 +210,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 14u64; /// let msg1 = 14u64;
/// let msg2 = 97u64; /// let msg2 = 97u64;
@@ -313,16 +309,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 14u64; /// let msg1 = 14u64;
/// let msg2 = 97u64; /// let msg2 = 97u64;
@@ -409,16 +403,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 14u64; /// let msg1 = 14u64;
/// let msg2 = 97u64; /// let msg2 = 97u64;
@@ -475,16 +467,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 14u64; /// let msg1 = 14u64;
/// let msg2 = 97u64; /// let msg2 = 97u64;
@@ -601,16 +591,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 97u64; /// let msg1 = 97u64;
/// let msg2 = 97u64; /// let msg2 = 97u64;
@@ -727,16 +715,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 237u64; /// let msg1 = 237u64;
/// let msg2 = 23u64; /// let msg2 = 23u64;
@@ -853,16 +839,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 237u64; /// let msg1 = 237u64;
/// let msg2 = 23u64; /// let msg2 = 23u64;

View File

@@ -557,17 +557,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let number_of_blocks = 4; /// let number_of_blocks = 4;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let msg = -4i8; /// let msg = -4i8;
/// ///
@@ -632,17 +630,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let number_of_blocks = 4; /// let number_of_blocks = 4;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let msg = -4i8; /// let msg = -4i8;
/// ///
@@ -707,17 +703,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let number_of_blocks = 4; /// let number_of_blocks = 4;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let msg = -4i8; /// let msg = -4i8;
/// ///
@@ -782,17 +776,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let number_of_blocks = 4; /// let number_of_blocks = 4;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let msg = -4i8; /// let msg = -4i8;
/// ///
@@ -850,17 +842,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let number_of_blocks = 4; /// let number_of_blocks = 4;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let msg = 5i8; /// let msg = 5i8;
/// ///
@@ -922,17 +912,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let number_of_blocks = 4; /// let number_of_blocks = 4;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let msg = 5i8; /// let msg = 5i8;
/// ///

View File

@@ -72,8 +72,7 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::{gen_keys_radix, RadixCiphertext}; /// use tfhe::integer::{gen_keys_radix, RadixCiphertext};
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
@@ -81,8 +80,7 @@ impl CudaServerKey {
/// let num_blocks = 4; /// let num_blocks = 4;
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// # // TODO GPU DRIFT UPDATE /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams);
/// ///
/// let d_ctxt: CudaUnsignedRadixCiphertext = /// let d_ctxt: CudaUnsignedRadixCiphertext =
/// sks.create_trivial_zero_radix(num_blocks, &streams); /// sks.create_trivial_zero_radix(num_blocks, &streams);
@@ -124,8 +122,7 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::{gen_keys_radix, RadixCiphertext}; /// use tfhe::integer::{gen_keys_radix, RadixCiphertext};
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
@@ -133,8 +130,7 @@ impl CudaServerKey {
/// let num_blocks = 4; /// let num_blocks = 4;
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// # // TODO GPU DRIFT UPDATE /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams);
/// ///
/// let d_ctxt: CudaUnsignedRadixCiphertext = /// let d_ctxt: CudaUnsignedRadixCiphertext =
/// sks.create_trivial_radix(212u64, num_blocks, &streams); /// sks.create_trivial_radix(212u64, num_blocks, &streams);
@@ -436,8 +432,7 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::{CudaRadixCiphertext, CudaUnsignedRadixCiphertext}; /// use tfhe::integer::gpu::ciphertext::{CudaRadixCiphertext, CudaUnsignedRadixCiphertext};
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::IntegerCiphertext; /// use tfhe::integer::IntegerCiphertext;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let num_blocks = 4; /// let num_blocks = 4;
/// ///
@@ -445,8 +440,7 @@ impl CudaServerKey {
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// # // TODO GPU DRIFT UPDATE /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams);
/// ///
/// let d_ct1: CudaUnsignedRadixCiphertext = /// let d_ct1: CudaUnsignedRadixCiphertext =
/// sks.create_trivial_radix(7u64, num_blocks, &streams); /// sks.create_trivial_radix(7u64, num_blocks, &streams);
@@ -459,11 +453,10 @@ impl CudaServerKey {
/// let ct_res = d_ct_res.to_radix_ciphertext(&streams); /// let ct_res = d_ct_res.to_radix_ciphertext(&streams);
/// assert_eq!(ct_res.blocks().len(), 6); /// assert_eq!(ct_res.blocks().len(), 6);
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Decrypt /// // Decrypt
/// let res: u64 = cks.decrypt(&ct_res); /// let res: u64 = cks.decrypt(&ct_res);
/// assert_eq!( /// assert_eq!(
/// 7 * (PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.message_modulus.0).pow(added_blocks as u32), /// 7 * (PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.message_modulus.0).pow(added_blocks as u32),
/// res /// res
/// ); /// );
/// ``` /// ```
@@ -532,8 +525,7 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::IntegerCiphertext; /// use tfhe::integer::IntegerCiphertext;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let num_blocks = 4; /// let num_blocks = 4;
/// ///
@@ -541,8 +533,7 @@ impl CudaServerKey {
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// # // TODO GPU DRIFT UPDATE /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams);
/// ///
/// let d_ct1: CudaUnsignedRadixCiphertext = /// let d_ct1: CudaUnsignedRadixCiphertext =
/// sks.create_trivial_radix(7u64, num_blocks, &streams); /// sks.create_trivial_radix(7u64, num_blocks, &streams);
@@ -616,8 +607,7 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::IntegerCiphertext; /// use tfhe::integer::IntegerCiphertext;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let num_blocks = 4; /// let num_blocks = 4;
/// ///
@@ -625,8 +615,7 @@ impl CudaServerKey {
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// # // TODO GPU DRIFT UPDATE /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams);
/// ///
/// let d_ct1: CudaUnsignedRadixCiphertext = /// let d_ct1: CudaUnsignedRadixCiphertext =
/// sks.create_trivial_radix(119u64, num_blocks, &streams); /// sks.create_trivial_radix(119u64, num_blocks, &streams);
@@ -700,8 +689,7 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::IntegerCiphertext; /// use tfhe::integer::IntegerCiphertext;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let num_blocks = 4; /// let num_blocks = 4;
/// ///
@@ -709,8 +697,7 @@ impl CudaServerKey {
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// # // TODO GPU DRIFT UPDATE /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams);
/// ///
/// let d_ct1: CudaUnsignedRadixCiphertext = /// let d_ct1: CudaUnsignedRadixCiphertext =
/// sks.create_trivial_radix(119u64, num_blocks, &streams); /// sks.create_trivial_radix(119u64, num_blocks, &streams);
@@ -1112,20 +1099,18 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// use tfhe::shortint::gen_keys; /// use tfhe::shortint::gen_keys;
/// use tfhe::shortint::parameters::{ /// use tfhe::shortint::parameters::{
/// # // TODO GPU DRIFT UPDATE /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
/// PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, /// PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
/// }; /// };
/// { /// {
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = /// let (cks, sks) =
/// gen_keys(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64); /// gen_keys(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128);
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu( /// let (cks, sks) = gen_keys_gpu(
/// PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// &streams, /// &streams,
/// ); /// );
/// let num_blocks = 2; /// let num_blocks = 2;
@@ -1154,7 +1139,6 @@ impl CudaServerKey {
/// } /// }
/// } /// }
/// { /// {
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64); /// let (cks, sks) = gen_keys(PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64);
/// let gpu_index = 0; /// let gpu_index = 0;
@@ -1561,16 +1545,14 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::IntegerCiphertext; /// use tfhe::integer::IntegerCiphertext;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let num_blocks = 4; /// let num_blocks = 4;
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// # // TODO GPU DRIFT UPDATE /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams);
/// ///
/// let msg = -2i8; /// let msg = -2i8;
/// ///
@@ -1669,16 +1651,14 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::{gen_keys_radix, IntegerCiphertext}; /// use tfhe::integer::{gen_keys_radix, IntegerCiphertext};
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let num_blocks = 8; /// let num_blocks = 8;
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// # // TODO GPU DRIFT UPDATE /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams);
/// ///
/// let msg = u16::MAX; /// let msg = u16::MAX;
/// ///

View File

@@ -18,19 +18,17 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let number_of_blocks = 2; /// let number_of_blocks = 2;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let modulus = PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64 /// let modulus = PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
/// .message_modulus /// .message_modulus
/// .0 /// .0
/// .pow(number_of_blocks as u32); /// .pow(number_of_blocks as u32);
@@ -152,19 +150,17 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let number_of_blocks = 2; /// let number_of_blocks = 2;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let modulus = PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64 /// let modulus = PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
/// .message_modulus /// .message_modulus
/// .0 /// .0
/// .pow(number_of_blocks as u32); /// .pow(number_of_blocks as u32);

View File

@@ -20,17 +20,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let modulus = 1 << 8; /// let modulus = 1 << 8;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 159u64; /// let msg = 159u64;
/// ///
@@ -95,17 +93,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let modulus = 1 << 8; /// let modulus = 1 << 8;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 159u64; /// let msg = 159u64;
/// ///

View File

@@ -35,17 +35,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::CudaStreams; /// use tfhe::core_crypto::gpu::CudaStreams;
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// use tfhe::Seed; /// use tfhe::Seed;
/// ///
/// let size = 4; /// let size = 4;
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let d_ct_res = sks.par_generate_oblivious_pseudo_random_unsigned_integer(Seed(0), size as u64, &streams); /// let d_ct_res = sks.par_generate_oblivious_pseudo_random_unsigned_integer(Seed(0), size as u64, &streams);
/// let ct_res = d_ct_res.to_radix_ciphertext(&streams); /// let ct_res = d_ct_res.to_radix_ciphertext(&streams);
@@ -127,17 +125,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::CudaStreams; /// use tfhe::core_crypto::gpu::CudaStreams;
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// use tfhe::Seed; /// use tfhe::Seed;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// let size = 4; /// let size = 4;
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let random_bits_count = 3; /// let random_bits_count = 3;
/// ///
@@ -230,17 +226,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::CudaStreams; /// use tfhe::core_crypto::gpu::CudaStreams;
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// use tfhe::Seed; /// use tfhe::Seed;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// let size = 4; /// let size = 4;
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let d_ct_res = sks.par_generate_oblivious_pseudo_random_signed_integer(Seed(0), size as u64, &streams); /// let d_ct_res = sks.par_generate_oblivious_pseudo_random_signed_integer(Seed(0), size as u64, &streams);
/// let ct_res = d_ct_res.to_signed_radix_ciphertext(&streams); /// let ct_res = d_ct_res.to_signed_radix_ciphertext(&streams);
@@ -293,17 +287,15 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::CudaStreams; /// use tfhe::core_crypto::gpu::CudaStreams;
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::gen_keys_gpu; /// use tfhe::integer::gpu::gen_keys_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// use tfhe::Seed; /// use tfhe::Seed;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// let size = 4; /// let size = 4;
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, &streams); /// let (cks, sks) = gen_keys_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, &streams);
/// ///
/// let random_bits_count = 3; /// let random_bits_count = 3;
/// ///
@@ -577,8 +569,7 @@ pub(crate) mod test {
use crate::integer::gpu::{gen_keys_gpu, CudaServerKey}; use crate::integer::gpu::{gen_keys_gpu, CudaServerKey};
use crate::integer::{ClientKey, RadixCiphertext}; use crate::integer::{ClientKey, RadixCiphertext};
use crate::shortint::oprf::create_random_from_seed_modulus_switched; use crate::shortint::oprf::create_random_from_seed_modulus_switched;
// TODO GPU DRIFT UPDATE use crate::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
use crate::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
use rayon::prelude::*; use rayon::prelude::*;
use statrs::distribution::ContinuousCDF; use statrs::distribution::ContinuousCDF;
use std::collections::HashMap; use std::collections::HashMap;
@@ -592,9 +583,8 @@ pub(crate) mod test {
fn oprf_compare_plain_ci_run_filter() { fn oprf_compare_plain_ci_run_filter() {
let gpu_index = 0; let gpu_index = 0;
let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
// TODO GPU DRIFT UPDATE
let (ck, gpu_sk) = gen_keys_gpu( let (ck, gpu_sk) = gen_keys_gpu(
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
&streams, &streams,
); );
@@ -683,9 +673,8 @@ pub(crate) mod test {
let p_value_limit: f64 = 0.000_01; let p_value_limit: f64 = 0.000_01;
let gpu_index = 0; let gpu_index = 0;
let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
// TODO GPU DRIFT UPDATE
let (ck, gpu_sk) = gen_keys_gpu( let (ck, gpu_sk) = gen_keys_gpu(
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
&streams, &streams,
); );

View File

@@ -346,16 +346,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 128u8; /// let msg = 128u8;
/// let rotate = 2u8; /// let rotate = 2u8;
@@ -502,16 +500,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 128u8; /// let msg = 128u8;
/// let rotate = 2u8; /// let rotate = 2u8;

View File

@@ -27,16 +27,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 4; /// let msg = 4;
/// let scalar = 40; /// let scalar = 40;
@@ -137,16 +135,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 4; /// let msg = 4;
/// let scalar = 40; /// let scalar = 40;
@@ -288,16 +284,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::{CudaSignedRadixCiphertext, CudaUnsignedRadixCiphertext}; /// use tfhe::integer::gpu::ciphertext::{CudaSignedRadixCiphertext, CudaUnsignedRadixCiphertext};
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// ///
/// let msg: i8 = 120; /// let msg: i8 = 120;
/// let scalar: i8 = 8; /// let scalar: i8 = 8;

View File

@@ -603,17 +603,15 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::{gen_keys_radix, RadixCiphertext}; /// use tfhe::integer::{gen_keys_radix, RadixCiphertext};
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// let size = 4; /// let size = 4;
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 14u64; /// let msg1 = 14u64;
/// let msg2 = 97u64; /// let msg2 = 97u64;
@@ -687,17 +685,15 @@ impl CudaServerKey {
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// use tfhe::integer::{gen_keys_radix, RadixCiphertext}; /// use tfhe::integer::{gen_keys_radix, RadixCiphertext};
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// let size = 4; /// let size = 4;
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg1 = 14u64; /// let msg1 = 14u64;
/// let msg2 = 97u64; /// let msg2 = 97u64;

View File

@@ -74,17 +74,15 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu( /// let (cks, sks) = gen_keys_radix_gpu(
/// PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, /// PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
/// size, /// size,
/// &streams, /// &streams,
/// ); /// );
@@ -248,16 +246,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 30; /// let msg = 30;
/// let scalar = 3; /// let scalar = 3;
@@ -376,16 +372,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 30; /// let msg = 30;
/// let scalar = 3; /// let scalar = 3;
@@ -492,16 +486,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 30; /// let msg = 30;
/// let scalar = 3; /// let scalar = 3;
@@ -732,16 +724,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 30; /// let msg = 30;
/// let scalar = -3; /// let scalar = -3;
@@ -849,16 +839,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 30; /// let msg = 30;
/// let scalar = -3; /// let scalar = -3;
@@ -966,16 +954,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaSignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 30; /// let msg = 30;
/// let scalar = -3; /// let scalar = -3;

View File

@@ -24,16 +24,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 30; /// let msg = 30;
/// let scalar = 3; /// let scalar = 3;
@@ -194,16 +192,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 30; /// let msg = 30;
/// let scalar = 3; /// let scalar = 3;

View File

@@ -112,16 +112,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 21u64; /// let msg = 21u64;
/// let shift = 2; /// let shift = 2;
@@ -313,16 +311,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 21u64; /// let msg = 21u64;
/// let shift = 2; /// let shift = 2;
@@ -408,16 +404,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 21u64; /// let msg = 21u64;
/// let shift = 2; /// let shift = 2;
@@ -498,16 +492,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 21u64; /// let msg = 21u64;
/// let shift = 2; /// let shift = 2;

View File

@@ -23,16 +23,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// ///
/// let msg = 40; /// let msg = 40;
/// let scalar = 3; /// let scalar = 3;
@@ -109,16 +107,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// ///
/// let msg = 40; /// let msg = 40;
/// let scalar = 3; /// let scalar = 3;
@@ -181,16 +177,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::{CudaSignedRadixCiphertext, CudaUnsignedRadixCiphertext}; /// use tfhe::integer::gpu::ciphertext::{CudaSignedRadixCiphertext, CudaUnsignedRadixCiphertext};
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// ///
/// let msg: i8 = 120; /// let msg: i8 = 120;
/// let scalar: i8 = 8; /// let scalar: i8 = 8;

View File

@@ -342,16 +342,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 128; /// let msg = 128;
/// let shift = 2; /// let shift = 2;
@@ -497,16 +495,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let size = 4; /// let size = 4;
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg = 21; /// let msg = 21;
/// let shift = 2; /// let shift = 2;

View File

@@ -28,15 +28,13 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// ///
/// let msg_1 = 12; /// let msg_1 = 12;
/// let msg_2 = 10; /// let msg_2 = 10;
@@ -113,16 +111,14 @@ impl CudaServerKey {
/// use tfhe::integer::gen_keys_radix; /// use tfhe::integer::gen_keys_radix;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// ///
/// let msg_1 = 128; /// let msg_1 = 128;
/// let msg_2 = 99; /// let msg_2 = 99;
@@ -174,16 +170,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext; /// use tfhe::integer::gpu::ciphertext::CudaUnsignedRadixCiphertext;
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // We have 4 * 2 = 8 bits of message /// // We have 4 * 2 = 8 bits of message
/// let size = 4; /// let size = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, size, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, size, &streams);
/// ///
/// let msg_1 = 120u8; /// let msg_1 = 120u8;
/// let msg_2 = 181u8; /// let msg_2 = 181u8;
@@ -440,16 +434,14 @@ impl CudaServerKey {
/// use tfhe::core_crypto::gpu::vec::GpuIndex; /// use tfhe::core_crypto::gpu::vec::GpuIndex;
/// use tfhe::integer::gpu::ciphertext::{CudaSignedRadixCiphertext, CudaUnsignedRadixCiphertext}; /// use tfhe::integer::gpu::ciphertext::{CudaSignedRadixCiphertext, CudaUnsignedRadixCiphertext};
/// use tfhe::integer::gpu::gen_keys_radix_gpu; /// use tfhe::integer::gpu::gen_keys_radix_gpu;
/// # // TODO GPU DRIFT UPDATE /// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
/// use tfhe::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
/// ///
/// let gpu_index = 0; /// let gpu_index = 0;
/// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index)); /// let streams = CudaStreams::new_single_gpu(GpuIndex::new(gpu_index));
/// ///
/// # // TODO GPU DRIFT UPDATE
/// // Generate the client key and the server key: /// // Generate the client key and the server key:
/// let num_blocks = 4; /// let num_blocks = 4;
/// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, num_blocks, &streams); /// let (cks, sks) = gen_keys_radix_gpu(PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, num_blocks, &streams);
/// let total_bits = num_blocks * cks.parameters().message_modulus().0.ilog2() as usize; /// let total_bits = num_blocks * cks.parameters().message_modulus().0.ilog2() as usize;
/// let modulus = 1 << total_bits; /// let modulus = 1 << total_bits;
/// ///

View File

@@ -7,16 +7,13 @@ use crate::integer::server_key::radix_parallel::tests_long_run::test_erc20::{
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(safe_erc20 { create_gpu_parameterized_test!(safe_erc20 {
// TODO GPU DRIFT UPDATE PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
}); });
create_gpu_parameterized_test!(whitepaper_erc20 { create_gpu_parameterized_test!(whitepaper_erc20 {
// TODO GPU DRIFT UPDATE PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
}); });
create_gpu_parameterized_test!(no_cmux_erc20 { create_gpu_parameterized_test!(no_cmux_erc20 {
// TODO GPU DRIFT UPDATE PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
}); });
fn safe_erc20<P>(param: P) fn safe_erc20<P>(param: P)

View File

@@ -10,8 +10,7 @@ use crate::shortint::parameters::*;
use std::cmp::{max, min}; use std::cmp::{max, min};
create_gpu_parameterized_test!(random_op_sequence { create_gpu_parameterized_test!(random_op_sequence {
// TODO GPU DRIFT UPDATE PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
}); });
fn random_op_sequence<P>(param: P) fn random_op_sequence<P>(param: P)
where where

View File

@@ -7,12 +7,10 @@ use crate::integer::server_key::radix_parallel::tests_long_run::test_signed_erc2
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(signed_whitepaper_erc20 { create_gpu_parameterized_test!(signed_whitepaper_erc20 {
// TODO GPU DRIFT UPDATE PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
}); });
create_gpu_parameterized_test!(signed_no_cmux_erc20 { create_gpu_parameterized_test!(signed_no_cmux_erc20 {
// TODO GPU DRIFT UPDATE PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
}); });
fn signed_whitepaper_erc20<P>(param: P) fn signed_whitepaper_erc20<P>(param: P)

View File

@@ -12,8 +12,7 @@ use crate::shortint::parameters::*;
use std::cmp::{max, min}; use std::cmp::{max, min};
create_gpu_parameterized_test!(signed_random_op_sequence { create_gpu_parameterized_test!(signed_random_op_sequence {
// TODO GPU DRIFT UPDATE PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
}); });
fn signed_random_op_sequence<P>(param: P) fn signed_random_op_sequence<P>(param: P)
where where

View File

@@ -5,7 +5,7 @@ use crate::integer::gpu::CudaServerKey;
use crate::integer::server_key::radix_parallel::tests_signed::test_abs::{ use crate::integer::server_key::radix_parallel::tests_signed::test_abs::{
signed_default_absolute_value_test, signed_unchecked_absolute_value_test, signed_default_absolute_value_test, signed_unchecked_absolute_value_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_signed_unchecked_abs); create_gpu_parameterized_test!(integer_signed_unchecked_abs);

View File

@@ -5,7 +5,7 @@ use crate::integer::gpu::CudaServerKey;
use crate::integer::server_key::radix_parallel::tests_signed::test_add::{ use crate::integer::server_key::radix_parallel::tests_signed::test_add::{
signed_default_add_test, signed_unchecked_add_test, signed_unchecked_overflowing_add_test, signed_default_add_test, signed_unchecked_add_test, signed_unchecked_overflowing_add_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_unchecked_add); create_gpu_parameterized_test!(integer_unchecked_add);

View File

@@ -7,7 +7,7 @@ use crate::integer::server_key::radix_parallel::tests_signed::test_bitwise_op::{
signed_default_bitxor_test, signed_unchecked_bitand_test, signed_unchecked_bitor_test, signed_default_bitxor_test, signed_unchecked_bitand_test, signed_unchecked_bitor_test,
signed_unchecked_bitxor_test, signed_unchecked_bitxor_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_signed_unchecked_bitand); create_gpu_parameterized_test!(integer_signed_unchecked_bitand);

View File

@@ -5,7 +5,7 @@ use crate::integer::gpu::CudaServerKey;
use crate::integer::server_key::radix_parallel::tests_signed::test_cmux::{ use crate::integer::server_key::radix_parallel::tests_signed::test_cmux::{
signed_default_if_then_else_test, signed_unchecked_if_then_else_test, signed_default_if_then_else_test, signed_unchecked_if_then_else_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_unchecked_if_then_else); create_gpu_parameterized_test!(integer_unchecked_if_then_else);

View File

@@ -6,7 +6,7 @@ use crate::integer::server_key::radix_parallel::tests_signed::test_comparison::{
test_signed_default_function, test_signed_default_minmax, test_signed_unchecked_function, test_signed_default_function, test_signed_default_minmax, test_signed_unchecked_function,
test_signed_unchecked_minmax, test_signed_unchecked_minmax,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
/// This macro generates the tests for a given comparison fn /// This macro generates the tests for a given comparison fn
@@ -47,14 +47,14 @@ macro_rules! define_gpu_signed_comparison_test_functions {
create_gpu_parameterized_test!([<integer_signed_unchecked_ $comparison_name _ $clear_type>]{ create_gpu_parameterized_test!([<integer_signed_unchecked_ $comparison_name _ $clear_type>]{
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
create_gpu_parameterized_test!([<integer_signed_default_ $comparison_name _ $clear_type>]{ create_gpu_parameterized_test!([<integer_signed_default_ $comparison_name _ $clear_type>]{
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
} }
}; };
@@ -95,26 +95,26 @@ where
create_gpu_parameterized_test!(integer_signed_unchecked_max_128_bits { create_gpu_parameterized_test!(integer_signed_unchecked_max_128_bits {
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
create_gpu_parameterized_test!(integer_signed_unchecked_min_128_bits { create_gpu_parameterized_test!(integer_signed_unchecked_min_128_bits {
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
create_gpu_parameterized_test!(integer_signed_max_128_bits { create_gpu_parameterized_test!(integer_signed_max_128_bits {
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
create_gpu_parameterized_test!(integer_signed_min_128_bits { create_gpu_parameterized_test!(integer_signed_min_128_bits {
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
define_gpu_signed_comparison_test_functions!(eq, i128); define_gpu_signed_comparison_test_functions!(eq, i128);

View File

@@ -3,7 +3,7 @@ use crate::integer::gpu::server_key::radix::tests_unsigned::{
}; };
use crate::integer::gpu::CudaServerKey; use crate::integer::gpu::CudaServerKey;
use crate::integer::server_key::radix_parallel::tests_signed::test_div_rem::signed_unchecked_div_rem_test; use crate::integer::server_key::radix_parallel::tests_signed::test_div_rem::signed_unchecked_div_rem_test;
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_signed_unchecked_div_rem); create_gpu_parameterized_test!(integer_signed_unchecked_div_rem);

View File

@@ -6,7 +6,7 @@ use crate::integer::server_key::radix_parallel::tests_signed::test_ilog2::{
default_checked_ilog2_test, default_ilog2_test, default_leading_ones_test, default_checked_ilog2_test, default_ilog2_test, default_leading_ones_test,
default_leading_zeros_test, default_trailing_ones_test, default_trailing_zeros_test, default_leading_zeros_test, default_trailing_ones_test, default_trailing_zeros_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_signed_default_trailing_zeros); create_gpu_parameterized_test!(integer_signed_default_trailing_zeros);

View File

@@ -5,7 +5,7 @@ use crate::integer::gpu::CudaServerKey;
use crate::integer::server_key::radix_parallel::tests_signed::test_mul::{ use crate::integer::server_key::radix_parallel::tests_signed::test_mul::{
signed_default_mul_test, signed_unchecked_mul_test, signed_default_mul_test, signed_unchecked_mul_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_unchecked_mul); create_gpu_parameterized_test!(integer_unchecked_mul);

View File

@@ -5,7 +5,7 @@ use crate::integer::gpu::CudaServerKey;
use crate::integer::server_key::radix_parallel::tests_signed::test_neg::{ use crate::integer::server_key::radix_parallel::tests_signed::test_neg::{
signed_default_neg_test, signed_unchecked_neg_test, signed_default_neg_test, signed_unchecked_neg_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_unchecked_neg); create_gpu_parameterized_test!(integer_unchecked_neg);

View File

@@ -6,7 +6,7 @@ use crate::integer::server_key::radix_parallel::tests_signed::test_rotate::{
signed_default_rotate_left_test, signed_default_rotate_right_test, signed_default_rotate_left_test, signed_default_rotate_right_test,
signed_unchecked_rotate_left_test, signed_unchecked_rotate_right_test, signed_unchecked_rotate_left_test, signed_unchecked_rotate_right_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_unchecked_rotate_left); create_gpu_parameterized_test!(integer_unchecked_rotate_left);

View File

@@ -6,7 +6,7 @@ use crate::integer::server_key::radix_parallel::tests_signed::test_scalar_add::{
signed_default_overflowing_scalar_add_test, signed_default_scalar_add_test, signed_default_overflowing_scalar_add_test, signed_default_scalar_add_test,
signed_unchecked_scalar_add_test, signed_unchecked_scalar_add_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_signed_unchecked_scalar_add); create_gpu_parameterized_test!(integer_signed_unchecked_scalar_add);

View File

@@ -6,7 +6,7 @@ use crate::integer::server_key::radix_parallel::tests_signed::test_scalar_bitwis
signed_default_scalar_bitand_test, signed_default_scalar_bitor_test, signed_default_scalar_bitand_test, signed_default_scalar_bitor_test,
signed_default_scalar_bitxor_test, signed_default_scalar_bitxor_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_signed_default_scalar_bitand); create_gpu_parameterized_test!(integer_signed_default_scalar_bitand);

View File

@@ -6,7 +6,7 @@ use crate::integer::server_key::radix_parallel::tests_signed::test_scalar_compar
test_signed_default_scalar_function, test_signed_default_scalar_minmax, test_signed_default_scalar_function, test_signed_default_scalar_minmax,
test_signed_unchecked_scalar_function, test_signed_unchecked_scalar_minmax, test_signed_unchecked_scalar_function, test_signed_unchecked_scalar_minmax,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
/// This macro generates the tests for a given comparison fn /// This macro generates the tests for a given comparison fn
@@ -45,14 +45,14 @@ macro_rules! define_gpu_signed_scalar_comparison_test_functions {
create_gpu_parameterized_test!([<integer_signed_unchecked_scalar_ $comparison_name _ $clear_type>]{ create_gpu_parameterized_test!([<integer_signed_unchecked_scalar_ $comparison_name _ $clear_type>]{
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
create_gpu_parameterized_test!([<integer_signed_default_scalar_ $comparison_name $clear_type>]{ create_gpu_parameterized_test!([<integer_signed_default_scalar_ $comparison_name $clear_type>]{
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
} }
}; };
@@ -93,26 +93,26 @@ where
create_gpu_parameterized_test!(integer_signed_unchecked_scalar_max_i128 { create_gpu_parameterized_test!(integer_signed_unchecked_scalar_max_i128 {
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
create_gpu_parameterized_test!(integer_signed_unchecked_scalar_min_i128 { create_gpu_parameterized_test!(integer_signed_unchecked_scalar_min_i128 {
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
create_gpu_parameterized_test!(integer_signed_scalar_max_i128 { create_gpu_parameterized_test!(integer_signed_scalar_max_i128 {
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
create_gpu_parameterized_test!(integer_signed_scalar_min_i128 { create_gpu_parameterized_test!(integer_signed_scalar_min_i128 {
// TODO GPU DRIFT UPDATE // TODO GPU DRIFT UPDATE
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
V1_0_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64, TEST_PARAM_GPU_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
}); });
define_gpu_signed_scalar_comparison_test_functions!(eq, i128); define_gpu_signed_scalar_comparison_test_functions!(eq, i128);

View File

@@ -3,7 +3,7 @@ use crate::integer::gpu::server_key::radix::tests_unsigned::{
}; };
use crate::integer::gpu::CudaServerKey; use crate::integer::gpu::CudaServerKey;
use crate::integer::server_key::radix_parallel::tests_signed::test_scalar_div_mod::signed_unchecked_scalar_div_rem_test; use crate::integer::server_key::radix_parallel::tests_signed::test_scalar_div_mod::signed_unchecked_scalar_div_rem_test;
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_signed_unchecked_scalar_div_rem); create_gpu_parameterized_test!(integer_signed_unchecked_scalar_div_rem);

View File

@@ -3,7 +3,7 @@ use crate::integer::gpu::server_key::radix::tests_unsigned::{
}; };
use crate::integer::gpu::CudaServerKey; use crate::integer::gpu::CudaServerKey;
use crate::integer::server_key::radix_parallel::tests_signed::test_scalar_mul::signed_unchecked_scalar_mul_test; use crate::integer::server_key::radix_parallel::tests_signed::test_scalar_mul::signed_unchecked_scalar_mul_test;
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_signed_unchecked_scalar_mul); create_gpu_parameterized_test!(integer_signed_unchecked_scalar_mul);

View File

@@ -6,7 +6,7 @@ use crate::integer::server_key::radix_parallel::tests_signed::test_scalar_rotate
signed_default_scalar_rotate_left_test, signed_default_scalar_rotate_right_test, signed_default_scalar_rotate_left_test, signed_default_scalar_rotate_right_test,
signed_unchecked_scalar_rotate_left_test, signed_unchecked_scalar_rotate_right_test, signed_unchecked_scalar_rotate_left_test, signed_unchecked_scalar_rotate_right_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_signed_unchecked_scalar_rotate_left); create_gpu_parameterized_test!(integer_signed_unchecked_scalar_rotate_left);

View File

@@ -6,7 +6,7 @@ use crate::integer::server_key::radix_parallel::tests_signed::test_scalar_shift:
signed_default_scalar_left_shift_test, signed_default_scalar_right_shift_test, signed_default_scalar_left_shift_test, signed_default_scalar_right_shift_test,
signed_unchecked_scalar_left_shift_test, signed_unchecked_scalar_right_shift_test, signed_unchecked_scalar_left_shift_test, signed_unchecked_scalar_right_shift_test,
}; };
use crate::shortint::parameters::current_params::*; use crate::shortint::parameters::test_params::*;
use crate::shortint::parameters::*; use crate::shortint::parameters::*;
create_gpu_parameterized_test!(integer_signed_unchecked_scalar_left_shift); create_gpu_parameterized_test!(integer_signed_unchecked_scalar_left_shift);

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