mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-09 14:47:56 -05:00
feat: add 2^-128 parameters
This commit is contained in:
@@ -4,7 +4,10 @@ use std::io::{stdin, Read};
|
||||
use std::mem::MaybeUninit;
|
||||
use std::{array, iter};
|
||||
use tfhe::prelude::*;
|
||||
use tfhe::shortint::parameters::*;
|
||||
use tfhe::shortint::parameters::v1_0::{
|
||||
V1_0_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,
|
||||
};
|
||||
use tfhe::{set_server_key, ClientKey, CompressedServerKey, ConfigBuilder, Device, FheUint32};
|
||||
|
||||
// might improve error message on type error
|
||||
@@ -187,10 +190,10 @@ fn main() -> Result<(), std::io::Error> {
|
||||
let config = match args.multibit {
|
||||
None => ConfigBuilder::default(),
|
||||
Some(2) => ConfigBuilder::with_custom_parameters(
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V1_0_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
),
|
||||
Some(3) => ConfigBuilder::with_custom_parameters(
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V1_0_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
),
|
||||
Some(v) => {
|
||||
panic!("Invalid multibit setting {v}");
|
||||
|
||||
@@ -13,32 +13,11 @@ use tfhe::shortint::parameters::coverage_parameters::{
|
||||
COVERAGE_PARAM_MESSAGE_5_CARRY_1_KS_PBS,
|
||||
COVERAGE_PARAM_MULTI_BIT_MESSAGE_2_CARRY_2_GROUP_2_KS_PBS,
|
||||
};
|
||||
use tfhe::shortint::parameters::key_switching::p_fail_2_minus_64::ks_pbs::V0_11_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS;
|
||||
use tfhe::shortint::parameters::key_switching::ShortintKeySwitchingParameters;
|
||||
|
||||
use tfhe::shortint::parameters::multi_bit::gaussian::p_fail_2_minus_64::ks_pbs::{
|
||||
V1_0_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_0_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_0_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,
|
||||
};
|
||||
use tfhe::shortint::parameters::current_params::*;
|
||||
use tfhe::shortint::parameters::{
|
||||
ClassicPBSParameters, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_4_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_5_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_6_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_3_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_3_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64,
|
||||
ClassicPBSParameters, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||
};
|
||||
#[cfg(feature = "experimental")]
|
||||
use tfhe::shortint::parameters::{
|
||||
@@ -106,25 +85,18 @@ fn client_server_keys() {
|
||||
ClassicPBSParameters,
|
||||
ClassicPBSParameters,
|
||||
ShortintKeySwitchingParameters,
|
||||
); 2] = [
|
||||
(
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS,
|
||||
),
|
||||
(
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS,
|
||||
),
|
||||
];
|
||||
); 1] = [(
|
||||
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_KEYSWITCH_1_1_KS_PBS_TO_2_2_KS_PBS_GAUSSIAN_2M128,
|
||||
)];
|
||||
|
||||
generate_ksk_keys(&KSK_PARAMS);
|
||||
|
||||
#[cfg(feature = "experimental")]
|
||||
{
|
||||
const WOPBS_PARAMS: [(ClassicPBSParameters, WopbsParameters); 1] = [(
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
|
||||
LEGACY_WOPBS_PARAM_MESSAGE_2_CARRY_2_KS_PBS,
|
||||
)];
|
||||
generate_wopbs_keys(&WOPBS_PARAMS);
|
||||
@@ -134,23 +106,25 @@ fn client_server_keys() {
|
||||
[DEFAULT_PARAMETERS, DEFAULT_PARAMETERS_KS_PBS];
|
||||
generate_boolean_keys(&BOOLEAN_PARAMS);
|
||||
} else {
|
||||
const PBS_KEYS: [ClassicPBSParameters; 14] = [
|
||||
const PBS_KEYS: [ClassicPBSParameters; 15] = [
|
||||
// TUniform
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||
// Gaussian
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_4_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_5_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_6_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_3_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_3_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64,
|
||||
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_1_CARRY_2_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_1_CARRY_3_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_1_CARRY_4_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_1_CARRY_5_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_1_CARRY_6_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_2_CARRY_1_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_2_CARRY_3_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_3_CARRY_1_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_3_CARRY_2_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M128,
|
||||
// 2M64 as backup as 2M128 is too slow
|
||||
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64,
|
||||
];
|
||||
generate_pbs_keys(&PBS_KEYS);
|
||||
|
||||
@@ -158,19 +132,19 @@ fn client_server_keys() {
|
||||
{
|
||||
const WOPBS_PARAMS: [(ClassicPBSParameters, WopbsParameters); 4] = [
|
||||
(
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
LEGACY_WOPBS_PARAM_MESSAGE_1_CARRY_1_KS_PBS,
|
||||
),
|
||||
(
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
LEGACY_WOPBS_PARAM_MESSAGE_2_CARRY_2_KS_PBS,
|
||||
),
|
||||
(
|
||||
V0_11_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
LEGACY_WOPBS_PARAM_MESSAGE_3_CARRY_3_KS_PBS,
|
||||
),
|
||||
(
|
||||
V0_11_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64,
|
||||
V1_0_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64,
|
||||
LEGACY_WOPBS_PARAM_MESSAGE_4_CARRY_4_KS_PBS,
|
||||
),
|
||||
];
|
||||
|
||||
@@ -9,9 +9,9 @@ use std::path::Path;
|
||||
use tfhe::integer::U256;
|
||||
use tfhe::keycache::NamedParam;
|
||||
use tfhe::prelude::*;
|
||||
use tfhe::shortint::parameters::classic::compact_pk::{
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64,
|
||||
use tfhe::shortint::parameters::current_params::{
|
||||
V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128,
|
||||
V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128,
|
||||
};
|
||||
use tfhe::shortint::PBSParameters;
|
||||
use tfhe::{
|
||||
@@ -40,7 +40,7 @@ pub fn cpk_and_cctl_sizes(results_file: &Path) {
|
||||
let operator = OperatorType::Atomic;
|
||||
|
||||
{
|
||||
let params = V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M64;
|
||||
let params = V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128;
|
||||
let config = ConfigBuilder::default()
|
||||
.use_custom_parameters(params)
|
||||
.build();
|
||||
@@ -98,7 +98,7 @@ pub fn cpk_and_cctl_sizes(results_file: &Path) {
|
||||
}
|
||||
|
||||
{
|
||||
let params = V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64;
|
||||
let params = V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128;
|
||||
let config = ConfigBuilder::default()
|
||||
.use_custom_parameters(params)
|
||||
.build();
|
||||
@@ -157,7 +157,7 @@ pub fn cpk_and_cctl_sizes(results_file: &Path) {
|
||||
|
||||
// 256 bits
|
||||
{
|
||||
let params = V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M64;
|
||||
let params = V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M128;
|
||||
let config = ConfigBuilder::default()
|
||||
.use_custom_parameters(params)
|
||||
.build();
|
||||
@@ -205,7 +205,7 @@ pub fn cpk_and_cctl_sizes(results_file: &Path) {
|
||||
}
|
||||
|
||||
{
|
||||
let params = V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64;
|
||||
let params = V1_0_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M128;
|
||||
let config = ConfigBuilder::default()
|
||||
.use_custom_parameters(params)
|
||||
.build();
|
||||
|
||||
@@ -6,14 +6,12 @@ use tfhe::boolean::parameters::{BooleanParameters, VEC_BOOLEAN_PARAM};
|
||||
use tfhe::core_crypto::commons::parameters::{GlweDimension, LweDimension, PolynomialSize};
|
||||
use tfhe::core_crypto::prelude::{DynamicDistribution, TUniform, UnsignedInteger};
|
||||
use tfhe::keycache::NamedParam;
|
||||
use tfhe::shortint::parameters::classic::compact_pk::ALL_PARAMETER_VEC_COMPACT_PK;
|
||||
use tfhe::shortint::parameters::classic::gaussian::ALL_PARAMETER_VEC_GAUSSIAN;
|
||||
use tfhe::shortint::parameters::compact_public_key_only::p_fail_2_minus_64::ks_pbs::V0_11_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
use tfhe::shortint::parameters::multi_bit::ALL_MULTI_BIT_PARAMETER_VEC;
|
||||
use tfhe::shortint::parameters::current_params::{
|
||||
VEC_ALL_CLASSIC_PBS_PARAMETERS, VEC_ALL_COMPACT_PUBLIC_KEY_ENCRYPTION_PARAMETERS,
|
||||
VEC_ALL_COMPRESSION_PARAMETERS, VEC_ALL_MULTI_BIT_PBS_PARAMETERS,
|
||||
};
|
||||
use tfhe::shortint::parameters::{
|
||||
CompactPublicKeyEncryptionParameters, CompressionParameters, ShortintParameterSet,
|
||||
COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
|
||||
};
|
||||
|
||||
pub trait ParamDetails<T: UnsignedInteger> {
|
||||
@@ -151,15 +149,10 @@ struct ParamGroupKey {
|
||||
///Function to print in the lattice_estimator format the parameters
|
||||
/// Format: LWE.Parameters(n=722, q=2^32, Xs=ND.UniformMod(2),
|
||||
/// Xe=ND.DiscreteGaussian(56139.60810663548), tag='test_lattice_estimator')
|
||||
pub fn format_lwe_parameters_to_lattice_estimator<
|
||||
U: UnsignedInteger,
|
||||
T: ParamDetails<U> + NamedParam,
|
||||
>(
|
||||
param: &T,
|
||||
similar_params: Vec<String>,
|
||||
pub fn format_lwe_parameters_to_lattice_estimator<U: UnsignedInteger, T: ParamDetails<U>>(
|
||||
(param, name): (&T, &str),
|
||||
similar_params: &[&str],
|
||||
) -> String {
|
||||
let name = param.name();
|
||||
|
||||
match param.lwe_noise_distribution() {
|
||||
DynamicDistribution::Gaussian(distrib) => {
|
||||
let modular_std_dev =
|
||||
@@ -180,15 +173,10 @@ pub fn format_lwe_parameters_to_lattice_estimator<
|
||||
///Function to print in the lattice_estimator format the parameters
|
||||
/// Format: LWE.Parameters(n=722, q=2^32, Xs=ND.UniformMod(2),
|
||||
/// Xe=ND.DiscreteGaussian(56139.60810663548), tag='test_lattice_estimator')
|
||||
pub fn format_glwe_parameters_to_lattice_estimator<
|
||||
U: UnsignedInteger,
|
||||
T: ParamDetails<U> + NamedParam,
|
||||
>(
|
||||
param: &T,
|
||||
similar_params: Vec<String>,
|
||||
pub fn format_glwe_parameters_to_lattice_estimator<U: UnsignedInteger, T: ParamDetails<U>>(
|
||||
(param, name): (&T, &str),
|
||||
similar_params: &[&str],
|
||||
) -> String {
|
||||
let name = param.name();
|
||||
|
||||
match param.glwe_noise_distribution() {
|
||||
DynamicDistribution::Gaussian(distrib) => {
|
||||
let modular_std_dev =
|
||||
@@ -218,7 +206,7 @@ fn write_file(file: &mut File, filename: &Path, line: impl Into<String>) {
|
||||
|
||||
fn write_all_params_in_file<U: UnsignedInteger, T: ParamDetails<U> + Copy + NamedParam>(
|
||||
filename: &str,
|
||||
params: &[T],
|
||||
params: &[(T, Option<&str>)],
|
||||
format: ParametersFormat,
|
||||
) {
|
||||
let path = Path::new(filename);
|
||||
@@ -228,9 +216,9 @@ fn write_all_params_in_file<U: UnsignedInteger, T: ParamDetails<U> + Copy + Name
|
||||
.open(path)
|
||||
.expect("cannot open parsed results file");
|
||||
|
||||
let mut params_groups: HashMap<ParamGroupKey, Vec<T>> = HashMap::new();
|
||||
let mut params_groups: HashMap<ParamGroupKey, Vec<(T, String)>> = HashMap::new();
|
||||
|
||||
for params in params.iter() {
|
||||
for (params, optional_name) in params.iter() {
|
||||
let keys = match format {
|
||||
ParametersFormat::LweGlwe => vec![
|
||||
ParamGroupKey {
|
||||
@@ -267,10 +255,19 @@ fn write_all_params_in_file<U: UnsignedInteger, T: ParamDetails<U> + Copy + Name
|
||||
for key in keys.into_iter() {
|
||||
match params_groups.get_mut(&key) {
|
||||
Some(vec) => {
|
||||
vec.push(*params);
|
||||
vec.push((
|
||||
*params,
|
||||
optional_name.map_or_else(|| params.name(), |name| name.to_string()),
|
||||
));
|
||||
}
|
||||
None => {
|
||||
params_groups.insert(key, vec![*params]);
|
||||
params_groups.insert(
|
||||
key,
|
||||
vec![(
|
||||
*params,
|
||||
optional_name.map_or_else(|| params.name(), |name| name.to_string()),
|
||||
)],
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -279,16 +276,22 @@ fn write_all_params_in_file<U: UnsignedInteger, T: ParamDetails<U> + Copy + Name
|
||||
let mut param_names_augmented = Vec::new();
|
||||
|
||||
for (key, group) in params_groups.iter() {
|
||||
let similar_params = group.iter().map(|p| p.name()).collect::<Vec<String>>();
|
||||
let ref_param = group[0];
|
||||
let similar_params = group.iter().map(|p| p.1.as_str()).collect::<Vec<_>>();
|
||||
let (ref_param, ref_param_name) = &group[0];
|
||||
let formatted_param = match key.parameters_format {
|
||||
ParametersFormat::Lwe => {
|
||||
param_names_augmented.push(format!("{}_LWE", ref_param.name()));
|
||||
format_lwe_parameters_to_lattice_estimator(&ref_param, similar_params)
|
||||
param_names_augmented.push(format!("{}_LWE", ref_param_name));
|
||||
format_lwe_parameters_to_lattice_estimator(
|
||||
(ref_param, ref_param_name.as_str()),
|
||||
&similar_params,
|
||||
)
|
||||
}
|
||||
ParametersFormat::Glwe => {
|
||||
param_names_augmented.push(format!("{}_GLWE", ref_param.name()));
|
||||
format_glwe_parameters_to_lattice_estimator(&ref_param, similar_params)
|
||||
param_names_augmented.push(format!("{}_GLWE", ref_param_name));
|
||||
format_glwe_parameters_to_lattice_estimator(
|
||||
(ref_param, ref_param_name.as_str()),
|
||||
&similar_params,
|
||||
)
|
||||
}
|
||||
ParametersFormat::LweGlwe => panic!("formatted parameters cannot be LweGlwe"),
|
||||
};
|
||||
@@ -305,47 +308,50 @@ fn main() {
|
||||
new_work_dir.push("ci");
|
||||
std::env::set_current_dir(new_work_dir).unwrap();
|
||||
|
||||
let boolean_params: Vec<_> = VEC_BOOLEAN_PARAM.into_iter().map(|p| (p, None)).collect();
|
||||
write_all_params_in_file(
|
||||
"boolean_parameters_lattice_estimator.sage",
|
||||
&VEC_BOOLEAN_PARAM,
|
||||
&boolean_params,
|
||||
ParametersFormat::LweGlwe,
|
||||
);
|
||||
|
||||
let all_classic_pbs = [
|
||||
ALL_PARAMETER_VEC_GAUSSIAN.to_vec(),
|
||||
ALL_PARAMETER_VEC_COMPACT_PK.to_vec(),
|
||||
vec![PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64],
|
||||
]
|
||||
.concat();
|
||||
let classic_pbs = all_classic_pbs
|
||||
.iter()
|
||||
.map(|p| ShortintParameterSet::from(*p))
|
||||
.collect::<Vec<_>>();
|
||||
let classic_pbs: Vec<_> = VEC_ALL_CLASSIC_PBS_PARAMETERS
|
||||
.into_iter()
|
||||
.map(|p| (ShortintParameterSet::from(*p.0), Some(p.1)))
|
||||
.collect();
|
||||
write_all_params_in_file(
|
||||
"shortint_classic_parameters_lattice_estimator.sage",
|
||||
&classic_pbs,
|
||||
ParametersFormat::LweGlwe,
|
||||
);
|
||||
|
||||
let multi_bit_pbs = ALL_MULTI_BIT_PARAMETER_VEC
|
||||
.iter()
|
||||
.map(|p| ShortintParameterSet::from(*p))
|
||||
.collect::<Vec<_>>();
|
||||
let multi_bit_pbs: Vec<_> = VEC_ALL_MULTI_BIT_PBS_PARAMETERS
|
||||
.into_iter()
|
||||
.map(|p| (ShortintParameterSet::from(*p.0), Some(p.1)))
|
||||
.collect();
|
||||
write_all_params_in_file(
|
||||
"shortint_multi_bit_parameters_lattice_estimator.sage",
|
||||
&multi_bit_pbs,
|
||||
ParametersFormat::LweGlwe,
|
||||
);
|
||||
|
||||
let cpk_params: Vec<_> = VEC_ALL_COMPACT_PUBLIC_KEY_ENCRYPTION_PARAMETERS
|
||||
.into_iter()
|
||||
.map(|p| (*p.0, Some(p.1)))
|
||||
.collect();
|
||||
write_all_params_in_file(
|
||||
"shortint_cpke_parameters_lattice_estimator.sage",
|
||||
&[V0_11_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64],
|
||||
&cpk_params,
|
||||
ParametersFormat::Lwe,
|
||||
);
|
||||
|
||||
let comp_params: Vec<_> = VEC_ALL_COMPRESSION_PARAMETERS
|
||||
.into_iter()
|
||||
.map(|p| (*p.0, Some(p.1)))
|
||||
.collect();
|
||||
write_all_params_in_file(
|
||||
"shortint_list_compression_parameters_lattice_estimator.sage",
|
||||
&[COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64],
|
||||
&comp_params,
|
||||
ParametersFormat::Glwe,
|
||||
);
|
||||
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
use tfhe::keycache::NamedParam;
|
||||
use tfhe::shortint::parameters::classic::tuniform::p_fail_2_minus_64::ks_pbs::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
use tfhe::shortint::parameters::compact_public_key_only::p_fail_2_minus_64::ks_pbs::V0_11_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
use tfhe::shortint::parameters::key_switching::p_fail_2_minus_64::ks_pbs::V0_11_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
use tfhe::shortint::parameters::multi_bit::tuniform::p_fail_2_minus_64::ks_pbs_gpu::PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
use tfhe::shortint::parameters::{
|
||||
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
|
||||
PARAM_KEYSWITCH_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,
|
||||
};
|
||||
|
||||
pub fn main() {
|
||||
println!("CPU Integer parameters:\n");
|
||||
println!("{}", PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.name());
|
||||
println!("{PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64:?}");
|
||||
println!("{}", PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.name());
|
||||
println!("{PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:?}");
|
||||
|
||||
println!("\n\n===========================================================================\n\n");
|
||||
|
||||
@@ -21,7 +23,7 @@ pub fn main() {
|
||||
println!("\n\n===========================================================================\n\n");
|
||||
|
||||
println!("CPU PBS parameters:\n");
|
||||
let param = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
let param = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||
let bits = (param.message_modulus.0 * param.carry_modulus.0).ilog2();
|
||||
println!("Precision {bits} bits");
|
||||
println!("{}", param.name());
|
||||
@@ -43,21 +45,21 @@ pub fn main() {
|
||||
println!("Compact Public Key parameters (encryption + ZK):");
|
||||
println!(
|
||||
"{}",
|
||||
stringify!(V0_11_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64)
|
||||
stringify!(PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128)
|
||||
);
|
||||
println!("{V0_11_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64:?}\n");
|
||||
println!("{PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:?}\n");
|
||||
|
||||
println!("Corresponding compute FHE parameters:");
|
||||
println!(
|
||||
"{}",
|
||||
stringify!(PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64)
|
||||
stringify!(PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128)
|
||||
);
|
||||
println!("{PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64:?}\n");
|
||||
println!("{PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:?}\n");
|
||||
|
||||
println!("Keyswitch from encryption + ZK to compute parameters:");
|
||||
println!(
|
||||
"{}",
|
||||
stringify!(V0_11_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64)
|
||||
stringify!(PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128)
|
||||
);
|
||||
println!("{V0_11_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64:?}");
|
||||
println!("{PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:?}");
|
||||
}
|
||||
|
||||
@@ -7,26 +7,8 @@ use std::io::Write;
|
||||
use std::path::Path;
|
||||
use tfhe::keycache::NamedParam;
|
||||
use tfhe::shortint::keycache::KEY_CACHE;
|
||||
use tfhe::shortint::parameters::compact_public_key_only::p_fail_2_minus_64::ks_pbs::V0_11_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
use tfhe::shortint::parameters::key_switching::p_fail_2_minus_64::ks_pbs::V0_11_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
use tfhe::shortint::parameters::list_compression::COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
use tfhe::shortint::parameters::{
|
||||
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
|
||||
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64,
|
||||
};
|
||||
use tfhe::shortint::parameters::current_params::*;
|
||||
use tfhe::shortint::parameters::*;
|
||||
use tfhe::shortint::{
|
||||
ClassicPBSParameters, ClientKey, CompactPrivateKey, CompressedCompactPublicKey,
|
||||
CompressedKeySwitchingKey, CompressedServerKey, PBSParameters,
|
||||
@@ -40,17 +22,17 @@ fn write_result(file: &mut File, name: &str, value: usize) {
|
||||
|
||||
fn client_server_key_sizes(results_file: &Path) {
|
||||
let shortint_params_vec: Vec<PBSParameters> = vec![
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64.into(),
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
V0_11_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
V0_11_PARAM_MESSAGE_4_CARRY_4_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_2_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_2_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_2_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
V0_11_PARAM_MULTI_BIT_GROUP_3_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128.into(),
|
||||
V1_0_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M128.into(),
|
||||
V1_0_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128.into(),
|
||||
V1_0_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128.into(),
|
||||
V1_0_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_0_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_0_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_0_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_3_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
PARAM_GPU_MULTI_BIT_GROUP_3_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64.into(),
|
||||
@@ -184,7 +166,7 @@ fn tuniform_key_set_sizes(results_file: &Path) {
|
||||
|
||||
println!("Measuring shortint key sizes:");
|
||||
|
||||
let param_fhe = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
let param_fhe = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||
let param_fhe_name = param_fhe.name();
|
||||
let cks = ClientKey::new(param_fhe);
|
||||
let compressed_sks = CompressedServerKey::new(&cks);
|
||||
@@ -224,8 +206,8 @@ fn tuniform_key_set_sizes(results_file: &Path) {
|
||||
&mut file,
|
||||
);
|
||||
|
||||
let param_pke = V0_11_PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
let param_pke_name = stringify!(PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64);
|
||||
let param_pke = PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||
let param_pke_name = stringify!(PARAM_PKE_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128);
|
||||
let compact_private_key = CompactPrivateKey::new(param_pke);
|
||||
let compressed_pk = CompressedCompactPublicKey::new(&compact_private_key);
|
||||
let pk = compressed_pk.decompress();
|
||||
@@ -240,11 +222,11 @@ fn tuniform_key_set_sizes(results_file: &Path) {
|
||||
&mut file,
|
||||
);
|
||||
|
||||
let param_compression = COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
let param_compression_name = stringify!(COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64);
|
||||
let param_compression = COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||
let param_compression_name = stringify!(COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128);
|
||||
let params_tuple = (
|
||||
param_compression,
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64,
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
|
||||
);
|
||||
|
||||
let private_compression_key = cks.new_compression_private_key(param_compression);
|
||||
@@ -268,8 +250,8 @@ fn tuniform_key_set_sizes(results_file: &Path) {
|
||||
&mut file,
|
||||
);
|
||||
|
||||
let param_casting = V0_11_PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
let param_casting_name = stringify!(PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64);
|
||||
let param_casting = PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
|
||||
let param_casting_name = stringify!(PARAM_KEYSWITCH_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128);
|
||||
let compressed_casting_key = CompressedKeySwitchingKey::new(
|
||||
(&compact_private_key, None),
|
||||
(&cks, &compressed_sks),
|
||||
|
||||
@@ -9,22 +9,7 @@ use std::fs::{File, OpenOptions};
|
||||
use std::io::Write;
|
||||
use std::path::Path;
|
||||
use tfhe::keycache::NamedParam;
|
||||
use tfhe::shortint::keycache::{
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64_NAME,
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64_NAME,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M64_NAME,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64_NAME,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64_NAME,
|
||||
};
|
||||
use tfhe::shortint::parameters::classic::compact_pk::{
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64,
|
||||
};
|
||||
use tfhe::shortint::parameters::classic::tuniform::p_fail_2_minus_64::ks_pbs::PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64;
|
||||
use tfhe::shortint::parameters::{
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64,
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64,
|
||||
};
|
||||
use tfhe::shortint::keycache::get_shortint_parameter_set_from_name;
|
||||
use tfhe::shortint::{ClassicPBSParameters, PBSParameters};
|
||||
|
||||
const BENCHMARK_NAME_PREFIX: &str = "wasm::";
|
||||
@@ -36,23 +21,14 @@ struct Args {
|
||||
}
|
||||
|
||||
fn params_from_name(name: &str) -> ClassicPBSParameters {
|
||||
match name.to_uppercase().as_str() {
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M64_NAME => {
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_GAUSSIAN_2M64
|
||||
match get_shortint_parameter_set_from_name(name.to_uppercase().as_str())
|
||||
.pbs_parameters()
|
||||
.unwrap()
|
||||
{
|
||||
PBSParameters::PBS(p) => p,
|
||||
PBSParameters::MultiBitPBS(_) => {
|
||||
panic!("Tried to get a MultiBitPBS, expected ClassicPBSParameters")
|
||||
}
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64_NAME => {
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS_GAUSSIAN_2M64
|
||||
}
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64_NAME => {
|
||||
V0_11_PARAM_MESSAGE_1_CARRY_1_KS_PBS_GAUSSIAN_2M64
|
||||
}
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64_NAME => {
|
||||
V0_11_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M64
|
||||
}
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64_NAME => {
|
||||
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M64
|
||||
}
|
||||
_ => panic!("failed to get parameters for name '{name}'"),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user