diff --git a/tfhe/web_wasm_parallel_tests/babel.config.js b/tfhe/web_wasm_parallel_tests/babel.config.js
index 0629d65aec..f911ce17b6 100644
--- a/tfhe/web_wasm_parallel_tests/babel.config.js
+++ b/tfhe/web_wasm_parallel_tests/babel.config.js
@@ -1,7 +1,3 @@
-const presets = [
- [
- "@babel/preset-env",
- ]
-];
+const presets = [["@babel/preset-env"]];
module.exports = { presets };
diff --git a/tfhe/web_wasm_parallel_tests/index.html b/tfhe/web_wasm_parallel_tests/index.html
index 87c92260f8..1792a2fb95 100644
--- a/tfhe/web_wasm_parallel_tests/index.html
+++ b/tfhe/web_wasm_parallel_tests/index.html
@@ -1,52 +1,121 @@
-
+
TFHE-RS Web Wasm Demo
-
+ @keyframes spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+ }
+
-
-
+
diff --git a/tfhe/web_wasm_parallel_tests/index.js b/tfhe/web_wasm_parallel_tests/index.js
index 35c1ae7e9d..3a951ba64b 100644
--- a/tfhe/web_wasm_parallel_tests/index.js
+++ b/tfhe/web_wasm_parallel_tests/index.js
@@ -1,87 +1,85 @@
-import { threads } from 'wasm-feature-detect';
-import * as Comlink from 'comlink';
-
+import { threads } from "wasm-feature-detect";
+import * as Comlink from "comlink";
function setButtonsDisabledState(buttonIds, state) {
- for (let id of buttonIds) {
- let btn = document.getElementById(id);
- if (btn) {
- btn.disabled = state;
- }
+ for (let id of buttonIds) {
+ let btn = document.getElementById(id);
+ if (btn) {
+ btn.disabled = state;
}
+ }
}
async function setup() {
- let supportsThreads = await threads()
- if (!supportsThreads) {
- console.error("This browser does not support threads")
- return
- }
+ let supportsThreads = await threads();
+ if (!supportsThreads) {
+ console.error("This browser does not support threads");
+ return;
+ }
- const worker = new Worker(
- new URL("worker.js", import.meta.url),
- {type: 'module'}
- );
- const demos = await Comlink.wrap(worker).demos;
+ const worker = new Worker(new URL("worker.js", import.meta.url), {
+ type: "module",
+ });
+ const demos = await Comlink.wrap(worker).demos;
- const demoNames = [
- 'publicKeyTest',
- 'compressedPublicKeyTest',
- 'compactPublicKeyTest32BitBig',
- 'compactPublicKeyTest32BitSmall',
- 'compactPublicKeyTest256BitBig',
- 'compactPublicKeyTest256BitSmall',
- 'compressedCompactPublicKeyTest256BitBig',
- 'compressedCompactPublicKeyTest256BitSmall',
- 'compactPublicKeyBench32BitBig',
- 'compactPublicKeyBench32BitSmall',
- 'compactPublicKeyBench256BitBig',
- 'compactPublicKeyBench256BitSmall',
- 'compressedServerKeyBenchMessage1Carry1',
- 'compressedServerKeyBenchMessage2Carry2',
- ]
+ const demoNames = [
+ "publicKeyTest",
+ "compressedPublicKeyTest",
+ "compactPublicKeyTest32BitBig",
+ "compactPublicKeyTest32BitSmall",
+ "compactPublicKeyTest256BitBig",
+ "compactPublicKeyTest256BitSmall",
+ "compressedCompactPublicKeyTest256BitBig",
+ "compressedCompactPublicKeyTest256BitSmall",
+ "compactPublicKeyBench32BitBig",
+ "compactPublicKeyBench32BitSmall",
+ "compactPublicKeyBench256BitBig",
+ "compactPublicKeyBench256BitSmall",
+ "compressedServerKeyBenchMessage1Carry1",
+ "compressedServerKeyBenchMessage2Carry2",
+ ];
- function setupBtn(id) {
- // Handlers are named in the same way as buttons.
- let fn = demos[id];
+ function setupBtn(id) {
+ // Handlers are named in the same way as buttons.
+ let fn = demos[id];
- let button = document.getElementById(id);
- if (button === null) {
- console.error("button with id: ", id , "not found")
- return null;
- }
+ let button = document.getElementById(id);
+ if (button === null) {
+ console.error("button with id: ", id, "not found");
+ return null;
+ }
- // Assign onclick handler + enable the button.
- Object.assign(button, {
- onclick: async () => {
- document.getElementById("loader").hidden = false
- document.getElementById("testSuccess").checked = false
- setButtonsDisabledState(demoNames, true);
+ // Assign onclick handler + enable the button.
+ Object.assign(button, {
+ onclick: async () => {
+ document.getElementById("loader").hidden = false;
+ document.getElementById("testSuccess").checked = false;
+ setButtonsDisabledState(demoNames, true);
- console.log("Running: ", id)
- try {
- let results = await fn()
- document.getElementById("testSuccess").checked = true
- if (results !== undefined) {
- document.getElementById("benchmarkResults").value = JSON.stringify(results);
- }
- } catch (error) {
- console.error(`Test Failed: ${error}`)
- document.getElementById("testSuccess").checked = false
- }
- document.getElementById("loader").hidden = true
- setButtonsDisabledState(demoNames, false);
- },
- disabled: false
- });
+ console.log("Running: ", id);
+ try {
+ let results = await fn();
+ document.getElementById("testSuccess").checked = true;
+ if (results !== undefined) {
+ document.getElementById("benchmarkResults").value =
+ JSON.stringify(results);
+ }
+ } catch (error) {
+ console.error(`Test Failed: ${error}`);
+ document.getElementById("testSuccess").checked = false;
+ }
+ document.getElementById("loader").hidden = true;
+ setButtonsDisabledState(demoNames, false);
+ },
+ disabled: false,
+ });
- return button;
- }
+ return button;
+ }
- for (let demo of demoNames) {
- setupBtn(demo)
- }
+ for (let demo of demoNames) {
+ setupBtn(demo);
+ }
}
-
-setup()
+setup();
diff --git a/tfhe/web_wasm_parallel_tests/jest.config.js b/tfhe/web_wasm_parallel_tests/jest.config.js
index c09ced38e5..55398dd306 100644
--- a/tfhe/web_wasm_parallel_tests/jest.config.js
+++ b/tfhe/web_wasm_parallel_tests/jest.config.js
@@ -1,15 +1,15 @@
-const secs = 60
+const secs = 60;
const config = {
verbose: true,
- testTimeout: secs * 1000,
+ testTimeout: secs * 1000,
testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|js?|tsx?|ts?)$",
transform: {
"^.+\\.jsx?$": "babel-jest",
"^.+\\.mjs$": "babel-jest",
},
testPathIgnorePatterns: ["/build/", "/node_modules/"],
- moduleFileExtensions: ["js", "jsx", "mjs"]
+ moduleFileExtensions: ["js", "jsx", "mjs"],
};
module.exports = config;
diff --git a/tfhe/web_wasm_parallel_tests/serve.json b/tfhe/web_wasm_parallel_tests/serve.json
index 061192e60b..ed8d17da7d 100644
--- a/tfhe/web_wasm_parallel_tests/serve.json
+++ b/tfhe/web_wasm_parallel_tests/serve.json
@@ -1,11 +1,11 @@
{
- "headers": [
- {
- "source": "**/*.@(js|html)",
- "headers": [
- { "key": "Cross-Origin-Embedder-Policy", "value": "require-corp" },
- { "key": "Cross-Origin-Opener-Policy", "value": "same-origin" }
- ]
- }
- ]
- }
+ "headers": [
+ {
+ "source": "**/*.@(js|html)",
+ "headers": [
+ { "key": "Cross-Origin-Embedder-Policy", "value": "require-corp" },
+ { "key": "Cross-Origin-Opener-Policy", "value": "same-origin" }
+ ]
+ }
+ ]
+}
diff --git a/tfhe/web_wasm_parallel_tests/test/common.mjs b/tfhe/web_wasm_parallel_tests/test/common.mjs
index c81edda80f..f242e628b5 100644
--- a/tfhe/web_wasm_parallel_tests/test/common.mjs
+++ b/tfhe/web_wasm_parallel_tests/test/common.mjs
@@ -1,82 +1,88 @@
-import puppeteer from 'puppeteer';
-import process from 'process';
-import * as fs from 'node:fs';
+import puppeteer from "puppeteer";
+import process from "process";
+import * as fs from "node:fs";
-const benchmark_dir = __dirname + '/benchmark_results';
-if (!fs.existsSync(benchmark_dir)){
- fs.mkdirSync(benchmark_dir);
+const benchmark_dir = __dirname + "/benchmark_results";
+if (!fs.existsSync(benchmark_dir)) {
+ fs.mkdirSync(benchmark_dir);
}
function isRoot() {
- return process.getuid && process.getuid() === 0;
+ return process.getuid && process.getuid() === 0;
}
async function runActualTest(page, buttonId) {
- const buttonSelector = `input#${buttonId}`
- const successCheckBoxSelector = `input#testSuccess`
- const benchmarkResultsSelector = `input#benchmarkResults`
-
- const testSuccessCheckbox = await page.waitForSelector(
- successCheckBoxSelector
- );
- const benchmarkResultsTextbox = await page.waitForSelector(
- benchmarkResultsSelector
- );
- await page.waitForSelector(buttonSelector)
-
- const isCheckedBefore = await testSuccessCheckbox?.evaluate(el => el.checked);
- expect(isCheckedBefore).toBe(false);
-
- await page.waitForFunction("document.querySelector('div#loader').hidden");
-
- await page.waitForSelector(buttonSelector)
- await page.click(buttonSelector);
-
- await page.waitForFunction("document.getElementById('loader').hidden");
-
- const isCheckedAfter = await testSuccessCheckbox?.evaluate(el => el.checked);
- expect(isCheckedAfter).toBe(true);
-
- const results = await benchmarkResultsTextbox?.evaluate(el => el.value);
- if (results) {
- const parsed_results = JSON.parse(results);
- fs.writeFileSync(`${benchmark_dir}/${buttonId}.json`, results, {'flag': 'w'});
- }
+ const buttonSelector = `input#${buttonId}`;
+ const successCheckBoxSelector = `input#testSuccess`;
+ const benchmarkResultsSelector = `input#benchmarkResults`;
+
+ const testSuccessCheckbox = await page.waitForSelector(
+ successCheckBoxSelector,
+ );
+ const benchmarkResultsTextbox = await page.waitForSelector(
+ benchmarkResultsSelector,
+ );
+ await page.waitForSelector(buttonSelector);
+
+ const isCheckedBefore = await testSuccessCheckbox?.evaluate(
+ (el) => el.checked,
+ );
+ expect(isCheckedBefore).toBe(false);
+
+ await page.waitForFunction("document.querySelector('div#loader').hidden");
+
+ await page.waitForSelector(buttonSelector);
+ await page.click(buttonSelector);
+
+ await page.waitForFunction("document.getElementById('loader').hidden");
+
+ const isCheckedAfter = await testSuccessCheckbox?.evaluate(
+ (el) => el.checked,
+ );
+ expect(isCheckedAfter).toBe(true);
+
+ const results = await benchmarkResultsTextbox?.evaluate((el) => el.value);
+ if (results) {
+ const parsed_results = JSON.parse(results);
+ fs.writeFileSync(`${benchmark_dir}/${buttonId}.json`, results, {
+ flag: "w",
+ });
+ }
}
async function runTestAttachedToButton(buttonId) {
- let browser
- if (isRoot()) {
- browser = await puppeteer.launch({
- headless: "new",
- args: ['--no-sandbox'],
- });
- } else {
- browser = await puppeteer.launch({
- headless: "new",
- });
- }
-
- let page = await browser.newPage();
-
- await page.setDefaultTimeout(300000) // Five minutes timeout
- await page.goto('http://localhost:3000');
- page.on('console', msg => console.log('PAGE LOG:', msg.text()));
-
- await page.reload({ waitUntil: ["networkidle0", "domcontentloaded"] });
-
- let errorCaught = null;
- try {
- await runActualTest(page, buttonId)
- } catch (error) {
- errorCaught = error
- }
- await page.reload({ waitUntil: ["networkidle0", "domcontentloaded"] });
- await browser.close();
-
- if (errorCaught != null) {
- throw errorCaught;
- }
+ let browser;
+ if (isRoot()) {
+ browser = await puppeteer.launch({
+ headless: "new",
+ args: ["--no-sandbox"],
+ });
+ } else {
+ browser = await puppeteer.launch({
+ headless: "new",
+ });
+ }
+
+ let page = await browser.newPage();
+
+ await page.setDefaultTimeout(300000); // Five minutes timeout
+ await page.goto("http://localhost:3000");
+ page.on("console", (msg) => console.log("PAGE LOG:", msg.text()));
+
+ await page.reload({ waitUntil: ["networkidle0", "domcontentloaded"] });
+
+ let errorCaught = null;
+ try {
+ await runActualTest(page, buttonId);
+ } catch (error) {
+ errorCaught = error;
+ }
+ await page.reload({ waitUntil: ["networkidle0", "domcontentloaded"] });
+ await browser.close();
+
+ if (errorCaught != null) {
+ throw errorCaught;
+ }
}
module.exports = { runTestAttachedToButton };
diff --git a/tfhe/web_wasm_parallel_tests/test/compact-public-key.test.js b/tfhe/web_wasm_parallel_tests/test/compact-public-key.test.js
index 66d631289c..46a63b85c4 100644
--- a/tfhe/web_wasm_parallel_tests/test/compact-public-key.test.js
+++ b/tfhe/web_wasm_parallel_tests/test/compact-public-key.test.js
@@ -1,26 +1,25 @@
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");
});
diff --git a/tfhe/web_wasm_parallel_tests/test/compressed-publik-key-small.test.js b/tfhe/web_wasm_parallel_tests/test/compressed-publik-key-small.test.js
index d26d2b50e5..02233470d1 100644
--- a/tfhe/web_wasm_parallel_tests/test/compressed-publik-key-small.test.js
+++ b/tfhe/web_wasm_parallel_tests/test/compressed-publik-key-small.test.js
@@ -1,5 +1,5 @@
import { runTestAttachedToButton } from "./common.mjs";
-test('Compressed Public Key Test', async () => {
- await runTestAttachedToButton('compressedPublicKeyTest')
+test("Compressed Public Key Test", async () => {
+ await runTestAttachedToButton("compressedPublicKeyTest");
});
diff --git a/tfhe/web_wasm_parallel_tests/test/public-key-ct.test.js b/tfhe/web_wasm_parallel_tests/test/public-key-ct.test.js
index ccb9f96e36..4b9f7b9e5c 100644
--- a/tfhe/web_wasm_parallel_tests/test/public-key-ct.test.js
+++ b/tfhe/web_wasm_parallel_tests/test/public-key-ct.test.js
@@ -1,18 +1,17 @@
import { runTestAttachedToButton } from "./common.mjs";
-
-it('Compact Public Key Bench Big 32 Bit', async () => {
- await runTestAttachedToButton('compactPublicKeyBench32BitBig')
+it("Compact Public Key Bench Big 32 Bit", async () => {
+ await runTestAttachedToButton("compactPublicKeyBench32BitBig");
});
-it('Compact Public Key Bench Small 32 Bit', async () => {
- await runTestAttachedToButton('compactPublicKeyBench32BitSmall')
+it("Compact Public Key Bench Small 32 Bit", async () => {
+ await runTestAttachedToButton("compactPublicKeyBench32BitSmall");
});
-it('Compact Public Key Bench Big 256 Bit', async () => {
- await runTestAttachedToButton('compactPublicKeyBench256BitBig')
+it("Compact Public Key Bench Big 256 Bit", async () => {
+ await runTestAttachedToButton("compactPublicKeyBench256BitBig");
});
-it('Compact Public Key Bench Small 256 Bit', async () => {
- await runTestAttachedToButton('compactPublicKeyBench256BitSmall')
+it("Compact Public Key Bench Small 256 Bit", async () => {
+ await runTestAttachedToButton("compactPublicKeyBench256BitSmall");
});
diff --git a/tfhe/web_wasm_parallel_tests/test/server-key.test.js b/tfhe/web_wasm_parallel_tests/test/server-key.test.js
index 1754e37eee..a326ef9355 100644
--- a/tfhe/web_wasm_parallel_tests/test/server-key.test.js
+++ b/tfhe/web_wasm_parallel_tests/test/server-key.test.js
@@ -1,12 +1,9 @@
import { runTestAttachedToButton } from "./common.mjs";
+it("Server Key Bench 1_1", async () => {
+ await runTestAttachedToButton("compressedServerKeyBenchMessage1Carry1");
+}, 300000); // Five minutes timeout
-it('Server Key Bench 1_1', async () => {
- await runTestAttachedToButton('compressedServerKeyBenchMessage1Carry1')
-},
- 300000); // Five minutes timeout
-
-it('Server Key Bench 2_2', async () => {
- await runTestAttachedToButton('compressedServerKeyBenchMessage2Carry2')
- },
- 300000); // Five minutes timeout
+it("Server Key Bench 2_2", async () => {
+ await runTestAttachedToButton("compressedServerKeyBenchMessage2Carry2");
+}, 300000); // Five minutes timeout
diff --git a/tfhe/web_wasm_parallel_tests/worker.js b/tfhe/web_wasm_parallel_tests/worker.js
index 95f2e9118c..763f6dfabc 100644
--- a/tfhe/web_wasm_parallel_tests/worker.js
+++ b/tfhe/web_wasm_parallel_tests/worker.js
@@ -1,525 +1,578 @@
-
-import * as Comlink from 'comlink';
+import * as Comlink from "comlink";
import init, {
- initThreadPool,
- init_panic_hook,
- ShortintParametersName,
- ShortintParameters,
- TfheClientKey,
- TfhePublicKey,
- TfheCompressedPublicKey,
- TfheCompressedServerKey,
- TfheCompressedCompactPublicKey,
- TfheCompactPublicKey,
- TfheConfigBuilder,
- CompressedFheUint8,
- FheUint8,
- FheUint32,
- CompactFheUint32,
- CompactFheUint32List,
- CompressedFheUint128,
- FheUint128,
- CompressedFheUint256,
- FheUint256,
- CompactFheUint256,
- CompactFheUint256List,
+ initThreadPool,
+ init_panic_hook,
+ ShortintParametersName,
+ ShortintParameters,
+ TfheClientKey,
+ TfhePublicKey,
+ TfheCompressedPublicKey,
+ TfheCompressedServerKey,
+ TfheCompressedCompactPublicKey,
+ TfheCompactPublicKey,
+ TfheConfigBuilder,
+ CompressedFheUint8,
+ FheUint8,
+ FheUint32,
+ CompactFheUint32,
+ CompactFheUint32List,
+ CompressedFheUint128,
+ FheUint128,
+ CompressedFheUint256,
+ FheUint256,
+ CompactFheUint256,
+ CompactFheUint256List,
} from "./pkg/tfhe.js";
function assert(cond, text) {
- if (cond) return;
- if (console.assert.useDebugger) debugger;
- throw new Error(text || "Assertion failed!");
+ if (cond) return;
+ if (console.assert.useDebugger) debugger;
+ throw new Error(text || "Assertion failed!");
}
function assert_eq(a, b, text) {
- if (a === b) return;
- if (console.assert.useDebugger) debugger;
- throw new Error(text || `Equality assertion failed!: ${a} != ${b}`);
+ if (a === b) return;
+ if (console.assert.useDebugger) debugger;
+ throw new Error(text || `Equality assertion failed!: ${a} != ${b}`);
}
function append_param_name(bench_results, params_name) {
- let results = {};
- for (const bench_name in bench_results) {
- results[`${bench_name}_${params_name}`] = bench_results[bench_name];
- }
- return results
+ let results = {};
+ for (const bench_name in bench_results) {
+ results[`${bench_name}_${params_name}`] = bench_results[bench_name];
+ }
+ return results;
}
async function compressedPublicKeyTest() {
- let config = TfheConfigBuilder.default_with_small_encryption().build();
+ let config = TfheConfigBuilder.default_with_small_encryption().build();
- console.time('ClientKey Gen')
- let clientKey = TfheClientKey.generate(config);
- console.timeEnd('ClientKey Gen')
+ console.time("ClientKey Gen");
+ let clientKey = TfheClientKey.generate(config);
+ console.timeEnd("ClientKey Gen");
- console.time('CompressedPublicKey Gen')
- let compressedPublicKey = TfheCompressedPublicKey.new(clientKey);
- console.timeEnd('CompressedPublicKey Gen')
+ console.time("CompressedPublicKey Gen");
+ let compressedPublicKey = TfheCompressedPublicKey.new(clientKey);
+ console.timeEnd("CompressedPublicKey Gen");
- let data = compressedPublicKey.serialize()
- console.log("CompressedPublicKey size:", data.length)
+ let data = compressedPublicKey.serialize();
+ console.log("CompressedPublicKey size:", data.length);
- console.time('CompressedPublicKey Decompression')
- let publicKey = compressedPublicKey.decompress();
- console.timeEnd('CompressedPublicKey Decompression')
+ console.time("CompressedPublicKey Decompression");
+ let publicKey = compressedPublicKey.decompress();
+ console.timeEnd("CompressedPublicKey Decompression");
- console.time('FheUint8 encrypt with CompressedPublicKey')
- let encrypted = FheUint8.encrypt_with_public_key(255, publicKey);
- console.timeEnd('FheUint8 encrypt with CompressedPublicKey')
+ console.time("FheUint8 encrypt with CompressedPublicKey");
+ let encrypted = FheUint8.encrypt_with_public_key(255, publicKey);
+ console.timeEnd("FheUint8 encrypt with CompressedPublicKey");
- let ser = encrypted.serialize();
- console.log("Ciphertext Size", ser.length);
+ let ser = encrypted.serialize();
+ console.log("Ciphertext Size", ser.length);
- let decrypted = encrypted.decrypt(clientKey);
- assert_eq(decrypted, 255)
+ let decrypted = encrypted.decrypt(clientKey);
+ assert_eq(decrypted, 255);
}
async function publicKeyTest() {
- let config = TfheConfigBuilder.default()
- .use_small_encryption()
- .build();
+ let config = TfheConfigBuilder.default().use_small_encryption().build();
- console.time('ClientKey Gen')
- let clientKey = TfheClientKey.generate(config);
- console.timeEnd('ClientKey Gen')
+ console.time("ClientKey Gen");
+ let clientKey = TfheClientKey.generate(config);
+ console.timeEnd("ClientKey Gen");
- console.time('PublicKey Gen')
- let publicKey = TfhePublicKey.new(clientKey);
- console.timeEnd('PublicKey Gen')
+ console.time("PublicKey Gen");
+ let publicKey = TfhePublicKey.new(clientKey);
+ console.timeEnd("PublicKey Gen");
- console.time('FheUint8 encrypt with PublicKey')
- let encrypted = FheUint8.encrypt_with_public_key(255, publicKey);
- console.timeEnd('FheUint8 encrypt with PublicKey')
+ console.time("FheUint8 encrypt with PublicKey");
+ let encrypted = FheUint8.encrypt_with_public_key(255, publicKey);
+ console.timeEnd("FheUint8 encrypt with PublicKey");
- let ser = encrypted.serialize();
- console.log("Ciphertext Size", ser.length);
+ let ser = encrypted.serialize();
+ console.log("Ciphertext Size", ser.length);
- let decrypted = encrypted.decrypt(clientKey);
- assert_eq(decrypted, 255)
+ let decrypted = encrypted.decrypt(clientKey);
+ assert_eq(decrypted, 255);
}
const U32_MAX = 4294967295;
async function compactPublicKeyTest32BitOnConfig(config) {
- console.time('ClientKey Gen')
- let clientKey = TfheClientKey.generate(config);
- console.timeEnd('ClientKey Gen')
+ console.time("ClientKey Gen");
+ let clientKey = TfheClientKey.generate(config);
+ console.timeEnd("ClientKey Gen");
- console.time('CompactPublicKey Gen')
- let publicKey = TfheCompactPublicKey.new(clientKey);
- console.timeEnd('CompactPublicKey Gen')
+ console.time("CompactPublicKey Gen");
+ let publicKey = TfheCompactPublicKey.new(clientKey);
+ console.timeEnd("CompactPublicKey Gen");
- let serialized_pk = publicKey.serialize();
- console.log("Serialized CompactPublicKey size: ", serialized_pk.length);
+ let serialized_pk = publicKey.serialize();
+ console.log("Serialized CompactPublicKey size: ", serialized_pk.length);
- let values = [0, 1, 2394, U32_MAX];
+ let values = [0, 1, 2394, U32_MAX];
- console.time('CompactFheUint32List Encrypt')
- let compact_list = CompactFheUint32List.encrypt_with_compact_public_key(values, publicKey);
- console.timeEnd('CompactFheUint32List Encrypt')
+ console.time("CompactFheUint32List Encrypt");
+ let compact_list = CompactFheUint32List.encrypt_with_compact_public_key(
+ values,
+ publicKey,
+ );
+ console.timeEnd("CompactFheUint32List Encrypt");
- {
- console.time('CompactFheUint32List Expand')
- let encrypted_list = compact_list.expand();
- console.timeEnd('CompactFheUint32List Expand')
+ {
+ console.time("CompactFheUint32List Expand");
+ let encrypted_list = compact_list.expand();
+ console.timeEnd("CompactFheUint32List Expand");
- assert_eq(encrypted_list.length, values.length);
+ assert_eq(encrypted_list.length, values.length);
- for (let i = 0; i < values.length; i++) {
- let decrypted = encrypted_list[i].decrypt(clientKey);
- assert_eq(decrypted, values[i]);
- }
+ for (let i = 0; i < values.length; i++) {
+ let decrypted = encrypted_list[i].decrypt(clientKey);
+ assert_eq(decrypted, values[i]);
}
+ }
- let serialized_list = compact_list.serialize();
- console.log("Serialized CompactFheUint32List size: ", serialized_list.length);
+ let serialized_list = compact_list.serialize();
+ console.log("Serialized CompactFheUint32List size: ", serialized_list.length);
- let deserialized_list = CompactFheUint32List.deserialize(serialized_list);
- let encrypted_list = deserialized_list.expand();
- assert_eq(encrypted_list.length, values.length);
+ let deserialized_list = CompactFheUint32List.deserialize(serialized_list);
+ let encrypted_list = deserialized_list.expand();
+ assert_eq(encrypted_list.length, values.length);
- for (let i = 0; i < values.length; i++) {
- let decrypted = encrypted_list[i].decrypt(clientKey);
- assert_eq(decrypted, values[i]);
- }
+ for (let i = 0; i < values.length; i++) {
+ let decrypted = encrypted_list[i].decrypt(clientKey);
+ assert_eq(decrypted, values[i]);
+ }
}
async function compactPublicKeyTest32BitBig() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- await compactPublicKeyTest32BitOnConfig(config)
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ await compactPublicKeyTest32BitOnConfig(config);
}
async function compactPublicKeyTest32BitSmall() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- await compactPublicKeyTest32BitOnConfig(config)
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ await compactPublicKeyTest32BitOnConfig(config);
}
async function compactPublicKeyBench32BitOnConfig(config) {
- const bench_loops = 100;
- let bench_results = {};
-
- console.time('ClientKey Gen')
- let clientKey = TfheClientKey.generate(config);
- console.timeEnd('ClientKey Gen')
-
- // Generate PK for encryption for later
- console.time('CompactPublicKey Gen')
- let publicKey = TfheCompactPublicKey.new(clientKey);
- console.timeEnd('CompactPublicKey Gen')
-
- // Bench the pk generation for bench_loops iterations
- let start = performance.now();
- for (let i = 0; i < bench_loops; i++) {
- let _ = TfheCompactPublicKey.new(clientKey);
- }
- let end = performance.now();
- const timing_1 = (end - start) / bench_loops
- console.log('CompactPublicKey Gen bench: ', timing_1, ' ms');
- bench_results["compact_public_key_gen_32bit_mean"] = timing_1;
-
- let values = [0, 1, 2, 2394, U32_MAX];
-
- // Encrypt compact CT list for serialization for later
- console.time('CompactFheUint32List Encrypt')
- let compact_list = CompactFheUint32List.encrypt_with_compact_public_key(values, publicKey);
- console.timeEnd('CompactFheUint32List Encrypt')
-
- // Bench the encryption for bench_loops iterations
- start = performance.now();
- for (let i = 0; i < bench_loops; i++) {
- let _ = CompactFheUint32List.encrypt_with_compact_public_key(values, publicKey);
- }
- end = performance.now();
- const timing_2 = (end - start) / bench_loops
- console.log('CompactFheUint32List Encrypt bench: ', timing_2, ' ms');
- bench_results["compact_fheunit32_list_encrypt_mean"] = timing_2;
-
- let serialized_list = compact_list.serialize();
- console.log("Serialized CompactFheUint32List size: ", serialized_list.length);
-
- // Bench the serialization for bench_loops iterations
- start = performance.now();
- for (let i = 0; i < bench_loops; i++) {
- let _ = compact_list.serialize();
- }
- end = performance.now();
- const timing_3 = (end - start) / bench_loops
- console.log('CompactFheUint32List serialization bench: ', timing_3, ' ms');
- bench_results["compact_fheunit32_list_serialization_mean"] = timing_3;
-
- return bench_results;
+ const bench_loops = 100;
+ let bench_results = {};
+
+ console.time("ClientKey Gen");
+ let clientKey = TfheClientKey.generate(config);
+ console.timeEnd("ClientKey Gen");
+
+ // Generate PK for encryption for later
+ console.time("CompactPublicKey Gen");
+ let publicKey = TfheCompactPublicKey.new(clientKey);
+ console.timeEnd("CompactPublicKey Gen");
+
+ // Bench the pk generation for bench_loops iterations
+ let start = performance.now();
+ for (let i = 0; i < bench_loops; i++) {
+ let _ = TfheCompactPublicKey.new(clientKey);
+ }
+ let end = performance.now();
+ const timing_1 = (end - start) / bench_loops;
+ console.log("CompactPublicKey Gen bench: ", timing_1, " ms");
+ bench_results["compact_public_key_gen_32bit_mean"] = timing_1;
+
+ let values = [0, 1, 2, 2394, U32_MAX];
+
+ // Encrypt compact CT list for serialization for later
+ console.time("CompactFheUint32List Encrypt");
+ let compact_list = CompactFheUint32List.encrypt_with_compact_public_key(
+ values,
+ publicKey,
+ );
+ console.timeEnd("CompactFheUint32List Encrypt");
+
+ // Bench the encryption for bench_loops iterations
+ start = performance.now();
+ for (let i = 0; i < bench_loops; i++) {
+ let _ = CompactFheUint32List.encrypt_with_compact_public_key(
+ values,
+ publicKey,
+ );
+ }
+ end = performance.now();
+ const timing_2 = (end - start) / bench_loops;
+ console.log("CompactFheUint32List Encrypt bench: ", timing_2, " ms");
+ bench_results["compact_fheunit32_list_encrypt_mean"] = timing_2;
+
+ let serialized_list = compact_list.serialize();
+ console.log("Serialized CompactFheUint32List size: ", serialized_list.length);
+
+ // Bench the serialization for bench_loops iterations
+ start = performance.now();
+ for (let i = 0; i < bench_loops; i++) {
+ let _ = compact_list.serialize();
+ }
+ end = performance.now();
+ const timing_3 = (end - start) / bench_loops;
+ console.log("CompactFheUint32List serialization bench: ", timing_3, " ms");
+ bench_results["compact_fheunit32_list_serialization_mean"] = timing_3;
+
+ return bench_results;
}
async function compactPublicKeyBench32BitBig() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- return append_param_name(
- await compactPublicKeyBench32BitOnConfig(config),
- "PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS"
- );
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ return append_param_name(
+ await compactPublicKeyBench32BitOnConfig(config),
+ "PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS",
+ );
}
async function compactPublicKeyBench32BitSmall() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- return append_param_name(
- await compactPublicKeyBench32BitOnConfig(config),
- "PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS"
- );
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ return append_param_name(
+ await compactPublicKeyBench32BitOnConfig(config),
+ "PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS",
+ );
}
async function compactPublicKeyTest256BitOnConfig(config) {
- console.time('ClientKey Gen')
- let clientKey = TfheClientKey.generate(config);
- console.timeEnd('ClientKey Gen')
+ console.time("ClientKey Gen");
+ let clientKey = TfheClientKey.generate(config);
+ console.timeEnd("ClientKey Gen");
- console.time('CompactPublicKey Gen')
- let publicKey = TfheCompactPublicKey.new(clientKey);
- console.timeEnd('CompactPublicKey Gen')
+ console.time("CompactPublicKey Gen");
+ let publicKey = TfheCompactPublicKey.new(clientKey);
+ console.timeEnd("CompactPublicKey Gen");
- let serialized_pk = publicKey.serialize();
- console.log("Serialized CompactPublicKey size: ", serialized_pk.length);
+ let serialized_pk = publicKey.serialize();
+ console.log("Serialized CompactPublicKey size: ", serialized_pk.length);
- let values = [0, 1, 2394, U32_MAX].map((e) => BigInt(e));
+ let values = [0, 1, 2394, U32_MAX].map((e) => BigInt(e));
- console.time('CompactFheUint256List Encrypt')
- let compact_list = CompactFheUint256List.encrypt_with_compact_public_key(values, publicKey);
- console.timeEnd('CompactFheUint256List Encrypt')
+ console.time("CompactFheUint256List Encrypt");
+ let compact_list = CompactFheUint256List.encrypt_with_compact_public_key(
+ values,
+ publicKey,
+ );
+ console.timeEnd("CompactFheUint256List Encrypt");
- {
- console.time('CompactFheUint256List Expand')
- let encrypted_list = compact_list.expand();
- console.timeEnd('CompactFheUint256List Expand')
-
- assert_eq(encrypted_list.length, values.length);
-
- for (let i = 0; i < values.length; i++) {
- let decrypted = encrypted_list[i].decrypt(clientKey);
- assert_eq(decrypted, values[i]);
- }
- }
+ {
+ console.time("CompactFheUint256List Expand");
+ let encrypted_list = compact_list.expand();
+ console.timeEnd("CompactFheUint256List Expand");
- let serialized_list = compact_list.serialize();
- console.log("Serialized CompactFheUint256List size: ", serialized_list.length);
-
- let deserialized_list = CompactFheUint256List.deserialize(serialized_list);
- let encrypted_list = deserialized_list.expand();
assert_eq(encrypted_list.length, values.length);
for (let i = 0; i < values.length; i++) {
- let decrypted = encrypted_list[i].decrypt(clientKey);
- assert_eq(decrypted, values[i]);
+ let decrypted = encrypted_list[i].decrypt(clientKey);
+ assert_eq(decrypted, values[i]);
}
+ }
+
+ let serialized_list = compact_list.serialize();
+ console.log(
+ "Serialized CompactFheUint256List size: ",
+ serialized_list.length,
+ );
+
+ let deserialized_list = CompactFheUint256List.deserialize(serialized_list);
+ let encrypted_list = deserialized_list.expand();
+ assert_eq(encrypted_list.length, values.length);
+
+ for (let i = 0; i < values.length; i++) {
+ let decrypted = encrypted_list[i].decrypt(clientKey);
+ assert_eq(decrypted, values[i]);
+ }
}
async function compactPublicKeyTest256BitBig() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- await compactPublicKeyTest256BitOnConfig(config)
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ await compactPublicKeyTest256BitOnConfig(config);
}
async function compactPublicKeyTest256BitSmall() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- await compactPublicKeyTest256BitOnConfig(config)
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ await compactPublicKeyTest256BitOnConfig(config);
}
-
async function compressedCompactPublicKeyTest256BitOnConfig(config) {
- console.time('ClientKey Gen')
- let clientKey = TfheClientKey.generate(config);
- console.timeEnd('ClientKey Gen')
-
- console.time('CompressedCompactPublicKey Gen')
- let publicKey = TfheCompressedCompactPublicKey.new(clientKey);
- console.timeEnd('CompressedCompactPublicKey Gen')
-
- let serialized_pk = publicKey.serialize();
- console.log("Serialized CompressedCompactPublicKey size: ", serialized_pk.length);
-
- console.time('CompressedCompactPublicKey Decompression')
- publicKey = publicKey.decompress()
- console.timeEnd('CompressedCompactPublicKey Decompression')
+ console.time("ClientKey Gen");
+ let clientKey = TfheClientKey.generate(config);
+ console.timeEnd("ClientKey Gen");
+
+ console.time("CompressedCompactPublicKey Gen");
+ let publicKey = TfheCompressedCompactPublicKey.new(clientKey);
+ console.timeEnd("CompressedCompactPublicKey Gen");
+
+ let serialized_pk = publicKey.serialize();
+ console.log(
+ "Serialized CompressedCompactPublicKey size: ",
+ serialized_pk.length,
+ );
+
+ console.time("CompressedCompactPublicKey Decompression");
+ publicKey = publicKey.decompress();
+ console.timeEnd("CompressedCompactPublicKey Decompression");
+
+ let values = [0, 1, 2394, U32_MAX].map((e) => BigInt(e));
+
+ console.time("CompactFheUint256List Encrypt");
+ let compact_list = CompactFheUint256List.encrypt_with_compact_public_key(
+ values,
+ publicKey,
+ );
+ console.timeEnd("CompactFheUint256List Encrypt");
+
+ {
+ console.time("CompactFheUint256List Expand");
+ let encrypted_list = compact_list.expand();
+ console.timeEnd("CompactFheUint256List Expand");
- let values = [0, 1, 2394, U32_MAX].map((e) => BigInt(e));
-
- console.time('CompactFheUint256List Encrypt')
- let compact_list = CompactFheUint256List.encrypt_with_compact_public_key(values, publicKey);
- console.timeEnd('CompactFheUint256List Encrypt')
-
- {
- console.time('CompactFheUint256List Expand')
- let encrypted_list = compact_list.expand();
- console.timeEnd('CompactFheUint256List Expand')
-
- assert_eq(encrypted_list.length, values.length);
-
- for (let i = 0; i < values.length; i++) {
- let decrypted = encrypted_list[i].decrypt(clientKey);
- assert_eq(decrypted, values[i]);
- }
- }
-
- let serialized_list = compact_list.serialize();
- console.log("Serialized CompactFheUint256List size: ", serialized_list.length);
-
- let deserialized_list = CompactFheUint256List.deserialize(serialized_list);
- let encrypted_list = deserialized_list.expand();
assert_eq(encrypted_list.length, values.length);
for (let i = 0; i < values.length; i++) {
- let decrypted = encrypted_list[i].decrypt(clientKey);
- assert_eq(decrypted, values[i]);
+ let decrypted = encrypted_list[i].decrypt(clientKey);
+ assert_eq(decrypted, values[i]);
}
+ }
+
+ let serialized_list = compact_list.serialize();
+ console.log(
+ "Serialized CompactFheUint256List size: ",
+ serialized_list.length,
+ );
+
+ let deserialized_list = CompactFheUint256List.deserialize(serialized_list);
+ let encrypted_list = deserialized_list.expand();
+ assert_eq(encrypted_list.length, values.length);
+
+ for (let i = 0; i < values.length; i++) {
+ let decrypted = encrypted_list[i].decrypt(clientKey);
+ assert_eq(decrypted, values[i]);
+ }
}
async function compressedCompactPublicKeyTest256BitBig() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- await compressedCompactPublicKeyTest256BitOnConfig(config)
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ await compressedCompactPublicKeyTest256BitOnConfig(config);
}
async function compressedCompactPublicKeyTest256BitSmall() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- await compressedCompactPublicKeyTest256BitOnConfig(config)
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ await compressedCompactPublicKeyTest256BitOnConfig(config);
}
async function compactPublicKeyBench256BitOnConfig(config) {
- const bench_loops = 100;
- let bench_results = {}
-
- console.time('ClientKey Gen')
- let clientKey = TfheClientKey.generate(config);
- console.timeEnd('ClientKey Gen')
-
- // Generate PK for encryption for later
- console.time('CompactPublicKey Gen')
- let publicKey = TfheCompactPublicKey.new(clientKey);
- console.timeEnd('CompactPublicKey Gen')
-
- // Bench the pk generation for bench_loops iterations
- let start = performance.now();
- for (let i = 0; i < bench_loops; i++) {
- let _ = TfheCompactPublicKey.new(clientKey);
- }
- let end = performance.now();
- const timing_1 = (end - start) / bench_loops
- console.log('CompactPublicKey Gen bench: ', timing_1, ' ms');
- bench_results["compact_public_key_gen_256bit_mean"] = timing_1;
-
- let values = [0, 1, 2, 2394, U32_MAX].map((e) => BigInt(e));
-
- // Encrypt compact CT list for serialization for later
- console.time('CompactFheUint256List Encrypt')
- let compact_list = CompactFheUint256List.encrypt_with_compact_public_key(values, publicKey);
- console.timeEnd('CompactFheUint256List Encrypt')
-
- // Bench the encryption for bench_loops iterations
- start = performance.now();
- for (let i = 0; i < bench_loops; i++) {
- let _ = CompactFheUint256List.encrypt_with_compact_public_key(values, publicKey);
- }
- end = performance.now();
- const timing_2 = (end - start) / bench_loops
- console.log('CompactFheUint256List Encrypt bench: ', timing_2, ' ms');
- bench_results["compact_fheunit256_list_encrypt_mean"] = timing_2;
-
- let serialized_list = compact_list.serialize();
- console.log("Serialized CompactFheUint256List size: ", serialized_list.length);
-
- // Bench the serialization for bench_loops iterations
- start = performance.now();
- for (let i = 0; i < bench_loops; i++) {
- let _ = compact_list.serialize();
- }
- end = performance.now();
- const timing_3 = (end - start) / bench_loops
- console.log('CompactFheUint256List serialization bench: ', timing_3, ' ms');
- bench_results["compact_fheunit256_list_serialization_mean"] = timing_3;
-
- return bench_results
+ const bench_loops = 100;
+ let bench_results = {};
+
+ console.time("ClientKey Gen");
+ let clientKey = TfheClientKey.generate(config);
+ console.timeEnd("ClientKey Gen");
+
+ // Generate PK for encryption for later
+ console.time("CompactPublicKey Gen");
+ let publicKey = TfheCompactPublicKey.new(clientKey);
+ console.timeEnd("CompactPublicKey Gen");
+
+ // Bench the pk generation for bench_loops iterations
+ let start = performance.now();
+ for (let i = 0; i < bench_loops; i++) {
+ let _ = TfheCompactPublicKey.new(clientKey);
+ }
+ let end = performance.now();
+ const timing_1 = (end - start) / bench_loops;
+ console.log("CompactPublicKey Gen bench: ", timing_1, " ms");
+ bench_results["compact_public_key_gen_256bit_mean"] = timing_1;
+
+ let values = [0, 1, 2, 2394, U32_MAX].map((e) => BigInt(e));
+
+ // Encrypt compact CT list for serialization for later
+ console.time("CompactFheUint256List Encrypt");
+ let compact_list = CompactFheUint256List.encrypt_with_compact_public_key(
+ values,
+ publicKey,
+ );
+ console.timeEnd("CompactFheUint256List Encrypt");
+
+ // Bench the encryption for bench_loops iterations
+ start = performance.now();
+ for (let i = 0; i < bench_loops; i++) {
+ let _ = CompactFheUint256List.encrypt_with_compact_public_key(
+ values,
+ publicKey,
+ );
+ }
+ end = performance.now();
+ const timing_2 = (end - start) / bench_loops;
+ console.log("CompactFheUint256List Encrypt bench: ", timing_2, " ms");
+ bench_results["compact_fheunit256_list_encrypt_mean"] = timing_2;
+
+ let serialized_list = compact_list.serialize();
+ console.log(
+ "Serialized CompactFheUint256List size: ",
+ serialized_list.length,
+ );
+
+ // Bench the serialization for bench_loops iterations
+ start = performance.now();
+ for (let i = 0; i < bench_loops; i++) {
+ let _ = compact_list.serialize();
+ }
+ end = performance.now();
+ const timing_3 = (end - start) / bench_loops;
+ console.log("CompactFheUint256List serialization bench: ", timing_3, " ms");
+ bench_results["compact_fheunit256_list_serialization_mean"] = timing_3;
+
+ return bench_results;
}
async function compactPublicKeyBench256BitBig() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- return append_param_name(
- await compactPublicKeyBench256BitOnConfig(config),
- "PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS"
- );
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ return append_param_name(
+ await compactPublicKeyBench256BitOnConfig(config),
+ "PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_KS_PBS",
+ );
}
async function compactPublicKeyBench256BitSmall() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- return append_param_name(
- await compactPublicKeyBench256BitOnConfig(config),
- "PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS"
- );
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ return append_param_name(
+ await compactPublicKeyBench256BitOnConfig(config),
+ "PARAM_MESSAGE_2_CARRY_2_COMPACT_PK_PBS_KS",
+ );
}
async function compressedServerKeyBenchConfig(config) {
- const bench_loops = 35;
- let bench_results = {};
-
- console.log('Begin benchmarks') // DEBUG
- let clientKey = TfheClientKey.generate(config);
-
- // Bench the sk generation for bench_loops iterations
- let start = performance.now();
- for (let i = 0; i < bench_loops; i++) {
- let _ = TfheCompressedServerKey.new(clientKey);
- }
- let end = performance.now();
- const timing_1 = (end - start) / bench_loops
- console.log('CompressedServerKey Gen bench: ', timing_1, ' ms');
- bench_results["compressed_server_key_gen_mean"] = timing_1;
-
- let serverKey = TfheCompressedServerKey.new(clientKey);
- let serialized_key = serverKey.serialize();
- console.log("Serialized ServerKey size: ", serialized_key.length);
-
- // Bench the serialization for bench_loops iterations
- start = performance.now();
- for (let i = 0; i < bench_loops; i++) {
- let _ = serverKey.serialize();
- }
- end = performance.now();
- const timing_2 = (end - start) / bench_loops
- console.log('CompressedServerKey serialization bench: ', timing_2, ' ms');
- bench_results["compressed_server_key_serialization_mean"] = timing_2;
-
- return bench_results;
+ const bench_loops = 35;
+ let bench_results = {};
+
+ console.log("Begin benchmarks"); // DEBUG
+ let clientKey = TfheClientKey.generate(config);
+
+ // Bench the sk generation for bench_loops iterations
+ let start = performance.now();
+ for (let i = 0; i < bench_loops; i++) {
+ let _ = TfheCompressedServerKey.new(clientKey);
+ }
+ let end = performance.now();
+ const timing_1 = (end - start) / bench_loops;
+ console.log("CompressedServerKey Gen bench: ", timing_1, " ms");
+ bench_results["compressed_server_key_gen_mean"] = timing_1;
+
+ let serverKey = TfheCompressedServerKey.new(clientKey);
+ let serialized_key = serverKey.serialize();
+ console.log("Serialized ServerKey size: ", serialized_key.length);
+
+ // Bench the serialization for bench_loops iterations
+ start = performance.now();
+ for (let i = 0; i < bench_loops; i++) {
+ let _ = serverKey.serialize();
+ }
+ end = performance.now();
+ const timing_2 = (end - start) / bench_loops;
+ console.log("CompressedServerKey serialization bench: ", timing_2, " ms");
+ bench_results["compressed_server_key_serialization_mean"] = timing_2;
+
+ return bench_results;
}
async function compressedServerKeyBenchMessage1Carry1() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_1_CARRY_1_KS_PBS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- return append_param_name(
- await compressedServerKeyBenchConfig(config),
- "PARAM_MESSAGE_1_CARRY_1_KS_PBS"
- );
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_1_CARRY_1_KS_PBS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ return append_param_name(
+ await compressedServerKeyBenchConfig(config),
+ "PARAM_MESSAGE_1_CARRY_1_KS_PBS",
+ );
}
async function compressedServerKeyBenchMessage2Carry2() {
- const block_params = new ShortintParameters(ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_KS_PBS);
- let config = TfheConfigBuilder.default()
- .use_custom_parameters(block_params)
- .build();
- return append_param_name(
- await compressedServerKeyBenchConfig(config),
- "PARAM_MESSAGE_2_CARRY_2_KS_PBS"
- );
+ const block_params = new ShortintParameters(
+ ShortintParametersName.PARAM_MESSAGE_2_CARRY_2_KS_PBS,
+ );
+ let config = TfheConfigBuilder.default()
+ .use_custom_parameters(block_params)
+ .build();
+ return append_param_name(
+ await compressedServerKeyBenchConfig(config),
+ "PARAM_MESSAGE_2_CARRY_2_KS_PBS",
+ );
}
async function main() {
- await init()
- await initThreadPool(navigator.hardwareConcurrency);
- await init_panic_hook();
-
- return Comlink.proxy({
- publicKeyTest,
- compressedPublicKeyTest,
- compactPublicKeyTest32BitSmall,
- compactPublicKeyTest32BitBig,
- compactPublicKeyTest256BitSmall,
- compactPublicKeyTest256BitBig,
- compressedCompactPublicKeyTest256BitSmall,
- compressedCompactPublicKeyTest256BitBig,
- compactPublicKeyBench32BitBig,
- compactPublicKeyBench32BitSmall,
- compactPublicKeyBench256BitBig,
- compactPublicKeyBench256BitSmall,
- compressedServerKeyBenchMessage1Carry1,
- compressedServerKeyBenchMessage2Carry2,
- })
+ await init();
+ await initThreadPool(navigator.hardwareConcurrency);
+ await init_panic_hook();
+
+ return Comlink.proxy({
+ publicKeyTest,
+ compressedPublicKeyTest,
+ compactPublicKeyTest32BitSmall,
+ compactPublicKeyTest32BitBig,
+ compactPublicKeyTest256BitSmall,
+ compactPublicKeyTest256BitBig,
+ compressedCompactPublicKeyTest256BitSmall,
+ compressedCompactPublicKeyTest256BitBig,
+ compactPublicKeyBench32BitBig,
+ compactPublicKeyBench32BitSmall,
+ compactPublicKeyBench256BitBig,
+ compactPublicKeyBench256BitSmall,
+ compressedServerKeyBenchMessage1Carry1,
+ compressedServerKeyBenchMessage2Carry2,
+ });
}
Comlink.expose({
- demos: main()
-})
+ demos: main(),
+});