Skip to content

Commit

Permalink
chore(all): enforce polynomial size to be a power of 2
Browse files Browse the repository at this point in the history
  • Loading branch information
mayeul-zama committed Oct 4, 2024
1 parent 256378f commit bc3c778
Show file tree
Hide file tree
Showing 92 changed files with 764 additions and 690 deletions.
4 changes: 2 additions & 2 deletions tfhe/benches/core_crypto/dev_bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ fn get_bench_params<Scalar: Numeric>() -> (
DecompositionBaseLog(3),
DecompositionLevelCount(5),
GlweDimension(1),
PolynomialSize(1024),
PolynomialSize::new(1024),
LweBskGroupingFactor(2),
ThreadCount(5),
)
Expand All @@ -45,7 +45,7 @@ fn get_bench_params<Scalar: Numeric>() -> (
DecompositionBaseLog(18),
DecompositionLevelCount(1),
GlweDimension(3),
PolynomialSize(512),
PolynomialSize::new(512),
LweBskGroupingFactor(2),
ThreadCount(5),
)
Expand Down
2 changes: 1 addition & 1 deletion tfhe/benches/core_crypto/pbs128_bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ fn pbs_128(c: &mut Criterion) {

let lwe_dimension = LweDimension(860);
let glwe_dimension = GlweDimension(2);
let polynomial_size = PolynomialSize(2048);
let polynomial_size = PolynomialSize::new(2048);
let lwe_noise_distribution = DynamicDistribution::new_t_uniform(45);
let glwe_noise_distribution = DynamicDistribution::new_t_uniform(24);
let pbs_base_log = DecompositionBaseLog(24);
Expand Down
2 changes: 1 addition & 1 deletion tfhe/docs/references/core-crypto-api/tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ pub fn main() {
// Define the parameters for a 4 bits message able to hold the doubled 2 bits message
let small_lwe_dimension = LweDimension(742);
let glwe_dimension = GlweDimension(1);
let polynomial_size = PolynomialSize(2048);
let polynomial_size = PolynomialSize::new(2048);
let lwe_noise_distribution =
Gaussian::from_dispersion_parameter(StandardDev(0.000007069849454709433), 0.0);
let glwe_noise_distribution =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ fn main() {
let parameters = BooleanParameters::new(
LweDimension(586),
GlweDimension(2),
PolynomialSize(512),
PolynomialSize::new(512),
DynamicDistribution::new_gaussian_from_std_dev(
StandardDev(0.00008976167396834998),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ fn main() {
let param = ClassicPBSParameters::new(
LweDimension(656),
GlweDimension(2),
PolynomialSize(512),
PolynomialSize::new(512),
DynamicDistribution::new_gaussian_from_std_dev(
StandardDev(0.000034119201269311964),
),
Expand Down
2 changes: 1 addition & 1 deletion tfhe/src/boolean/parameters/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ impl BooleanKeySwitchingParameters {
pub const TFHE_LIB_PARAMETERS: BooleanParameters = BooleanParameters {
lwe_dimension: LweDimension(630),
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(1024),
polynomial_size: PolynomialSize::new(1024),
lwe_noise_distribution: DynamicDistribution::new_gaussian_from_std_dev(StandardDev(
0.000030517578125,
)),
Expand Down
8 changes: 4 additions & 4 deletions tfhe/src/boolean/parameters/params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use crate::core_crypto::prelude::*;
pub const DEFAULT_PARAMETERS: BooleanParameters = BooleanParameters {
lwe_dimension: LweDimension(805),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
polynomial_size: PolynomialSize::new(512),
#[allow(clippy::excessive_precision)]
lwe_noise_distribution: DynamicDistribution::new_gaussian_from_std_dev(StandardDev(
5.8615896642671336e-06,
Expand All @@ -28,7 +28,7 @@ pub const DEFAULT_PARAMETERS: BooleanParameters = BooleanParameters {
pub const DEFAULT_PARAMETERS_KS_PBS: BooleanParameters = BooleanParameters {
lwe_dimension: LweDimension(739),
glwe_dimension: GlweDimension(3),
polynomial_size: PolynomialSize(512),
polynomial_size: PolynomialSize::new(512),
#[allow(clippy::excessive_precision)]
lwe_noise_distribution: DynamicDistribution::new_gaussian_from_std_dev(StandardDev(
1.8304520733507305e-05,
Expand All @@ -46,7 +46,7 @@ pub const DEFAULT_PARAMETERS_KS_PBS: BooleanParameters = BooleanParameters {
pub const PARAMETERS_ERROR_PROB_2_POW_MINUS_165: BooleanParameters = BooleanParameters {
lwe_dimension: LweDimension(837),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
polynomial_size: PolynomialSize::new(1024),
#[allow(clippy::excessive_precision)]
lwe_noise_distribution: DynamicDistribution::new_gaussian_from_std_dev(StandardDev(
3.374714376692653e-06,
Expand All @@ -64,7 +64,7 @@ pub const PARAMETERS_ERROR_PROB_2_POW_MINUS_165: BooleanParameters = BooleanPara
pub const PARAMETERS_ERROR_PROB_2_POW_MINUS_165_KS_PBS: BooleanParameters = BooleanParameters {
lwe_dimension: LweDimension(770),
glwe_dimension: GlweDimension(2),
polynomial_size: PolynomialSize(1024),
polynomial_size: PolynomialSize::new(1024),
#[allow(clippy::excessive_precision)]
lwe_noise_distribution: DynamicDistribution::new_gaussian_from_std_dev(StandardDev(
1.0721931696480342e-05,
Expand Down
4 changes: 2 additions & 2 deletions tfhe/src/c_api/boolean/parameters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ impl TryFrom<BooleanParameters> for crate::boolean::parameters::BooleanParameter
Ok(Self {
lwe_dimension: LweDimension(c_params.lwe_dimension),
glwe_dimension: GlweDimension(c_params.glwe_dimension),
polynomial_size: PolynomialSize(c_params.polynomial_size),
polynomial_size: PolynomialSize::new(c_params.polynomial_size),
lwe_noise_distribution: c_params.lwe_noise_distribution.try_into()?,
glwe_noise_distribution: c_params.glwe_noise_distribution.try_into()?,
pbs_base_log: DecompositionBaseLog(c_params.pbs_base_log),
Expand All @@ -81,7 +81,7 @@ impl BooleanParameters {
Self {
lwe_dimension: rust_params.lwe_dimension.0,
glwe_dimension: rust_params.glwe_dimension.0,
polynomial_size: rust_params.polynomial_size.0,
polynomial_size: rust_params.polynomial_size.get(),
lwe_noise_distribution: rust_params.lwe_noise_distribution.convert_to_c(),
glwe_noise_distribution: rust_params.glwe_noise_distribution.convert_to_c(),
pbs_base_log: rust_params.pbs_base_log.0,
Expand Down
24 changes: 12 additions & 12 deletions tfhe/src/c_api/core_crypto/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ pub unsafe extern "C" fn core_crypto_ggsw_encrypt(
use crate::core_crypto::prelude::*;

let glwe_sk_slice = std::slice::from_raw_parts(glwe_sk_ptr, glwe_sk_dim * poly_size);
let glwe_sk = GlweSecretKey::from_container(glwe_sk_slice, PolynomialSize(poly_size));
let glwe_sk = GlweSecretKey::from_container(glwe_sk_slice, PolynomialSize::new(poly_size));

let seed_low_bytes: u128 = seed_low_bytes.into();
let seed_high_bytes: u128 = seed_high_bytes.into();
Expand All @@ -230,14 +230,14 @@ pub unsafe extern "C" fn core_crypto_ggsw_encrypt(
output_ct_ptr,
ggsw_ciphertext_size(
GlweDimension(glwe_sk_dim).to_glwe_size(),
PolynomialSize(poly_size),
PolynomialSize::new(poly_size),
DecompositionLevelCount(level_count),
),
);
let mut ct = GgswCiphertext::from_container(
output_ct,
GlweDimension(glwe_sk_dim).to_glwe_size(),
PolynomialSize(poly_size),
PolynomialSize::new(poly_size),
DecompositionBaseLog(base_log),
CiphertextModulus::new_native(),
);
Expand Down Expand Up @@ -289,18 +289,18 @@ pub unsafe extern "C" fn core_crypto_glwe_decrypt(
use crate::core_crypto::prelude::*;

let glwe_sk_slice = std::slice::from_raw_parts(glwe_sk_ptr, glwe_sk_dim * glwe_poly_size);
let glwe_sk = GlweSecretKey::from_container(glwe_sk_slice, PolynomialSize(glwe_poly_size));
let glwe_sk = GlweSecretKey::from_container(glwe_sk_slice, PolynomialSize::new(glwe_poly_size));

let input_ct = std::slice::from_raw_parts(
input_ct_ptr,
glwe_ciphertext_size(
GlweDimension(glwe_sk_dim).to_glwe_size(),
PolynomialSize(glwe_poly_size),
PolynomialSize::new(glwe_poly_size),
),
);
let ct = GlweCiphertext::from_container(
input_ct,
PolynomialSize(glwe_poly_size),
PolynomialSize::new(glwe_poly_size),
CiphertextModulus::new_native(),
);
let output = std::slice::from_raw_parts_mut(output_pt, glwe_poly_size);
Expand All @@ -327,7 +327,7 @@ pub unsafe extern "C" fn core_crypto_lwe_multi_bit_bootstrapping_key_element_siz
let input_lwe_sk_dim = LweDimension(input_lwe_sk_dim);

let output_glwe_sk_dim = GlweDimension(output_glwe_sk_dim);
let output_glwe_sk_poly_size = PolynomialSize(output_glwe_sk_poly_size);
let output_glwe_sk_poly_size = PolynomialSize::new(output_glwe_sk_poly_size);

let lwe_multi_bit_level_count = DecompositionLevelCount(lwe_multi_bit_level_count);
let lwe_multi_bit_grouping_factor = LweBskGroupingFactor(lwe_multi_bit_grouping_factor);
Expand Down Expand Up @@ -366,7 +366,7 @@ pub unsafe extern "C" fn core_crypto_par_generate_lwe_bootstrapping_key(
let input_lwe_sk = LweSecretKey::from_container(input_lwe_sk_slice);

let output_glwe_sk_dim = GlweDimension(output_glwe_sk_dim);
let output_glwe_sk_poly_size = PolynomialSize(output_glwe_sk_poly_size);
let output_glwe_sk_poly_size = PolynomialSize::new(output_glwe_sk_poly_size);
let output_glwe_sk_size =
glwe_ciphertext_mask_size(output_glwe_sk_dim, output_glwe_sk_poly_size);
let output_glwe_sk_slice =
Expand Down Expand Up @@ -450,7 +450,7 @@ pub unsafe extern "C" fn core_crypto_par_generate_lwe_multi_bit_bootstrapping_ke
let input_lwe_sk = LweSecretKey::from_container(input_lwe_sk_slice);

let output_glwe_sk_dim = GlweDimension(output_glwe_sk_dim);
let output_glwe_sk_poly_size = PolynomialSize(output_glwe_sk_poly_size);
let output_glwe_sk_poly_size = PolynomialSize::new(output_glwe_sk_poly_size);
let output_glwe_sk_size =
glwe_ciphertext_mask_size(output_glwe_sk_dim, output_glwe_sk_poly_size);
let output_glwe_sk_slice =
Expand Down Expand Up @@ -611,7 +611,7 @@ pub unsafe extern "C" fn core_crypto_par_generate_lwe_private_functional_keyswit
let output_glwe_sk_slice =
std::slice::from_raw_parts(output_glwe_sk_ptr, glwe_dim * poly_size);
let output_glwe_sk =
GlweSecretKey::from_container(output_glwe_sk_slice, PolynomialSize(poly_size));
GlweSecretKey::from_container(output_glwe_sk_slice, PolynomialSize::new(poly_size));

let seed_low_bytes: u128 = seed_low_bytes.into();
let seed_high_bytes: u128 = seed_high_bytes.into();
Expand All @@ -632,7 +632,7 @@ pub unsafe extern "C" fn core_crypto_par_generate_lwe_private_functional_keyswit
DecompositionLevelCount(pksk_level_count),
LweDimension(input_lwe_sk_dim),
GlweDimension(glwe_dim).to_glwe_size(),
PolynomialSize(poly_size),
PolynomialSize::new(poly_size),
FunctionalPackingKeyswitchKeyCount(glwe_dim + 1),
CiphertextModulus::new_native(),
);
Expand All @@ -647,7 +647,7 @@ pub unsafe extern "C" fn core_crypto_par_generate_lwe_private_functional_keyswit
DecompositionLevelCount(pksk_level_count),
LweDimension(input_lwe_sk_dim).to_lwe_size(),
GlweDimension(glwe_dim).to_glwe_size(),
PolynomialSize(poly_size),
PolynomialSize::new(poly_size),
CiphertextModulus::new_native(),
);

Expand Down
4 changes: 2 additions & 2 deletions tfhe/src/c_api/shortint/parameters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ impl TryFrom<ShortintPBSParameters> for crate::shortint::ClassicPBSParameters {
Ok(Self {
lwe_dimension: LweDimension(c_params.lwe_dimension),
glwe_dimension: GlweDimension(c_params.glwe_dimension),
polynomial_size: PolynomialSize(c_params.polynomial_size),
polynomial_size: PolynomialSize::new(c_params.polynomial_size),
lwe_noise_distribution: c_params.lwe_noise_distribution.try_into()?,
glwe_noise_distribution: c_params.glwe_noise_distribution.try_into()?,
pbs_base_log: DecompositionBaseLog(c_params.pbs_base_log),
Expand Down Expand Up @@ -106,7 +106,7 @@ impl ShortintPBSParameters {
Self {
lwe_dimension: rust_params.lwe_dimension.0,
glwe_dimension: rust_params.glwe_dimension.0,
polynomial_size: rust_params.polynomial_size.0,
polynomial_size: rust_params.polynomial_size.get(),
lwe_noise_distribution: rust_params.lwe_noise_distribution.convert_to_c(),
glwe_noise_distribution: rust_params.glwe_noise_distribution.convert_to_c(),
pbs_base_log: rust_params.pbs_base_log.0,
Expand Down
12 changes: 6 additions & 6 deletions tfhe/src/core_crypto/algorithms/ggsw_encryption.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ pub fn ggsw_encryption_multiplicative_factor<Scalar: UnsignedInteger>(
/// // computations
/// // Define parameters for GgswCiphertext creation
/// let glwe_size = GlweSize(2);
/// let polynomial_size = PolynomialSize(1024);
/// let polynomial_size = PolynomialSize::new(1024);
/// let decomp_base_log = DecompositionBaseLog(8);
/// let decomp_level_count = DecompositionLevelCount(3);
/// let glwe_noise_distribution =
Expand Down Expand Up @@ -188,7 +188,7 @@ pub fn encrypt_constant_ggsw_ciphertext<Scalar, NoiseDistribution, KeyCont, Outp
/// // computations
/// // Define parameters for GgswCiphertext creation
/// let glwe_size = GlweSize(2);
/// let polynomial_size = PolynomialSize(1024);
/// let polynomial_size = PolynomialSize::new(1024);
/// let decomp_base_log = DecompositionBaseLog(8);
/// let decomp_level_count = DecompositionLevelCount(3);
/// let glwe_noise_distribution =
Expand Down Expand Up @@ -452,7 +452,7 @@ pub fn encrypt_constant_seeded_ggsw_ciphertext_with_existing_generator<
/// // computations
/// // Define parameters for GgswCiphertext creation
/// let glwe_size = GlweSize(2);
/// let polynomial_size = PolynomialSize(1024);
/// let polynomial_size = PolynomialSize::new(1024);
/// let decomp_base_log = DecompositionBaseLog(8);
/// let decomp_level_count = DecompositionLevelCount(3);
/// let glwe_noise_distribution =
Expand Down Expand Up @@ -635,7 +635,7 @@ pub fn par_encrypt_constant_seeded_ggsw_ciphertext_with_existing_generator<
/// // computations
/// // Define parameters for GgswCiphertext creation
/// let glwe_size = GlweSize(2);
/// let polynomial_size = PolynomialSize(1024);
/// let polynomial_size = PolynomialSize::new(1024);
/// let decomp_base_log = DecompositionBaseLog(8);
/// let decomp_level_count = DecompositionLevelCount(3);
/// let glwe_noise_distribution =
Expand Down Expand Up @@ -810,7 +810,7 @@ fn encrypt_constant_seeded_ggsw_level_matrix_row<
/// // computations
/// // Define parameters for GgswCiphertext creation
/// let glwe_size = GlweSize(2);
/// let polynomial_size = PolynomialSize(1024);
/// let polynomial_size = PolynomialSize::new(1024);
/// let decomp_base_log = DecompositionBaseLog(8);
/// let decomp_level_count = DecompositionLevelCount(3);
/// let glwe_noise_distribution =
Expand Down Expand Up @@ -888,7 +888,7 @@ where

let mut decrypted_plaintext_list = PlaintextList::new(
Scalar::ZERO,
PlaintextCount(ggsw_ciphertext.polynomial_size().0),
PlaintextCount(ggsw_ciphertext.polynomial_size().get()),
);

decrypt_glwe_ciphertext(glwe_secret_key, &last_row, &mut decrypted_plaintext_list);
Expand Down
Loading

0 comments on commit bc3c778

Please sign in to comment.