From e9fd6d9743910fd072a1a443b35c3e114a601072 Mon Sep 17 00:00:00 2001 From: querolita Date: Wed, 29 Oct 2025 18:53:20 +0100 Subject: [PATCH 1/4] jsoo: srs bindings --- .../crypto/kimchi_bindings/js/bindings/srs.js | 201 ---------------- src/lib/crypto/kimchi_bindings/js/dune | 8 +- .../js/native/native-overrides/srs.js | 215 ++++++++++++++++++ .../js/node_js/node_backend.js | 40 ++++ 4 files changed, 259 insertions(+), 205 deletions(-) create mode 100644 src/lib/crypto/kimchi_bindings/js/native/native-overrides/srs.js diff --git a/src/lib/crypto/kimchi_bindings/js/bindings/srs.js b/src/lib/crypto/kimchi_bindings/js/bindings/srs.js index e7432f3b1c7b..e69de29bb2d1 100644 --- a/src/lib/crypto/kimchi_bindings/js/bindings/srs.js +++ b/src/lib/crypto/kimchi_bindings/js/bindings/srs.js @@ -1,201 +0,0 @@ -/* global plonk_wasm, caml_jsstring_of_string, - tsBindings, tsRustConversion -*/ - -// Provides: tsSrs -// Requires: tsBindings, plonk_wasm -var tsSrs = tsBindings.srs(plonk_wasm); - -// srs - -// Provides: caml_fp_srs_create -// Requires: tsSrs -var caml_fp_srs_create = tsSrs.fp.create; - -// Provides: caml_fp_srs_write -// Requires: plonk_wasm, caml_jsstring_of_string -var caml_fp_srs_write = function (append, t, path) { - if (append === 0) { - append = undefined; - } else { - append = append[1]; - } - return plonk_wasm.caml_fp_srs_write(append, t, caml_jsstring_of_string(path)); -}; - -// Provides: caml_fp_srs_read -// Requires: plonk_wasm, caml_jsstring_of_string -var caml_fp_srs_read = function (offset, path) { - if (offset === 0) { - offset = undefined; - } else { - offset = offset[1]; - } - var res = plonk_wasm.caml_fp_srs_read(offset, caml_jsstring_of_string(path)); - if (res) { - return [0, res]; // Some(res) - } else { - return 0; // None - } -}; - -// Provides: caml_fp_srs_lagrange_commitments_whole_domain -// Requires: tsSrs -var caml_fp_srs_lagrange_commitments_whole_domain = - tsSrs.fp.lagrangeCommitmentsWholeDomain; - -// Provides: caml_fq_srs_lagrange_commitments_whole_domain -// Requires: tsSrs -var caml_fq_srs_lagrange_commitments_whole_domain = - tsSrs.fq.lagrangeCommitmentsWholeDomain; - -// Provides: caml_fp_srs_lagrange_commitment -// Requires: tsSrs -var caml_fp_srs_lagrange_commitment = tsSrs.fp.lagrangeCommitment; - -// Provides: caml_fp_srs_commit_evaluations -// Requires: plonk_wasm, tsRustConversion -var caml_fp_srs_commit_evaluations = function (t, domain_size, fps) { - var res = plonk_wasm.caml_fp_srs_commit_evaluations( - t, - domain_size, - tsRustConversion.fp.vectorToRust(fps) - ); - return tsRustConversion.fp.polyCommFromRust(res); -}; - -// Provides: caml_fp_srs_b_poly_commitment -// Requires: plonk_wasm, tsRustConversion -var caml_fp_srs_b_poly_commitment = function (srs, chals) { - var res = plonk_wasm.caml_fp_srs_b_poly_commitment( - srs, - tsRustConversion.fieldsToRustFlat(chals) - ); - return tsRustConversion.fp.polyCommFromRust(res); -}; - -// Provides: caml_fp_srs_batch_accumulator_check -// Requires: plonk_wasm, tsRustConversion -var caml_fp_srs_batch_accumulator_check = function (srs, comms, chals) { - var rust_comms = tsRustConversion.fp.pointsToRust(comms); - var rust_chals = tsRustConversion.fp.vectorToRust(chals); - var ok = plonk_wasm.caml_fp_srs_batch_accumulator_check( - srs, - rust_comms, - rust_chals - ); - return ok; -}; - -// Provides: caml_fp_srs_batch_accumulator_generate -// Requires: plonk_wasm, tsRustConversion -var caml_fp_srs_batch_accumulator_generate = function (srs, n_comms, chals) { - var rust_chals = tsRustConversion.fp.vectorToRust(chals); - var rust_comms = plonk_wasm.caml_fp_srs_batch_accumulator_generate( - srs, - n_comms, - rust_chals - ); - return tsRustConversion.fp.pointsFromRust(rust_comms); -}; - -// Provides: caml_fp_srs_h -// Requires: plonk_wasm, tsRustConversion -var caml_fp_srs_h = function (t) { - return tsRustConversion.fp.pointFromRust(plonk_wasm.caml_fp_srs_h(t)); -}; - -// Provides: caml_fp_srs_add_lagrange_basis -// Requires: tsSrs -var caml_fp_srs_add_lagrange_basis = tsSrs.fp.addLagrangeBasis; - -// Provides: caml_fq_srs_create -// Requires: tsSrs -var caml_fq_srs_create = tsSrs.fq.create; - -// Provides: caml_fq_srs_write -// Requires: plonk_wasm, caml_jsstring_of_string -var caml_fq_srs_write = function (append, t, path) { - if (append === 0) { - append = undefined; - } else { - append = append[1]; - } - return plonk_wasm.caml_fq_srs_write(append, t, caml_jsstring_of_string(path)); -}; - -// Provides: caml_fq_srs_read -// Requires: plonk_wasm, caml_jsstring_of_string -var caml_fq_srs_read = function (offset, path) { - if (offset === 0) { - offset = undefined; - } else { - offset = offset[1]; - } - var res = plonk_wasm.caml_fq_srs_read(offset, caml_jsstring_of_string(path)); - if (res) { - return [0, res]; // Some(res) - } else { - return 0; // None - } -}; - -// Provides: caml_fq_srs_lagrange_commitment -// Requires: tsSrs -var caml_fq_srs_lagrange_commitment = tsSrs.fq.lagrangeCommitment; - -// Provides: caml_fq_srs_commit_evaluations -// Requires: plonk_wasm, tsRustConversion -var caml_fq_srs_commit_evaluations = function (t, domain_size, fqs) { - var res = plonk_wasm.caml_fq_srs_commit_evaluations( - t, - domain_size, - tsRustConversion.fq.vectorToRust(fqs) - ); - return tsRustConversion.fq.polyCommFromRust(res); -}; - -// Provides: caml_fq_srs_b_poly_commitment -// Requires: plonk_wasm, tsRustConversion -var caml_fq_srs_b_poly_commitment = function (srs, chals) { - var res = plonk_wasm.caml_fq_srs_b_poly_commitment( - srs, - tsRustConversion.fieldsToRustFlat(chals) - ); - return tsRustConversion.fq.polyCommFromRust(res); -}; - -// Provides: caml_fq_srs_batch_accumulator_check -// Requires: plonk_wasm, tsRustConversion -var caml_fq_srs_batch_accumulator_check = function (srs, comms, chals) { - var rust_comms = tsRustConversion.fq.pointsToRust(comms); - var rust_chals = tsRustConversion.fq.vectorToRust(chals); - var ok = plonk_wasm.caml_fq_srs_batch_accumulator_check( - srs, - rust_comms, - rust_chals - ); - return ok; -}; - -// Provides: caml_fq_srs_batch_accumulator_generate -// Requires: plonk_wasm, tsRustConversion -var caml_fq_srs_batch_accumulator_generate = function (srs, comms, chals) { - var rust_chals = tsRustConversion.fq.vectorToRust(chals); - var rust_comms = plonk_wasm.caml_fq_srs_batch_accumulator_generate( - srs, - comms, - rust_chals - ); - return tsRustConversion.fq.pointsFromRust(rust_comms); -}; - -// Provides: caml_fq_srs_h -// Requires: plonk_wasm, tsRustConversion -var caml_fq_srs_h = function (t) { - return tsRustConversion.fq.pointFromRust(plonk_wasm.caml_fq_srs_h(t)); -}; - -// Provides: caml_fq_srs_add_lagrange_basis -// Requires: tsSrs -var caml_fq_srs_add_lagrange_basis = tsSrs.fq.addLagrangeBasis; diff --git a/src/lib/crypto/kimchi_bindings/js/dune b/src/lib/crypto/kimchi_bindings/js/dune index 6b1be7e755fc..6af252023e0a 100644 --- a/src/lib/crypto/kimchi_bindings/js/dune +++ b/src/lib/crypto/kimchi_bindings/js/dune @@ -15,12 +15,12 @@ bindings/util.js bindings/srs.js bindings/verifier-index.js - native/native-overrides/oracles.js - native/native-overrides/util.js native/native-overrides/circuit.js - native/native-overrides/prover-index.js native/native-overrides/gate-vector.js - )) + native/native-overrides/oracles.js + native/native-overrides/prover-index.js + native/native-overrides/srs.js + native/native-overrides/util.js)) (instrumentation (backend bisect_ppx)) (preprocess diff --git a/src/lib/crypto/kimchi_bindings/js/native/native-overrides/srs.js b/src/lib/crypto/kimchi_bindings/js/native/native-overrides/srs.js new file mode 100644 index 000000000000..2260bc55f688 --- /dev/null +++ b/src/lib/crypto/kimchi_bindings/js/native/native-overrides/srs.js @@ -0,0 +1,215 @@ +/* global plonk_wasm, caml_jsstring_of_string, + tsBindings, tsRustConversion +*/ + +// Provides: tsSrs +// Requires: tsBindings, plonk_wasm +var tsSrs = tsBindings.srs(plonk_wasm); + +// srs + +// Provides: caml_fp_srs_create +// Requires: tsSrs +var caml_fp_srs_create = tsSrs.fp.create; + +// Provides: caml_fp_srs_write +// Requires: plonk_wasm, caml_jsstring_of_string +var caml_fp_srs_write = function (append, t, path) { + console.log("native caml_fp_srs_write"); + if (append === 0) { + append = undefined; + } else { + append = append[1]; + } + return plonk_wasm.caml_fp_srs_write(append, t, caml_jsstring_of_string(path)); +}; + +// Provides: caml_fp_srs_read +// Requires: plonk_wasm, caml_jsstring_of_string +var caml_fp_srs_read = function (offset, path) { + console.log("native caml_fp_srs_read"); + if (offset === 0) { + offset = undefined; + } else { + offset = offset[1]; + } + var res = plonk_wasm.caml_fp_srs_read(offset, caml_jsstring_of_string(path)); + if (res) { + return [0, res]; // Some(res) + } else { + return 0; // None + } +}; + +// Provides: caml_fp_srs_lagrange_commitments_whole_domain +// Requires: tsSrs +var caml_fp_srs_lagrange_commitments_whole_domain = + tsSrs.fp.lagrangeCommitmentsWholeDomain; + +// Provides: caml_fq_srs_lagrange_commitments_whole_domain +// Requires: tsSrs +var caml_fq_srs_lagrange_commitments_whole_domain = + tsSrs.fq.lagrangeCommitmentsWholeDomain; + +// Provides: caml_fp_srs_lagrange_commitment +// Requires: tsSrs +var caml_fp_srs_lagrange_commitment = tsSrs.fp.lagrangeCommitment; + +// Provides: caml_fp_srs_commit_evaluations +// Requires: plonk_wasm, tsRustConversionNative +var caml_fp_srs_commit_evaluations = function (t, domain_size, fps) { + console.log("native caml_fp_srs_commit_evaluations"); + var res = plonk_wasm.caml_fp_srs_commit_evaluations( + t, + domain_size, + tsRustConversionNative.fp.vectorToRust(fps) + ); + return tsRustConversionNative.fp.polyCommFromRust(res); +}; + +// Provides: caml_fp_srs_b_poly_commitment +// Requires: plonk_wasm, tsRustConversionNative +var caml_fp_srs_b_poly_commitment = function (srs, chals) { + console.log("native caml_fp_srs_b_poly_commitment"); + var res = plonk_wasm.caml_fp_srs_b_poly_commitment( + srs, + tsRustConversionNative.fieldsToRustFlat(chals) + ); + return tsRustConversionNative.fp.polyCommFromRust(res); +}; + +// Provides: caml_fp_srs_batch_accumulator_check +// Requires: plonk_wasm, tsRustConversionNative +var caml_fp_srs_batch_accumulator_check = function (srs, comms, chals) { + console.log("native caml_fp_srs_batch_accumulator_check"); + var rust_comms = tsRustConversionNative.fp.pointsToRust(comms); + var rust_chals = tsRustConversionNative.fp.vectorToRust(chals); + var ok = plonk_wasm.caml_fp_srs_batch_accumulator_check( + srs, + rust_comms, + rust_chals + ); + return ok; +}; + +// Provides: caml_fp_srs_batch_accumulator_generate +// Requires: plonk_wasm, tsRustConversionNative +var caml_fp_srs_batch_accumulator_generate = function (srs, n_comms, chals) { + console.log("native caml_fp_srs_batch_accumulator_generate"); + var rust_chals = tsRustConversionNative.fp.vectorToRust(chals); + var rust_comms = plonk_wasm.caml_fp_srs_batch_accumulator_generate( + srs, + n_comms, + rust_chals + ); + return tsRustConversionNative.fp.pointsFromRust(rust_comms); +}; + +// Provides: caml_fp_srs_h +// Requires: plonk_wasm, tsRustConversionNative +var caml_fp_srs_h = function (t) { + console.log("native caml_fp_srs_h"); + return tsRustConversionNative.fp.pointFromRust(plonk_wasm.caml_fp_srs_h(t)); +}; + +// Provides: caml_fp_srs_add_lagrange_basis +// Requires: tsSrs +var caml_fp_srs_add_lagrange_basis = tsSrs.fp.addLagrangeBasis; + +// Provides: caml_fq_srs_create +// Requires: tsSrs +var caml_fq_srs_create = tsSrs.fq.create; + +// Provides: caml_fq_srs_write +// Requires: plonk_wasm, caml_jsstring_of_string +var caml_fq_srs_write = function (append, t, path) { + console.log("native caml_fq_srs_write"); + if (append === 0) { + append = undefined; + } else { + append = append[1]; + } + return plonk_wasm.caml_fq_srs_write(append, t, caml_jsstring_of_string(path)); +}; + +// Provides: caml_fq_srs_read +// Requires: plonk_wasm, caml_jsstring_of_string +var caml_fq_srs_read = function (offset, path) { + console.log("native caml_fq_srs_read"); + if (offset === 0) { + offset = undefined; + } else { + offset = offset[1]; + } + var res = plonk_wasm.caml_fq_srs_read(offset, caml_jsstring_of_string(path)); + if (res) { + return [0, res]; // Some(res) + } else { + return 0; // None + } +}; + +// Provides: caml_fq_srs_lagrange_commitment +// Requires: tsSrs +var caml_fq_srs_lagrange_commitment = tsSrs.fq.lagrangeCommitment; + +// Provides: caml_fq_srs_commit_evaluations +// Requires: plonk_wasm, tsRustConversionNative +var caml_fq_srs_commit_evaluations = function (t, domain_size, fqs) { + console.log("native caml_fq_srs_commit_evaluations"); + var res = plonk_wasm.caml_fq_srs_commit_evaluations( + t, + domain_size, + tsRustConversionNative.fq.vectorToRust(fqs) + ); + return tsRustConversionNative.fq.polyCommFromRust(res); +}; + +// Provides: caml_fq_srs_b_poly_commitment +// Requires: plonk_wasm, tsRustConversionNative +var caml_fq_srs_b_poly_commitment = function (srs, chals) { + console.log("native caml_fq_srs_b_poly_commitment"); + var res = plonk_wasm.caml_fq_srs_b_poly_commitment( + srs, + tsRustConversionNative.fieldsToRustFlat(chals) + ); + return tsRustConversionNative.fq.polyCommFromRust(res); +}; + +// Provides: caml_fq_srs_batch_accumulator_check +// Requires: plonk_wasm, tsRustConversion +var caml_fq_srs_batch_accumulator_check = function (srs, comms, chals) { + console.log("native caml_fq_srs_batch_accumulator_check"); + var rust_comms = tsRustConversionNative.fq.pointsToRust(comms); + var rust_chals = tsRustConversionNative.fq.vectorToRust(chals); + var ok = plonk_wasm.caml_fq_srs_batch_accumulator_check( + srs, + rust_comms, + rust_chals + ); + return ok; +}; + +// Provides: caml_fq_srs_batch_accumulator_generate +// Requires: plonk_wasm, tsRustConversionNative +var caml_fq_srs_batch_accumulator_generate = function (srs, comms, chals) { + console.log("native caml_fq_srs_batch_accumulator_generate"); + var rust_chals = tsRustConversionNative.fq.vectorToRust(chals); + var rust_comms = plonk_wasm.caml_fq_srs_batch_accumulator_generate( + srs, + comms, + rust_chals + ); + return tsRustConversionNative.fq.pointsFromRust(rust_comms); +}; + +// Provides: caml_fq_srs_h +// Requires: plonk_wasm, tsRustConversionNative +var caml_fq_srs_h = function (t) { + console.log("native caml_fq_srs_h"); + return tsRustConversionNative.fq.pointFromRust(plonk_wasm.caml_fq_srs_h(t)); +}; + +// Provides: caml_fq_srs_add_lagrange_basis +// Requires: tsSrs +var caml_fq_srs_add_lagrange_basis = tsSrs.fq.addLagrangeBasis; diff --git a/src/lib/crypto/kimchi_bindings/js/node_js/node_backend.js b/src/lib/crypto/kimchi_bindings/js/node_js/node_backend.js index 4c594cb3dcc0..359ff4062ed7 100644 --- a/src/lib/crypto/kimchi_bindings/js/node_js/node_backend.js +++ b/src/lib/crypto/kimchi_bindings/js/node_js/node_backend.js @@ -81,3 +81,43 @@ override('caml_pasta_fp_plonk_index_read'); 'caml_pasta_fp_plonk_circuit_serialize', 'caml_pasta_fq_plonk_circuit_serialize', ].forEach(override); + +// Poly Commitment, Affine Point conversions +[ + 'WasmFpPolyComm', + 'WasmFqPolyComm', + 'WasmGPallas', + 'WasmGVesta', + 'WasmPastaFp', + 'WasmPastaFq', +].forEach(override); + +// SRS +[ + 'WasmFpSrs', + 'caml_fp_srs_create', + 'caml_fp_srs_create_parallel', + 'caml_fq_srs_get', + 'caml_fq_srs_set', + 'caml_fp_srs_write', + 'caml_fp_srs_read', + 'caml_fp_srs_add_lagrange_basis', + 'caml_fp_srs_commit_evaluations', + 'caml_fp_srs_b_poly_commitment', + 'caml_fp_srs_batch_accumulator_check', + 'caml_fp_srs_batch_accumulator_generate', + 'caml_fp_srs_h', + 'WasmFqSrs', + 'caml_fq_srs_create', + 'caml_fq_srs_create_parallel', + 'caml_fq_srs_get', + 'caml_fq_srs_set', + 'caml_fq_srs_write', + 'caml_fq_srs_read', + 'caml_fq_srs_add_lagrange_basis', + 'caml_fq_srs_commit_evaluations', + 'caml_fq_srs_b_poly_commitment', + 'caml_fq_srs_batch_accumulator_check', + 'caml_fq_srs_batch_accumulator_generate', + 'caml_fq_srs_h', +].forEach(override); From 81e75cff998c2ce0adfa4c3b2171bf207e7e9f9c Mon Sep 17 00:00:00 2001 From: querolita Date: Wed, 29 Oct 2025 18:53:30 +0100 Subject: [PATCH 2/4] submodule: update proof-systems --- src/lib/crypto/proof-systems | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/crypto/proof-systems b/src/lib/crypto/proof-systems index d7f7afc3e28f..570a29aada1d 160000 --- a/src/lib/crypto/proof-systems +++ b/src/lib/crypto/proof-systems @@ -1 +1 @@ -Subproject commit d7f7afc3e28f7b3b3ab431caf5dedd5cb505869c +Subproject commit 570a29aada1d09087bda961d3bc4f9e25deaaeec From 7fbfb655ccdb9a8c13e60294880638bcac2417cf Mon Sep 17 00:00:00 2001 From: querolita Date: Fri, 31 Oct 2025 17:59:24 +0100 Subject: [PATCH 3/4] jsoo: use vectorToRust instead of fieldsToRustFlat because it is not in tsRustConversionNative (reuses from wasm) --- .../crypto/kimchi_bindings/js/native/native-overrides/srs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/crypto/kimchi_bindings/js/native/native-overrides/srs.js b/src/lib/crypto/kimchi_bindings/js/native/native-overrides/srs.js index 2260bc55f688..20d4bfaf61a5 100644 --- a/src/lib/crypto/kimchi_bindings/js/native/native-overrides/srs.js +++ b/src/lib/crypto/kimchi_bindings/js/native/native-overrides/srs.js @@ -73,7 +73,7 @@ var caml_fp_srs_b_poly_commitment = function (srs, chals) { console.log("native caml_fp_srs_b_poly_commitment"); var res = plonk_wasm.caml_fp_srs_b_poly_commitment( srs, - tsRustConversionNative.fieldsToRustFlat(chals) + tsRustConversionNative.fp.vectorToRust(chals) ); return tsRustConversionNative.fp.polyCommFromRust(res); }; @@ -171,7 +171,7 @@ var caml_fq_srs_b_poly_commitment = function (srs, chals) { console.log("native caml_fq_srs_b_poly_commitment"); var res = plonk_wasm.caml_fq_srs_b_poly_commitment( srs, - tsRustConversionNative.fieldsToRustFlat(chals) + tsRustConversionNative.fq.vectorToRust(chals) ); return tsRustConversionNative.fq.polyCommFromRust(res); }; From 38ed463ac7621b246dd82d9de5d67966cc61d4fb Mon Sep 17 00:00:00 2001 From: querolita Date: Fri, 31 Oct 2025 17:59:42 +0100 Subject: [PATCH 4/4] submodule: update proof-systems --- src/lib/crypto/proof-systems | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/crypto/proof-systems b/src/lib/crypto/proof-systems index 570a29aada1d..bf6ae6f6731e 160000 --- a/src/lib/crypto/proof-systems +++ b/src/lib/crypto/proof-systems @@ -1 +1 @@ -Subproject commit 570a29aada1d09087bda961d3bc4f9e25deaaeec +Subproject commit bf6ae6f6731ed788a58ff0ba8eda134fda43a343