mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-08 22:28:01 -05:00
chore: wasm bench
This commit is contained in:
@@ -50,12 +50,13 @@ struct GroupElements<G: Curve> {
|
||||
}
|
||||
|
||||
impl<G: Curve> GroupElements<G> {
|
||||
pub fn new(message_len: usize, alpha: G::Zp) -> Self {
|
||||
pub fn new(message_len: usize, _alpha: G::Zp) -> Self {
|
||||
let (g_list, g_hat_list) = rayon::join(
|
||||
|| {
|
||||
let mut g_list = Vec::new();
|
||||
|
||||
let mut g_cur = G::G1::GENERATOR.mul_scalar(alpha);
|
||||
// let mut g_cur = G::G1::GENERATOR.mul_scalar(alpha);
|
||||
let mut g_cur = G::G1::GENERATOR + G::G1::GENERATOR;
|
||||
|
||||
for i in 0..2 * message_len {
|
||||
if i == message_len {
|
||||
@@ -63,17 +64,20 @@ impl<G: Curve> GroupElements<G> {
|
||||
} else {
|
||||
g_list.push(g_cur);
|
||||
}
|
||||
g_cur = g_cur.mul_scalar(alpha);
|
||||
// g_cur = g_cur.mul_scalar(alpha);
|
||||
g_cur = g_cur + g_cur;
|
||||
}
|
||||
|
||||
g_list
|
||||
},
|
||||
|| {
|
||||
let mut g_hat_list = Vec::new();
|
||||
let mut g_hat_cur = G::G2::GENERATOR.mul_scalar(alpha);
|
||||
// let mut g_hat_cur = G::G2::GENERATOR.mul_scalar(alpha);
|
||||
let mut g_hat_cur = G::G2::GENERATOR + G::G2::GENERATOR;
|
||||
for _ in 0..message_len {
|
||||
g_hat_list.push(g_hat_cur);
|
||||
g_hat_cur = (g_hat_cur).mul_scalar(alpha);
|
||||
// g_hat_cur = (g_hat_cur).mul_scalar(alpha);
|
||||
g_hat_cur = g_hat_cur + g_hat_cur;
|
||||
}
|
||||
g_hat_list
|
||||
},
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::core_crypto::commons::generators::DeterministicSeeder;
|
||||
use crate::core_crypto::commons::math::random::Seed;
|
||||
use crate::core_crypto::prelude::ActivatedRandomGenerator;
|
||||
use crate::shortint::parameters::bc::*;
|
||||
use crate::shortint::parameters::classic::compact_pk::*;
|
||||
use crate::shortint::parameters::*;
|
||||
use std::panic::set_hook;
|
||||
@@ -358,6 +359,19 @@ expose_predefined_parameters! {
|
||||
PARAM_SMALL_MESSAGE_2_CARRY_2,
|
||||
PARAM_SMALL_MESSAGE_3_CARRY_3,
|
||||
PARAM_SMALL_MESSAGE_4_CARRY_4,
|
||||
// ZK_TESTS
|
||||
PARAM_PKE_1_1_2048,
|
||||
PARAM_PKE_2_2_2048,
|
||||
PARAM_PKE_3_3_2048,
|
||||
PARAM_PKE_4_4_2048,
|
||||
PARAM_PKE_1_1_4096,
|
||||
PARAM_PKE_2_2_4096,
|
||||
PARAM_PKE_3_3_4096,
|
||||
PARAM_PKE_4_4_4096,
|
||||
PARAM_PKE_1_1_1024,
|
||||
PARAM_PKE_2_2_1024,
|
||||
PARAM_PKE_3_3_1024,
|
||||
PARAM_PKE_4_4_1024,
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
|
||||
@@ -7760,5 +7760,221 @@ pub const OLD_PARAM_PKE_2_2: ClassicPBSParameters = ClassicPBSParameters {
|
||||
max_noise_level: MaxNoiseLevel::new(5),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Big,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_1_1_4096: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(4096),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(3),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(2),
|
||||
carry_modulus: CarryModulus(2),
|
||||
max_noise_level: MaxNoiseLevel::new(3),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_2_2_4096: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(4096),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(3),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(4),
|
||||
carry_modulus: CarryModulus(4),
|
||||
max_noise_level: MaxNoiseLevel::new(5),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_3_3_4096: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(4096),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(3),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(8),
|
||||
carry_modulus: CarryModulus(8),
|
||||
max_noise_level: MaxNoiseLevel::new(9),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_4_4_4096: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(4096),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(3),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(16),
|
||||
carry_modulus: CarryModulus(16),
|
||||
max_noise_level: MaxNoiseLevel::new(17),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_1_1_2048: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(2048),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(2),
|
||||
carry_modulus: CarryModulus(2),
|
||||
max_noise_level: MaxNoiseLevel::new(3),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_2_2_2048: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(2048),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(4),
|
||||
carry_modulus: CarryModulus(4),
|
||||
max_noise_level: MaxNoiseLevel::new(5),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_3_3_2048: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(2048),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(8),
|
||||
carry_modulus: CarryModulus(8),
|
||||
max_noise_level: MaxNoiseLevel::new(9),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_4_4_2048: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(2048),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(16),
|
||||
carry_modulus: CarryModulus(16),
|
||||
max_noise_level: MaxNoiseLevel::new(17),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_1_1_1024: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(1024),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(42),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(2),
|
||||
carry_modulus: CarryModulus(2),
|
||||
max_noise_level: MaxNoiseLevel::new(3),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_2_2_1024: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(1024),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(42),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(4),
|
||||
carry_modulus: CarryModulus(4),
|
||||
max_noise_level: MaxNoiseLevel::new(5),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_3_3_1024: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(1024),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(42),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(8),
|
||||
carry_modulus: CarryModulus(8),
|
||||
max_noise_level: MaxNoiseLevel::new(9),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
pub const PARAM_PKE_4_4_1024: ClassicPBSParameters = ClassicPBSParameters {
|
||||
lwe_dimension: LweDimension(1024),
|
||||
glwe_dimension: GlweDimension(1),
|
||||
polynomial_size: PolynomialSize(2048),
|
||||
lwe_noise_distribution: DynamicDistribution::new_t_uniform(42),
|
||||
glwe_noise_distribution: DynamicDistribution::new_t_uniform(15),
|
||||
pbs_base_log: DecompositionBaseLog(21),
|
||||
pbs_level: DecompositionLevelCount(1),
|
||||
ks_base_log: DecompositionBaseLog(6),
|
||||
ks_level: DecompositionLevelCount(3),
|
||||
message_modulus: MessageModulus(16),
|
||||
carry_modulus: CarryModulus(16),
|
||||
max_noise_level: MaxNoiseLevel::new(17),
|
||||
log2_p_fail: -40.0,
|
||||
ciphertext_modulus: CiphertextModulus::new_native(),
|
||||
encryption_key_choice: EncryptionKeyChoice::Small,
|
||||
};
|
||||
|
||||
@@ -23,21 +23,21 @@ async function setup() {
|
||||
const demos = await Comlink.wrap(worker).demos;
|
||||
|
||||
const demoNames = [
|
||||
"publicKeyTest",
|
||||
"compressedPublicKeyTest",
|
||||
"compactPublicKeyTest32BitBig",
|
||||
"compactPublicKeyTest32BitSmall",
|
||||
"compactPublicKeyTest256BitBig",
|
||||
"compactPublicKeyTest256BitSmall",
|
||||
"compressedCompactPublicKeyTest256BitBig",
|
||||
"compressedCompactPublicKeyTest256BitSmall",
|
||||
"compactPublicKeyZeroKnowledge",
|
||||
"compactPublicKeyBench32BitBig",
|
||||
"compactPublicKeyBench32BitSmall",
|
||||
"compactPublicKeyBench256BitBig",
|
||||
"compactPublicKeyBench256BitSmall",
|
||||
"compressedServerKeyBenchMessage1Carry1",
|
||||
"compressedServerKeyBenchMessage2Carry2",
|
||||
// "publicKeyTest",
|
||||
// "compressedPublicKeyTest",
|
||||
// "compactPublicKeyTest32BitBig",
|
||||
// "compactPublicKeyTest32BitSmall",
|
||||
// "compactPublicKeyTest256BitBig",
|
||||
// "compactPublicKeyTest256BitSmall",
|
||||
// "compressedCompactPublicKeyTest256BitBig",
|
||||
// "compressedCompactPublicKeyTest256BitSmall",
|
||||
// "compactPublicKeyZeroKnowledge",
|
||||
// "compactPublicKeyBench32BitBig",
|
||||
// "compactPublicKeyBench32BitSmall",
|
||||
// "compactPublicKeyBench256BitBig",
|
||||
// "compactPublicKeyBench256BitSmall",
|
||||
// "compressedServerKeyBenchMessage1Carry1",
|
||||
// "compressedServerKeyBenchMessage2Carry2",
|
||||
"compactPublicKeyZeroKnowledgeBench",
|
||||
];
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const secs = 1200; // 20 Minutes
|
||||
const secs = 1_000_000; // 20 Minutes
|
||||
|
||||
const config = {
|
||||
verbose: true,
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"build": "cp -r ../../tfhe/pkg ./ && webpack build ./index.js --mode production -o dist --output-filename index.js && cp index.html dist/ && cp favicon.ico dist/",
|
||||
"server": "serve --config ../serve.json dist/",
|
||||
"test-separate-processes": "jest --listTests | xargs -L 1 jest --runInBand --testNamePattern=Test",
|
||||
"bench-separate-processes": "jest --listTests | xargs -L 1 jest --runInBand --testNamePattern=Bench",
|
||||
"bench-separate-processes": "jest --listTests | xargs -L 1 jest --runInBand --testNamePattern=ZeroKnowledgeBench",
|
||||
"test2": "mocha",
|
||||
"format": "prettier . --write",
|
||||
"check-format": "prettier . --check"
|
||||
|
||||
@@ -50,7 +50,7 @@ async function runActualTest(page, buttonId) {
|
||||
}
|
||||
}
|
||||
|
||||
const TWENTY_MINUTES = 1200 * 1000;
|
||||
const TWENTY_MINUTES = 1_000_000 * 1000;
|
||||
|
||||
async function runTestAttachedToButton(buttonId) {
|
||||
let browser;
|
||||
@@ -63,6 +63,7 @@ async function runTestAttachedToButton(buttonId) {
|
||||
} else {
|
||||
browser = await puppeteer.launch({
|
||||
headless: "new",
|
||||
args: ["--no-sandbox"],
|
||||
protocolTimeout: TWENTY_MINUTES,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
import { runTestAttachedToButton } from "./common.mjs";
|
||||
|
||||
it("Compact Public Key Test Big 32 Bit", async () => {
|
||||
await runTestAttachedToButton("compactPublicKeyTest32BitBig");
|
||||
});
|
||||
// it("Compact Public Key Test Big 32 Bit", async () => {
|
||||
// await runTestAttachedToButton("compactPublicKeyTest32BitBig");
|
||||
// });
|
||||
|
||||
it("Compact Public Key Test Small 32 Bit", async () => {
|
||||
await runTestAttachedToButton("compactPublicKeyTest32BitSmall");
|
||||
});
|
||||
// it("Compact Public Key Test Small 32 Bit", async () => {
|
||||
// await runTestAttachedToButton("compactPublicKeyTest32BitSmall");
|
||||
// });
|
||||
|
||||
it("Compact Public Key Test Small 256 Bit", async () => {
|
||||
await runTestAttachedToButton("compactPublicKeyTest256BitSmall");
|
||||
});
|
||||
// it("Compact Public Key Test Small 256 Bit", async () => {
|
||||
// await runTestAttachedToButton("compactPublicKeyTest256BitSmall");
|
||||
// });
|
||||
|
||||
it("Compact Public Key Test Big 256 Bit", async () => {
|
||||
await runTestAttachedToButton("compactPublicKeyTest256BitBig");
|
||||
});
|
||||
// it("Compact Public Key Test Big 256 Bit", async () => {
|
||||
// await runTestAttachedToButton("compactPublicKeyTest256BitBig");
|
||||
// });
|
||||
|
||||
it("Compressed Compact Public Key Test Small 256 Bit", async () => {
|
||||
await runTestAttachedToButton("compressedCompactPublicKeyTest256BitSmall");
|
||||
});
|
||||
// it("Compressed Compact Public Key Test Small 256 Bit", async () => {
|
||||
// await runTestAttachedToButton("compressedCompactPublicKeyTest256BitSmall");
|
||||
// });
|
||||
|
||||
it("Compressed Compact Public Key Test Big 256 Bit", async () => {
|
||||
await runTestAttachedToButton("compressedCompactPublicKeyTest256BitBig");
|
||||
});
|
||||
// it("Compressed Compact Public Key Test Big 256 Bit", async () => {
|
||||
// await runTestAttachedToButton("compressedCompactPublicKeyTest256BitBig");
|
||||
// });
|
||||
|
||||
it(
|
||||
"Compact Public Key Test Big 64 Bit With Zero Knowledge",
|
||||
"Compact Public Key Bench Big 64 Bit With ZeroKnowledgeBench",
|
||||
async () => {
|
||||
await runTestAttachedToButton("compactPublicKeyZeroKnowledge");
|
||||
await runTestAttachedToButton("compactPublicKeyZeroKnowledgeBench");
|
||||
},
|
||||
1200 * 1000,
|
||||
1_000_000 * 1000,
|
||||
); // 20 minutes timeout
|
||||
|
||||
@@ -648,53 +648,95 @@ async function compressedServerKeyBenchMessage2Carry2() {
|
||||
}
|
||||
|
||||
async function compactPublicKeyZeroKnowledgeBench() {
|
||||
let block_params = new ShortintParameters(
|
||||
ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_TUNIFORM_2M40,
|
||||
);
|
||||
let params_to_bench = [
|
||||
ShortintParametersName.PARAM_PKE_1_1_2048,
|
||||
ShortintParametersName.PARAM_PKE_2_2_2048,
|
||||
// ShortintParametersName.PARAM_PKE_3_3_2048,
|
||||
// ShortintParametersName.PARAM_PKE_4_4_2048,
|
||||
ShortintParametersName.PARAM_PKE_1_1_4096,
|
||||
ShortintParametersName.PARAM_PKE_2_2_4096,
|
||||
// ShortintParametersName.PARAM_PKE_3_3_4096,
|
||||
// ShortintParametersName.PARAM_PKE_4_4_4096,
|
||||
ShortintParametersName.PARAM_PKE_1_1_1024,
|
||||
ShortintParametersName.PARAM_PKE_2_2_1024,
|
||||
// ShortintParametersName.PARAM_PKE_3_3_1024,
|
||||
// ShortintParametersName.PARAM_PKE_4_4_1024,
|
||||
];
|
||||
|
||||
let config = TfheConfigBuilder.default()
|
||||
.use_custom_parameters(block_params)
|
||||
.build();
|
||||
// let block_params = new ShortintParameters(
|
||||
// ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS_TUNIFORM_2M40,
|
||||
// );
|
||||
|
||||
let clientKey = TfheClientKey.generate(config);
|
||||
let publicKey = TfheCompactPublicKey.new(clientKey);
|
||||
|
||||
console.log("Start CRS generation");
|
||||
console.time("CRS generation");
|
||||
let crs = CompactPkeCrs.from_config(config, 4 * 64);
|
||||
console.timeEnd("CRS generation");
|
||||
let public_params = crs.public_params();
|
||||
|
||||
const bench_loops = 4; // The computation is expensive
|
||||
let bench_results = {};
|
||||
let load_choices = [ZkComputeLoad.Proof, ZkComputeLoad.Verify];
|
||||
const load_to_str = {
|
||||
[ZkComputeLoad.Proof]: "compute_load_proof",
|
||||
[ZkComputeLoad.Verify]: "compute_load_verify",
|
||||
};
|
||||
for (const loadChoice of load_choices) {
|
||||
let timing = 0;
|
||||
for (let i = 0; i < bench_loops; i++) {
|
||||
let input = generateRandomBigInt(64);
|
||||
|
||||
const start = performance.now();
|
||||
let _ = ProvenCompactFheUint64.encrypt_with_compact_public_key(
|
||||
input,
|
||||
public_params,
|
||||
publicKey,
|
||||
loadChoice,
|
||||
);
|
||||
const end = performance.now();
|
||||
timing += end - start;
|
||||
for (const block_params_name of params_to_bench) {
|
||||
let block_params = new ShortintParameters(block_params_name);
|
||||
|
||||
let config = TfheConfigBuilder.default()
|
||||
.use_custom_parameters(block_params)
|
||||
.build();
|
||||
|
||||
let clientKey = TfheClientKey.generate(config);
|
||||
let publicKey = TfheCompactPublicKey.new(clientKey);
|
||||
|
||||
const bench_loops = 5; // The computation is expensive
|
||||
let load_choices = [ZkComputeLoad.Proof, ZkComputeLoad.Verify];
|
||||
const load_to_str = {
|
||||
[ZkComputeLoad.Proof]: "costly_proof",
|
||||
[ZkComputeLoad.Verify]: "cheap_proof",
|
||||
};
|
||||
|
||||
const param_to_name = {
|
||||
[ShortintParametersName.PARAM_PKE_1_1_2048]: "PARAM_PKE_1_1_2048",
|
||||
[ShortintParametersName.PARAM_PKE_2_2_2048]: "PARAM_PKE_2_2_2048",
|
||||
[ShortintParametersName.PARAM_PKE_3_3_2048]: "PARAM_PKE_3_3_2048",
|
||||
[ShortintParametersName.PARAM_PKE_4_4_2048]: "PARAM_PKE_4_4_2048",
|
||||
[ShortintParametersName.PARAM_PKE_1_1_4096]: "PARAM_PKE_1_1_4096",
|
||||
[ShortintParametersName.PARAM_PKE_2_2_4096]: "PARAM_PKE_2_2_4096",
|
||||
[ShortintParametersName.PARAM_PKE_3_3_4096]: "PARAM_PKE_3_3_4096",
|
||||
[ShortintParametersName.PARAM_PKE_4_4_4096]: "PARAM_PKE_4_4_4096",
|
||||
[ShortintParametersName.PARAM_PKE_1_1_1024]: "PARAM_PKE_1_1_1024",
|
||||
[ShortintParametersName.PARAM_PKE_2_2_1024]: "PARAM_PKE_2_2_1024",
|
||||
[ShortintParametersName.PARAM_PKE_3_3_1024]: "PARAM_PKE_3_3_1024",
|
||||
[ShortintParametersName.PARAM_PKE_4_4_1024]: "PARAM_PKE_4_4_1024",
|
||||
};
|
||||
|
||||
let encrypt_counts = [5, 10];
|
||||
|
||||
for (const encrypt_count of encrypt_counts) {
|
||||
console.log("Start CRS generation");
|
||||
console.time("CRS generation");
|
||||
let crs = CompactPkeCrs.from_config(config, encrypt_count * 64);
|
||||
console.timeEnd("CRS generation");
|
||||
|
||||
let public_params = crs.public_params();
|
||||
let inputs = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((e) => BigInt(e));
|
||||
let input = inputs.slice(0, encrypt_count);
|
||||
for (const loadChoice of load_choices) {
|
||||
let timing = 0;
|
||||
for (let i = 0; i < bench_loops; i++) {
|
||||
console.time("Loop " + i);
|
||||
const start = performance.now();
|
||||
let _ = ProvenCompactFheUint64List.encrypt_with_compact_public_key(
|
||||
input,
|
||||
public_params,
|
||||
publicKey,
|
||||
loadChoice,
|
||||
);
|
||||
const end = performance.now();
|
||||
console.timeEnd("Loop " + i);
|
||||
timing += end - start;
|
||||
}
|
||||
const mean = timing / bench_loops;
|
||||
// pke_zk__PARAM_PKE_1_1_1024_10_cheap_proof
|
||||
const bench_str =
|
||||
"pke_zk__" +
|
||||
param_to_name[block_params_name] +
|
||||
"_" + encrypt_count + "_" + load_to_str[loadChoice];
|
||||
console.log(bench_str, ": ", mean, " ms");
|
||||
bench_results[bench_str] = mean;
|
||||
}
|
||||
}
|
||||
const mean = timing / bench_loops;
|
||||
|
||||
const bench_str =
|
||||
"compact_fhe_uint64_proven_encryption_" +
|
||||
load_to_str[loadChoice] +
|
||||
"_mean";
|
||||
console.log(bench_str, ": ", mean, " ms");
|
||||
bench_results["compact_fhe_uint64_proven_encryption_"] = mean;
|
||||
}
|
||||
|
||||
return bench_results;
|
||||
|
||||
Reference in New Issue
Block a user