diff --git a/Cargo.lock b/Cargo.lock index f5b507e713..fc10fc725e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -90,7 +90,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -207,7 +207,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -218,7 +218,7 @@ checksum = "b6ac1e58cded18cb28ddc17143c4dea5345b3ad575e14f32f66e4054a56eb271" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -342,9 +342,9 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6068f356948cd84b5ad9ac30c50478e433847f14a50714d2b68f15d052724049" +checksum = "bfaa9ea039a6f9304b4a593d780b1f23e1ae183acdee938b11b38795acacc9f1" dependencies = [ "alloy-primitives", "num_enum", @@ -731,7 +731,7 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -929,7 +929,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -946,7 +946,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", "syn-solidity", "tiny-keccak", ] @@ -965,7 +965,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.109", + "syn 2.0.110", "syn-solidity", ] @@ -1093,7 +1093,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1292,7 +1292,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1330,7 +1330,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1460,7 +1460,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", "synstructure", ] @@ -1472,7 +1472,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1574,7 +1574,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1623,7 +1623,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1640,7 +1640,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1701,7 +1701,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2078,7 +2078,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2315,9 +2315,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -2357,7 +2357,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2382,7 +2382,7 @@ dependencies = [ "quote", "serde", "strsim", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2393,7 +2393,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2433,7 +2433,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" dependencies = [ "data-encoding", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2498,7 +2498,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", "unicode-xid", ] @@ -2595,7 +2595,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2676,6 +2676,7 @@ dependencies = [ "hex", "num-bigint", "rand 0.8.5", + "strum", "thiserror 1.0.69", "zkfhe-greco", ] @@ -2967,7 +2968,7 @@ dependencies = [ "async-trait", "e3-fs", "git2", - "indicatif 0.18.2", + "indicatif 0.18.3", "regex", "serde", "serde_json", @@ -3249,6 +3250,8 @@ version = "0.1.5" dependencies = [ "e3-bfv-helpers", "getrandom 0.2.16", + "serde", + "serde-wasm-bindgen", "wasm-bindgen", ] @@ -3300,7 +3303,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -3373,7 +3376,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -3393,7 +3396,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -3496,7 +3499,7 @@ dependencies = [ [[package]] name = "fhe" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs#837be950a453ffce5bbf35823344f08a65edb0ce" +source = "git+https://github.com/gnosisguild/fhe.rs#7692b954ce887ee78f0b6baae36447ca1aa74708" dependencies = [ "doc-comment", "fhe-math", @@ -3521,7 +3524,7 @@ dependencies = [ [[package]] name = "fhe-math" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs#837be950a453ffce5bbf35823344f08a65edb0ce" +source = "git+https://github.com/gnosisguild/fhe.rs#7692b954ce887ee78f0b6baae36447ca1aa74708" dependencies = [ "ethnum", "fhe-traits", @@ -3543,7 +3546,7 @@ dependencies = [ [[package]] name = "fhe-traits" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs#837be950a453ffce5bbf35823344f08a65edb0ce" +source = "git+https://github.com/gnosisguild/fhe.rs#7692b954ce887ee78f0b6baae36447ca1aa74708" dependencies = [ "rand 0.8.5", ] @@ -3551,7 +3554,7 @@ dependencies = [ [[package]] name = "fhe-util" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs#837be950a453ffce5bbf35823344f08a65edb0ce" +source = "git+https://github.com/gnosisguild/fhe.rs#7692b954ce887ee78f0b6baae36447ca1aa74708" dependencies = [ "itertools 0.12.1", "num-bigint-dig", @@ -3761,7 +3764,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -3839,9 +3842,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -4203,9 +4206,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "1744436df46f0bde35af3eda22aeaba453aada65d8f1c171cd8a5f59030bd69f" dependencies = [ "atomic-waker", "bytes", @@ -4230,7 +4233,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.3.1", - "hyper 1.7.0", + "hyper 1.8.0", "hyper-util", "rustls", "rustls-pki-types", @@ -4246,7 +4249,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.7.0", + "hyper 1.8.0", "hyper-util", "pin-project-lite", "tokio", @@ -4261,7 +4264,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.0", "hyper-util", "native-tls", "tokio", @@ -4282,7 +4285,7 @@ dependencies = [ "futures-util", "http 1.3.1", "http-body 1.0.1", - "hyper 1.7.0", + "hyper 1.8.0", "ipnet", "libc", "percent-encoding", @@ -4502,7 +4505,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -4549,9 +4552,9 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.18.2" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade6dfcba0dfb62ad59e59e7241ec8912af34fd29e0e743e3db992bd278e8b65" +checksum = "9375e112e4b463ec1b1c6c011953545c65a30164fbab5b581df32b3abf0dcb88" dependencies = [ "console 0.16.1", "portable-atomic", @@ -5108,7 +5111,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5190,9 +5193,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.22" +version = "1.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d" +checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7" dependencies = [ "cc", "libc", @@ -5306,7 +5309,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5594,9 +5597,9 @@ dependencies = [ [[package]] name = "num-bigint-dig" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c79c15c05d4bf82b6f5ef163104cc81a760d8e874d38ac50ab67c8877b647b" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" dependencies = [ "lazy_static", "libm", @@ -5692,7 +5695,7 @@ checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5774,7 +5777,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5932,7 +5935,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6102,7 +6105,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6131,7 +6134,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6236,7 +6239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6289,7 +6292,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6321,7 +6324,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6380,7 +6383,7 @@ dependencies = [ "prost 0.12.6", "prost-types", "regex", - "syn 2.0.109", + "syn 2.0.110", "tempfile", ] @@ -6394,7 +6397,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6407,7 +6410,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6706,7 +6709,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6775,7 +6778,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.0", "hyper-rustls", "hyper-tls", "hyper-util", @@ -7203,6 +7206,17 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_core" version = "1.0.228" @@ -7220,7 +7234,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -7285,7 +7299,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -7333,7 +7347,7 @@ checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -7586,7 +7600,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -7608,9 +7622,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.109" +version = "2.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" +checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" dependencies = [ "proc-macro2", "quote", @@ -7626,7 +7640,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -7646,7 +7660,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -7726,7 +7740,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -7737,7 +7751,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -7851,7 +7865,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -7998,7 +8012,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.0", "hyper-timeout", "hyper-util", "percent-encoding", @@ -8097,7 +8111,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -8176,7 +8190,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" dependencies = [ "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -8457,7 +8471,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", "wasm-bindgen-shared", ] @@ -8591,7 +8605,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -8602,7 +8616,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -9033,7 +9047,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", "synstructure", ] @@ -9054,7 +9068,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -9074,7 +9088,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", "synstructure", ] @@ -9095,7 +9109,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -9128,13 +9142,13 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] name = "zkfhe-greco" version = "0.1.0" -source = "git+https://github.com/gnosisguild/zkfhe-generator#1bb8019b8d9944ebf2fd293ec15d6cabc4e37da0" +source = "git+https://github.com/gnosisguild/zkfhe-generator#7314bed079b91ea6432864f30b991e4ef724a5c5" dependencies = [ "anyhow", "bigint-poly", @@ -9157,7 +9171,7 @@ dependencies = [ [[package]] name = "zkfhe-shared" version = "0.1.0" -source = "git+https://github.com/gnosisguild/zkfhe-generator#1bb8019b8d9944ebf2fd293ec15d6cabc4e37da0" +source = "git+https://github.com/gnosisguild/zkfhe-generator#7314bed079b91ea6432864f30b991e4ef724a5c5" dependencies = [ "anyhow", "bigint-poly", diff --git a/Cargo.toml b/Cargo.toml index fea1f73cc6..0105cbedfa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,13 +33,13 @@ members = [ "crates/wasm", ] exclude = [ + "examples/CRISP", "examples/CRISP/server", "examples/CRISP/program", - "examples/default/client/wasm", - "examples/default", # client needs to be able to build crates/support independently "crates/support", - "crates/support-scripts/dev" + "crates/support-scripts/dev", + "templates/default" ] resolver = "3" msrv = "1.86.0" @@ -150,12 +150,14 @@ rayon = "=1.10.0" regex = "=1.11.1" reqwest = { version = "=0.12.22", features = ["json"] } serde = { version = "=1.0.228", features = ["derive"] } +serde-wasm-bindgen = "=0.6.5" serde_json = "=1.0.141" serial_test = "=3.2.0" -sled = "=0.34.7" serde_yaml = "=0.9.34" sha2 = "=0.10.9" shellexpand = "=3.1.1" +sled = "=0.34.7" +strum = { version = "=0.27.2", features = ["derive"] } tempfile = "=3.20.0" thiserror = { version = "=1.0.69" } tokio = { version = "=1.46.1", features = ["full"] } diff --git a/circuits/crates/libs/greco/src/lib.nr b/circuits/crates/libs/greco/src/lib.nr index 1f2f772f46..2f8974567e 100644 --- a/circuits/crates/libs/greco/src/lib.nr +++ b/circuits/crates/libs/greco/src/lib.nr @@ -189,7 +189,7 @@ pub struct Greco, e0: Polynomial, e1: Polynomial, - e1is: [Polynomial; L], + e0is: [Polynomial; L], k1: Polynomial, r1is: [Polynomial<(2 * N) - 1>; L], r2is: [Polynomial; L], @@ -229,14 +229,14 @@ impl, e0: Polynomial, e1: Polynomial, - e1is: [Polynomial; L], + e0is: [Polynomial; L], k1: Polynomial, r1is: [Polynomial<2 * N - 1>; L], r2is: [Polynomial; L], p1is: [Polynomial<2 * N - 1>; L], p2is: [Polynomial; L], ) -> Greco { - Greco { params, pk0is, pk1is, ct0is, ct1is, u, e0, e1, e1is, k1, r1is, r2is, p1is, p2is } + Greco { params, pk0is, pk1is, ct0is, ct1is, u, e0, e1, e0is, k1, r1is, r2is, p1is, p2is } } /// Flattens all polynomials coefficients into a single array for challenge generation. @@ -399,7 +399,7 @@ impl = std::result::Result; +#[derive(Debug, Clone, Copy, EnumString, IntoStaticStr, EnumIter)] +#[strum(serialize_all = "SCREAMING_SNAKE_CASE")] /// Predefined BFV parameters for common use cases -pub mod params { - use super::BfvParamSet; - - /// Note that 10 is the default value for both error1 and error2 variance - /// for both BFV and TRBFV (if not explicitly set). - - /// Standard development parameters set (DO NOT USE IN PRODUCTION). +/// Note that 10 is the default value for both error1 and error2 variance +/// for both BFV and TRBFV (if not explicitly set). +pub enum BfvParams { + // List parameter strings and variants here + // + /// Standard BFV development parameters set (DO NOT USE IN PRODUCTION). /// - Degree: 2048 (polynomial ring size) /// - Plaintext modulus: 1032193 /// - Moduli: [0x3FFFFFFF000001] (provides good security level) - pub const SET_2048_1032193_1: BfvParamSet = BfvParamSet { - degree: 2048, - plaintext_modulus: 1032193, - moduli: &[0x3FFFFFFF000001], - error2_variance: None, - }; + #[strum(serialize = "INSECURE_SET_2048_1032193_1")] + InsecureSet2048_1032193_1, + + /// Testing TrBFV development parameters set (DO NOT USE IN PRODUCTION). + /// - Degree: 512 + /// - Moduli: [0xffffee001, 0xffffc4001] + /// - Plaintext modulus: 10 + /// - Error2 Variance: 3 + #[strum(serialize = "INSECURE_SET_512_10_1")] + InsecureSet512_10_1, + + /// Testing BFV development parameters for share encryption (DO NOT USE IN PRODUCTION). + /// - Degree: 512 + /// - Moduli: [0x7fffffffe0001] + /// - Plaintext modulus: 0xffffee001 + /// - Error2 Variance: 3 + #[strum(serialize = "INSECURE_SET_512_0XFFFFEE001_1")] + InsecureSet512_0xffffee001_1, /// 128bits security TRBFV parameters set (PRODUCTION READY). /// - Degree: 8192 /// - Plaintext modulus: 1000 /// - Moduli: [0x00800000022a0001, 0x00800000021a0001, 0x0080000002120001, 0x0080000001f60001] /// - Error2 Variance: 52309181128222339698631578526730685514457152477762943514050560000 - pub const SET_8192_1000_4: BfvParamSet = BfvParamSet { - degree: 8192, - plaintext_modulus: 1000, - moduli: &[ - 0x00800000022a0001, - 0x00800000021a0001, - 0x0080000002120001, - 0x0080000001f60001, - ], - error2_variance: Some("52309181128222339698631578526730685514457152477762943514050560000"), - }; + #[strum(serialize = "SET_8192_1000_4")] + Set8192_1000_4, /// 128bits security BFV parameters set (PRODUCTION READY). /// - Degree: 8192 /// - Plaintext modulus: 144115188075855872 /// - Moduli: [288230376173076481, 288230376167047169] - pub const SET_8192_144115188075855872_2: BfvParamSet = BfvParamSet { - degree: 8192, - plaintext_modulus: 144115188075855872, - moduli: &[288230376173076481, 288230376167047169], - error2_variance: None, - }; + #[strum(serialize = "SET_8192_144115188075855872_2")] + Set8192_144115188075855872_2, +} + +// Map for getters +impl BfvParams { + /// Return the given param set based on the input key &str. + pub fn get_params_by_str(key: &str) -> Result { + key.parse::() + .map(|k| k.into()) + .map_err(|_| Error::UnknownParamSet(key.to_string())) + } + + /// List all the available parameter keys + pub fn get_params_list() -> Vec { + BfvParams::iter() + .map(|key| { + let s: &'static str = key.into(); + s.to_string() + }) + .collect() + } +} + +impl From for BfvParamSet { + fn from(value: BfvParams) -> Self { + use BfvParams as B; + match value { + // List each new parameter set here + B::InsecureSet2048_1032193_1 => BfvParamSet { + degree: 2048, + plaintext_modulus: 1032193, + moduli: &[0x3FFFFFFF000001], + error1_variance: None, + }, + B::InsecureSet512_10_1 => BfvParamSet { + degree: 512, + moduli: &[0xffffee001, 0xffffc4001], + plaintext_modulus: 10, + error1_variance: Some("3"), + }, + B::InsecureSet512_0xffffee001_1 => BfvParamSet { + degree: 512, + moduli: &[0x7fffffffe0001], + plaintext_modulus: 0xffffee001, + error1_variance: None, + }, + B::Set8192_1000_4 => BfvParamSet { + degree: 8192, + plaintext_modulus: 1000, + moduli: &[ + 0x00800000022a0001, + 0x00800000021a0001, + 0x0080000002120001, + 0x0080000001f60001, + ], + error1_variance: Some( + "52309181128222339698631578526730685514457152477762943514050560000", + ), + }, + B::Set8192_144115188075855872_2 => BfvParamSet { + degree: 8192, + plaintext_modulus: 144115188075855872, + moduli: &[288230376173076481, 288230376167047169], + error1_variance: None, + }, + } + } } /// A consistent type representing a BFV parameter set. @@ -86,7 +155,7 @@ pub struct BfvParamSet { /// The moduli for the ciphertext space pub moduli: &'static [u64], /// Optional error2 variance (as decimal string). If None, defaults to "10" - pub error2_variance: Option<&'static str>, + pub error1_variance: Option<&'static str>, } /// Builds BFV parameters from a `BfvParamSet`. @@ -106,7 +175,7 @@ pub fn build_bfv_params_from_set(param_set: BfvParamSet) -> BfvParameters { param_set.degree, param_set.plaintext_modulus, param_set.moduli, - param_set.error2_variance, + param_set.error1_variance, ) } @@ -127,14 +196,14 @@ pub fn build_bfv_params_from_set_arc(param_set: BfvParamSet) -> Arc Arc, + error1_variance: Option<&str>, ) -> BfvParameters { let mut builder = BfvParametersBuilder::new(); builder @@ -163,12 +232,12 @@ pub fn build_bfv_params( .set_plaintext_modulus(plaintext_modulus) .set_moduli(moduli); - if let Some(error2) = error2_variance { + if let Some(error1) = error1_variance { builder - .set_error2_variance_str(error2) - .unwrap_or_else(|e| panic!("Failed to set error2_variance: {}", e)); + .set_error1_variance_str(error1) + .unwrap_or_else(|e| panic!("Failed to set error1_variance: {}", e)); } - // If error2_variance is None, the builder defaults to 10 + // If error1_variance is None, the builder defaults to 10 builder .build() @@ -185,7 +254,7 @@ pub fn build_bfv_params( /// * `degree` - The degree of the polynomial ring, must be a power of 2 /// * `plaintext_modulus` - The modulus for the plaintext space /// * `moduli` - The moduli for the ciphertext space -/// * `error2_variance` - Optional error2 variance (as decimal string). Defaults to "10" if None. +/// * `error1_variance` - Optional error2 variance (as decimal string). Defaults to "10" if None. /// /// # Returns /// @@ -198,7 +267,7 @@ pub fn build_bfv_params_arc( degree: usize, plaintext_modulus: u64, moduli: &[u64], - error2_variance: Option<&str>, + error1_variance: Option<&str>, ) -> Arc { let mut builder = BfvParametersBuilder::new(); builder @@ -206,12 +275,12 @@ pub fn build_bfv_params_arc( .set_plaintext_modulus(plaintext_modulus) .set_moduli(moduli); - if let Some(error2) = error2_variance { + if let Some(error1) = error1_variance { builder - .set_error2_variance_str(error2) - .unwrap_or_else(|e| panic!("Failed to set error2_variance: {}", e)); + .set_error1_variance_str(error1) + .unwrap_or_else(|e| panic!("Failed to set error1_variance: {}", e)); } - // If error2_variance is None, the builder defaults to 10 + // If error1_variance is None, the builder defaults to 10 builder .build_arc() @@ -220,7 +289,7 @@ pub fn build_bfv_params_arc( /// Encodes BFV parameters into ABI-encoded bytes. /// -/// This function converts BFV parameters into a tuple structure of (degree, plaintext_modulus, moduli[], error2_variance) +/// This function converts BFV parameters into a tuple structure of (degree, plaintext_modulus, moduli[], error1_variance) /// and then ABI-encodes the tuple using Solidity ABI format. The resulting bytes can be used /// in smart contracts or for cross-platform serialization. /// # Arguments @@ -241,7 +310,7 @@ pub fn encode_bfv_params(params: &BfvParameters) -> Vec { .map(|val| DynSolValue::Uint(U256::from(*val), 256)) .collect(), ), - DynSolValue::String(params.get_error2_variance().to_string()), + DynSolValue::String(params.get_error1_variance().to_string()), ]); value.abi_encode() } @@ -250,7 +319,7 @@ pub fn encode_bfv_params(params: &BfvParameters) -> Vec { /// /// This function converts ABI-encoded bytes back into BFV parameters. /// The bytes should represent a tuple (uint256, uint256, uint256[], string) containing -/// (degree, plaintext_modulus, moduli[], error2_variance) as produced by `encode_bfv_params`. +/// (degree, plaintext_modulus, moduli[], error1_variance) as produced by `encode_bfv_params`. /// /// # Arguments /// @@ -269,7 +338,7 @@ pub fn decode_bfv_params(bytes: &[u8]) -> BfvParameters { DynSolType::Uint(256), // degree DynSolType::Uint(256), // plaintext_modulus DynSolType::Array(Box::new(DynSolType::Uint(256))), // moduli array - DynSolType::String, // error2_variance (as decimal string) + DynSolType::String, // error1_variance (as decimal string) ]); let decoded = tuple_type @@ -308,18 +377,18 @@ pub fn decode_bfv_params(bytes: &[u8]) -> BfvParameters { _ => panic!("Expected array for moduli"), }; - // Extract error2_variance (fourth element) - let error2_variance: String = match &inner_values[3] { + // Extract error1_variance (fourth element) + let error1_variance: String = match &inner_values[3] { DynSolValue::String(val) => val.clone(), - _ => panic!("Expected string for error2_variance"), + _ => panic!("Expected string for error1_variance"), }; let params = BfvParametersBuilder::new() .set_degree(degree as usize) .set_plaintext_modulus(plaintext) .set_moduli(&moduli) - .set_error2_variance_str(&error2_variance) - .unwrap_or_else(|e| panic!("Failed to set error2_variance: {}", e)) + .set_error1_variance_str(&error1_variance) + .unwrap_or_else(|e| panic!("Failed to set error1_variance: {}", e)) .build() .unwrap_or_else(|e| panic!("Failed to build BFV Parameters: {}", e)); @@ -334,7 +403,7 @@ pub fn decode_bfv_params(bytes: &[u8]) -> BfvParameters { /// This is a convenience function that combines `decode_bfv_params` with `Arc::new` /// to provide thread-safe shared ownership of the decoded parameters. /// The input bytes should represent a tuple (uint256, uint256, uint256[], string) containing -/// (degree, plaintext_modulus, moduli[], error2_variance) in ABI-encoded format. +/// (degree, plaintext_modulus, moduli[], error1_variance) in ABI-encoded format. /// /// # Arguments /// @@ -397,7 +466,7 @@ mod tests { assert_eq!(params.plaintext(), plaintext_modulus); assert_eq!(params.moduli(), moduli); assert_eq!(params.variance(), 10); - assert_eq!(params.get_error2_variance(), &BigUint::from(10u32)); + assert_eq!(params.get_error1_variance(), &BigUint::from(10u32)); } #[test] @@ -411,7 +480,7 @@ mod tests { assert_eq!(params.plaintext(), plaintext_modulus); assert_eq!(params.moduli(), moduli); assert_eq!(params.variance(), 10); - assert_eq!(params.get_error2_variance(), &BigUint::from(10u32)); + assert_eq!(params.get_error1_variance(), &BigUint::from(10u32)); } #[test] @@ -424,16 +493,16 @@ mod tests { 0x0080000002120001, 0x0080000001f60001, ]; - let error2_variance = "52309181128222339698631578526730685514457152477762943514050560000"; + let error1_variance = "52309181128222339698631578526730685514457152477762943514050560000"; - let params = build_bfv_params(degree, plaintext_modulus, &moduli, Some(error2_variance)); + let params = build_bfv_params(degree, plaintext_modulus, &moduli, Some(error1_variance)); assert_eq!(params.degree(), degree); assert_eq!(params.plaintext(), plaintext_modulus); assert_eq!(params.moduli(), moduli); assert_eq!(params.variance(), 10); assert_eq!( - params.get_error2_variance(), - &BigUint::from_str(error2_variance).unwrap() + params.get_error1_variance(), + &BigUint::from_str(error1_variance).unwrap() ); } @@ -447,17 +516,17 @@ mod tests { 0x0080000002120001, 0x0080000001f60001, ]; - let error2_variance = "52309181128222339698631578526730685514457152477762943514050560000"; + let error1_variance = "52309181128222339698631578526730685514457152477762943514050560000"; let params = - build_bfv_params_arc(degree, plaintext_modulus, &moduli, Some(error2_variance)); + build_bfv_params_arc(degree, plaintext_modulus, &moduli, Some(error1_variance)); assert_eq!(params.degree(), degree); assert_eq!(params.plaintext(), plaintext_modulus); assert_eq!(params.moduli(), moduli); assert_eq!(params.variance(), 10); assert_eq!( - params.get_error2_variance(), - &BigUint::from_str(error2_variance).unwrap() + params.get_error1_variance(), + &BigUint::from_str(error1_variance).unwrap() ); } @@ -474,8 +543,8 @@ mod tests { assert_eq!(decoded.degree(), degree); assert_eq!(decoded.plaintext(), plaintext_modulus); assert_eq!(decoded.moduli(), moduli.as_slice()); - // Verify error2_variance is preserved (defaults to 10 for standard BFV) - assert_eq!(decoded.get_error2_variance(), params.get_error2_variance()); + // Verify error1_variance is preserved (defaults to 10 for standard BFV) + assert_eq!(decoded.get_error1_variance(), params.get_error1_variance()); } #[test] @@ -506,8 +575,8 @@ mod tests { assert_eq!(decoded.degree(), degree); assert_eq!(decoded.plaintext(), plaintext_modulus); assert_eq!(decoded.moduli(), moduli.as_slice()); - // Verify error2_variance is preserved - assert_eq!(decoded.get_error2_variance(), params.get_error2_variance()); + // Verify error1_variance is preserved + assert_eq!(decoded.get_error1_variance(), params.get_error1_variance()); } #[test] @@ -520,19 +589,19 @@ mod tests { 0x0080000002120001, 0x0080000001f60001, ]; - let error2_variance = "52309181128222339698631578526730685514457152477762943514050560000"; + let error1_variance = "52309181128222339698631578526730685514457152477762943514050560000"; - let params = build_bfv_params(degree, plaintext_modulus, &moduli, Some(error2_variance)); + let params = build_bfv_params(degree, plaintext_modulus, &moduli, Some(error1_variance)); let encoded = encode_bfv_params(¶ms); let decoded = decode_bfv_params(&encoded); assert_eq!(decoded.degree(), degree); assert_eq!(decoded.plaintext(), plaintext_modulus); assert_eq!(decoded.moduli(), moduli); - // Verify error2_variance is preserved for trBFV + // Verify error1_variance is preserved for trBFV assert_eq!( - decoded.get_error2_variance(), - &BigUint::from_str(error2_variance).unwrap() + decoded.get_error1_variance(), + &BigUint::from_str(error1_variance).unwrap() ); } @@ -549,7 +618,7 @@ mod tests { #[test] fn test_params_constant() { - let param_set = params::SET_2048_1032193_1; + let param_set: BfvParamSet = BfvParams::InsecureSet2048_1032193_1.into(); assert_eq!(param_set.degree, 2048); assert_eq!(param_set.plaintext_modulus, 1032193); assert_eq!(param_set.moduli, &[0x3FFFFFFF000001]); @@ -557,7 +626,7 @@ mod tests { #[test] fn test_params_function() { - let param_set = params::SET_2048_1032193_1; + let param_set = BfvParams::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set(param_set); assert_eq!(params.degree(), param_set.degree); @@ -567,7 +636,7 @@ mod tests { #[test] fn test_params_arc_function() { - let param_set = params::SET_2048_1032193_1; + let param_set = BfvParams::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set_arc(param_set); assert_eq!(params.degree(), param_set.degree); @@ -577,7 +646,7 @@ mod tests { #[test] fn test_params_encoding_roundtrip() { - let param_set = params::SET_2048_1032193_1; + let param_set = BfvParams::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set(param_set); let encoded = encode_bfv_params(¶ms); let decoded = decode_bfv_params(&encoded); @@ -585,13 +654,13 @@ mod tests { assert_eq!(decoded.degree(), param_set.degree); assert_eq!(decoded.plaintext(), param_set.plaintext_modulus); assert_eq!(decoded.moduli(), param_set.moduli); - // Verify error2_variance is preserved - assert_eq!(decoded.get_error2_variance(), params.get_error2_variance()); + // Verify error1_variance is preserved + assert_eq!(decoded.get_error1_variance(), params.get_error1_variance()); } #[test] fn test_params_arc_encoding_roundtrip() { - let param_set = params::SET_2048_1032193_1; + let param_set = BfvParams::InsecureSet2048_1032193_1.into(); let params = build_bfv_params_from_set_arc(param_set); let encoded = encode_bfv_params(¶ms); let decoded = decode_bfv_params_arc(&encoded); @@ -599,13 +668,13 @@ mod tests { assert_eq!(decoded.degree(), param_set.degree); assert_eq!(decoded.plaintext(), param_set.plaintext_modulus); assert_eq!(decoded.moduli(), param_set.moduli); - // Verify error2_variance is preserved - assert_eq!(decoded.get_error2_variance(), params.get_error2_variance()); + // Verify error1_variance is preserved + assert_eq!(decoded.get_error1_variance(), params.get_error1_variance()); } #[test] fn test_params_trbfv_encoding_roundtrip() { - let param_set = params::SET_8192_1000_4; + let param_set = BfvParams::Set8192_1000_4.into(); let params = build_bfv_params_from_set(param_set); let encoded = encode_bfv_params(¶ms); let decoded = decode_bfv_params(&encoded); @@ -613,10 +682,10 @@ mod tests { assert_eq!(decoded.degree(), param_set.degree); assert_eq!(decoded.plaintext(), param_set.plaintext_modulus); assert_eq!(decoded.moduli(), param_set.moduli); - // Verify error2_variance is preserved for trBFV + // Verify error1_variance is preserved for trBFV assert_eq!( - decoded.get_error2_variance(), - &BigUint::from_str(param_set.error2_variance.unwrap()).unwrap() + decoded.get_error1_variance(), + &BigUint::from_str(param_set.error1_variance.unwrap()).unwrap() ); } } diff --git a/crates/support-scripts/dev/Cargo.toml b/crates/support-scripts/dev/Cargo.toml index 7e5be10c38..3b5b9ae35d 100644 --- a/crates/support-scripts/dev/Cargo.toml +++ b/crates/support-scripts/dev/Cargo.toml @@ -8,8 +8,8 @@ name = "e3-support-scripts-dev" path = "src/main.rs" [dependencies] -e3-program-server = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } -e3-compute-provider = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } +e3-program-server = { workspace = true } +e3-compute-provider = { workspace = true } tokio = { version = "1.38", features = ["full"] } anyhow = "1.0.86" e3-user-program = { path = "../../../program" } diff --git a/crates/test-helpers/src/bin/fake_encrypt.rs b/crates/test-helpers/src/bin/fake_encrypt.rs index 8f59f72c5d..ab5d84d044 100644 --- a/crates/test-helpers/src/bin/fake_encrypt.rs +++ b/crates/test-helpers/src/bin/fake_encrypt.rs @@ -6,8 +6,9 @@ // This is a test script designed to encrypt some fixed data to a fhe public key use clap::Parser; +use e3_sdk::bfv_helpers::build_bfv_params_from_set_arc; use e3_sdk::bfv_helpers::decode_bfv_params; -use e3_sdk::bfv_helpers::{build_bfv_params_from_set_arc, params::SET_2048_1032193_1}; +use e3_sdk::bfv_helpers::BfvParams; use fhe::bfv::{Encoding, Plaintext, PublicKey}; use fhe_traits::{DeserializeParametrized, FheEncoder, FheEncrypter, Serialize}; use rand::SeedableRng; @@ -54,7 +55,7 @@ fn main() -> Result<(), Box> { let params = if let Some(params_bytes) = args.params { Arc::new(decode_bfv_params(¶ms_bytes.0)) } else { - build_bfv_params_from_set_arc(SET_2048_1032193_1) + build_bfv_params_from_set_arc(BfvParams::InsecureSet2048_1032193_1.into()) }; let pubkey = PublicKey::from_bytes(&bytes, ¶ms)?; let raw_plaintext = args.plaintext; diff --git a/crates/test-helpers/src/bin/pack_e3_params.rs b/crates/test-helpers/src/bin/pack_e3_params.rs index b65da566cd..f5ac101a35 100644 --- a/crates/test-helpers/src/bin/pack_e3_params.rs +++ b/crates/test-helpers/src/bin/pack_e3_params.rs @@ -25,8 +25,8 @@ struct Args { #[arg(short, long = "plaintext-modulus")] plaintext_modulus: u64, - #[arg(short, long = "error2-variance")] - error2_variance: Option, + #[arg(short, long = "error1-variance")] + error1_variance: Option, } fn main() -> Result<(), Box> { @@ -38,12 +38,12 @@ fn main() -> Result<(), Box> { process::exit(1); } - if let Some(error2_variance) = args.error2_variance { + if let Some(error1_variance) = args.error1_variance { params = build_bfv_params_arc( args.degree as usize, args.plaintext_modulus, &args.moduli, - Some(&error2_variance), + Some(&error1_variance), ); } else { params = build_bfv_params_arc( diff --git a/crates/test-helpers/src/lib.rs b/crates/test-helpers/src/lib.rs index c539e825d5..07d8456e81 100644 --- a/crates/test-helpers/src/lib.rs +++ b/crates/test-helpers/src/lib.rs @@ -19,7 +19,7 @@ use e3_events::{ }; use e3_fhe::{create_crp, setup_crp_params, ParamsWithCrp}; use e3_net::{DocumentPublisher, NetEventTranslator}; -use e3_sdk::bfv_helpers::{params::SET_2048_1032193_1, BfvParamSet}; +use e3_sdk::bfv_helpers::{BfvParamSet, BfvParams}; use e3_utils::SharedRng; use fhe::bfv::{BfvParameters, Ciphertext, Encoding, Plaintext, PublicKey}; use fhe::mbfv::CommonRandomPoly; @@ -87,7 +87,7 @@ pub fn get_common_setup( let rng = create_shared_rng_from_u64(42); let seed = create_seed_from_u64(123); - let param_set = param_set.unwrap_or(SET_2048_1032193_1); + let param_set = param_set.unwrap_or(BfvParams::InsecureSet2048_1032193_1.into()); let degree = param_set.degree; let plaintext_modulus = param_set.plaintext_modulus; let moduli = param_set.moduli; diff --git a/crates/wasm/Cargo.toml b/crates/wasm/Cargo.toml index 46480c4613..f7f00696dd 100644 --- a/crates/wasm/Cargo.toml +++ b/crates/wasm/Cargo.toml @@ -11,5 +11,7 @@ crate-type = ["cdylib"] [dependencies] e3-bfv-helpers.workspace = true +serde.workspace = true +serde-wasm-bindgen.workspace = true getrandom = { version = "0.2", features = ["js"] } wasm-bindgen = "0.2.99" diff --git a/crates/wasm/src/lib.rs b/crates/wasm/src/lib.rs index 9111aca25a..0fc3e80afd 100644 --- a/crates/wasm/src/lib.rs +++ b/crates/wasm/src/lib.rs @@ -4,7 +4,11 @@ // without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. -use e3_bfv_helpers::client::{bfv_encrypt, bfv_verifiable_encrypt}; +use e3_bfv_helpers::{ + client::{bfv_encrypt, bfv_verifiable_encrypt}, + BfvParamSet, BfvParams, +}; +use serde::{Deserialize, Serialize}; use wasm_bindgen::prelude::*; #[wasm_bindgen] @@ -138,3 +142,63 @@ pub fn bfv_verifiable_encrypt_vector( JsValue::from(result.circuit_inputs), ]) } + +#[wasm_bindgen] +/// Retrieves a BFV parameter set by name. +/// +/// # Parameters +/// * `name` - Parameter set identifier (e.g., "SET_8192_1000_4") +/// +/// # Returns +/// A JavaScript object with the following structure: +/// ```typescript +/// { +/// degree: number; // Polynomial degree (e.g., 8192) +/// plaintext_modulus: number; // Plaintext modulus value (e.g., 1000) +/// moduli: bigint[]; // Array of moduli +/// error1_variance: string | null; // Error variance as string or null +/// } +/// ``` +/// +/// # Errors +/// Returns error if the parameter set name is invalid or serialization fails. +pub fn get_bfv_params(name: &str) -> Result { + let params = + BfvParams::get_params_by_str(name).map_err(|e| JsValue::from_str(&e.to_string()))?; + let js_params = BfvParamSetJs::from(¶ms); + let serializer = + serde_wasm_bindgen::Serializer::new().serialize_large_number_types_as_bigints(true); + js_params + .serialize(&serializer) + .map_err(|e| JsValue::from_str(&format!("Serialization error: {}", e))) +} + +#[wasm_bindgen] +/// Returns all available BFV parameter set identifiers. +/// +/// # Returns +/// Array of parameter set names that can be passed to `get_bfv_params()`. +/// Includes both production-ready sets (e.g., "SET_8192_1000_4") and +/// insecure sets for testing (prefixed with "INSECURE_"). +pub fn get_bfv_params_list() -> Vec { + BfvParams::get_params_list() +} + +#[derive(Serialize, Deserialize)] +pub struct BfvParamSetJs { + pub degree: usize, + pub plaintext_modulus: u64, + pub moduli: Vec, + pub error1_variance: Option, +} + +impl From<&BfvParamSet> for BfvParamSetJs { + fn from(params: &BfvParamSet) -> Self { + BfvParamSetJs { + degree: params.degree, + plaintext_modulus: params.plaintext_modulus, + moduli: params.moduli.to_vec(), + error1_variance: params.error1_variance.map(|s| s.to_string()), + } + } +} diff --git a/examples/CRISP/Cargo.lock b/examples/CRISP/Cargo.lock index 63b33914ad..765a36e38d 100644 --- a/examples/CRISP/Cargo.lock +++ b/examples/CRISP/Cargo.lock @@ -80,7 +80,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -197,7 +197,7 @@ dependencies = [ "actix-router", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -286,9 +286,9 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6068f356948cd84b5ad9ac30c50478e433847f14a50714d2b68f15d052724049" +checksum = "bfaa9ea039a6f9304b4a593d780b1f23e1ae183acdee938b11b38795acacc9f1" dependencies = [ "alloy-primitives", "num_enum", @@ -675,7 +675,7 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -873,7 +873,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -890,7 +890,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", "syn-solidity", "tiny-keccak", ] @@ -909,7 +909,7 @@ dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", "serde_json", - "syn 2.0.109", + "syn 2.0.110", "syn-solidity", ] @@ -1037,7 +1037,7 @@ dependencies = [ "darling", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1224,7 +1224,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1262,7 +1262,7 @@ dependencies = [ "num-traits", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1387,7 +1387,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1398,7 +1398,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1426,7 +1426,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1753,7 +1753,7 @@ dependencies = [ "heck", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -1965,7 +1965,7 @@ dependencies = [ "derivative", "dialoguer", "dotenvy", - "e3-compute-provider 0.1.5", + "e3-compute-provider", "e3-sdk", "env_logger", "eyre", @@ -2073,7 +2073,7 @@ dependencies = [ "quote 1.0.42", "serde", "strsim", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2084,7 +2084,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2155,7 +2155,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", "unicode-xid 0.2.6", ] @@ -2202,7 +2202,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2257,27 +2257,11 @@ dependencies = [ "fhe-util", "num-bigint", "rand 0.8.5", + "strum", "thiserror 1.0.69", "zkfhe-greco", ] -[[package]] -name = "e3-compute-provider" -version = "0.1.0" -source = "git+https://github.com/gnosisguild/enclave?rev=2ca0aa5f47dd962add5d1d0f74900d9bceb957e5#2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" -dependencies = [ - "ark-bn254", - "ark-ff 0.4.2", - "hex", - "lean-imt", - "light-poseidon 0.2.0", - "num-bigint", - "num-traits", - "rayon", - "serde", - "sha3", -] - [[package]] name = "e3-compute-provider" version = "0.1.5" @@ -2323,12 +2307,12 @@ dependencies = [ [[package]] name = "e3-program-server" -version = "0.1.0" -source = "git+https://github.com/gnosisguild/enclave?rev=2ca0aa5f47dd962add5d1d0f74900d9bceb957e5#2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" +version = "0.1.5" dependencies = [ "actix-web", "anyhow", - "e3-compute-provider 0.1.0", + "derivative", + "e3-compute-provider", "hex", "reqwest", "serde", @@ -2350,7 +2334,7 @@ name = "e3-support-scripts-dev" version = "0.1.0" dependencies = [ "anyhow", - "e3-compute-provider 0.1.0", + "e3-compute-provider", "e3-program-server", "e3-user-program", "tokio", @@ -2361,7 +2345,7 @@ name = "e3-user-program" version = "0.1.0" dependencies = [ "e3-bfv-helpers", - "e3-compute-provider 0.1.0", + "e3-compute-provider", "fhe", "fhe-traits", ] @@ -2390,7 +2374,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2454,7 +2438,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -2553,7 +2537,7 @@ dependencies = [ [[package]] name = "fhe" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs#837be950a453ffce5bbf35823344f08a65edb0ce" +source = "git+https://github.com/gnosisguild/fhe.rs#7692b954ce887ee78f0b6baae36447ca1aa74708" dependencies = [ "doc-comment", "fhe-math", @@ -2578,7 +2562,7 @@ dependencies = [ [[package]] name = "fhe-math" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs#837be950a453ffce5bbf35823344f08a65edb0ce" +source = "git+https://github.com/gnosisguild/fhe.rs#7692b954ce887ee78f0b6baae36447ca1aa74708" dependencies = [ "ethnum", "fhe-traits", @@ -2600,7 +2584,7 @@ dependencies = [ [[package]] name = "fhe-traits" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs#837be950a453ffce5bbf35823344f08a65edb0ce" +source = "git+https://github.com/gnosisguild/fhe.rs#7692b954ce887ee78f0b6baae36447ca1aa74708" dependencies = [ "rand 0.8.5", ] @@ -2608,7 +2592,7 @@ dependencies = [ [[package]] name = "fhe-util" version = "0.1.0-beta.7" -source = "git+https://github.com/gnosisguild/fhe.rs#837be950a453ffce5bbf35823344f08a65edb0ce" +source = "git+https://github.com/gnosisguild/fhe.rs#7692b954ce887ee78f0b6baae36447ca1aa74708" dependencies = [ "itertools 0.12.1", "num-bigint-dig", @@ -2767,7 +2751,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -3057,9 +3041,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "1744436df46f0bde35af3eda22aeaba453aada65d8f1c171cd8a5f59030bd69f" dependencies = [ "atomic-waker", "bytes", @@ -3291,7 +3275,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -3443,7 +3427,7 @@ checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -3642,7 +3626,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -3769,9 +3753,9 @@ dependencies = [ [[package]] name = "num-bigint-dig" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c79c15c05d4bf82b6f5ef163104cc81a760d8e874d38ac50ab67c8877b647b" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" dependencies = [ "lazy_static", "libm", @@ -3867,7 +3851,7 @@ checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -3928,7 +3912,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -3984,7 +3968,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -4083,7 +4067,7 @@ dependencies = [ "pest_meta", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -4133,7 +4117,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -4210,7 +4194,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2 1.0.103", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -4263,7 +4247,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -4330,7 +4314,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.109", + "syn 2.0.110", "tempfile", ] @@ -4344,7 +4328,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -4595,7 +4579,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5036,7 +5020,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5101,7 +5085,7 @@ dependencies = [ "darling", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5296,7 +5280,7 @@ dependencies = [ "heck", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5318,9 +5302,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.109" +version = "2.0.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" +checksum = "a99801b5bd34ede4cf3fc688c5919368fea4e4814a4664359503e6015b280aea" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", @@ -5336,7 +5320,7 @@ dependencies = [ "paste", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5356,7 +5340,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5425,7 +5409,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5436,7 +5420,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5550,7 +5534,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5750,7 +5734,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -5992,7 +5976,7 @@ dependencies = [ "bumpalo", "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", "wasm-bindgen-shared", ] @@ -6131,7 +6115,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6142,7 +6126,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6446,7 +6430,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", "synstructure", ] @@ -6467,7 +6451,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6487,7 +6471,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", "synstructure", ] @@ -6508,7 +6492,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6541,7 +6525,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2 1.0.103", "quote 1.0.42", - "syn 2.0.109", + "syn 2.0.110", ] [[package]] @@ -6569,7 +6553,7 @@ dependencies = [ [[package]] name = "zkfhe-greco" version = "0.1.0" -source = "git+https://github.com/gnosisguild/zkfhe-generator#1bb8019b8d9944ebf2fd293ec15d6cabc4e37da0" +source = "git+https://github.com/gnosisguild/zkfhe-generator#7314bed079b91ea6432864f30b991e4ef724a5c5" dependencies = [ "anyhow", "bigint-poly", @@ -6592,7 +6576,7 @@ dependencies = [ [[package]] name = "zkfhe-shared" version = "0.1.0" -source = "git+https://github.com/gnosisguild/zkfhe-generator#1bb8019b8d9944ebf2fd293ec15d6cabc4e37da0" +source = "git+https://github.com/gnosisguild/zkfhe-generator#7314bed079b91ea6432864f30b991e4ef724a5c5" dependencies = [ "anyhow", "bigint-poly", diff --git a/examples/CRISP/Cargo.toml b/examples/CRISP/Cargo.toml index 7cc68bf774..0a18fdc8d1 100644 --- a/examples/CRISP/Cargo.toml +++ b/examples/CRISP/Cargo.toml @@ -29,6 +29,10 @@ actix-web = "=4.11.0" bincode = { version = "=1.3.3" } bytemuck = { version = "=1.23.1" } derivative = "=2.2.0" +e3-compute-provider = { path = "../../crates/compute-provider" } +e3-program-server = { path = "../../crates/program-server" } +e3-bfv-helpers = { path = "../../crates/bfv-helpers" } +e3-sdk = { path = "../../crates/sdk" } eyre = "=0.6.12" env_logger = "=0.11.8" hex = { version = "=0.4.3" } diff --git a/examples/CRISP/circuits/src/main.nr b/examples/CRISP/circuits/src/main.nr index 0d1e02a8f3..bbfde33206 100644 --- a/examples/CRISP/circuits/src/main.nr +++ b/examples/CRISP/circuits/src/main.nr @@ -33,7 +33,7 @@ fn main( u: Polynomial<2048>, e0: Polynomial<2048>, e1: Polynomial<2048>, - e1is: [Polynomial<2048>; 1], + e0is: [Polynomial<2048>; 1], k1: Polynomial<2048>, r1is: [Polynomial<4095>; 1], r2is: [Polynomial<2047>; 1], @@ -81,7 +81,7 @@ fn main( u, e0, e1, - e1is, + e0is, k1, r1is, r2is, diff --git a/examples/CRISP/crates/zk-inputs/src/serialization.rs b/examples/CRISP/crates/zk-inputs/src/serialization.rs index a596de917a..36bd747652 100644 --- a/examples/CRISP/crates/zk-inputs/src/serialization.rs +++ b/examples/CRISP/crates/zk-inputs/src/serialization.rs @@ -36,7 +36,7 @@ pub struct ZKInputs { u: serde_json::Value, e0: serde_json::Value, e1: serde_json::Value, - e1is: Vec, + e0is: Vec, k1: serde_json::Value, } @@ -215,8 +215,8 @@ pub fn construct_inputs( }) }) .collect(), - e1is: vectors_standard - .e1is + e0is: vectors_standard + .e0is .iter() .map(|v| { serde_json::json!({ @@ -316,7 +316,7 @@ mod tests { vec![BigInt::from(33), BigInt::from(34)], vec![BigInt::from(35), BigInt::from(36)], ], - e1is: vec![ + e0is: vec![ vec![BigInt::from(43), BigInt::from(44)], vec![BigInt::from(45), BigInt::from(46)], ], diff --git a/examples/CRISP/packages/crisp-sdk/src/types.ts b/examples/CRISP/packages/crisp-sdk/src/types.ts index d8f31238da..33a85d94e8 100644 --- a/examples/CRISP/packages/crisp-sdk/src/types.ts +++ b/examples/CRISP/packages/crisp-sdk/src/types.ts @@ -153,7 +153,7 @@ export interface CRISPCircuitInputs { u: Polynomial e0: Polynomial e1: Polynomial - e1is: Polynomial[] + e0is: Polynomial[] k1: Polynomial // ECDSA Section. public_key_x: string[] diff --git a/examples/CRISP/program/Cargo.toml b/examples/CRISP/program/Cargo.toml index c7f3c55a74..367c79bf9b 100644 --- a/examples/CRISP/program/Cargo.toml +++ b/examples/CRISP/program/Cargo.toml @@ -6,5 +6,5 @@ edition = { workspace = true } [dependencies] fhe = { workspace = true } fhe-traits = { workspace = true } -e3-compute-provider = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } -e3-bfv-helpers = { path = "../../../crates/bfv-helpers" } +e3-compute-provider = { workspace = true } +e3-bfv-helpers = { workspace = true } diff --git a/examples/CRISP/server/Cargo.toml b/examples/CRISP/server/Cargo.toml index 45e606b10f..1d19f3b457 100644 --- a/examples/CRISP/server/Cargo.toml +++ b/examples/CRISP/server/Cargo.toml @@ -42,8 +42,8 @@ num-bigint = "=0.4.6" lean-imt = "=0.1.2" # Local dependencies -e3-compute-provider = { path = "../../../crates/compute-provider" } -e3-sdk = { path = "../../../crates/sdk" } +e3-compute-provider.workspace = true +e3-sdk.workspace = true # CLI and user interaction dialoguer = { version = "=0.11.0", features = ["fuzzy-select"] } diff --git a/examples/CRISP/server/src/cli/commands.rs b/examples/CRISP/server/src/cli/commands.rs index a1767899f6..5b509d033f 100644 --- a/examples/CRISP/server/src/cli/commands.rs +++ b/examples/CRISP/server/src/cli/commands.rs @@ -5,6 +5,7 @@ // or FITNESS FOR A PARTICULAR PURPOSE. use dialoguer::{theme::ColorfulTheme, FuzzySelect, Input}; +use e3_sdk::bfv_helpers::BfvParams; use log::info; use num_bigint::BigUint; use reqwest::Client; @@ -15,9 +16,7 @@ use super::CLI_DB; use alloy::primitives::{Address, Bytes, U256}; use alloy::providers::{Provider, ProviderBuilder}; use crisp::config::CONFIG; -use e3_sdk::bfv_helpers::{ - build_bfv_params_from_set_arc, encode_bfv_params, params::SET_2048_1032193_1, -}; +use e3_sdk::bfv_helpers::{build_bfv_params_from_set_arc, encode_bfv_params}; use e3_sdk::evm_helpers::contracts::{EnclaveContract, EnclaveRead, EnclaveWrite, E3}; use fhe::bfv::{BfvParameters, Ciphertext, Encoding, Plaintext, PublicKey, SecretKey}; use fhe_traits::{ @@ -329,7 +328,7 @@ pub async fn decrypt_and_publish_result( } fn generate_bfv_parameters() -> Arc { - build_bfv_params_from_set_arc(SET_2048_1032193_1) + build_bfv_params_from_set_arc(BfvParams::InsecureSet2048_1032193_1.into()) } fn generate_keys(params: &Arc) -> (SecretKey, PublicKey) { diff --git a/examples/CRISP/server/src/server/routes/rounds.rs b/examples/CRISP/server/src/server/routes/rounds.rs index 83a7746940..9bea7d8d1f 100644 --- a/examples/CRISP/server/src/server/routes/rounds.rs +++ b/examples/CRISP/server/src/server/routes/rounds.rs @@ -13,9 +13,7 @@ use crate::server::models::{ use actix_web::{web, HttpResponse, Responder}; use alloy::primitives::{Address, Bytes, U256}; use chrono::Utc; -use e3_sdk::bfv_helpers::{ - build_bfv_params_from_set_arc, encode_bfv_params, params::SET_2048_1032193_1, -}; +use e3_sdk::bfv_helpers::{build_bfv_params_from_set_arc, encode_bfv_params, BfvParams}; use e3_sdk::evm_helpers::contracts::{EnclaveContract, EnclaveRead, EnclaveWrite}; use log::{error, info}; use num_bigint::BigUint; @@ -181,7 +179,9 @@ pub async fn initialize_crisp_round( } info!("Generating parameters..."); - let params = encode_bfv_params(&build_bfv_params_from_set_arc(SET_2048_1032193_1)); + let params = encode_bfv_params(&build_bfv_params_from_set_arc( + BfvParams::InsecureSet2048_1032193_1.into(), + )); let token_address: Address = token_address.parse()?; let balance_threshold = BigUint::parse_bytes(balance_threshold.as_bytes(), 10) diff --git a/packages/enclave-contracts/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json b/packages/enclave-contracts/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json index 0340498dd2..fad57ed6bf 100644 --- a/packages/enclave-contracts/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json +++ b/packages/enclave-contracts/artifacts/contracts/interfaces/IBondingRegistry.sol/IBondingRegistry.json @@ -851,5 +851,5 @@ "deployedLinkReferences": {}, "immutableReferences": {}, "inputSourceName": "project/contracts/interfaces/IBondingRegistry.sol", - "buildInfoId": "solc-0_8_28-c47ee779175143051b923f87373a821faabf4e01" + "buildInfoId": "solc-0_8_28-47e0db0804e3f0de0bf2198d3ad75eb1054de690" } \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json b/packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json index 99f471a58b..80bb8bea50 100644 --- a/packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json +++ b/packages/enclave-contracts/artifacts/contracts/interfaces/ICiphernodeRegistry.sol/ICiphernodeRegistry.json @@ -535,5 +535,5 @@ "deployedLinkReferences": {}, "immutableReferences": {}, "inputSourceName": "project/contracts/interfaces/ICiphernodeRegistry.sol", - "buildInfoId": "solc-0_8_28-c47ee779175143051b923f87373a821faabf4e01" + "buildInfoId": "solc-0_8_28-47e0db0804e3f0de0bf2198d3ad75eb1054de690" } \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json b/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json index f7286213f5..356cd34911 100644 --- a/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json +++ b/packages/enclave-contracts/artifacts/contracts/interfaces/IEnclave.sol/IEnclave.json @@ -977,5 +977,5 @@ "deployedLinkReferences": {}, "immutableReferences": {}, "inputSourceName": "project/contracts/interfaces/IEnclave.sol", - "buildInfoId": "solc-0_8_28-c47ee779175143051b923f87373a821faabf4e01" + "buildInfoId": "solc-0_8_28-47e0db0804e3f0de0bf2198d3ad75eb1054de690" } \ No newline at end of file diff --git a/packages/enclave-contracts/package.json b/packages/enclave-contracts/package.json index bb1dd69102..605933bf97 100644 --- a/packages/enclave-contracts/package.json +++ b/packages/enclave-contracts/package.json @@ -158,7 +158,7 @@ "ciphernode:siblings": "hardhat ciphernode:siblings", "committee:new": "hardhat committee:new", "lint": "pnpm lint:sol && pnpm lint:ts && pnpm prettier:check", - "lint:sol": "solhint --max-warnings 10 \"contracts/**/*.sol\"", + "lint:sol": "solhint --disc --max-warnings 10 \"contracts/**/*.sol\"", "lint:ts": "eslint --ignore-path ./.eslintignore --ext .js,.ts .", "prettier:check": "prettier --check \"**/*.{js,json,md,sol,ts,yml}\"", "prettier:write": "prettier --write \"**/*.{js,json,md,sol,ts,yml}\"", diff --git a/packages/enclave-sdk/src/enclave-sdk.ts b/packages/enclave-sdk/src/enclave-sdk.ts index 98f36bebf5..57becbf28e 100644 --- a/packages/enclave-sdk/src/enclave-sdk.ts +++ b/packages/enclave-sdk/src/enclave-sdk.ts @@ -24,7 +24,7 @@ import { } from "@enclave-e3/contracts/types"; import { ContractClient } from "./contract-client"; import { EventListener } from "./event-listener"; -import { FheProtocol, EnclaveEventType, BfvProtocolParams } from "./types"; +import { FheProtocol, EnclaveEventType } from "./types"; import { SDKError, isValidAddress } from "./utils"; import type { @@ -35,12 +35,14 @@ import type { ProtocolParams, VerifiableEncryptionResult, EncryptedValueAndPublicInputs, + ProtocolParamsName, } from "./types"; import { bfv_encrypt_number, bfv_encrypt_vector, bfv_verifiable_encrypt_number, bfv_verifiable_encrypt_vector, + get_bfv_params, } from "@enclave-e3/wasm"; import { generateProof } from "./greco"; import { CompiledCircuit } from "@noir-lang/noir_js"; @@ -57,8 +59,9 @@ export class EnclaveSDK { private contractClient: ContractClient; private initialized = false; private protocol: FheProtocol; - private protocolParams: ProtocolParams; + private protocolParams?: ProtocolParams; + // TODO: use zod for config validation constructor(private config: SDKConfig) { if (!config.publicClient) { throw new SDKError("Public client is required", "MISSING_PUBLIC_CLIENT"); @@ -93,17 +96,6 @@ export class EnclaveSDK { if (config.protocolParams) { this.protocolParams = config.protocolParams; - } else { - switch (this.protocol) { - case FheProtocol.BFV: - this.protocolParams = BfvProtocolParams.BFV_NORMAL; - break; - case FheProtocol.TRBFV: - this.protocolParams = BfvProtocolParams.BFV_THRESHOLD; - break; - default: - throw new Error("Protocol not supported"); - } } } @@ -125,6 +117,33 @@ export class EnclaveSDK { } } + public async getBfvParamsSet( + name: ProtocolParamsName, + ): Promise { + await initializeWasm(); + let params = get_bfv_params(name as string); + return { + degree: Number(params.degree), // degree is returned as a bigint from wasm + plaintextModulus: params.plaintext_modulus as bigint, + moduli: params.moduli as bigint[], + error1Variance: params.error1_variance, + }; + } + + public async getProtocolParams(): Promise { + await initializeWasm(); + if (this.protocolParams) { + return this.protocolParams; + } + + switch (this.protocol) { + case FheProtocol.BFV: + return await this.getBfvParamsSet("INSECURE_SET_2048_1032193_1"); + case FheProtocol.TRBFV: + return await this.getBfvParamsSet("INSECURE_SET_512_10_1"); + } + } + /** * Encrypt a number using the configured protocol * @param data - The number to encrypt @@ -136,14 +155,15 @@ export class EnclaveSDK { publicKey: Uint8Array, ): Promise { await initializeWasm(); + const protocolParams = await this.getProtocolParams(); switch (this.protocol) { case FheProtocol.BFV: return bfv_encrypt_number( data, publicKey, - this.protocolParams.degree, - this.protocolParams.plaintextModulus, - BigUint64Array.from(this.protocolParams.moduli), + protocolParams.degree, + protocolParams.plaintextModulus, + BigUint64Array.from(protocolParams.moduli), ); default: throw new Error("Protocol not supported"); @@ -161,14 +181,15 @@ export class EnclaveSDK { publicKey: Uint8Array, ): Promise { await initializeWasm(); + const protocolParams = await this.getProtocolParams(); switch (this.protocol) { case FheProtocol.BFV: return bfv_encrypt_vector( data, publicKey, - this.protocolParams.degree, - this.protocolParams.plaintextModulus, - BigUint64Array.from(this.protocolParams.moduli), + protocolParams.degree, + protocolParams.plaintextModulus, + BigUint64Array.from(protocolParams.moduli), ); default: throw new Error("Protocol not supported"); @@ -187,14 +208,15 @@ export class EnclaveSDK { publicKey: Uint8Array, ): Promise { await initializeWasm(); + const protocolParams = await this.getProtocolParams(); switch (this.protocol) { case FheProtocol.BFV: const [encryptedData, circuitInputs] = bfv_verifiable_encrypt_number( data, publicKey, - this.protocolParams.degree, - this.protocolParams.plaintextModulus, - BigUint64Array.from(this.protocolParams.moduli), + protocolParams.degree, + protocolParams.plaintextModulus, + BigUint64Array.from(protocolParams.moduli), ); const publicInputs = JSON.parse(circuitInputs); @@ -240,14 +262,15 @@ export class EnclaveSDK { publicKey: Uint8Array, ): Promise { await initializeWasm(); + const protocolParams = await this.getProtocolParams(); switch (this.protocol) { case FheProtocol.BFV: const [encryptedData, circuitInputs] = bfv_verifiable_encrypt_vector( data, publicKey, - this.protocolParams.degree, - this.protocolParams.plaintextModulus, - BigUint64Array.from(this.protocolParams.moduli), + protocolParams.degree, + protocolParams.plaintextModulus, + BigUint64Array.from(protocolParams.moduli), ); const publicInputs = JSON.parse(circuitInputs); @@ -587,9 +610,9 @@ export class EnclaveSDK { options.rpcUrl.startsWith("ws://") || options.rpcUrl.startsWith("wss://"); const transport = isWebSocket ? webSocket(options.rpcUrl, { - keepAlive: { interval: 30_000 }, - reconnect: { attempts: 5, delay: 2_000 }, - }) + keepAlive: { interval: 30_000 }, + reconnect: { attempts: 5, delay: 2_000 }, + }) : http(options.rpcUrl); const publicClient = createPublicClient({ chain, diff --git a/packages/enclave-sdk/src/types.ts b/packages/enclave-sdk/src/types.ts index a07901a4f7..e3d1195a3d 100644 --- a/packages/enclave-sdk/src/types.ts +++ b/packages/enclave-sdk/src/types.ts @@ -242,10 +242,10 @@ export interface RegistryEventData { export interface EnclaveEvent { type: T; data: T extends EnclaveEventType - ? EnclaveEventData[T] - : T extends RegistryEventType - ? RegistryEventData[T] - : unknown; + ? EnclaveEventData[T] + : T extends RegistryEventType + ? RegistryEventData[T] + : unknown; log: Log; timestamp: Date; blockNumber: bigint; @@ -253,7 +253,7 @@ export interface EnclaveEvent { } export type EventCallback = ( - event: EnclaveEvent + event: EnclaveEvent, ) => void | Promise; export interface EventFilter { @@ -317,8 +317,19 @@ export interface ProtocolParams { * The moduli */ moduli: bigint[]; + /** + * error1 + */ + error1Variance: string | undefined; } +export type ProtocolParamsName = + | "INSECURE_SET_2048_1032193_1" + | "INSECURE_SET_512_10_1" + | "INSECURE_SET_512_0XFFFFEE001_1" + | "SET_8192_1000_4" + | "SET_8192_144115188075855872_2"; + /** * Parameters for the BFV protocol */ @@ -333,6 +344,7 @@ export const BfvProtocolParams = { degree: 2048, plaintextModulus: 1032193n, moduli: [0x3fffffff000001n], + error1Variance: "10", } as const satisfies ProtocolParams, /** @@ -350,6 +362,7 @@ export const BfvProtocolParams = { 0x0080000002120001n, 0x0080000001f60001n, ], + error1Variance: "10", } as const satisfies ProtocolParams, }; diff --git a/packages/enclave-sdk/src/utils.ts b/packages/enclave-sdk/src/utils.ts index ead9dce144..5ba45fcdbe 100644 --- a/packages/enclave-sdk/src/utils.ts +++ b/packages/enclave-sdk/src/utils.ts @@ -61,12 +61,12 @@ export function getCurrentTimestamp(): number { return Math.floor(Date.now() / 1000); } -// BFV parameter set matching the Rust SET_2048_1032193_1 configuration -export const SET_2048_1032193_1 = { +// BFV parameter set matching the Rust INSECURE_SET_2048_1032193_1 configuration +export const INSECURE_SET_2048_1032193_1 = { degree: 2048, plaintext_modulus: 1032193, moduli: [0x3fffffff000001n], // BigInt for the modulus - error2_variance: "10", + error1_variance: "10", } as const; // BFV parameter set matching the Rust SET_8192_1000_4 configuration @@ -79,12 +79,12 @@ export const SET_8192_1000_4 = { 0x0080000002120001n, 0x0080000001f60001n, ], - error2_variance: + error1_variance: "52309181128222339698631578526730685514457152477762943514050560000", }; // Set default parameter set -export const BFV_PARAMS_SET = SET_2048_1032193_1; +export const BFV_PARAMS_SET = INSECURE_SET_2048_1032193_1; // Compute provider parameters structure export interface ComputeProviderParams { @@ -117,7 +117,7 @@ export function encodeBfvParams( degree: number = BFV_PARAMS_SET.degree, plaintext_modulus: number = BFV_PARAMS_SET.plaintext_modulus, moduli: readonly bigint[] = BFV_PARAMS_SET.moduli, - error2_variance: string = BFV_PARAMS_SET.error2_variance, + error1_variance: string = BFV_PARAMS_SET.error1_variance, ): `0x${string}` { return encodeAbiParameters( [ @@ -128,7 +128,7 @@ export function encodeBfvParams( { name: "degree", type: "uint256" }, { name: "plaintext_modulus", type: "uint256" }, { name: "moduli", type: "uint256[]" }, - { name: "error2_variance", type: "string" }, + { name: "error1_variance", type: "string" }, ], }, ], @@ -137,7 +137,7 @@ export function encodeBfvParams( degree: BigInt(degree), plaintext_modulus: BigInt(plaintext_modulus), moduli: [...moduli], - error2_variance, + error1_variance, }, ], ); diff --git a/packages/enclave-sdk/tests/sdk.test.ts b/packages/enclave-sdk/tests/sdk.test.ts index 56cca7d7d3..31fc1baff5 100644 --- a/packages/enclave-sdk/tests/sdk.test.ts +++ b/packages/enclave-sdk/tests/sdk.test.ts @@ -32,7 +32,7 @@ describe("encryptNumber", () => { it("should encrypt a number without crashing in a node environent", async () => { const buffer = await fs.readFile( - path.resolve(__dirname, "./fixtures/pubkey.bin") + path.resolve(__dirname, "./fixtures/pubkey.bin"), ); const value = await sdk.encryptNumber(10n, Uint8Array.from(buffer)); expect(value).to.be.an.instanceof(Uint8Array); @@ -41,13 +41,13 @@ describe("encryptNumber", () => { }); it("should encrypt a number and generate a proof without crashing in a node environent", async () => { const buffer = await fs.readFile( - path.resolve(__dirname, "./fixtures/pubkey.bin") + path.resolve(__dirname, "./fixtures/pubkey.bin"), ); const value = await sdk.encryptNumberAndGenProof( 1n, Uint8Array.from(buffer), - demoCircuit as unknown as CompiledCircuit + demoCircuit as unknown as CompiledCircuit, ); expect(value).to.be.an.instanceof(Object); @@ -57,11 +57,11 @@ describe("encryptNumber", () => { it("should encrypt a vecor of numbers without crashing in a node environent", async () => { const buffer = await fs.readFile( - path.resolve(__dirname, "./fixtures/pubkey.bin") + path.resolve(__dirname, "./fixtures/pubkey.bin"), ); const value = await sdk.encryptVector( new BigUint64Array([1n, 2n]), - Uint8Array.from(buffer) + Uint8Array.from(buffer), ); expect(value).to.be.an.instanceof(Uint8Array); expect(value.length).to.equal(27_674); @@ -69,13 +69,13 @@ describe("encryptNumber", () => { it("should encrypt a vector and generate a proof without crashing in a node environent", async () => { const buffer = await fs.readFile( - path.resolve(__dirname, "./fixtures/pubkey.bin") + path.resolve(__dirname, "./fixtures/pubkey.bin"), ); const value = await sdk.encryptVectorAndGenProof( new BigUint64Array([1n, 2n]), Uint8Array.from(buffer), - demoCircuit as unknown as CompiledCircuit + demoCircuit as unknown as CompiledCircuit, ); expect(value).to.be.an.instanceof(Object); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dd410e943e..2f4f19f131 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -663,7 +663,7 @@ importers: version: 5.3.0 '@risc0/ethereum': specifier: file:lib/risc0-ethereum - version: file:templates/default/lib/risc0-ethereum + version: risc0-ethereum@file:templates/default/lib/risc0-ethereum '@types/chai': specifier: ^4.2.0 version: 4.3.20 @@ -3005,9 +3005,6 @@ packages: '@reown/appkit@1.7.8': resolution: {integrity: sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA==} - '@risc0/ethereum@file:templates/default/lib/risc0-ethereum': - resolution: {directory: templates/default/lib/risc0-ethereum, type: directory} - '@rolldown/pluginutils@1.0.0-beta.27': resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} @@ -8543,6 +8540,9 @@ packages: resolution: {integrity: sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==} engines: {node: '>= 0.8'} + risc0-ethereum@file:templates/default/lib/risc0-ethereum: + resolution: {directory: templates/default/lib/risc0-ethereum, type: directory} + robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} @@ -12964,8 +12964,6 @@ snapshots: - utf-8-validate - zod - '@risc0/ethereum@file:templates/default/lib/risc0-ethereum': {} - '@rolldown/pluginutils@1.0.0-beta.27': {} '@rollup/plugin-inject@5.0.5(rollup@4.52.5)': @@ -20507,6 +20505,8 @@ snapshots: hash-base: 3.1.2 inherits: 2.0.4 + risc0-ethereum@file:templates/default/lib/risc0-ethereum: {} + robust-predicates@3.0.2: {} rollup@4.52.5: diff --git a/templates/default/Cargo.lock b/templates/default/Cargo.lock index 61c74595fd..8d8e0e7f04 100644 --- a/templates/default/Cargo.lock +++ b/templates/default/Cargo.lock @@ -244,9 +244,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-dyn-abi" -version = "1.3.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f56873f3cac7a2c63d8e98a4314b8311aa96adb1a0f82ae923eb2119809d2c" +checksum = "d9e8a436f0aad7df8bb47f144095fba61202265d9f5f09a70b0e3227881a668e" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -260,9 +260,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "1.3.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125a1c373261b252e53e04d6e92c37d881833afc1315fceab53fd46045695640" +checksum = "459f98c6843f208856f338bfb25e65325467f7aff35dfeb0484d0a76e059134b" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -272,9 +272,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.3.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9485c56de23438127a731a6b4c87803d49faf1a7068dcd1d8768aca3a9edb9" +checksum = "3cfebde8c581a5d37b678d0a48a32decb51efd7a63a08ce2517ddec26db705c8" dependencies = [ "alloy-rlp", "bytes", @@ -367,9 +367,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "1.3.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5383d34ea00079e6dd89c652bcbdb764db160cef84e6250926961a0b2295d04" +checksum = "a285b46e3e0c177887028278f04cc8262b76fd3b8e0e20e93cea0a58c35f5ac5" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -1100,7 +1100,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2800,7 +2800,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2938,18 +2938,28 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -3204,7 +3214,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/templates/default/Cargo.toml b/templates/default/Cargo.toml index 999922ab3b..f06f5bd37e 100644 --- a/templates/default/Cargo.toml +++ b/templates/default/Cargo.toml @@ -6,7 +6,12 @@ members = [ ] [workspace.dependencies] +e3-user-program = { path = "./program" } fhe = { package = "fhe", git = "https://github.com/gnosisguild/fhe.rs" } fhe-traits = { git = "https://github.com/gnosisguild/fhe.rs" } +# TODO: point the following to the monorepo paths (eg ../../crates/**) and overwrite them during enclave init +e3-program-server = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } +e3-bfv-helpers = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } +e3-compute-provider = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } rand = "0.8.5" anyhow = "1.0.86" diff --git a/templates/default/deployed_contracts.json b/templates/default/deployed_contracts.json index 67404b228a..81a3fe1c00 100644 --- a/templates/default/deployed_contracts.json +++ b/templates/default/deployed_contracts.json @@ -67,67 +67,70 @@ "minTicketBalance": "1", "exitDelay": "604800" }, - "blockNumber": 9, - "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" + "blockNumber": 8, + "address": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", + "implementationAddress": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" }, "CiphernodeRegistryOwnable": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "enclaveAddress": "0x0000000000000000000000000000000000000001", - "submissionWindow": "3" + "submissionWindow": "10" }, - "blockNumber": 10, - "address": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" + "blockNumber": 11, + "address": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", + "implementationAddress": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" }, "Enclave": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "registry": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", - "bondingRegistry": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + "registry": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", + "bondingRegistry": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", "feeToken": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", "maxDuration": "2592000", "params": [ "0x000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000fc00100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000003fffffff000001" ] }, - "blockNumber": 11, - "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" + "blockNumber": 13, + "address": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", + "implementationAddress": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" }, "MockComputeProvider": { - "blockNumber": 20, - "address": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed" + "blockNumber": 23, + "address": "0x59b670e9fA9D0A427751Af201D676719a970857b" }, "MockDecryptionVerifier": { - "blockNumber": 21, - "address": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c" + "blockNumber": 24, + "address": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1" }, "MockInputValidator": { - "blockNumber": 22, - "address": "0xc6e7DF5E7b4f2A278906862b61205850344D4e7d" + "blockNumber": 25, + "address": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44" }, "MockE3Program": { "constructorArgs": { - "mockInputValidator": "0xc6e7DF5E7b4f2A278906862b61205850344D4e7d" + "mockInputValidator": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44" }, - "blockNumber": 23, - "address": "0x59b670e9fA9D0A427751Af201D676719a970857b" + "blockNumber": 26, + "address": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f" }, "MockRISC0Verifier": { - "address": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f" + "address": "0x09635F643e140090A9A8Dcd712eD6285858ceBef" }, "ImageID": { - "address": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319" + "address": "0xc5a5C42992dECbae36851359345FE25997F5C42d" }, "InputValidator": { - "address": "0x7a2088a1bFc9d81c55368AE168C2C02570cB814F" + "address": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933" }, "MyProgram": { - "address": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", + "address": "0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E", "constructorArgs": { - "enclave": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", - "verifier": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f", + "enclave": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", + "verifier": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", "programId": "0xaf928ebf39fec4696c3f41f473a1a9473b67d723c6373149c6ab99ba4c1a76ef", - "inputValidator": "0x7a2088a1bFc9d81c55368AE168C2C02570cB814F" + "inputValidator": "0x67d269191c92Caf3cD7723F116c85e6E9bf55933" } } } diff --git a/templates/default/program/Cargo.toml b/templates/default/program/Cargo.toml index 04acb15b61..48522176b6 100644 --- a/templates/default/program/Cargo.toml +++ b/templates/default/program/Cargo.toml @@ -6,8 +6,8 @@ edition = "2024" [dependencies] fhe = { workspace = true } fhe-traits = { workspace = true } -e3-compute-provider = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } -e3-bfv-helpers = { git = "https://github.com/gnosisguild/enclave", rev = "2ca0aa5f47dd962add5d1d0f74900d9bceb957e5" } +e3-compute-provider = { workspace = true } +e3-bfv-helpers = { workspace = true } [dev-dependencies] rand = { workspace = true } diff --git a/templates/default/program/src/lib.rs b/templates/default/program/src/lib.rs index 58a2cdbd1c..ddc2f3b842 100644 --- a/templates/default/program/src/lib.rs +++ b/templates/default/program/src/lib.rs @@ -26,7 +26,9 @@ pub fn fhe_processor(fhe_inputs: &FHEInputs) -> Vec { mod tests { use super::*; use anyhow::Result; - use e3_bfv_helpers::{build_bfv_params_arc, encode_bfv_params, params::SET_2048_1032193_1}; + use e3_bfv_helpers::{ + build_bfv_params_arc, encode_bfv_params, params::INSECURE_SET_2048_1032193_1, + }; use fhe::bfv::{Encoding, Plaintext, PublicKey, SecretKey}; use fhe_traits::FheEncoder; use fhe_traits::FheEncrypter; @@ -37,7 +39,7 @@ mod tests { fn test() -> Result<()> { let mut rng = thread_rng(); - let (degree, plaintext, moduli) = SET_2048_1032193_1; + let (degree, plaintext, moduli) = INSECURE_SET_2048_1032193_1; let params = build_bfv_params_arc(degree, plaintext, &moduli); let secret_key = SecretKey::random(¶ms, &mut OsRng); diff --git a/templates/default/scripts/dev_program.sh b/templates/default/scripts/dev_program.sh index 9fee0a6903..21d751bec9 100755 --- a/templates/default/scripts/dev_program.sh +++ b/templates/default/scripts/dev_program.sh @@ -3,6 +3,4 @@ set -euo pipefail echo "enclave rev = $(enclave rev)" echo "Waiting on ciphernodes to be ready..." -pnpm wait-on file:/tmp/enclave_ciphernodes_ready -echo "Ciphernodes are ready!" -enclave program start +pnpm wait-on file:/tmp/enclave_ciphernodes_ready && enclave program start diff --git a/templates/default/tests/integration.spec.ts b/templates/default/tests/integration.spec.ts index 5524302378..9149d73a3d 100644 --- a/templates/default/tests/integration.spec.ts +++ b/templates/default/tests/integration.spec.ts @@ -218,15 +218,16 @@ describe("Integration", () => { }); state = store.get(0n); - assert(state); + assert(state, "store should have E3State but it was falsey"); assert.strictEqual(state.e3Id, 0n); assert.strictEqual(state.type, "requested"); + console.log("E3 Sucessfully Requested!"); // Ciphernodes will publish a public key within the COMMITTEE_PUBLISHED event event = await waitForEvent(RegistryEventType.COMMITTEE_PUBLISHED); state = store.get(0n); - assert(state); + assert(state, "store should have E3State but it was falsey"); assert.strictEqual(state.type, "committee_published"); assert.strictEqual(state.publicKey, event.data.publicKey); @@ -238,13 +239,16 @@ describe("Integration", () => { }); state = store.get(0n); - assert(state); + assert(state, "store should have activated state but it was falsey"); assert.strictEqual(state.type, "activated"); // INPUT PUBLISHING phase + console.log("PUBLISHING PRIVATE INPUT"); const num1 = 12n; const num2 = 21n; const publicKeyBytes = hexToBytes(state.publicKey); + + console.log("ENCRYPTING NUMBERS"); const enc1 = await sdk.encryptNumber(num1, publicKeyBytes); const enc2 = await sdk.encryptNumber(num2, publicKeyBytes); @@ -272,5 +276,6 @@ describe("Integration", () => { const parsed = hexToUint8Array(plaintextEvent.data.plaintextOutput); expect(BigInt(parsed[0])).toBe(num1 + num2); + console.log("Answer was correct"); }, 9999999); }); diff --git a/templates/default/vitest.config.ts b/templates/default/vitest.config.ts new file mode 100644 index 0000000000..4e2d5be54a --- /dev/null +++ b/templates/default/vitest.config.ts @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. + +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + pool: "forks", + poolOptions: { + forks: { + singleFork: true, + }, + }, + testTimeout: 120_000, + }, +});