mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-09 22:57:59 -05:00
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:
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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>)> {
|
||||||
|
|||||||
@@ -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,
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
),
|
),
|
||||||
] {
|
] {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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)),
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -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"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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"] }
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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);
|
||||||
// ....
|
// ....
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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!):
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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}");
|
||||||
|
|||||||
@@ -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,
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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'];
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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,
|
||||||
/// );
|
/// );
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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,
|
||||||
/// );
|
/// );
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -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;
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -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;
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -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;
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -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,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user