diff --git a/Cargo.lock b/Cargo.lock index 86096626..850ae06f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,9 +13,21 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "ahash" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] [[package]] name = "aho-corasick" @@ -26,6 +38,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -49,9 +67,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" dependencies = [ "anstyle", "anstyle-parse", @@ -64,36 +82,36 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" dependencies = [ "anstyle", - "once_cell", + "once_cell_polyfill", "windows-sys 0.59.0", ] @@ -112,14 +130,181 @@ dependencies = [ "tynm", ] +[[package]] +name = "ark-crypto-primitives" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0c292754729c8a190e50414fd1a37093c786c709899f29c9f7daccecfa855e" +dependencies = [ + "ahash", + "ark-crypto-primitives-macros", + "ark-ec", + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-snark", + "ark-std", + "blake2", + "derivative", + "digest", + "fnv", + "hashbrown 0.14.5", + "merlin", + "rayon", + "sha2", +] + +[[package]] +name = "ark-crypto-primitives-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "educe", + "fnv", + "hashbrown 0.15.4", + "itertools 0.13.0", + "num-bigint", + "num-integer", + "num-traits", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "arrayvec", + "digest", + "educe", + "itertools 0.13.0", + "num-bigint", + "num-traits", + "paste", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.103", +] + +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff", + "ark-serialize", + "ark-std", + "educe", + "fnv", + "hashbrown 0.15.4", + "rayon", +] + +[[package]] +name = "ark-relations" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec46ddc93e7af44bcab5230937635b06fb5744464dd6a7e7b083e80ebd274384" +dependencies = [ + "ark-ff", + "ark-std", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "arrayvec", + "digest", + "num-bigint", + "rayon", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "ark-snark" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d368e2848c2d4c129ce7679a7d0d2d612b6a274d3ea6a13bad4445d61b381b88" +dependencies = [ + "ark-ff", + "ark-relations", + "ark-serialize", + "ark-std", +] + [[package]] name = "ark-std" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" dependencies = [ "num-traits", "rand", + "rayon", ] [[package]] @@ -154,9 +339,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -164,7 +349,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -222,15 +407,15 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.100", + "syn 2.0.103", "which", ] [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bitvec" @@ -264,6 +449,19 @@ dependencies = [ "constant_time_eq", ] +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -285,9 +483,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" + +[[package]] +name = "bytemuck" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" [[package]] name = "byteorder" @@ -309,9 +513,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.19" +version = "1.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" +checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" dependencies = [ "shlex", ] @@ -327,15 +531,15 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", @@ -388,7 +592,7 @@ dependencies = [ "poly_commit", "rand", "serdes", - "thiserror", + "thiserror 1.0.69", "transcript", ] @@ -405,9 +609,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.37" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" +checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" dependencies = [ "clap_builder", "clap_derive", @@ -415,9 +619,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.37" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" +checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" dependencies = [ "anstream", "anstyle", @@ -427,27 +631,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.32" +version = "4.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "colored" @@ -473,7 +677,7 @@ dependencies = [ "poly_commit", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", "transcript", ] @@ -582,7 +786,7 @@ dependencies = [ "rand", "serdes", "sumcheck", - "thiserror", + "thiserror 1.0.69", "transcript", ] @@ -644,7 +848,19 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", +] + +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.103", ] [[package]] @@ -662,6 +878,26 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "enum-ordinalize" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" +dependencies = [ + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + [[package]] name = "env_filter" version = "0.1.3" @@ -693,9 +929,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", "windows-sys 0.59.0", @@ -703,9 +939,9 @@ dependencies = [ [[package]] name = "ethnum" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0939f82868b77ef93ce3c3c3daf2b3c526b456741da5a1a4559e590965b6026b" +checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" [[package]] name = "ff" @@ -816,7 +1052,7 @@ dependencies = [ "rand", "raw-cpuid", "serdes", - "thiserror", + "thiserror 1.0.69", "tynm", ] @@ -868,7 +1104,7 @@ dependencies = [ "serdes", "sha2", "sumcheck", - "thiserror", + "thiserror 1.0.69", "transcript", "utils", ] @@ -889,7 +1125,7 @@ dependencies = [ "polynomials", "rand", "serdes", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -914,11 +1150,13 @@ name = "goldilocks" version = "0.1.0" dependencies = [ "arith", + "ark-ff", "ark-std", "criterion", "ethnum", "rand", "serdes", + "whir", ] [[package]] @@ -987,9 +1225,21 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +dependencies = [ + "allocator-api2", +] [[package]] name = "headers" @@ -1023,9 +1273,15 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.5.0" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "home" @@ -1131,21 +1387,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -1154,31 +1411,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -1186,67 +1423,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - [[package]] name = "idna" version = "1.0.3" @@ -1260,9 +1484,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -1275,7 +1499,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.4", ] [[package]] @@ -1322,6 +1546,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.15" @@ -1330,9 +1563,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a064218214dc6a10fbae5ec5fa888d80c45d611aba169222fc272072bf7aef6" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" dependencies = [ "jiff-static", "log", @@ -1343,13 +1576,13 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "199b7932d97e325aff3a7030e141eafe7f2c6268e1d1b24859b753a627f45254" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] @@ -1362,6 +1595,15 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -1379,9 +1621,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.172" +version = "0.2.173" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb" [[package]] name = "libffi" @@ -1404,12 +1646,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets", + "windows-targets 0.53.2", ] [[package]] @@ -1420,15 +1662,15 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -1442,9 +1684,21 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core", + "zeroize", +] [[package]] name = "mersenne31" @@ -1461,7 +1715,7 @@ dependencies = [ "rand", "raw-cpuid", "serdes", - "thiserror", + "thiserror 1.0.69", "tynm", ] @@ -1489,22 +1743,22 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "wasi", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1519,7 +1773,7 @@ dependencies = [ "mpi-sys", "once_cell", "smallvec", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1604,6 +1858,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + [[package]] name = "oorandom" version = "11.1.5" @@ -1621,9 +1881,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -1631,15 +1891,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -1686,7 +1946,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] @@ -1756,13 +2016,16 @@ dependencies = [ "rand", "rayon", "serdes", + "spongefish", + "spongefish-pow", "sumcheck", - "thiserror", + "thiserror 1.0.69", "transcript", "transpose", "tree", "tynm", "utils", + "whir", ] [[package]] @@ -1780,9 +2043,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "portable-atomic-util" @@ -1793,6 +2056,15 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -1804,12 +2076,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.32" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +checksum = "6837b9e10d61f45f987d50808f83d1ee3d206c66acf650c3e4ae2e1f6ddedf55" dependencies = [ "proc-macro2", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] @@ -1897,9 +2169,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" +checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" dependencies = [ "bitflags", ] @@ -1935,9 +2207,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" [[package]] name = "rustc-hash" @@ -1960,9 +2232,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] name = "ryu" @@ -2008,7 +2280,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] @@ -2043,7 +2315,8 @@ dependencies = [ "halo2curves", "rand", "serdes_derive", - "thiserror", + "thiserror 1.0.69", + "whir", ] [[package]] @@ -2052,7 +2325,7 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] @@ -2068,15 +2341,25 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", "digest", ] +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest", + "keccak", +] + [[package]] name = "shell-words" version = "1.1.0" @@ -2109,15 +2392,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2129,6 +2412,34 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spongefish" +version = "0.2.0" +source = "git+https://github.com/arkworks-rs/spongefish#bf02b09d4c2de0cb5a4ca233c95b1ef812694a50" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "digest", + "hex", + "keccak", + "rand", + "zeroize", +] + +[[package]] +name = "spongefish-pow" +version = "0.1.0" +source = "git+https://github.com/arkworks-rs/spongefish#bf02b09d4c2de0cb5a4ca233c95b1ef812694a50" +dependencies = [ + "blake3", + "bytemuck", + "keccak", + "rand", + "rayon", + "spongefish", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -2190,9 +2501,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.100" +version = "2.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" dependencies = [ "proc-macro2", "quote", @@ -2201,13 +2512,13 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] @@ -2222,7 +2533,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", ] [[package]] @@ -2233,7 +2553,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", ] [[package]] @@ -2247,9 +2578,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -2267,9 +2598,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.44.2" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", @@ -2291,7 +2622,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] @@ -2308,9 +2639,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.14" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" dependencies = [ "bytes", "futures-core", @@ -2338,11 +2669,21 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", ] [[package]] @@ -2402,7 +2743,7 @@ dependencies = [ "log", "rand", "sha1", - "thiserror", + "thiserror 1.0.69", "url", "utf-8", ] @@ -2461,12 +2802,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -2486,6 +2821,12 @@ dependencies = [ "colored", ] +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "version_check" version = "0.9.5" @@ -2542,9 +2883,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasm-bindgen" @@ -2568,7 +2909,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", "wasm-bindgen-shared", ] @@ -2590,7 +2931,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2626,6 +2967,30 @@ dependencies = [ "rustix", ] +[[package]] +name = "whir" +version = "0.1.0" +source = "git+https://github.com/zhenfeizhang/whir#5ff2703372c761462a2e45fb392b67667d7c027d" +dependencies = [ + "ark-crypto-primitives", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "blake3", + "clap", + "hex", + "itertools 0.14.0", + "rand", + "rayon", + "serde", + "serde_json", + "sha3", + "spongefish", + "spongefish-pow", + "thiserror 2.0.12", +] + [[package]] name = "winapi-util" version = "0.1.9" @@ -2637,9 +3002,9 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", @@ -2656,7 +3021,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] @@ -2667,29 +3032,29 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] @@ -2700,7 +3065,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -2709,7 +3074,7 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -2718,14 +3083,30 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] @@ -2734,42 +3115,84 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -2777,16 +3200,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "write16" -version = "1.0.0" +name = "windows_x86_64_msvc" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wyz" @@ -2799,9 +3222,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -2811,34 +3234,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.24" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] [[package]] @@ -2858,15 +3281,46 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", "synstructure", ] +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.103", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" dependencies = [ "yoke", "zerofrom", @@ -2875,11 +3329,11 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn 2.0.103", ] diff --git a/Cargo.toml b/Cargo.toml index 829df8fd..07ca6252 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,35 +25,42 @@ members = [ resolver = "2" [workspace.dependencies] -ark-std = "0.4" -ark-bn254 = "0.4.0" -ark-ec = "0.4.0" -ark-ff = { version = "0.4" } +ark-std = { version = "0.5", features = ["std"] } +ark-bn254 = "0.5.0" +ark-ec = "0.5.0" +ark-ff = { version = "0.5", features = ["asm", "std"] } + bytes = "1.6.0" chrono = "0.4.38" clap = { version = "4.1", features = ["derive"] } cfg-if = "1.0" criterion = { version = "0.5", features = ["html_reports"] } +derivative = "2.2.0" env_logger = "0.11.3" +ethnum = "1.5.0" halo2curves = { git = "https://github.com/PolyhedraZK/halo2curves", default-features = false, features = [ "bits", ] } syn = "2.0" # For parsing Rust code +spongefish = { git = "https://github.com/arkworks-rs/spongefish", features = [ + "arkworks-algebra", +] } +spongefish-pow = { git = "https://github.com/arkworks-rs/spongefish" } quote = "1.0" # For generating code proc-macro2 = "1.0" # For working with tokens itertools = "0.13" log = "0.4" mpi = "0.8.0" rand = "0.8.5" +rand_chacha = "0.3.1" raw-cpuid = "11.1.0" rayon = "1.10" sha2 = "0.10.8" +thiserror = "1.0.63" tiny-keccak = { version = "2.0.2", features = [ "sha3", "keccak" ] } tokio = { version = "1.38.0", features = ["full"] } +transpose = "0.2.3" tynm = { version = "0.1.6", default-features = false } warp = "0.3.7" -thiserror = "1.0.63" -ethnum = "1.5.0" -rand_chacha = "0.3.1" -derivative = "2.2.0" -transpose = "0.2.3" +# whir = { git = "https://github.com/WizardOfMenlo/whir", rev = "9d7a97b169542f8d0787db482ee58f7b9b660848" } + whir = { git = "https://github.com/zhenfeizhang/whir" } \ No newline at end of file diff --git a/arith/goldilocks/Cargo.toml b/arith/goldilocks/Cargo.toml index 7583e059..b223d82b 100644 --- a/arith/goldilocks/Cargo.toml +++ b/arith/goldilocks/Cargo.toml @@ -7,9 +7,11 @@ edition = "2021" arith = { path = ".." } serdes = { path = "../../serdes" } +ark-ff.workspace = true ark-std.workspace = true ethnum.workspace = true rand.workspace = true +whir.workspace = true [[bench]] name = "goldilocks" diff --git a/arith/goldilocks/src/goldilocks.rs b/arith/goldilocks/src/goldilocks.rs index d6b3c0ac..47adf7e2 100644 --- a/arith/goldilocks/src/goldilocks.rs +++ b/arith/goldilocks/src/goldilocks.rs @@ -5,9 +5,11 @@ use std::{ }; use arith::{field_common, FFTField, Field, SimdField}; +use ark_ff::{BigInteger64, PrimeField}; use ethnum::U256; use rand::RngCore; use serdes::{ExpSerde, SerdeResult}; +use whir::crypto::fields::Field64; use crate::goldilocks::p2_instructions::{assume, branch_hint, reduce128, try_inverse_u64}; @@ -603,3 +605,34 @@ pub(crate) mod p2_instructions { // ) // } } + +impl From for Goldilocks { + #[inline(always)] + fn from(x: Field64) -> Self { + Goldilocks { + v: x.into_bigint().0[0], + } + } +} + +impl From<&Field64> for Goldilocks { + #[inline(always)] + fn from(x: &Field64) -> Self { + Goldilocks { + v: x.into_bigint().0[0], + } + } +} + +impl From for Field64 { + #[inline(always)] + fn from(x: Goldilocks) -> Self { + Field64::from_bigint(BigInteger64::new([x.v])).unwrap() + } +} +impl From<&Goldilocks> for Field64 { + #[inline(always)] + fn from(x: &Goldilocks) -> Self { + Field64::from_bigint(BigInteger64::new([x.v])).unwrap() + } +} diff --git a/arith/goldilocks/src/goldilocks_ext.rs b/arith/goldilocks/src/goldilocks_ext.rs index e4140c84..52ac7676 100644 --- a/arith/goldilocks/src/goldilocks_ext.rs +++ b/arith/goldilocks/src/goldilocks_ext.rs @@ -7,6 +7,7 @@ use arith::{field_common, ExtensionField, FFTField, Field, SimdField}; use ethnum::U256; use rand::RngCore; use serdes::ExpSerde; +use whir::crypto::fields::Field64_2; use crate::{ goldilocks::{mod_reduce_u64, Goldilocks}, @@ -412,3 +413,40 @@ impl Mul for GoldilocksExt2 { } } } + +impl From for GoldilocksExt2 { + #[inline(always)] + fn from(x: Field64_2) -> Self { + GoldilocksExt2 { + v: [x.c0.into(), x.c1.into()], + } + } +} + +impl From<&Field64_2> for GoldilocksExt2 { + #[inline(always)] + fn from(x: &Field64_2) -> Self { + GoldilocksExt2 { + v: [x.c0.into(), x.c1.into()], + } + } +} + +impl From for Field64_2 { + #[inline(always)] + fn from(x: GoldilocksExt2) -> Self { + Field64_2 { + c0: x.v[0].into(), + c1: x.v[1].into(), + } + } +} +impl From<&GoldilocksExt2> for Field64_2 { + #[inline(always)] + fn from(x: &GoldilocksExt2) -> Self { + Field64_2 { + c0: x.v[0].into(), + c1: x.v[1].into(), + } + } +} diff --git a/arith/goldilocks/src/tests.rs b/arith/goldilocks/src/tests.rs index a229cf6a..f2ff0b96 100644 --- a/arith/goldilocks/src/tests.rs +++ b/arith/goldilocks/src/tests.rs @@ -7,6 +7,7 @@ use ark_std::test_rng; use ethnum::U256; use rand::thread_rng; use serdes::ExpSerde; +use whir::crypto::fields::{Field64, Field64_2}; use crate::{ goldilocks::mod_reduce_u64, Goldilocks, GoldilocksExt2, GoldilocksExt2x8, Goldilocksx8, @@ -239,3 +240,34 @@ fn test_edge_cases() { let x = GoldilocksExt2::X; assert_eq!(x * x, GoldilocksExt2::from(Goldilocks::from(7u32))); } + +#[test] +fn convert_from_and_to_arkworks() { + let mut rng = thread_rng(); + + let one = Goldilocks::one(); + let ark_one = Field64::from(1u32); + + assert_eq!(one, Goldilocks::from(ark_one)); + assert_eq!(Field64::from(one), ark_one); + + for _ in 0..100 { + let x = Goldilocks::random_unsafe(&mut rng); + let ark_x = Field64::from(x); + assert_eq!(x, Goldilocks::from(ark_x)); + assert_eq!(Field64::from(x), ark_x); + } + + let one = GoldilocksExt2::one(); + let ark_one = Field64_2::from(1u32); + + assert_eq!(one, GoldilocksExt2::from(ark_one)); + assert_eq!(Field64_2::from(one), ark_one); + + for _ in 0..100 { + let x = GoldilocksExt2::random_unsafe(&mut rng); + let ark_x = Field64_2::from(x); + assert_eq!(x, GoldilocksExt2::from(ark_x)); + assert_eq!(Field64_2::from(x), ark_x); + } +} diff --git a/poly_commit/Cargo.toml b/poly_commit/Cargo.toml index 9404942e..c75c4627 100644 --- a/poly_commit/Cargo.toml +++ b/poly_commit/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" arith = { path = "../arith" } gf2 = { path = "../arith/gf2" } gkr_engine = { path = "../gkr_engine" } +goldilocks = { path = "../arith/goldilocks" } polynomials = { path = "../arith/polynomials"} serdes = { path = "../serdes" } transcript = { path = "../transcript" } @@ -21,8 +22,11 @@ halo2curves.workspace = true itertools.workspace = true rand.workspace = true rayon.workspace = true +spongefish.workspace = true +spongefish-pow.workspace = true transpose.workspace = true thiserror.workspace = true +whir.workspace = true [dev-dependencies] gf2_128 = { path = "../arith/gf2_128" } diff --git a/poly_commit/benches/hyrax.rs b/poly_commit/benches/hyrax.rs index dcc52f8a..b8c2c06f 100644 --- a/poly_commit/benches/hyrax.rs +++ b/poly_commit/benches/hyrax.rs @@ -64,7 +64,7 @@ fn hyrax_opening_benchmark_helper( let (srs, _) = HyraxPCS::::gen_srs_for_testing(&num_vars, &mut rng); let eval_point: Vec<_> = (0..num_vars).map(|_| Fr::random_unsafe(&mut rng)).collect(); - let _ = HyraxPCS::::commit(&num_vars, &srs, &poly, &mut scratch_pad); + let com = HyraxPCS::::commit(&num_vars, &srs, &poly, &mut scratch_pad); group .bench_function( @@ -73,10 +73,11 @@ fn hyrax_opening_benchmark_helper( b.iter(|| { _ = black_box(HyraxPCS::::open( &num_vars, + &com, &srs, &poly, &eval_point, - &scratch_pad, + &mut scratch_pad, &mut transcript, )) }) diff --git a/poly_commit/benches/kzg.rs b/poly_commit/benches/kzg.rs index 7483df1e..d54b799e 100644 --- a/poly_commit/benches/kzg.rs +++ b/poly_commit/benches/kzg.rs @@ -64,7 +64,7 @@ fn hyperkzg_opening_benchmark_helper( let (srs, _) = HyperBiKZGPCS::::gen_srs_for_testing(&num_vars, &mut rng); let eval_point: Vec<_> = (0..num_vars).map(|_| Fr::random_unsafe(&mut rng)).collect(); - let _ = HyperBiKZGPCS::::commit(&num_vars, &srs, &poly, &mut scratch_pad); + let com = HyperBiKZGPCS::::commit(&num_vars, &srs, &poly, &mut scratch_pad); group .bench_function( @@ -73,10 +73,11 @@ fn hyperkzg_opening_benchmark_helper( b.iter(|| { _ = black_box(HyperBiKZGPCS::::open( &num_vars, + &com, &srs, &poly, &eval_point, - &scratch_pad, + &mut scratch_pad, &mut transcript, )) }) diff --git a/poly_commit/benches/pcs_all.rs b/poly_commit/benches/pcs_all.rs index 5faf0e7d..2a2aeaba 100644 --- a/poly_commit/benches/pcs_all.rs +++ b/poly_commit/benches/pcs_all.rs @@ -4,9 +4,11 @@ use criterion::black_box; use gkr_engine::StructuredReferenceString; use gkr_engine::{root_println, MPIConfig, MPIEngine, Transcript}; use gkr_hashers::{Keccak256hasher, SHA256hasher}; +use goldilocks::{Goldilocks, GoldilocksExt2}; use halo2curves::bn256::{Bn256, G1Affine}; use poly_commit::{ - BatchOpeningPCS, HyperUniKZGPCS, HyraxPCS, OrionBaseFieldPCS, PolynomialCommitmentScheme, + BatchOpeningPCS, HyperUniKZGPCS, HyraxPCS, OrionSIMDFieldPCS, PolynomialCommitmentScheme, + WhirPCS, }; use polynomials::MultiLinearPoly; use rand::RngCore; @@ -21,46 +23,58 @@ fn main() { let world = universe.world(); let mpi_config = MPIConfig::prover_new(Some(&universe), Some(&world)); println!("=========================="); - for num_vars in 18..21 { + for num_vars in 10..21 { root_println!(mpi_config, "num vars: {}", num_vars); + bench_whir(&mpi_config, num_vars); + bench_orion(&mpi_config, num_vars); bench_kzg(&mpi_config, num_vars); bench_hyrax(&mpi_config, num_vars); - bench_orion(&mpi_config, num_vars); println!("=========================="); } } -fn bench_orion(mpi_config: &MPIConfig, num_vars: usize) { +fn bench_whir(mpi_config: &MPIConfig, num_vars: usize) { // full scalar let mut rng = test_rng(); - let (srs, _) = OrionBaseFieldPCS::::gen_srs_for_testing(&num_vars, &mut rng); - let poly = MultiLinearPoly::::random(num_vars, &mut rng); - let eval_point: Vec<_> = (0..num_vars).map(|_| Fr::random_unsafe(&mut rng)).collect(); - pcs_bench::>( - mpi_config, - &num_vars, - &srs, - &poly, - &eval_point, - "orion full scalar ", - ); + let params = WhirPCS::random_params(num_vars, &mut rng); + let (srs, _) = WhirPCS::gen_srs_for_testing(¶ms, &mut rng); - // small scalar - let input = (0..1 << num_vars) - .map(|_| Fr::from(rng.next_u32())) - .collect::>(); - let poly = MultiLinearPoly::::new(input); - pcs_bench::>( + let poly = MultiLinearPoly::::random(num_vars, &mut rng); + let eval_point: Vec<_> = (0..num_vars) + .map(|_| GoldilocksExt2::random_unsafe(&mut rng)) + .collect(); + pcs_bench::( mpi_config, - &num_vars, + ¶ms, &srs, &poly, &eval_point, - "orion small scalar", + "Whir goldilocks ", ); } +fn bench_orion(mpi_config: &MPIConfig, num_vars: usize) { + let mut rng = test_rng(); + { + // Bn scalar + let (srs, _) = + OrionSIMDFieldPCS::::gen_srs_for_testing(&num_vars, &mut rng); + + let poly = MultiLinearPoly::::random(num_vars, &mut rng); + let eval_point: Vec<_> = (0..num_vars).map(|_| Fr::random_unsafe(&mut rng)).collect(); + + pcs_bench::, Fr>( + mpi_config, + &num_vars, + &srs, + &poly, + &eval_point, + "orion Fr ", + ); + } +} + fn bench_hyrax(mpi_config: &MPIConfig, num_vars: usize) { // full scalar let mut rng = test_rng(); @@ -69,7 +83,7 @@ fn bench_hyrax(mpi_config: &MPIConfig, num_vars: usize) { let poly = MultiLinearPoly::::random(num_vars, &mut rng); let eval_point: Vec<_> = (0..num_vars).map(|_| Fr::random_unsafe(&mut rng)).collect(); - pcs_bench::>( + pcs_bench::, Fr>( mpi_config, &num_vars, &srs, @@ -83,7 +97,7 @@ fn bench_hyrax(mpi_config: &MPIConfig, num_vars: usize) { .map(|_| Fr::from(rng.next_u32())) .collect::>(); let poly = MultiLinearPoly::::new(input); - pcs_bench::>( + pcs_bench::, Fr>( mpi_config, &num_vars, &srs, @@ -93,7 +107,7 @@ fn bench_hyrax(mpi_config: &MPIConfig, num_vars: usize) { ); // batch open - bench_batch_open::>(mpi_config, num_vars, NUM_POLY_BATCH_OPEN); + bench_batch_open::, Fr>(mpi_config, num_vars, NUM_POLY_BATCH_OPEN); } fn bench_kzg(mpi_config: &MPIConfig, num_vars: usize) { @@ -104,7 +118,7 @@ fn bench_kzg(mpi_config: &MPIConfig, num_vars: usize) { let poly = MultiLinearPoly::::random(num_vars, &mut rng); let eval_point: Vec<_> = (0..num_vars).map(|_| Fr::random_unsafe(&mut rng)).collect(); - pcs_bench::>( + pcs_bench::, Fr>( mpi_config, &num_vars, &srs, @@ -118,7 +132,7 @@ fn bench_kzg(mpi_config: &MPIConfig, num_vars: usize) { .map(|_| Fr::from(rng.next_u32())) .collect::>(); let poly = MultiLinearPoly::::new(input); - pcs_bench::>( + pcs_bench::, Fr>( mpi_config, &num_vars, &srs, @@ -128,17 +142,20 @@ fn bench_kzg(mpi_config: &MPIConfig, num_vars: usize) { ); // batch open - bench_batch_open::>(mpi_config, num_vars, NUM_POLY_BATCH_OPEN); + bench_batch_open::, Fr>(mpi_config, num_vars, NUM_POLY_BATCH_OPEN); } -fn pcs_bench>( +fn pcs_bench( mpi_config: &MPIConfig, - num_vars: &PCS::Params, + params: &PCS::Params, srs: &PCS::SRS, poly: &PCS::Poly, eval_point: &PCS::EvalPoint, label: &str, -) { +) where + PCS: PolynomialCommitmentScheme, + F: Field + ExtensionField, +{ let timer = Timer::new( format!("{} commit ", label).as_ref(), mpi_config.is_root(), @@ -147,9 +164,9 @@ fn pcs_bench>( let (pk, vk) = srs.clone().into_keys(); let mut transcript = BytesHashTranscript::::new(); - let mut scratch_pad = PCS::init_scratch_pad(&num_vars); + let mut scratch_pad = PCS::init_scratch_pad(¶ms); - let com = black_box(PCS::commit(&num_vars, &pk, &poly, &mut scratch_pad)); + let com = black_box(PCS::commit(¶ms, &pk, &poly, &mut scratch_pad)); timer.stop(); let timer = Timer::new( @@ -157,11 +174,12 @@ fn pcs_bench>( mpi_config.is_root(), ); let (eval, open) = black_box(PCS::open( - &num_vars, + ¶ms, + &com, &pk, &poly, &eval_point, - &scratch_pad, + &mut scratch_pad, &mut transcript, )); timer.stop(); @@ -172,7 +190,7 @@ fn pcs_bench>( ); let mut transcript = BytesHashTranscript::::new(); assert!(black_box(PCS::verify( - &num_vars, + ¶ms, &vk, &com, &eval_point, @@ -204,10 +222,10 @@ fn pcs_bench>( root_println!(mpi_config, " --- "); } -fn bench_batch_open(mpi_config: &MPIConfig, num_vars: usize, num_poly: usize) +fn bench_batch_open(mpi_config: &MPIConfig, num_vars: usize, num_poly: usize) where - F: Field + ExtensionField, PCS: BatchOpeningPCS, Poly = MultiLinearPoly>, + F: Field + ExtensionField, { let mut rng = test_rng(); diff --git a/poly_commit/src/hyrax/pcs_trait_impl.rs b/poly_commit/src/hyrax/pcs_trait_impl.rs index af80ffeb..31b45a9f 100644 --- a/poly_commit/src/hyrax/pcs_trait_impl.rs +++ b/poly_commit/src/hyrax/pcs_trait_impl.rs @@ -61,10 +61,11 @@ where fn open( _params: &Self::Params, + _commitment: &Self::Commitment, proving_key: &::PKey, poly: &Self::Poly, x: &Self::EvalPoint, - _scratch_pad: &Self::ScratchPad, + _scratch_pad: &mut Self::ScratchPad, _transcript: &mut impl Transcript, ) -> (C::Scalar, Self::Opening) { hyrax_open(proving_key, poly, x) diff --git a/poly_commit/src/kzg/bi_kzg/pcs_trait_impl.rs b/poly_commit/src/kzg/bi_kzg/pcs_trait_impl.rs index 86b39ff4..16d997a3 100644 --- a/poly_commit/src/kzg/bi_kzg/pcs_trait_impl.rs +++ b/poly_commit/src/kzg/bi_kzg/pcs_trait_impl.rs @@ -78,10 +78,11 @@ where fn open( _params: &Self::Params, + _commitment: &Self::Commitment, proving_key: &::PKey, poly: &Self::Poly, x: &Self::EvalPoint, - _scratch_pad: &Self::ScratchPad, + _scratch_pad: &mut Self::ScratchPad, transcript: &mut impl Transcript, ) -> (E::Fr, Self::Opening) { let (eval, hyperkzg_opening) = coeff_form_uni_hyperkzg_open( diff --git a/poly_commit/src/kzg/uni_kzg/pcs_trait_impl.rs b/poly_commit/src/kzg/uni_kzg/pcs_trait_impl.rs index d8a003e3..132e6828 100644 --- a/poly_commit/src/kzg/uni_kzg/pcs_trait_impl.rs +++ b/poly_commit/src/kzg/uni_kzg/pcs_trait_impl.rs @@ -68,10 +68,11 @@ where fn open( _params: &Self::Params, + _commitment: &Self::Commitment, proving_key: &::PKey, poly: &Self::Poly, x: &Self::EvalPoint, - _scratch_pad: &Self::ScratchPad, + _scratch_pad: &mut Self::ScratchPad, transcript: &mut impl Transcript, ) -> (E::Fr, Self::Opening) { coeff_form_uni_hyperkzg_open(proving_key, &poly.coeffs, x, transcript) diff --git a/poly_commit/src/lib.rs b/poly_commit/src/lib.rs index b0bc946d..b3415b79 100644 --- a/poly_commit/src/lib.rs +++ b/poly_commit/src/lib.rs @@ -21,3 +21,6 @@ pub mod kzg; pub use kzg::*; pub mod batching; + +pub mod whir; +pub use whir::*; diff --git a/poly_commit/src/orion/pcs_trait_impl.rs b/poly_commit/src/orion/pcs_trait_impl.rs index bae848e5..0ab74bb7 100644 --- a/poly_commit/src/orion/pcs_trait_impl.rs +++ b/poly_commit/src/orion/pcs_trait_impl.rs @@ -96,10 +96,11 @@ where fn open( params: &Self::Params, + _commitment: &Self::Commitment, pk: &::PKey, poly: &Self::Poly, x: &Self::EvalPoint, - scratch_pad: &Self::ScratchPad, + scratch_pad: &mut Self::ScratchPad, transcript: &mut impl Transcript, ) -> (EvalF, Self::Opening) { assert_eq!(*params, pk.num_vars); @@ -197,10 +198,11 @@ where fn open( params: &Self::Params, + _commitment: &Self::Commitment, proving_key: &::PKey, poly: &Self::Poly, x: &Self::EvalPoint, - scratch_pad: &Self::ScratchPad, + scratch_pad: &mut Self::ScratchPad, transcript: &mut impl Transcript, ) -> (EvalF, Self::Opening) { assert_eq!(*params, proving_key.num_vars); diff --git a/poly_commit/src/raw.rs b/poly_commit/src/raw.rs index 8973bb49..a07145e7 100644 --- a/poly_commit/src/raw.rs +++ b/poly_commit/src/raw.rs @@ -87,10 +87,11 @@ impl PolynomialCommitmentScheme for RawMultiLinearPCS { fn open( params: &Self::Params, + _commitment: &Self::Commitment, _proving_key: &::PKey, poly: &Self::Poly, x: &Self::EvalPoint, - _scratch_pad: &Self::ScratchPad, + _scratch_pad: &mut Self::ScratchPad, _transcript: &mut impl Transcript, ) -> (F, Self::Opening) { assert!(x.len() == *params); diff --git a/poly_commit/src/traits.rs b/poly_commit/src/traits.rs index dc068458..a3353f71 100644 --- a/poly_commit/src/traits.rs +++ b/poly_commit/src/traits.rs @@ -9,13 +9,13 @@ use sumcheck::IOPProof; pub trait PolynomialCommitmentScheme { const NAME: &'static str; - type Params: Clone + Debug + Default; + type Params: Clone + Debug; type Poly: Clone + Debug + Default; type EvalPoint: Clone + Debug + Default; - type ScratchPad: Clone + Debug + Default + ExpSerde; + type ScratchPad: Debug; type SRS: Clone + Debug + Default + ExpSerde + StructuredReferenceString; - type Commitment: Clone + Debug + Default + ExpSerde; + type Commitment: ExpSerde; type Opening: Clone + Debug + Default + ExpSerde; /// Generate a random structured reference string (SRS) for testing purposes. @@ -40,10 +40,11 @@ pub trait PolynomialCommitmentScheme { /// Open the polynomial at a point. fn open( params: &Self::Params, + commitment: &Self::Commitment, proving_key: &::PKey, poly: &Self::Poly, x: &Self::EvalPoint, - scratch_pad: &Self::ScratchPad, + scratch_pad: &mut Self::ScratchPad, transcript: &mut impl Transcript, ) -> (F, Self::Opening); diff --git a/poly_commit/src/whir.rs b/poly_commit/src/whir.rs new file mode 100644 index 00000000..9f0ea968 --- /dev/null +++ b/poly_commit/src/whir.rs @@ -0,0 +1,191 @@ +use ark_std::log2; +use gkr_engine::{StructuredReferenceString, Transcript}; +use goldilocks::{Goldilocks, GoldilocksExt2}; +use polynomials::MultiLinearPoly; +use rand::RngCore; +use spongefish::{DomainSeparator, ProverState}; +use spongefish_pow::keccak::KeccakPoW; +use whir::{ + crypto::{ + fields::{Field64, Field64_2}, + merkle_tree::{ + keccak::{KeccakCompress, KeccakLeafHash, KeccakMerkleTreeParams}, + parameters::default_config, + }, + }, + parameters::{FoldingFactor, MultivariateParameters, ProtocolParameters, SoundnessType}, + poly_utils::{coeffs::CoefficientList, multilinear::MultilinearPoint}, + whir::{ + committer::{CommitmentReader, CommitmentWriter}, + domainsep::WhirDomainSeparator, + parameters::WhirConfig, + prover::Prover, + statement::{Statement, Weights}, + verifier::Verifier, + }, +}; + +use crate::PolynomialCommitmentScheme; + +/// Whir Polynomial Commitment Scheme over Goldilocks field. +// Note: Hard coded to Goldilocks field. +pub struct WhirPCS; + +pub type WhirCommitment = + whir::whir::committer::Witness>; +pub type WhirParam = WhirConfig, KeccakPoW>; + +impl PolynomialCommitmentScheme for WhirPCS { + const NAME: &'static str = "WhirPCS"; + + type Params = WhirParam; + type Poly = MultiLinearPoly; + type EvalPoint = Vec; + type ScratchPad = ProverState; + + type SRS = (); + type Commitment = WhirCommitment; + type Opening = Vec; + + fn init_scratch_pad(params: &Self::Params) -> Self::ScratchPad { + // todo: session identifier can be sampled from transcript? + let domainsep = DomainSeparator::new("🌪️") + .commit_statement(params) + .add_whir_proof(params); + + domainsep.to_prover_state() + } + + fn gen_srs_for_testing(_params: &Self::Params, _rng: impl rand::RngCore) -> (Self::SRS, usize) { + ((), 0) + } + + fn commit( + params: &Self::Params, + _proving_key: &Self::SRS, + poly: &Self::Poly, + prover_state: &mut Self::ScratchPad, + ) -> Self::Commitment { + let whir_poly = CoefficientList::new( + poly.coeffs + .iter() + .map(|&coeff| Field64::from(coeff)) + .collect::>(), + ); + + let committer = CommitmentWriter::new(params.clone()); + + committer.commit(prover_state, whir_poly.clone()).unwrap() + } + + fn open( + params: &Self::Params, + commitment: &Self::Commitment, + _proving_key: &::PKey, + poly: &Self::Poly, + x: &Self::EvalPoint, + prover_state: &mut Self::ScratchPad, + _transcript: &mut impl gkr_engine::Transcript, + ) -> (GoldilocksExt2, Self::Opening) { + // todo: avoid cloning commitment if possible + let witness = (*commitment).clone(); + + let num_variables = log2(poly.coeffs.len()) as usize; + let mut statement = Statement::::new(num_variables); + + let whir_poly = CoefficientList::new( + poly.coeffs + .iter() + .map(|&coeff| Field64::from(coeff)) + .collect::>(), + ); + + let point = MultilinearPoint( + x.iter() + .map(|&coord| Field64_2::from(coord)) + .collect::>(), + ); + + let eval = whir_poly.evaluate_at_extension(&point); + let weights = Weights::evaluation(point.clone()); + statement.add_constraint(weights, eval); + + let prover = Prover(params.clone()); + prover + .prove(prover_state, statement.clone(), witness) + .unwrap(); + + (eval.into(), prover_state.narg_string().to_vec()) + } + + fn verify( + params: &Self::Params, + _verifying_key: &::VKey, + _commitment: &Self::Commitment, + x: &Self::EvalPoint, + eval: GoldilocksExt2, + opening: &Self::Opening, + _transcript: &mut impl Transcript, + ) -> bool { + let num_variables = x.len(); + let mut statement = Statement::::new(num_variables); + + let point = MultilinearPoint( + x.iter() + .map(|&coord| Field64_2::from(coord)) + .collect::>(), + ); + let weights = Weights::evaluation(point.clone()); + statement.add_constraint(weights, eval.into()); + + let commitment_reader = CommitmentReader::new(params); + let verifier = Verifier::new(params); + + let domainsep = DomainSeparator::new("🌪️") + .commit_statement(params) + .add_whir_proof(params); + + let mut verifier_state = domainsep.to_verifier_state(opening); + let parsed_commitment = commitment_reader + .parse_commitment(&mut verifier_state) + .unwrap(); + + let (_point, constraint) = + match verifier.verify(&mut verifier_state, &parsed_commitment, &statement) { + Ok((p, c)) => (p, c), + Err(_) => return false, + }; + + if !constraint.is_empty() { + return false; + } + + true + } +} + +impl WhirPCS { + pub fn random_params(num_vars: usize, rng: &mut impl RngCore) -> WhirParam { + let (leaf_hash_params, two_to_one_params) = + default_config::, KeccakCompress>(rng); + + let mv_params = MultivariateParameters::::new(num_vars); + + let whir_params = ProtocolParameters::, KeccakPoW> { + initial_statement: true, + security_level: 100, + pow_bits: 0, + folding_factor: FoldingFactor::ConstantFromSecondRound(4, 2), + leaf_hash_params, + two_to_one_params, + soundness_type: SoundnessType::ConjectureList, + _pow_parameters: Default::default(), + starting_log_inv_rate: 1, + }; + + WhirConfig::, KeccakPoW>::new( + mv_params, + whir_params, + ) + } +} diff --git a/poly_commit/tests/common.rs b/poly_commit/tests/common.rs index 1b2e5911..7f5af6a7 100644 --- a/poly_commit/tests/common.rs +++ b/poly_commit/tests/common.rs @@ -27,6 +27,7 @@ pub fn test_pcs>( + params: &P::Params, + poly: &P::Poly, + x: &P::EvalPoint, +) { + let mut rng = thread_rng(); + // NOTE(HS) we assume that the polynomials we pass in are of sufficient length. + let (srs, _) = P::gen_srs_for_testing(params, &mut rng); + let (proving_key, verification_key) = srs.into_keys(); + let mut transcript = T::new(); + let mut scratch_pad = P::init_scratch_pad(params); + + let commitment = P::commit(params, &proving_key, poly, &mut scratch_pad); + + let mut transcript_cloned = transcript.clone(); + let (v, opening) = P::open( + params, + &commitment, + &proving_key, + poly, + x, + &mut scratch_pad, + &mut transcript, + ); + assert!(P::verify( + params, + &verification_key, + &commitment, + x, + v, + &opening, + &mut transcript_cloned + )); +} + +fn test_whir_pcs(num_vars_start: usize, num_vars_end: usize) { + let mut rng = test_rng(); + + (num_vars_start..=num_vars_end).for_each(|num_vars| { + let point = (0..num_vars) + .map(|_| GoldilocksExt2::random_unsafe(&mut rng)) + .collect(); + let poly = MultiLinearPoly::::random(num_vars, &mut rng); + + let params = WhirPCS::random_params(num_vars, &mut rng); + + test_whir_pcs_helper::, WhirPCS>( + ¶ms, &poly, &point, + ); + }) +} + +#[test] +fn test_whir_pcs_full_e2e() { + test_whir_pcs(10, 15) +} diff --git a/serdes/Cargo.toml b/serdes/Cargo.toml index a37a4e63..aaaee240 100644 --- a/serdes/Cargo.toml +++ b/serdes/Cargo.toml @@ -4,9 +4,10 @@ version = "0.1.0" edition = "2021" [dependencies] -thiserror.workspace = true -halo2curves.workspace = true ethnum.workspace = true +halo2curves.workspace = true +thiserror.workspace = true +whir.workspace = true serdes_derive = { path = "../serdes_derive" } diff --git a/serdes/src/serdes.rs b/serdes/src/serdes.rs index 26d61a4c..4e18367d 100644 --- a/serdes/src/serdes.rs +++ b/serdes/src/serdes.rs @@ -9,6 +9,10 @@ use halo2curves::{ bn256::{Fr, G1Affine, G2Affine}, group::GroupEncoding, }; +use whir::{ + crypto::{fields::Field64_2, merkle_tree::keccak::KeccakMerkleTreeParams}, + whir::committer::Witness, +}; use crate::{exp_serde_for_generic_slices, exp_serde_for_number, SerdeError, SerdeResult}; @@ -208,3 +212,12 @@ impl ExpSerde for String { String::from_utf8(buf).map_err(|_| SerdeError::DeserializeError) } } + +impl ExpSerde for Witness> { + fn serialize_into(&self, mut _writer: W) -> SerdeResult<()> { + Ok(()) + } + fn deserialize_from(mut _reader: R) -> SerdeResult { + unimplemented!("Witness deserialization is not implemented for witness"); + } +}