diff --git a/crypto-benchmarks.rs/Cargo.lock b/crypto-benchmarks.rs/Cargo.lock index 25e137205..a0d8ba960 100644 --- a/crypto-benchmarks.rs/Cargo.lock +++ b/crypto-benchmarks.rs/Cargo.lock @@ -2,21 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - [[package]] name = "aho-corasick" version = "1.1.3" @@ -26,12 +11,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -49,9 +28,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -64,44 +43,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[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.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", - "once_cell", - "windows-sys 0.59.0", + "once_cell_polyfill", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "approx" @@ -114,35 +93,20 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.86" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] name = "autocfg" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" - -[[package]] -name = "backtrace" -version = "0.3.74" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets", -] +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "base58" @@ -150,6 +114,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + [[package]] name = "base64" version = "0.21.7" @@ -170,9 +140,9 @@ checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" [[package]] name = "bip39" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" +checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" dependencies = [ "bitcoin_hashes", "rand_core", @@ -198,9 +168,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.7.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitvec" @@ -216,9 +186,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.13" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" dependencies = [ "cc", "glob", @@ -228,15 +198,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" [[package]] name = "byteorder" @@ -246,9 +216,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cast" @@ -258,32 +228,32 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.9" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8293772165d9345bdaaa39b45b2109591e63fe5e6fbc23c6ff930a048aa310b" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ + "find-msvc-tools", "shlex", ] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-targets", + "windows-link", ] [[package]] @@ -310,14 +280,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", - "half 2.4.1", + "half 2.7.1", ] [[package]] name = "clap" -version = "4.5.28" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" +checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" dependencies = [ "clap_builder", "clap_derive", @@ -325,9 +295,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" dependencies = [ "anstream", "anstyle", @@ -337,27 +307,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.28" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[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 = "core-foundation-sys" @@ -367,9 +337,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "crc" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -443,9 +413,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "cryptoxide" @@ -455,9 +425,9 @@ checksum = "382ce8820a5bb815055d3553a610e8cb542b2d767bbacea99038afda96cd760d" [[package]] name = "darling" -version = "0.20.10" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ "darling_core", "darling_macro", @@ -465,39 +435,45 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] name = "deranged" -version = "0.3.11" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", - "serde", + "serde_core", ] +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + [[package]] name = "ed25519-bip32" version = "0.4.1" @@ -509,9 +485,21 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "embed-doc-image" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "af36f591236d9d822425cb6896595658fa558fcebf5ee8accac1d4b92c47166e" +dependencies = [ + "base64 0.13.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] [[package]] name = "env_logger" @@ -525,18 +513,18 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -545,11 +533,17 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" + [[package]] name = "fixedbitset" -version = "0.4.2" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "fnv" @@ -569,58 +563,34 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-core", - "futures-task", - "pin-project-lite", - "pin-utils", -] - [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", ] [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets", + "r-efi", + "wasip2", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "half" @@ -630,12 +600,13 @@ checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" [[package]] name = "half" -version = "2.4.1" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", + "zerocopy", ] [[package]] @@ -646,9 +617,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "heck" @@ -658,15 +629,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hermit-abi" -version = "0.4.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -682,9 +647,9 @@ checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" [[package]] name = "http" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -703,12 +668,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "pin-project-lite", @@ -716,14 +681,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -756,31 +722,32 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.16.0", "serde", + "serde_core", ] [[package]] name = "is-terminal" -version = "0.4.13" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi 0.4.0", + "hermit-abi", "libc", "windows-sys 0.52.0", ] [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -800,17 +767,26 @@ 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.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -824,6 +800,7 @@ dependencies = [ "blst", "clap", "criterion", + "embed-doc-image", "hex", "num-bigint", "num-rational", @@ -840,33 +817,33 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.169" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libm" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "linux-raw-sys" -version = "0.4.15" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "log" -version = "0.4.22" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "matrixmultiply" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", @@ -874,9 +851,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "minicbor" @@ -884,7 +861,7 @@ version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0452a60c1863c1f50b5f77cd295e8d2786849f35883f0b9e18e7e6e1b5691b0" dependencies = [ - "half 2.4.1", + "half 2.7.1", "minicbor-derive", ] @@ -896,34 +873,25 @@ checksum = "bd2209fff77f705b00c737016a48e73733d7fbccb8b007194db148f03561fb70" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", -] - -[[package]] -name = "miniz_oxide" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" -dependencies = [ - "adler2", + "syn 2.0.107", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] name = "multimap" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" [[package]] name = "nalgebra" @@ -1000,40 +968,37 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", ] [[package]] -name = "object" -version = "0.36.7" +name = "once_cell" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] -name = "once_cell" -version = "1.20.2" +name = "once_cell_polyfill" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "oorandom" -version = "11.1.4" +version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "pallas" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6092359c94e86cfc1047b4b5da8284d6d2ee22e4bf0eaa6d9ee8158fb8f1c5b" +checksum = "6cc85b0d73cc19b7c1e09d6f2c5c4abfad3923671654ba6ef8fd00c9d0ee4c58" dependencies = [ "pallas-addresses", "pallas-codec", @@ -1048,9 +1013,9 @@ dependencies = [ [[package]] name = "pallas-addresses" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bd039d7f1618d12ff348dd03eebe38c5d2a010325750e5341526c419b0f8e0" +checksum = "45a7e0425ec22afe8e80c9f9dfb086cbad569fd2ba3e51d6ab8caa20423b7488" dependencies = [ "base58", "bech32", @@ -1064,9 +1029,9 @@ dependencies = [ [[package]] name = "pallas-applying" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e103c84957d01753f2103c9d2e8f845638309af54d899c1c857e0b0d45cbcf" +checksum = "6a861573364d48ff0952b12d3f139e05a843b8209f134a0c2b028449cb59ed68" dependencies = [ "chrono", "hex", @@ -1080,9 +1045,9 @@ dependencies = [ [[package]] name = "pallas-codec" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1584d615857c0a44058fb612e892e9e0cc47b56c3c82cdf7347b5c1d1193598c" +checksum = "e344b3e39ca3bd79bb7547b65b980869c3c377a00c48ece70430f4611c32a18b" dependencies = [ "hex", "minicbor", @@ -1092,9 +1057,9 @@ dependencies = [ [[package]] name = "pallas-configs" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d374a71a037f0801a5feef6521216439f2db31156ca20d53cf8dc4c1af4de17" +checksum = "539eb4f40f745e4e59912e4cb88345bb7e07f9fed26237b55f6a2b4220d9794a" dependencies = [ "base64 0.22.1", "hex", @@ -1110,9 +1075,9 @@ dependencies = [ [[package]] name = "pallas-crypto" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c1d642326ce402eb9191aeacc3dd0bf2b499848e97a56396c978a6eb9dd31a" +checksum = "59c89ea16190a87a1d8bd36923093740a2b659ed6129f4636329319a70cc4db3" dependencies = [ "cryptoxide", "hex", @@ -1125,9 +1090,9 @@ dependencies = [ [[package]] name = "pallas-network" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e44dd876dc70cbbfc865bb9143131f57edab2c45e873d915732b81982ddb67" +checksum = "45b032abff3e307e21d99100a62b51084cc070d9e445ef95ed543a5225d865f5" dependencies = [ "byteorder", "hex", @@ -1135,7 +1100,7 @@ dependencies = [ "pallas-codec", "pallas-crypto", "rand", - "socket2", + "socket2 0.5.10", "thiserror", "tokio", "tracing", @@ -1143,9 +1108,9 @@ dependencies = [ [[package]] name = "pallas-primitives" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d30f5053073554d016a9f009c077f9a84275951a611cce54230de6c54d34d9b" +checksum = "1912f4f4a0719e36ac061f7f3557b687e8ef7285b573608fb5c71eba64c1b04c" dependencies = [ "base58", "bech32", @@ -1159,9 +1124,9 @@ dependencies = [ [[package]] name = "pallas-traverse" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d2572d316883fe866ae648bc3c5357e70cbbe8de5d78b1246f6109520fa52f" +checksum = "be7fbb1db75a0b6b32d1808b2cc5c7ba6dd261f289491bb86998b987b4716883" dependencies = [ "hex", "itertools 0.13.0", @@ -1176,9 +1141,9 @@ dependencies = [ [[package]] name = "pallas-txbuilder" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b126cd2f387af2478f9b0f6b422c613f74024350600cf5bd7c31e2c85c3c7062" +checksum = "fff83ae515a88b1ecf5354468d9fd3562d915e5eceb5c9467f6b1cdce60a3e9a" dependencies = [ "hex", "pallas-addresses", @@ -1194,9 +1159,9 @@ dependencies = [ [[package]] name = "pallas-utxorpc" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "609f39f3f9b8ff0e8593bfc3e6e3c53a14dd3ed41e1dfac24a41541fc7cab620" +checksum = "810ccda35242fef9ea583a0819da7617b6761a86c6070f16aea27ac80ad4da75" dependencies = [ "pallas-applying", "pallas-codec", @@ -1209,9 +1174,9 @@ dependencies = [ [[package]] name = "pallas-wallet" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812859b4571cb53182d34094ae3ec391a25d50b0c586be5876d4d86e4eb124bc" +checksum = "086f428e68ab513a0445c23a345cd462dc925e37626f72f1dbb7276919f68bfa" dependencies = [ "bech32", "bip39", @@ -1267,38 +1232,38 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petgraph" -version = "0.6.5" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset", - "indexmap 2.7.1", + "indexmap 2.12.0", ] [[package]] name = "pin-project" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] @@ -1307,12 +1272,6 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "plotters" version = "0.3.7" @@ -1349,37 +1308,37 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] [[package]] name = "prettyplease" -version = "0.2.29" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] [[package]] name = "prost" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" dependencies = [ "bytes", "prost-derive", @@ -1387,12 +1346,12 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f3e5beed80eb580c68e2c600937ac2c4eedabdfd5ef1e5b7ea4f3fba84497b" +checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" dependencies = [ "heck", - "itertools 0.13.0", + "itertools 0.14.0", "log", "multimap", "once_cell", @@ -1401,28 +1360,28 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.96", + "syn 2.0.107", "tempfile", ] [[package]] name = "prost-derive" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ "anyhow", - "itertools 0.13.0", + "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] name = "prost-types" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" dependencies = [ "prost", ] @@ -1440,24 +1399,30 @@ dependencies = [ [[package]] name = "quickcheck_macros" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22a693222d716a9587786f37ac3f6b4faedb5b80c23914e7303ff5a1d8016e9" +checksum = "f71ee38b42f8459a88d3362be6f9b841ad2d5421844f61eb1c59c11bff3ac14a" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.107", ] [[package]] name = "quote" -version = "1.0.38" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "radium" version = "0.7.0" @@ -1491,7 +1456,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -1512,9 +1477,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -1522,19 +1487,39 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -1544,9 +1529,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -1555,40 +1540,34 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "rustix" -version = "0.38.44" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "safe_arch" @@ -1608,12 +1587,37 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "serde" -version = "1.0.217" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] @@ -1627,42 +1631,53 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] name = "serde_json" -version = "1.0.138" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] name = "serde_with" -version = "3.12.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.7.1", - "serde", - "serde_derive", + "indexmap 2.12.0", + "schemars 0.9.0", + "schemars 1.0.4", + "serde_core", "serde_json", "serde_with_macros", "time", @@ -1670,14 +1685,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.12.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] @@ -1688,9 +1703,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simba" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" +checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95" dependencies = [ "approx", "num-complex", @@ -1701,14 +1716,24 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + [[package]] name = "statrs" version = "0.18.0" @@ -1740,9 +1765,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.96" +version = "2.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" dependencies = [ "proc-macro2", "quote", @@ -1757,16 +1782,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.16.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ - "cfg-if", "fastrand", - "getrandom 0.3.1", + "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -1786,7 +1810,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] @@ -1800,9 +1824,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.37" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -1815,15 +1839,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -1841,9 +1865,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -1856,29 +1880,28 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.0" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", "libc", "mio", "pin-project-lite", - "socket2", + "socket2 0.6.1", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] @@ -1938,41 +1961,41 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[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", ] [[package]] name = "typenum" -version = "1.17.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] @@ -2011,50 +2034,51 @@ 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 = "wasi" -version = "0.13.3+wasi-0.2.2" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2062,31 +2086,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.77" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -2094,9 +2118,9 @@ dependencies = [ [[package]] name = "wide" -version = "0.7.32" +version = "0.7.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" dependencies = [ "bytemuck", "safe_arch", @@ -2104,20 +2128,70 @@ dependencies = [ [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ - "windows-targets", + "proc-macro2", + "quote", + "syn 2.0.107", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", ] [[package]] @@ -2126,16 +2200,25 @@ 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]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-targets", + "windows-link", ] [[package]] @@ -2144,14 +2227,31 @@ 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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -2160,42 +2260,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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + [[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + [[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + [[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + [[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + [[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + [[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -2203,13 +2345,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "wit-bindgen-rt" -version = "0.33.0" +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" -dependencies = [ - "bitflags", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "wyz" @@ -2222,30 +2367,29 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -2258,5 +2402,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.96", + "syn 2.0.107", ] diff --git a/crypto-benchmarks.rs/Cargo.toml b/crypto-benchmarks.rs/Cargo.toml index 352fbbb33..c2f058bc3 100644 --- a/crypto-benchmarks.rs/Cargo.toml +++ b/crypto-benchmarks.rs/Cargo.toml @@ -16,6 +16,7 @@ bitvec = "1.0.1" blst = "0.3.13" clap = { version = "4.5.28", features = ["derive"] } criterion = "0.5.1" +embed-doc-image = "0.1.4" hex = "0.4.3" num-bigint = { version = "0.4.6", features = ["serde"] } num-rational = "0.4.2" @@ -29,6 +30,12 @@ serde = { version = "1.0.217", features = ["derive"] } serde_cbor = "0.11.2" statrs = "0.18.0" +[features] +doc-images = [] + +[package.metadata.docs.rs] +features = ["doc-images"] + [[bench]] name = "serialization_bench" harness = false diff --git a/crypto-benchmarks.rs/ReadMe.md b/crypto-benchmarks.rs/ReadMe.md index 0fdee9742..614a71323 100644 --- a/crypto-benchmarks.rs/ReadMe.md +++ b/crypto-benchmarks.rs/ReadMe.md @@ -7,6 +7,23 @@ See [Specification.md](Specification.md) for a description of the algorithms imp - Benchmarks: [benches/](benches/) +## Background material + +![BLS scheme from original Leios preprint](figure-7-bls.png) + +![Voting scheme from original Leios preprint](figure-8-voting.png) + + +## Efficiency notes + +The benchmark code uses an efficient BLS implementation, but it has not been optimized. + +- Some of the hash data structures in the certificate could be replaced by bit sets. +- The optional group checks are turned on for calls to the `blst` library even though in some cases these may not strictly be necessary. +- The rational arthmetic for computing logarithms and performing sortition uses the maximum precision obtainable in `Ratio` even though that precision is not necessarily needed. +- The code has not been profiled. + + ## Command-line interface A command-line interface is provided for testing and exploration. Note that all input and output files are CBOR. diff --git a/crypto-benchmarks.rs/benches/fait_accompli_bench.rs b/crypto-benchmarks.rs/benches/fait_accompli_bench.rs index 130fc7c4c..2ecd4d6b7 100644 --- a/crypto-benchmarks.rs/benches/fait_accompli_bench.rs +++ b/crypto-benchmarks.rs/benches/fait_accompli_bench.rs @@ -1,3 +1,5 @@ +//! Criterion benchmarks for Fait Accompli. + use criterion::{criterion_group, criterion_main, Criterion}; use quickcheck::{Arbitrary, Gen}; use std::collections::BTreeMap; diff --git a/crypto-benchmarks.rs/benches/serialization_bench.rs b/crypto-benchmarks.rs/benches/serialization_bench.rs index 2ba778bcb..a3a7f21cd 100644 --- a/crypto-benchmarks.rs/benches/serialization_bench.rs +++ b/crypto-benchmarks.rs/benches/serialization_bench.rs @@ -1,3 +1,5 @@ +//! Criterion benchmarks for serialization and deserialization. + use criterion::{criterion_group, criterion_main, Criterion}; use quickcheck::{Arbitrary, Gen}; diff --git a/crypto-benchmarks.rs/benches/sortition_bench.rs b/crypto-benchmarks.rs/benches/sortition_bench.rs index 0bc45ad77..684181fbf 100644 --- a/crypto-benchmarks.rs/benches/sortition_bench.rs +++ b/crypto-benchmarks.rs/benches/sortition_bench.rs @@ -1,3 +1,5 @@ +//! Criterion benchmarks for sortition. + use criterion::{criterion_group, criterion_main, Criterion}; use num_bigint::BigInt; use num_rational::Ratio; diff --git a/crypto-benchmarks.rs/benches/vote_bench.rs b/crypto-benchmarks.rs/benches/vote_bench.rs index d19b9ff9f..20c9037e3 100644 --- a/crypto-benchmarks.rs/benches/vote_bench.rs +++ b/crypto-benchmarks.rs/benches/vote_bench.rs @@ -1,3 +1,5 @@ +//! Criterion benchmarks for voting. + use criterion::{criterion_group, criterion_main, Criterion}; use leios_crypto_benchmarks::cert::*; use leios_crypto_benchmarks::registry::{arbitrary_pools, PersistentId, Registry}; diff --git a/crypto-benchmarks.rs/benches/vrf_bench.rs b/crypto-benchmarks.rs/benches/vrf_bench.rs index 5d7896b6b..c840b7bb1 100644 --- a/crypto-benchmarks.rs/benches/vrf_bench.rs +++ b/crypto-benchmarks.rs/benches/vrf_bench.rs @@ -1,3 +1,5 @@ +//! Criterion benchmarks for VRF. + use criterion::{criterion_group, criterion_main, Criterion}; use leios_crypto_benchmarks::vrf::{sk_random, sk_to_pk_point, vrf_prove, vrf_verify}; diff --git a/crypto-benchmarks.rs/figure-7-bls.png b/crypto-benchmarks.rs/figure-7-bls.png new file mode 100644 index 000000000..f7a4fcb9c Binary files /dev/null and b/crypto-benchmarks.rs/figure-7-bls.png differ diff --git a/crypto-benchmarks.rs/figure-8-voting.png b/crypto-benchmarks.rs/figure-8-voting.png new file mode 100644 index 000000000..c68079970 Binary files /dev/null and b/crypto-benchmarks.rs/figure-8-voting.png differ diff --git a/crypto-benchmarks.rs/src/bls_util.rs b/crypto-benchmarks.rs/src/bls_util.rs index 69d8a64d3..422dc1e60 100644 --- a/crypto-benchmarks.rs/src/bls_util.rs +++ b/crypto-benchmarks.rs/src/bls_util.rs @@ -1,9 +1,12 @@ +//! Low-level utility functions for BLS operations not supported by the `blst` library. + use blst::min_sig::*; use blst::*; use num_bigint::{BigInt, Sign}; use num_rational::Ratio; use num_traits::FromPrimitive; +/// Apply a function to a public key (i.e., to a point in G2). pub fn pk_transform(f: &dyn Fn(blst_p2) -> blst_p2, pk: &PublicKey) -> PublicKey { let mut point: blst_p2 = blst_p2::default(); unsafe { @@ -24,6 +27,7 @@ pub fn pk_transform(f: &dyn Fn(blst_p2) -> blst_p2, pk: &PublicKey) -> PublicKey } } +/// Apply a function to a signature (i.e., to a point in G1). pub fn sig_transform(f: &dyn Fn(blst_p1) -> blst_p1, sig: &Signature) -> Signature { let mut point: blst_p1 = blst_p1::default(); unsafe { @@ -44,6 +48,7 @@ pub fn sig_transform(f: &dyn Fn(blst_p1) -> blst_p1, sig: &Signature) -> Signatu } } +/// Convert a signature to a rational number between zero and one. pub fn sig_to_rational(sig: &Signature) -> Ratio { let bytes: [u8; 48] = sig.to_bytes(); let mut hashed: [u8; 32] = [0; 32]; diff --git a/crypto-benchmarks.rs/src/bls_vote.rs b/crypto-benchmarks.rs/src/bls_vote.rs index 5c98e9545..482a47640 100644 --- a/crypto-benchmarks.rs/src/bls_vote.rs +++ b/crypto-benchmarks.rs/src/bls_vote.rs @@ -1,13 +1,22 @@ +//! Low-level operations on BLS votes. +//! +//! ![Figure 7: BLS](../../../../figure-7-bls.png) +//! +//! ![Figure 8: voting](../../../../figure-8-voting.png) + use blst::min_sig::*; use blst::*; use rand::RngCore; use crate::bls_util::*; +/// An empty bytestring. const EMPTY: [u8; 0] = []; +/// The domain separator for Leios. const DST: &[u8; 5] = b"Leios"; +/// Generate a secret BLS scalar. pub fn gen_key() -> SecretKey { let mut rng: rand::prelude::ThreadRng = rand::thread_rng(); let mut ikm: [u8; 32] = [0u8; 32]; @@ -16,12 +25,14 @@ pub fn gen_key() -> SecretKey { SecretKey::key_gen(&ikm, info).unwrap() } +/// Create a proof of possession from a secret key `sk`, namely $\mu_1$ and $\mu_2$ of [Figure 8 (voting)](index.html). pub fn make_pop(sk: &SecretKey) -> (Signature, Signature) { let m1: [u8; 192] = sk.sk_to_pk().serialize(); let m2 = EMPTY; (sk.sign(&m1, DST, b"PoP"), sk.sign(&m2, DST, &EMPTY)) } +/// Verify the the proof of possession, namely $\mu_1$ and $\mu_2$ of [Figure 8 (voting)](index.html), for a public key `pk`. pub fn check_pop(pk: &PublicKey, mu1: &Signature, mu2: &Signature) -> bool { let m1: [u8; 192] = pk.serialize(); let m2 = EMPTY; @@ -30,29 +41,35 @@ pub fn check_pop(pk: &PublicKey, mu1: &Signature, mu2: &Signature) -> bool { result1 == BLST_ERROR::BLST_SUCCESS && result2 == BLST_ERROR::BLST_SUCCESS } +/// Sign the message `m` in the election `eid` using the secret key `sk`. pub fn gen_sig(sk: &SecretKey, eid: &[u8], m: &[u8]) -> Signature { sk.sign(m, DST, eid) } +/// Verify a signature `vs` on the message `m` in the election `eid` for the public key `pk`. pub fn verify_sig(pk: &PublicKey, eid: &[u8], m: &[u8], vs: &Signature) -> bool { let result_m = vs.verify(true, m, DST, eid, pk, false); result_m == BLST_ERROR::BLST_SUCCESS } +/// Sign the election `eid` with the secret key `sk`. pub fn gen_sigma_eid(sk: &SecretKey, eid: &[u8]) -> Signature { sk.sign(&EMPTY, DST, eid) } +/// Create a vote for the message `m` in the election `eid` using the secret key `sk`. pub fn gen_vote(sk: &SecretKey, eid: &[u8], m: &[u8]) -> (Signature, Signature) { (sk.sign(&EMPTY, DST, eid), sk.sign(m, DST, eid)) } +/// Verify the vote `vs` for the message `m` in the election `eid` for the public key `pk`. pub fn verify_vote(pk: &PublicKey, eid: &[u8], m: &[u8], vs: &(Signature, Signature)) -> bool { let result_eid = vs.0.verify(true, &EMPTY, DST, eid, pk, true); let result_m = vs.1.verify(true, m, DST, eid, pk, false); result_eid == BLST_ERROR::BLST_SUCCESS && result_m == BLST_ERROR::BLST_SUCCESS } +/// Hash an array of signatures `sigma_eids` and `sigma_ms`. fn hash_sigs(sigma_eids: &[&Signature], sigma_ms: &[&Signature]) -> [u8; 32] { let mut sigmas: Vec<&Signature> = Vec::new(); sigmas.extend(sigma_eids); @@ -65,6 +82,7 @@ fn hash_sigs(sigma_eids: &[&Signature], sigma_ms: &[&Signature]) -> [u8; 32] { } } +/// Hash an integer `i` with a previous hash `h`. fn hash_index(i: i32, h: &[u8; 32]) -> [u8; 32] { let mut msg: [u8; 36] = [0; 36]; let ii: [u8; 4] = i.to_ne_bytes(); @@ -80,12 +98,14 @@ fn hash_index(i: i32, h: &[u8; 32]) -> [u8; 32] { } } +/// Create the signatures for a certificate from the individual vote signatures `vss`. pub fn gen_cert(vss: &[&(Signature, Signature)]) -> Result<(Signature, Signature), BLST_ERROR> { let sigma_eids: Vec<&Signature> = vss.iter().map(|vs| &vs.1).collect(); let sigma_ms: Vec<&Signature> = vss.iter().map(|vs| &vs.1).collect(); gen_cert_fa(&sigma_eids, &sigma_ms) } +/// Verify the contents of certificate signatures `cs` for the message `m` in election `eid`, given the vote signatures `vss`. pub fn verify_cert( pks: &[&PublicKey], eid: &[u8], @@ -129,6 +149,7 @@ pub fn verify_cert( } } +/// Create certificate signatures including both sortition and message signing signatures. pub fn gen_cert_fa( sigma_eids: &[&Signature], sigma_ms: &[&Signature], @@ -161,6 +182,7 @@ pub fn gen_cert_fa( } } +/// Create cerificate signatures including only message signing signatures. pub fn gen_cert_fa_pure(sigma_ms: &[&Signature]) -> Result { let result_m = AggregateSignature::aggregate(sigma_ms, true); match result_m { @@ -169,6 +191,7 @@ pub fn gen_cert_fa_pure(sigma_ms: &[&Signature]) -> Result, + /// Map of non-persistent voter pool hashes to their eligibility signature. pub nonpersistent_voters: BTreeMap, + /// Aggregate eligibility signature. pub sigma_tilde_eid: Option, + /// Aggregate votes signature. pub sigma_tilde_m: Sig, } +/// Generate an arbitrary certificate. pub fn arbitrary_cert(g: &mut Gen, reg: &Registry) -> Cert { let eid = Eid::arbitrary(g); let eb = EbHash::arbitrary(g); @@ -33,6 +43,7 @@ impl Arbitrary for Cert { } } +/// It's convenient to have a data structure for holding certificate information as it is being built. #[derive(Default)] struct TraverseVote<'a> { pub eids: HashSet<&'a Eid>, @@ -43,6 +54,7 @@ struct TraverseVote<'a> { pub sigma_ms: Vec<&'a Signature>, } +/// Add one vote to a certification that is being constructed. fn traverse_vote<'a>(reg: &'a Registry, t: &mut TraverseVote<'a>, vote: &'a Vote) -> Option<()> { match vote { Vote::Persistent { @@ -74,6 +86,7 @@ fn traverse_vote<'a>(reg: &'a Registry, t: &mut TraverseVote<'a>, vote: &'a Vote } } +/// Test that a hash set is a singleton. fn unique(xs: &HashSet) -> Option<&X> { if xs.len() == 1 { xs.iter().next() @@ -82,6 +95,7 @@ fn unique(xs: &HashSet) -> Option<&X> { } } +/// Generate a certificate for the specified votes. pub fn gen_cert(reg: &Registry, votes: &[Vote]) -> Option { let mut t: TraverseVote = TraverseVote::default(); let _ = votes @@ -113,6 +127,7 @@ pub fn gen_cert(reg: &Registry, votes: &[Vote]) -> Option { } } +/// Verify a certificate using the information in the voter registry. pub fn verify_cert(reg: &Registry, cert: &Cert) -> bool { let pks_persistent: Vec<&PublicKey> = cert .persistent_voters @@ -154,6 +169,7 @@ pub fn verify_cert(reg: &Registry, cert: &Cert) -> bool { } } +/// Compute the total weight (i.e., stake fraction) of the persistent votes in a certificate. fn weigh_persistent(reg: &Registry, cert: &Cert) -> Option { let weight: Option = cert.persistent_voters.iter().try_fold(0, |acc, pid| { reg.persistent_pool @@ -163,6 +179,7 @@ fn weigh_persistent(reg: &Registry, cert: &Cert) -> Option { weight.map(|total| CoinFraction::from_coins(total, 1)) } +/// Compute the total weight (i.e., stake fraction) of the non-persistent votes in a certificate. fn weigh_nonpersistent(reg: &Registry, cert: &Cert) -> Option { let nonpersistent_voters = reg.voters - cert.persistent_voters.len(); let weight: Option = @@ -184,6 +201,7 @@ fn weigh_nonpersistent(reg: &Registry, cert: &Cert) -> Option { }) } +/// Compute the total weight (i.e., stake fraction) of the votes in a certificate. pub fn weigh_cert(reg: &Registry, cert: &Cert) -> Option { let persistent_weight = weigh_persistent(reg, cert)?.to_ratio(); let nonpersistent_weight = weigh_nonpersistent(reg, cert)?.to_ratio(); diff --git a/crypto-benchmarks.rs/src/fait_accompli.rs b/crypto-benchmarks.rs/src/fait_accompli.rs index ba11f329c..e4e1ab14d 100644 --- a/crypto-benchmarks.rs/src/fait_accompli.rs +++ b/crypto-benchmarks.rs/src/fait_accompli.rs @@ -1,3 +1,5 @@ +//! Fait Accompli operations. + use num_bigint::BigInt; use num_rational::Ratio; use num_traits::{One, Zero}; @@ -7,16 +9,23 @@ use std::collections::BTreeMap; use crate::primitive::{Coin, CoinFraction, PoolKeyhash}; +/// Fait Accompli sortition results in a committee of persistent and non-persistent voters. #[derive(Clone, Debug, Serialize, Deserialize)] pub struct FaSortition { + /// Number of persistent voters. pub n_persistent: usize, + /// Number of non-persistent voters. pub n_nonpersistent: usize, + /// Stake held by persistent voters. pub persistent: Vec<(PoolKeyhash, CoinFraction)>, + /// State held by non-persistent voters. pub nonpersistent: BTreeMap, + /// Stake cutoff for persistent vs non-persistent voters. pub rho: CoinFraction, } impl FaSortition { + /// Perform Fait Accompli sortiion on the stake distribution `pools` and target committee size `n`. pub fn fait_accompli(pools: &BTreeMap, n: usize) -> Self { let zero: Ratio = Ratio::from_integer(BigInt::zero()); let (s, p): (Vec>, Vec) = sort_stake(pools); @@ -57,6 +66,7 @@ impl FaSortition { } } +/// Sort stake pools in order of decreasing stake. fn sort_stake(pools: &BTreeMap) -> (Vec>, Vec) { let mut sp: Vec<(Ratio, &PoolKeyhash)> = pools .iter() @@ -67,6 +77,7 @@ fn sort_stake(pools: &BTreeMap) -> (Vec>, Vec

]) -> Vec> { let zero: Ratio = Ratio::from_integer(BigInt::zero()); let (mut rho, _): (Vec>, Ratio) = @@ -81,6 +92,7 @@ fn sum_stake(s: &[Ratio]) -> Vec> { rho } +/// Perform the Fait Accompli test that check whether there are any more persistent pools to be selected. fn fa_test(s: &[Ratio], rho: &[Ratio], n: usize, i: usize) -> bool { let zero: Ratio = Ratio::from_integer(BigInt::zero()); let one: Ratio = Ratio::from_integer(BigInt::one()); diff --git a/crypto-benchmarks.rs/src/key.rs b/crypto-benchmarks.rs/src/key.rs index 8bda03d1e..22521b4fe 100644 --- a/crypto-benchmarks.rs/src/key.rs +++ b/crypto-benchmarks.rs/src/key.rs @@ -1,3 +1,5 @@ +//! High-level operations on Leios keys. + use blst::min_sig::*; use blst::BLST_ERROR; use num_bigint::BigInt; @@ -11,6 +13,7 @@ use crate::bls_vote; use crate::primitive::{arbitrary_poolkeyhash, KesSig, PoolKeyhash}; use crate::util::{arbitrary_fixed_bytes, deserialize_fixed_bytes, serialize_fixed_bytes}; +/// A secret key is a BLS scalar. #[derive(Clone, Debug)] pub struct SecKey(pub(crate) SecretKey); @@ -58,6 +61,7 @@ impl Arbitrary for SecKey { } } +/// A public key is a point in G2. #[derive(PartialEq, Eq, Clone, Debug)] pub struct PubKey(pub(crate) PublicKey); @@ -96,6 +100,7 @@ impl Arbitrary for PubKey { } } +/// A signature is a point in G1. #[derive(PartialEq, Eq, Clone, Debug)] pub struct Sig(pub(crate) Signature); @@ -136,9 +141,12 @@ impl Arbitrary for Sig { } } +/// A proof of possession is a pair of points in G1. #[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] pub struct PoP { + /// Signature on the public key. pub mu1: Sig, // 48 bytes + /// Signature in G1. pub mu2: Sig, // 48 bytes } // 96 bytes @@ -153,6 +161,7 @@ impl Arbitrary for PoP { } } +/// Key registration includes the pool hash, the public key, the proof of possession, and a KES signature. #[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] pub struct Reg { pub pool: PoolKeyhash, // 28 bytes @@ -161,6 +170,7 @@ pub struct Reg { pub kes_sig: KesSig, // 448 bytes } // 668 bytes +/// Generate an arbitrary pool registration. pub fn arbitrary_reg(g: &mut Gen, pool: &PoolKeyhash, sk: &SecKey) -> Reg { let (mu1, mu2) = bls_vote::make_pop(&sk.0); Reg { @@ -182,6 +192,7 @@ impl Arbitrary for Reg { } } +/// Generate an arbitrary secret key along with its public key and proof of possession. pub fn key_gen() -> (SecKey, PubKey, PoP) { let sk: SecretKey = bls_vote::gen_key(); let mvk: PublicKey = sk.sk_to_pk(); @@ -196,14 +207,17 @@ pub fn key_gen() -> (SecKey, PubKey, PoP) { ) } +/// Verify a proof of possession `mu` for a public key `mvk`. pub fn check_pop(mvk: &PubKey, mu: &PoP) -> bool { bls_vote::check_pop(&mvk.0, &mu.mu1.0, &mu.mu2.0) } +/// Sign a message `msg` in the domain `dst` with the secret key `sk`. pub fn sign_message(sk: &SecKey, dst: &[u8], msg: &[u8]) -> Sig { Sig(sk.0.sign(msg, dst, &[])) } +/// Verify signature `sig` on a message `msg` in the domain `dst` using a public key `pk`. pub fn verify_message(pk: &PubKey, dst: &[u8], msg: &[u8], sig: &Sig) -> bool { let result = sig.0.verify(true, msg, dst, &[], &pk.0, true); result == BLST_ERROR::BLST_SUCCESS diff --git a/crypto-benchmarks.rs/src/lib.rs b/crypto-benchmarks.rs/src/lib.rs index e0d615a12..027a27575 100644 --- a/crypto-benchmarks.rs/src/lib.rs +++ b/crypto-benchmarks.rs/src/lib.rs @@ -1,3 +1,5 @@ +//! Leios cryptography library. + pub mod bls_util; pub mod bls_vote; pub mod cert; diff --git a/crypto-benchmarks.rs/src/main.rs b/crypto-benchmarks.rs/src/main.rs index f9dc57c54..12b93424c 100644 --- a/crypto-benchmarks.rs/src/main.rs +++ b/crypto-benchmarks.rs/src/main.rs @@ -1,3 +1,5 @@ +//! Command-line interface for Leios cryptography. + use clap::{Parser, Subcommand}; use hex::ToHex; use num_bigint::BigInt; @@ -467,6 +469,7 @@ fn main() { } } +/// Write CBOR to a file. fn write_cbor(path: &PathBuf, item: &A) -> Result<(), Error> where A: serde::Serialize, @@ -475,6 +478,7 @@ where std::fs::write(path, cbor) } +/// Read CBOR from a file. fn read_cbor(path: &PathBuf) -> Result where A: serde::de::DeserializeOwned, diff --git a/crypto-benchmarks.rs/src/primitive.rs b/crypto-benchmarks.rs/src/primitive.rs index c36491cba..842906434 100644 --- a/crypto-benchmarks.rs/src/primitive.rs +++ b/crypto-benchmarks.rs/src/primitive.rs @@ -1,3 +1,5 @@ +//! Serialization and arbitrayr operations involving primitives. + use hex::{FromHex, ToHex}; use num_bigint::BigInt; use num_rational::Ratio; @@ -13,16 +15,19 @@ use crate::util::{arbitrary_fixed_bytes, deserialize_fixed_bytes, serialize_fixe pub use pallas::ledger::primitives::PoolKeyhash; +/// Generate an arbitrary pool hash. pub fn arbitrary_poolkeyhash(g: &mut Gen) -> PoolKeyhash { Hash::from(arbitrary_fixed_bytes(g)) } pub use pallas::ledger::primitives::Coin; +/// Generate an arbitrary amount of coin. pub fn arbitrary_coin(g: &mut Gen) -> Coin { u64::arbitrary(g) % 999999 + 1 } +/// Generate an arbitrary stake distribution. pub fn arbitrary_stake_distribution( g: &mut Gen, total: u64, @@ -37,6 +42,7 @@ pub fn arbitrary_stake_distribution( ) } +/// Stake is a fraction of the total coins. #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug)] pub struct CoinFraction(pub Ratio); @@ -72,6 +78,7 @@ impl<'de> Deserialize<'de> for CoinFraction { } } +/// An election identifier is a slot number. #[derive(PartialEq, Eq, Hash, Clone, Debug)] pub struct Eid(pub Slot); @@ -113,6 +120,7 @@ impl Arbitrary for Eid { } } +/// An EB hash is a Black2b-256 hash. #[derive(PartialEq, Eq, Hash, Clone, Debug)] pub struct EbHash(pub(crate) Blake2b256); @@ -166,6 +174,7 @@ impl Arbitrary for EbHash { } } +/// A KES signature is 448 bytes. #[derive(PartialEq, Eq, Debug, Clone)] pub struct KesSig(pub(crate) [u8; 448]); diff --git a/crypto-benchmarks.rs/src/realism.rs b/crypto-benchmarks.rs/src/realism.rs index a058b97ca..76b1081f4 100644 --- a/crypto-benchmarks.rs/src/realism.rs +++ b/crypto-benchmarks.rs/src/realism.rs @@ -1,3 +1,5 @@ +//! Realistic stake distribution for Cardano mainnet. + use pallas::ledger::primitives::Coin; use quickcheck::{Arbitrary, Gen}; use rand::prelude::Distribution; @@ -6,18 +8,24 @@ use rand::SeedableRng; use statrs::distribution::ContinuousCDF; use statrs::distribution::{Beta, Uniform}; +/// Generate a realistic number of pools. pub fn realistic_pool_count(g: &mut Gen) -> usize { usize::arbitrary(g) % 1500 + 1500 } +/// Generate a realistic total stake. pub fn realistic_total_stake(g: &mut Gen) -> Coin { u64::arbitrary(g) % 30000000000000000 + 15000000000000000 } +/// Generate a realistic voter-count protocol parameter. pub fn realistic_voters(g: &mut Gen, pools: usize) -> usize { pools * (usize::arbitrary(g) % 500 + 500) / 1000 } +/// Generate a realistic stake distribution. +/// +/// The stake `total` is distributed among `n` pools according to a beta distribution with parameters `alpha` and `beta`. pub(crate) fn realistic_stake_dist( g: &mut Gen, total: u64, diff --git a/crypto-benchmarks.rs/src/registry.rs b/crypto-benchmarks.rs/src/registry.rs index dd998a342..f368e4f2d 100644 --- a/crypto-benchmarks.rs/src/registry.rs +++ b/crypto-benchmarks.rs/src/registry.rs @@ -1,3 +1,5 @@ +//! Operations on the voter registry. + use quickcheck::{Arbitrary, Gen}; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; @@ -10,6 +12,7 @@ use crate::primitive::{ }; use crate::realism::realistic_voters; +/// A persistent identifier is just an integer identifying the epoch's pools. #[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Debug, Serialize, Deserialize)] pub struct PersistentId(pub u16); @@ -19,10 +22,14 @@ impl Arbitrary for PersistentId { } } +/// Pools are tracked by their secret key `secret`, their public registration information `reg`, and the amount of stake `stake` they have at the start of the epoch. #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] pub struct PoolInfo { + /// The secret key. pub secret: SecKey, + /// The public registration. pub reg: Reg, + /// The stake for the epoch. pub stake: Coin, } @@ -38,6 +45,7 @@ impl Arbitrary for PoolInfo { } } +/// Generate an arbitrary array of pools from the stake distribution `stake`. pub fn arbitrary_pools(g: &mut Gen, stake: &BTreeMap) -> Vec { stake .iter() @@ -52,17 +60,25 @@ pub fn arbitrary_pools(g: &mut Gen, stake: &BTreeMap) -> Vec< .collect() } +/// The voter registry records which pools are persistent vs non-persistent and their private and public registration information, along with the number of voters and amount of stake. #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] pub struct Registry { + /// Private and public data for the pools. pub info: BTreeMap, + /// Lookup table of pool key hashes for the persistent voters. pub persistent_pool: BTreeMap, + /// Lookup table of pool identifiers for the persistent voters. pub persistent_id: BTreeMap, + /// Total stake. pub total_stake: Coin, + /// Stake of non-persistent voters. pub nonpersistent_stake: CoinFraction, + /// Committee size. pub voters: usize, } impl Registry { + /// Create the registry for the pools `stake` and a committee-size parameter `voters`. pub fn make(stake: &[PoolInfo], voters: usize) -> Self { let info: BTreeMap = BTreeMap::from_iter(stake.iter().map(|pool| (pool.reg.pool, pool.clone()))); diff --git a/crypto-benchmarks.rs/src/sortition.rs b/crypto-benchmarks.rs/src/sortition.rs index 2ec6be5b5..dbe0ed43a 100644 --- a/crypto-benchmarks.rs/src/sortition.rs +++ b/crypto-benchmarks.rs/src/sortition.rs @@ -1,7 +1,10 @@ +//! Sortition operations. + use num_bigint::BigInt; use num_rational::Ratio; use num_traits::{FromPrimitive, One, Signed, Zero}; +/// Compute the logarithm of one minus a value `f`, to the precision allowed by `Ratio) -> Ratio { let epsilon = Ratio::new( BigInt::one(), @@ -24,6 +27,7 @@ pub fn ln_1_minus(f: &Ratio) -> Ratio { } } +/// Verify that a pool with fraction `s` of the stake is selected in the block-production lottery at probability `p`, given the logarithm of one minus the active slot coefficient `ln1f`. pub fn leader_check(ln1f: &Ratio, s: &Ratio, p: &Ratio) -> bool { let t0 = s * ln1f; let zero = Ratio::from_integer(BigInt::zero()); @@ -46,6 +50,7 @@ pub fn leader_check(ln1f: &Ratio, s: &Ratio, p: &Ratio) } } +/// Compute $e^x$ to the precision allowed by `Ratio`. fn exp(x: &Ratio) -> Ratio { let epsilon = Ratio::new( BigInt::one(), @@ -68,6 +73,7 @@ fn exp(x: &Ratio) -> Ratio { } } +/// Verify that a pool with fraction `s` of the stake is selected as a voter at probability `p`, given a committee size of `votes`. pub fn voter_check(votes: usize, s: &Ratio, p: &Ratio) -> usize { let x = Ratio::from_integer(BigInt::from_usize(votes).unwrap()) * s; let v = p / exp(&(-x.clone())); diff --git a/crypto-benchmarks.rs/src/util.rs b/crypto-benchmarks.rs/src/util.rs index 5af20dee2..6505bf233 100644 --- a/crypto-benchmarks.rs/src/util.rs +++ b/crypto-benchmarks.rs/src/util.rs @@ -1,9 +1,11 @@ +//! Helper functions. + use quickcheck::{Arbitrary, Gen}; use serde::de::{Error, Visitor}; use serde::{Deserializer, Serializer}; use std::fmt; -// Helper function to serialize fixed-size byte arrays +/// Serialize a fixed-size byte array. pub fn serialize_fixed_bytes( bytes: &[u8; N], serializer: S, @@ -14,7 +16,7 @@ where serializer.serialize_bytes(bytes) } -// Helper function to deserialize fixed-size byte arrays +/// Deserialize a fixed-size byte array pub fn deserialize_fixed_bytes<'de, D, const N: usize>(deserializer: D) -> Result<[u8; N], D::Error> where D: Deserializer<'de>, @@ -45,6 +47,7 @@ where deserializer.deserialize_bytes(FixedBytesVisitor::) } +/// Generate arbitrary fixed-sized bytes. pub fn arbitrary_fixed_bytes(g: &mut Gen) -> [u8; N] { let mut array = [0u8; N]; for item in array.iter_mut() { diff --git a/crypto-benchmarks.rs/src/vote.rs b/crypto-benchmarks.rs/src/vote.rs index 22a0b6b08..8187c72e0 100644 --- a/crypto-benchmarks.rs/src/vote.rs +++ b/crypto-benchmarks.rs/src/vote.rs @@ -1,3 +1,5 @@ +//! High-level voting operations. + use blst::min_sig::*; use quickcheck::{Arbitrary, Gen}; use serde::{Deserialize, Serialize}; @@ -9,23 +11,40 @@ use crate::registry::*; use crate::sortition::*; use crate::util::*; +/// A vote may be either persistent or non-persistent. +/// +/// Votes occur for an EB `eb` in an election `eid`. The signature `sigma_m` signs the vote. +/// +/// Persistent voter are identified by their position `persistent` in the table of pools for the epoch. +/// +/// Non-persistent voters are identified by their pool's key hash. Their `sigma_eid` attests to their presence in the voting committee. #[derive(PartialEq, Eq, Debug, Clone, Serialize, Deserialize)] pub enum Vote { + /// A persistent vote. Persistent { + /// Pool identifier for voter. persistent: PersistentId, // 2 bytes + /// Election identifier. eid: Eid, // 8 bytes + /// Hash of the EB being voted for. eb: EbHash, // 32 bytes + /// Signature on the vote. sigma_m: Sig, // 48 bytes }, // 90 bytes Nonpersistent { pool: PoolKeyhash, // 28 bytes + /// Election identifier. eid: Eid, // 8 bytes + /// Hash of the EB being voted for. eb: EbHash, // 32 bytes + /// Eligibility proof. sigma_eid: Sig, // 48 bytes + /// Signature on the vote. sigma_m: Sig, // 48 bytes }, // 164 bytes } +/// Generate an arbitrary vote, for testing. impl Arbitrary for Vote { fn arbitrary(g: &mut Gen) -> Self { let sk: SecretKey = SecKey::arbitrary(g).0; @@ -52,10 +71,12 @@ impl Arbitrary for Vote { } } +/// Sign an election `eid` with a secret key `sk`. pub fn gen_sigma_eid(eid: &Eid, sk: &SecKey) -> Sig { Sig(bls_vote::gen_sigma_eid(&sk.0, &eid.bytes())) } +/// Create a persistent vote for voter `persistent` for EB `m` in election `eid` using the secret key `sk`. pub fn gen_vote_persistent(peristent: &PersistentId, eid: &Eid, m: &EbHash, sk: &SecKey) -> Vote { let sigma_m = bls_vote::gen_sig(&sk.0, &eid.bytes(), &m.bytes()); Vote::Persistent { @@ -66,6 +87,7 @@ pub fn gen_vote_persistent(peristent: &PersistentId, eid: &Eid, m: &EbHash, sk: } } +/// Create a non-persistent vote for voter `pool` for EB `m` in election `eid` using the secret key `sk`. pub fn gen_vote_nonpersistent(pool: &PoolKeyhash, eid: &Eid, m: &EbHash, sk: &SecKey) -> Vote { let (sigma_eid, sigma_m) = bls_vote::gen_vote(&sk.0, &eid.bytes(), &m.bytes()); Vote::Nonpersistent { @@ -77,6 +99,7 @@ pub fn gen_vote_nonpersistent(pool: &PoolKeyhash, eid: &Eid, m: &EbHash, sk: &Se } } +/// Verify a vote `vote` cast with the public key `mvk`. pub fn verify_vote(mvk: &PubKey, vote: &Vote) -> bool { match vote { Vote::Persistent { @@ -95,6 +118,7 @@ pub fn verify_vote(mvk: &PubKey, vote: &Vote) -> bool { } } +/// Cast all of the votes for an election `eid` on an EB `eb` using the voter registry `reg`. pub fn do_voting(reg: &Registry, eid: &Eid, eb: &EbHash) -> Vec { let mut votes = Vec::new(); reg.info.values().for_each(|info| { @@ -127,6 +151,7 @@ pub fn do_voting(reg: &Registry, eid: &Eid, eb: &EbHash) -> Vec { votes } +/// Generate votes for an arbitrary EB in an arbitrary election. pub fn arbitrary_votes(g: &mut Gen, reg: &Registry) -> Vec { let eid = Eid::arbitrary(g); let eb = EbHash::arbitrary(g); diff --git a/crypto-benchmarks.rs/src/vrf.rs b/crypto-benchmarks.rs/src/vrf.rs index 8c23abc59..187cc28c1 100644 --- a/crypto-benchmarks.rs/src/vrf.rs +++ b/crypto-benchmarks.rs/src/vrf.rs @@ -1,7 +1,10 @@ +//! VRF operations. + use blst::*; use min_pk::SecretKey; use rand::RngCore; +/// Generate a random secret key. pub fn sk_random() -> SecretKey { let mut rng = rand::thread_rng(); let mut ikm = [0u8; 32]; @@ -9,6 +12,7 @@ pub fn sk_random() -> SecretKey { SecretKey::key_gen(&ikm, &[]).unwrap() } +/// Convert a secret key `sk` into a BLS scalar. fn sk_scalar(sk: &SecretKey) -> blst_scalar { let ser = sk.serialize(); let mut sk1: blst_scalar = blst_scalar::default(); @@ -18,6 +22,7 @@ fn sk_scalar(sk: &SecretKey) -> blst_scalar { sk1 } +/// Map a secret key `sk` into a point in G1. pub fn sk_to_pk_point(sk: &SecretKey) -> blst_p1 { let sk_sca: blst_scalar = sk_scalar(sk); let mut pk: blst_p1 = blst_p1::default(); @@ -27,6 +32,7 @@ pub fn sk_to_pk_point(sk: &SecretKey) -> blst_p1 { pk } +/// Generate a random BLS scalar. fn rnd_scalar() -> blst_scalar { let mut rng = rand::thread_rng(); let mut scalar_bytes: [u8; 32] = [0u8; 32]; @@ -38,6 +44,7 @@ fn rnd_scalar() -> blst_scalar { scalar } +/// Create a VRF proof for the data `input` using the secret key `sk` and domain separator `dst`. pub fn vrf_prove(sk: &SecretKey, input: &[u8], dst: &[u8]) -> (blst_p1, blst_scalar, blst_fr) { let sk_bytes: [u8; 32] = sk.to_bytes(); @@ -105,6 +112,7 @@ pub fn vrf_prove(sk: &SecretKey, input: &[u8], dst: &[u8]) -> (blst_p1, blst_sca (gamma, c, s) } +/// Verify a VRF proof for the data `input` and domain separator `dst`, given the proof (`gamma`, `c`, `s`). pub fn vrf_verify( pk: &blst_p1, input: &[u8], diff --git a/crypto-benchmarks.rs/tests/cert_tests.rs b/crypto-benchmarks.rs/tests/cert_tests.rs index 0b2149a56..e62e054f8 100644 --- a/crypto-benchmarks.rs/tests/cert_tests.rs +++ b/crypto-benchmarks.rs/tests/cert_tests.rs @@ -1,3 +1,5 @@ +//! Quickcheck tests for certificates. + #[macro_use(quickcheck)] extern crate quickcheck_macros; diff --git a/crypto-benchmarks.rs/tests/fait_accompli_tests.rs b/crypto-benchmarks.rs/tests/fait_accompli_tests.rs index ebdd5cfd3..ce98b56c4 100644 --- a/crypto-benchmarks.rs/tests/fait_accompli_tests.rs +++ b/crypto-benchmarks.rs/tests/fait_accompli_tests.rs @@ -1,3 +1,5 @@ +//! Quickcheck tests for Fait Accompli. + use num_bigint::BigInt; use num_rational::Ratio; use std::collections::BTreeMap; diff --git a/crypto-benchmarks.rs/tests/serialization_tests.rs b/crypto-benchmarks.rs/tests/serialization_tests.rs index 582fbe840..5615cac5b 100644 --- a/crypto-benchmarks.rs/tests/serialization_tests.rs +++ b/crypto-benchmarks.rs/tests/serialization_tests.rs @@ -1,3 +1,5 @@ +//! Round-trip serialization tests. + #[macro_use(quickcheck)] extern crate quickcheck_macros; diff --git a/crypto-benchmarks.rs/tests/sortition_tests.rs b/crypto-benchmarks.rs/tests/sortition_tests.rs index 6a1e3792b..22d7e0491 100644 --- a/crypto-benchmarks.rs/tests/sortition_tests.rs +++ b/crypto-benchmarks.rs/tests/sortition_tests.rs @@ -1,3 +1,5 @@ +//! Quickcheck tests for sortition. + use num_bigint::BigInt; use num_rational::Ratio; use num_traits::{FromPrimitive, One}; diff --git a/crypto-benchmarks.rs/tests/vote_tests.rs b/crypto-benchmarks.rs/tests/vote_tests.rs index 8f3f76baa..4ac942c75 100644 --- a/crypto-benchmarks.rs/tests/vote_tests.rs +++ b/crypto-benchmarks.rs/tests/vote_tests.rs @@ -1,3 +1,5 @@ +//! Quickcheck tests for voting. + #[macro_use(quickcheck)] extern crate quickcheck_macros;