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(), +});