From 99a2cc1110eafc2750969020d3e8abbf62f09bac Mon Sep 17 00:00:00 2001 From: Michael Lodder Date: Wed, 31 Jan 2024 14:09:56 -0700 Subject: [PATCH] derive new key types and ec ops for new curves --- Cargo.lock | 897 ++++++++++-------- crates/precompile/Cargo.toml | 13 +- .../precompile/src/cait_sith_key_deriver.rs | 226 ++++- crates/precompile/src/ec_ops.rs | 628 +++++++++++- 4 files changed, 1285 insertions(+), 479 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7ef0ed3102..10f71fc4d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" dependencies = [ "cfg-if", "once_cell", @@ -46,13 +46,12 @@ checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "alloy-rlp" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc0fac0fc16baf1f63f78b47c3d24718f3619b0714076f6a02957d808d52cbef" +checksum = "8d58d9f5da7b40e9bfff0b7e7816700be4019db97d4b6359fe7f94a9e22e42ac" dependencies = [ "arrayvec", "bytes", - "smol_str", ] [[package]] @@ -72,15 +71,15 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "2faccea4cc4ab4a667ce676a30e8ec13922a692c99bb8f5b11f1502c72e04220" [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "arbitrary" @@ -229,13 +228,13 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "async-trait" -version = "0.1.74" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -262,14 +261,13 @@ dependencies = [ [[package]] name = "auto_impl" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89" +checksum = "823b8bb275161044e2ac7a25879cb3e2480cb403e3943022c7c769c599b756aa" dependencies = [ - "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.48", ] [[package]] @@ -307,9 +305,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" @@ -340,9 +338,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" dependencies = [ "arbitrary", "serde", @@ -361,6 +359,15 @@ dependencies = [ "wyz", ] +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -372,9 +379,9 @@ dependencies = [ [[package]] name = "bls12_381_plus" -version = "0.8.9" +version = "0.8.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a252088f37312dddaadf6104a37d0577d72be1c55b594d440ce1bc73d1d198c" +checksum = "7533858fe2da020c4fba936036e702de0f73144fe13f9c71113f6f804cde3466" dependencies = [ "arrayref", "elliptic-curve", @@ -390,13 +397,14 @@ dependencies = [ [[package]] name = "blsful" -version = "2.4.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5097aecf1f5a0066a691aa1ef3dd3a5cbd4e0cf6790ce51ac6bde2f77547532a" +checksum = "a0b5f4d0984de152d3f7fca38a37d8c614fe9608f8a067d14b46377f24aebcf4" dependencies = [ "anyhow", "arrayref", "bls12_381_plus", + "blstrs_plus", "hex", "hkdf", "merlin", @@ -405,6 +413,7 @@ dependencies = [ "rand_chacha", "rand_core", "serde", + "serde_bare", "sha2", "sha3", "subtle", @@ -414,6 +423,36 @@ dependencies = [ "zeroize", ] +[[package]] +name = "blst" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c94087b935a822949d3291a9989ad2b2051ea141eda0fd4e478a75f6aa3e604b" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "blstrs_plus" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c1ca574510a27e5fcd0378fecd75b9ffd49d0a558d994f765c587fd20ec982" +dependencies = [ + "arrayref", + "blst", + "elliptic-curve", + "ff", + "group", + "pairing", + "rand_core", + "serde", + "subtle", + "zeroize", +] + [[package]] name = "bumpalo" version = "3.14.0" @@ -464,18 +503,18 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" dependencies = [ "num-traits", ] [[package]] name = "ciborium" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ "ciborium-io", "ciborium-ll", @@ -484,15 +523,15 @@ dependencies = [ [[package]] name = "ciborium-io" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" [[package]] name = "ciborium-ll" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", "half", @@ -515,18 +554,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.7" +version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" +checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.4.7" +version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" +checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" dependencies = [ "anstyle", "clap_lex", @@ -540,15 +579,15 @@ checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "console" -version = "0.15.7" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ "encode_unicode", "lazy_static", "libc", "unicode-width", - "windows-sys 0.45.0", + "windows-sys 0.52.0", ] [[package]] @@ -566,9 +605,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "convert_case" @@ -578,9 +617,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -588,9 +627,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "core2" @@ -603,9 +642,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -619,7 +658,7 @@ dependencies = [ "anes", "cast", "ciborium", - "clap 4.4.7", + "clap 4.4.18", "criterion-plot", "is-terminal", "itertools", @@ -648,36 +687,28 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -687,9 +718,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.5.3" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", "rand_core", @@ -719,6 +750,7 @@ dependencies = [ "digest 0.10.7", "fiat-crypto", "platforms", + "rand_core", "rustc_version 0.4.0", "subtle", "zeroize", @@ -732,7 +764,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -757,9 +789,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "der" @@ -774,9 +806,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.9" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", ] @@ -800,7 +832,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -839,9 +871,9 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.8" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", "digest 0.10.7", @@ -863,14 +895,30 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" +checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0" dependencies = [ "curve25519-dalek", "ed25519", "serde", "sha2", + "subtle", + "zeroize", +] + +[[package]] +name = "ed448-goldilocks-plus" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54ab14053f15938903e6fd9fa467f225525812c5995b465167a2eb4941498c51" +dependencies = [ + "elliptic-curve", + "hex", + "rand_core", + "serde", + "sha3", + "subtle", "zeroize", ] @@ -882,9 +930,9 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "elliptic-curve" -version = "0.13.6" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97ca172ae9dc9f9b779a6e3a65d308f2af74e5b8c921299075bdb4a0370e914" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", @@ -922,7 +970,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe81b5c06ecfdbc71dd845216f225f53b62a10cb8a16c946836a3467f701d05b" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", "bytes", "hex", "k256", @@ -936,13 +984,13 @@ dependencies = [ [[package]] name = "enumn" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" +checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -953,12 +1001,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1011,9 +1059,9 @@ dependencies = [ [[package]] name = "ethers-contract" -version = "2.0.10" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d79269278125006bb0552349c03593ffa9702112ca88bc7046cc669f148fb47c" +checksum = "43304317c7f776876e47f2f637859f6d0701c1ec7930a150f169d5fbe7d76f5a" dependencies = [ "const-hex", "ethers-core", @@ -1027,9 +1075,9 @@ dependencies = [ [[package]] name = "ethers-core" -version = "2.0.10" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0a17f0708692024db9956b31d7a20163607d2745953f5ae8125ab368ba280ad" +checksum = "aab3cef6cc1c9fd7f787043c81ad3052eff2b96a3878ef1526aa446311bdbfc9" dependencies = [ "arrayvec", "bytes", @@ -1054,13 +1102,13 @@ dependencies = [ [[package]] name = "ethers-providers" -version = "2.0.10" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6838fa110e57d572336178b7c79e94ff88ef976306852d8cb87d9e5b1fc7c0b5" +checksum = "fb6b15393996e3b8a78ef1332d6483c11d839042c17be58decc92fa8b1c3508a" dependencies = [ "async-trait", "auto_impl", - "base64 0.21.5", + "base64 0.21.7", "bytes", "const-hex", "enr", @@ -1120,9 +1168,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a481586acf778f1b1455424c343f71124b048ffa5f4fc3f8f6ae9dc432dcb3c7" +checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" [[package]] name = "fixed-hash" @@ -1144,9 +1192,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -1159,9 +1207,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -1174,9 +1222,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -1184,15 +1232,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -1201,32 +1249,32 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-macro" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] name = "futures-sink" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-timer" @@ -1240,9 +1288,9 @@ dependencies = [ [[package]] name = "futures-util" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -1278,9 +1326,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", @@ -1289,9 +1337,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "glob" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "gloo-timers" @@ -1312,15 +1366,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", + "rand", "rand_core", + "rand_xorshift", "subtle", ] [[package]] name = "h2" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" dependencies = [ "bytes", "fnv", @@ -1328,7 +1384,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 1.9.3", + "indexmap", "slab", "tokio", "tokio-util", @@ -1337,9 +1393,13 @@ dependencies = [ [[package]] name = "half" -version = "1.8.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" +dependencies = [ + "cfg-if", + "crunchy", +] [[package]] name = "hash-db" @@ -1349,15 +1409,9 @@ checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a" [[package]] name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ "ahash", "allocator-api2", @@ -1374,16 +1428,26 @@ dependencies = [ ] [[package]] -name = "hd-keys-ecdsa" -version = "0.1.0" -source = "git+https://github.com/LIT-Protocol/hd-keys-ecdsa.git#8585c921e8c6bbc8734953b96b788a3f13371a90" +name = "hd-keys-curves" +version = "0.2.0" +source = "git+https://github.com/LIT-Protocol/hd-keys-curves.git#8f62be7884adeebdb895a442c5eab5abe16048fc" dependencies = [ + "blake2", + "blsful", + "curve25519-dalek-ml", "digest 0.10.7", + "ed448-goldilocks-plus", + "elliptic-curve", + "hex", + "jubjub", "k256", "p256", + "p384", "serde", "sha2", + "sha3", "thiserror", + "vsss-rs", ] [[package]] @@ -1412,9 +1476,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" [[package]] name = "hex" @@ -1433,9 +1497,9 @@ checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] name = "hkdf" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ "hmac", ] @@ -1451,9 +1515,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", @@ -1462,9 +1526,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -1485,9 +1549,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -1500,7 +1564,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.10", + "socket2", "tokio", "tower-service", "tracing", @@ -1523,9 +1587,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -1571,22 +1635,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.1.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "433de089bd45971eecf4668ee0ee8f4cec17db4f8bd8f7bc3197a6ce37aa7d9b" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown", ] [[package]] @@ -1619,13 +1673,13 @@ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi 0.3.4", "rustix", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1639,15 +1693,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "js-sys" -version = "0.3.65" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" dependencies = [ "wasm-bindgen", ] @@ -1658,7 +1712,7 @@ version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", "pem", "ring 0.16.20", "serde", @@ -1666,11 +1720,28 @@ dependencies = [ "simple_asn1", ] +[[package]] +name = "jubjub" +version = "0.10.4" +source = "git+https://github.com/LIT-Protocol/jubjub.git#3924292eb6b3ef5489744998c18de7c5144df499" +dependencies = [ + "bitvec", + "bls12_381_plus", + "elliptic-curve", + "ff", + "group", + "hex", + "rand_chacha", + "rand_core", + "serde", + "subtle", +] + [[package]] name = "k256" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", "ecdsa", @@ -1682,9 +1753,9 @@ dependencies = [ [[package]] name = "keccak" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ "cpufeatures", ] @@ -1700,9 +1771,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.149" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libm" @@ -1712,9 +1783,9 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "linux-raw-sys" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "log" @@ -1724,18 +1795,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "memchr" -version = "2.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" - -[[package]] -name = "memoffset" -version = "0.9.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "merlin" @@ -1766,9 +1828,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "wasi", @@ -1858,29 +1920,29 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi 0.3.4", "libc", ] [[package]] name = "num_enum" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683751d591e6d81200c39fb0d1032608b77724f34114db54f571ff1317b337c0" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c11e44798ad209ccdd91fc192f0526a369a01234f7373e1b141c96d7cee4f0e" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate 2.0.0", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -1891,18 +1953,18 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" @@ -1970,9 +2032,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "3.6.5" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" dependencies = [ "arrayvec", "bitvec", @@ -1984,11 +2046,11 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "3.6.5" +version = "3.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 2.0.0", "proc-macro2", "quote", "syn 1.0.109", @@ -2020,15 +2082,15 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" +checksum = "1f200d8d83c44a45b21764d1916299752ca035d15ecd46faca3e9a2a2bf6ad06" dependencies = [ "memchr", "thiserror", @@ -2047,22 +2109,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -2098,9 +2160,9 @@ dependencies = [ [[package]] name = "platforms" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0" +checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" [[package]] name = "plotters" @@ -2132,9 +2194,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" [[package]] name = "powerfmt" @@ -2150,9 +2212,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "primeorder" -version = "0.13.2" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" dependencies = [ "elliptic-curve", ] @@ -2190,6 +2252,15 @@ dependencies = [ "toml_edit 0.20.7", ] +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -2216,28 +2287,28 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] [[package]] name = "proptest" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c003ac8c77cb07bb74f5f198bce836a689bcd5a42574612bf14d17bfd08c20e" +checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.4.1", + "bitflags 2.4.2", "lazy_static", "num-traits", "rand", "rand_chacha", "rand_xorshift", - "regex-syntax 0.7.5", + "regex-syntax", "rusty-fork", "tempfile", "unarray", @@ -2262,9 +2333,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -2316,9 +2387,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" dependencies = [ "either", "rayon-core", @@ -2326,9 +2397,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -2345,33 +2416,27 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.2" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax 0.8.2", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.2", + "regex-syntax", ] -[[package]] -name = "regex-syntax" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" - [[package]] name = "regex-syntax" version = "0.8.2" @@ -2380,11 +2445,11 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" -version = "0.11.22" +version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", "bytes", "encoding_rs", "futures-core", @@ -2406,6 +2471,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "system-configuration", "tokio", "tokio-rustls", @@ -2456,15 +2522,18 @@ dependencies = [ [[package]] name = "revm-precompile" -version = "2.0.3" +version = "2.0.4" dependencies = [ + "blake2", "blsful", "curve25519-dalek-ml", "ecdsa", "ed25519-dalek", + "ed448-goldilocks-plus", "elliptic-curve", - "hd-keys-ecdsa", + "hd-keys-curves", "hex", + "jubjub", "k256", "num", "num-bigint", @@ -2486,13 +2555,13 @@ version = "1.1.2" dependencies = [ "arbitrary", "auto_impl", - "bitflags 2.4.1", + "bitflags 2.4.2", "bitvec", "bytes", "derive_more", "enumn", "fixed-hash", - "hashbrown 0.14.2", + "hashbrown", "hex", "hex-literal", "primitive-types", @@ -2510,7 +2579,7 @@ version = "0.2.0" dependencies = [ "bytes", "hash-db", - "hashbrown 0.14.2", + "hashbrown", "hex", "hex-literal", "indicatif", @@ -2555,9 +2624,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.5" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" dependencies = [ "cc", "getrandom", @@ -2655,41 +2724,41 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.20", + "semver 1.0.21", ] [[package]] name = "rustix" -version = "0.38.21" +version = "0.38.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "rustls" -version = "0.21.8" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring 0.17.5", + "ring 0.17.7", "rustls-webpki", "sct", ] [[package]] name = "rustls-pemfile" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", ] [[package]] @@ -2698,7 +2767,7 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.5", + "ring 0.17.7", "untrusted 0.9.0", ] @@ -2722,9 +2791,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "same-file" @@ -2759,19 +2828,13 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "sct" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.5", + "ring 0.17.7", "untrusted 0.9.0", ] @@ -2818,9 +2881,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" [[package]] name = "semver-parser" @@ -2845,31 +2908,40 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.190" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" dependencies = [ "serde_derive", ] +[[package]] +name = "serde_bare" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51c55386eed0f1ae957b091dc2ca8122f287b60c79c774cbe3d5f2b69fded660" +dependencies = [ + "serde", +] + [[package]] name = "serde_derive" -version = "1.0.190" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" dependencies = [ - "indexmap 2.1.0", + "indexmap", "itoa", "ryu", "serde", @@ -2921,9 +2993,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", "rand_core", @@ -2950,25 +3022,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "smol_str" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" -dependencies = [ - "serde", -] - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.5.5" @@ -2993,9 +3046,9 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "spki" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der", @@ -3056,7 +3109,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -3091,15 +3144,21 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "system-configuration" version = "0.5.1" @@ -3129,15 +3188,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ "cfg-if", "fastrand", "redox_syscall", "rustix", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -3151,22 +3210,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -3189,11 +3248,20 @@ dependencies = [ "thiserror-impl-no-std", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + [[package]] name = "time" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ "deranged", "itoa", @@ -3211,9 +3279,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" dependencies = [ "time-core", ] @@ -3254,9 +3322,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.33.0" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ "backtrace", "bytes", @@ -3264,20 +3332,20 @@ dependencies = [ "mio", "num_cpus", "pin-project-lite", - "socket2 0.5.5", + "socket2", "tokio-macros", "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -3331,7 +3399,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.1.0", + "indexmap", "toml_datetime", "winnow", ] @@ -3342,7 +3410,18 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.1.0", + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", "toml_datetime", "winnow", ] @@ -3372,7 +3451,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] @@ -3406,9 +3485,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" @@ -3471,9 +3550,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" @@ -3522,9 +3601,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -3557,11 +3636,13 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vsss-rs" -version = "3.3.1" +version = "3.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f368a01a79af8f2fa45e20a2a478a9799c631c4a7c598563e2c94b2211f750cb" +checksum = "196bbee60607a195bc850e94f0e040bd090e45794ad8df0e9c5a422b9975a00f" dependencies = [ + "curve25519-dalek", "elliptic-curve", + "hex", "rand", "rand_chacha", "rand_core", @@ -3607,9 +3688,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.88" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3617,24 +3698,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.88" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.38" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" dependencies = [ "cfg-if", "js-sys", @@ -3644,9 +3725,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.88" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3654,28 +3735,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.88" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.88" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" [[package]] name = "web-sys" -version = "0.3.65" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" dependencies = [ "js-sys", "wasm-bindgen", @@ -3683,9 +3764,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "winapi" @@ -3718,15 +3799,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets 0.42.2", -] - [[package]] name = "windows-sys" version = "0.48.0" @@ -3737,18 +3809,12 @@ dependencies = [ ] [[package]] -name = "windows-targets" -version = "0.42.2" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.52.0", ] [[package]] @@ -3767,10 +3833,19 @@ dependencies = [ ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" +name = "windows-targets" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] [[package]] name = "windows_aarch64_gnullvm" @@ -3779,10 +3854,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] -name = "windows_aarch64_msvc" -version = "0.42.2" +name = "windows_aarch64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" [[package]] name = "windows_aarch64_msvc" @@ -3791,10 +3866,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] -name = "windows_i686_gnu" -version = "0.42.2" +name = "windows_aarch64_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" [[package]] name = "windows_i686_gnu" @@ -3803,10 +3878,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] -name = "windows_i686_msvc" -version = "0.42.2" +name = "windows_i686_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" @@ -3815,10 +3890,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] -name = "windows_x86_64_gnu" -version = "0.42.2" +name = "windows_i686_msvc" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[package]] name = "windows_x86_64_gnu" @@ -3827,10 +3902,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" +name = "windows_x86_64_gnu" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" [[package]] name = "windows_x86_64_gnullvm" @@ -3839,10 +3914,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] -name = "windows_x86_64_msvc" -version = "0.42.2" +name = "windows_x86_64_gnullvm" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" [[package]] name = "windows_x86_64_msvc" @@ -3850,11 +3925,17 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winnow" -version = "0.5.18" +version = "0.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176b6138793677221d420fd2f0aeeced263f197688b36484660da767bca2fa32" +checksum = "818ce546a11a9986bc24f93d0cdf38a8a1a400f1473ea8c82e59f6e0ffab9249" dependencies = [ "memchr", ] @@ -3899,29 +3980,29 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.21" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686b7e407015242119c33dab17b8f61ba6843534de936d94368856528eae4dcc" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.21" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020f3dfe25dfc38dfea49ce62d5d45ecdd7f0d8a724fa63eb36b6eba4ec76806" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] [[package]] name = "zeroize" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" dependencies = [ "zeroize_derive", ] @@ -3934,5 +4015,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.48", ] diff --git a/crates/precompile/Cargo.toml b/crates/precompile/Cargo.toml index b1745c01a3..76e19cc215 100644 --- a/crates/precompile/Cargo.toml +++ b/crates/precompile/Cargo.toml @@ -6,16 +6,19 @@ keywords = ["no_std", "ethereum", "evm", "revm", "precompiles"] license = "MIT" name = "revm-precompile" repository = "https://github.com/bluealloy/revm" -version = "2.0.3" +version = "2.0.4" [dependencies] revm-primitives = { path = "../primitives", version = "1.1.2", default-features = false } -blsful = { version = "2.4.1", default-features = false, features = ["rust"] } +blake2 = "0.10" +blsful = { version = "2.5", default-features = false, features = ["rust"] } bn = { package = "substrate-bn", version = "0.6", default-features = false } -curve25519-dalek = { package = "curve25519-dalek-ml", version = "4.1.1", features = ["digest"] } -ed25519-dalek = "2.0.0" +curve25519-dalek = { package = "curve25519-dalek-ml", version = "4.1.1", features = ["digest", "group"] } +ed25519-dalek = "2.1.0" +ed448-goldilocks-plus = "0.11" ecdsa = "0.16.8" elliptic-curve = { version = "0.13.5", features = ["arithmetic", "hash2curve"] } +jubjub = { version = "0.10", git = "https://github.com/LIT-Protocol/jubjub.git" } k256 = { version = "0.13", default-features = false, features = ["ecdsa", "arithmetic"] } p256 = { version = "0.13", default-features = false, features = ["ecdsa", "arithmetic"] } p384 = { version = "0.13", default-features = false, features = ["ecdsa", "arithmetic", "expose-field", "hash2curve"] } @@ -30,7 +33,7 @@ secp256k1 = { version = "0.27.0", default-features = false, features = [ sha2 = { version = "0.10.5", default-features = false } sha3 = { version = "0.10.7", default-features = false } -hd-keys-ecdsa = { git = "https://github.com/LIT-Protocol/hd-keys-ecdsa.git" } +hd-keys-curves = { git = "https://github.com/LIT-Protocol/hd-keys-curves.git" } [dev-dependencies] hex = "0.4" diff --git a/crates/precompile/src/cait_sith_key_deriver.rs b/crates/precompile/src/cait_sith_key_deriver.rs index 7dcef2e0f2..439d172248 100644 --- a/crates/precompile/src/cait_sith_key_deriver.rs +++ b/crates/precompile/src/cait_sith_key_deriver.rs @@ -1,12 +1,13 @@ use super::{calc_linear_cost_u32, extract_points, IDENTITY_BASE, IDENTITY_PER_WORD}; +use crate::ec_ops::*; use crate::{Error, Precompile, PrecompileAddress, PrecompileResult, StandardPrecompileFn, Vec}; use elliptic_curve::{ group::cofactor::CofactorGroup, hash2curve::{FromOkm, GroupDigest}, - sec1::{FromEncodedPoint, ModulusSize, ToEncodedPoint}, + sec1::{FromEncodedPoint, ModulusSize}, Curve, CurveArithmetic, }; -use hd_keys_ecdsa::*; +use hd_keys_curves::*; pub const DERIVE_CAIT_SITH_PUBKEY: PrecompileAddress = PrecompileAddress( crate::u64_to_b160(245), @@ -16,6 +17,37 @@ pub const DERIVE_CAIT_SITH_PUBKEY: PrecompileAddress = PrecompileAddress( /// The minimum length of the input. const MIN_LENGTH: usize = 81; +#[repr(u8)] +pub enum CurveType { + P256 = 0, + K256 = 1, + P384 = 2, + Ed25519 = 3, + Ed448 = 4, + Jubjub = 5, + Bls12381G1 = 6, + Bls12381G2 = 7, + Ristretto25519 = 8, +} + +impl TryFrom for CurveType { + type Error = String; + fn try_from(value: u8) -> Result { + match value { + 0 => Ok(Self::P256), + 1 => Ok(Self::K256), + 2 => Ok(Self::P384), + 3 => Ok(Self::Ed25519), + 4 => Ok(Self::Ed448), + 5 => Ok(Self::Jubjub), + 6 => Ok(Self::Bls12381G1), + 7 => Ok(Self::Bls12381G2), + 8 => Ok(Self::Ristretto25519), + _ => Err("invalid curve".to_string()), + } + } +} + fn derive_cait_sith_pubkey(input: &[u8], gas_limit: u64) -> PrecompileResult { println!("Lit Precompile: derive_cait_sith_pubkey"); let gas_used = calc_linear_cost_u32(input.len(), IDENTITY_BASE, IDENTITY_PER_WORD); @@ -24,53 +56,164 @@ fn derive_cait_sith_pubkey(input: &[u8], gas_limit: u64) -> PrecompileResult { } for i in 0..input.len() { - match input[i] { - 0 => { - if let Ok(params) = DeriveParams::::try_from(&input[i + 1..]) { - let deriver = - HdKeyDeriver::::new(¶ms.id, ¶ms.cxt).unwrap(); + if let Ok(params) = DeriveParamCnt::try_from(&input[i..]) { + return params.derive_public_key().map(|pk| (gas_used, pk)); + } + if input.len() - i < MIN_LENGTH { + break; + } + } + Err(Error::OutOfGas) +} - println!("root_hd_keys: {:?}", params.root_hd_keys); - let public = deriver.compute_public_key(¶ms.root_hd_keys); +struct DeriveParamCnt<'a> { + curve_type: CurveType, + id: &'a [u8], + cxt: &'a [u8], + buffer: &'a [u8], + public_key_count: usize, +} - return Ok(( - gas_used, - public - .to_affine() - .to_encoded_point(false) - .as_bytes() - .to_vec(), - )); - } - } - 1 => { - if let Ok(params) = DeriveParams::::try_from(&input[i + 1..]) { - let deriver = - HdKeyDeriver::::new(¶ms.id, ¶ms.cxt).unwrap(); +impl<'a> TryFrom<&'a [u8]> for DeriveParamCnt<'a> { + type Error = String; - println!("root_hd_keys: {:?}", params.root_hd_keys); - let public = deriver.compute_public_key(¶ms.root_hd_keys); + fn try_from(value: &'a [u8]) -> Result { + let err = Err(format!("invalid length for derive params: {}", value.len())); + if value.len() < MIN_LENGTH { + return err; + } + let curve_type = CurveType::try_from(value[0])?; - return Ok(( - gas_used, - public - .to_affine() - .to_encoded_point(false) - .as_bytes() - .to_vec(), - )); - } - } - _ => {} + let mut offset = 1; + if offset + 4 > value.len() { + return err; + } + let id_len = u32::from_be_bytes([ + value[offset], + value[offset + 1], + value[offset + 2], + value[offset + 3], + ]) as usize; + offset += 4; + if offset + id_len > value.len() || id_len == 0 { + return err; } + let id = &value[offset..offset + id_len]; + offset += id_len; + if offset + 4 > value.len() { + return err; + } + let cxt_len = u32::from_be_bytes([ + value[offset], + value[offset + 1], + value[offset + 2], + value[offset + 3], + ]) as usize; + offset += 4; + if offset + cxt_len > value.len() || cxt_len == 0 { + return err; + } + let cxt = &value[offset..offset + cxt_len]; + offset += cxt_len; + let pks_cnt = u32::from_be_bytes([ + value[offset], + value[offset + 1], + value[offset + 2], + value[offset + 3], + ]) as usize; + if pks_cnt < 2 { + return Err(format!("Insufficient public key count: {}", pks_cnt)); + } + offset += 4; + Ok(Self { + curve_type, + id, + cxt, + buffer: &value[offset..], + public_key_count: pks_cnt, + }) + } +} - if input.len() - i < MIN_LENGTH { - break; +impl<'a> DeriveParamCnt<'a> { + pub fn derive_public_key(&self) -> Result, Error> { + match self.curve_type { + CurveType::P256 => { + self.compute_new_public_key::( + prime256v1_points, + prime256v1_point_out, + ) + }, + CurveType::K256 => { + self.compute_new_public_key::( + secp256k1_points, + secp256k1_point_out, + ) + }, + CurveType::P384 => { + self.compute_new_public_key::( + secp384r1_points, + secp384r1_point_out, + ) + }, + CurveType::Ed25519 => { + self.compute_new_public_key::( + curve25519_points, + curve25519_point_out + ) + }, + CurveType::Ed448 => { + self.compute_new_public_key::( + curve448_points, + curve448_point_out, + ) + }, + CurveType::Jubjub => { + self.compute_new_public_key::( + jubjub_points, + jubjub_point_out, + ) + }, + CurveType::Bls12381G1 => { + self.compute_new_public_key::( + bls12381g1_points, + |pk| pk.to_uncompressed().to_vec() + ) + }, + CurveType::Bls12381G2 => { + self.compute_new_public_key::( + bls12381g2_points, + |pk| pk.to_uncompressed().to_vec() + ) + }, + CurveType::Ristretto25519 => { + self.compute_new_public_key::( + ristretto25519_points, + ristretto25519_point_out + ) + } } } - Err(Error::OutOfGas) + + fn compute_new_public_key( + &self, + convert_points: F, + out_point: O, + ) -> Result, Error> + where + B: HDDerivable, + D: HDDeriver, + F: Fn(&[u8], usize) -> Result<(&[u8], Vec), Error>, + O: Fn(&B) -> Vec, + { + let (_, public_keys) = convert_points(self.buffer, self.public_key_count)?; + let tweak = D::create(self.id, self.cxt); + let pk = tweak.hd_derive_public_key(&public_keys); + Ok(out_point(&pk)) + } } +#[deprecated(since = "2.0.3", note = "Please use DeriveParamsCnt instead")] struct DeriveParams where C: GroupDigest, @@ -225,8 +368,9 @@ fn derive_precompile_works() { #[test] fn run_test_k256() { - let input = hex::decode("0100000020b6b29bd7863f9d949c1352e0f3cf4b4cc194846e6b5dda28bda465b79e1d83630000002b4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5f0000000202706ed9fbf152fcc24fa744f727fb3f1e309344f458f6f1ce5ac395785c40b7580248a534627a648dc2f3a555ae215d887a38d1983b962a32215a4c8ab01817aed0").unwrap(); - let res = derive_cait_sith_pubkey(&input, 1000000000000000000); + let input = hex::decode("0100000020b6b29bd7863f9d949c1352e0f3cf4b4cc194846e6b5dda28bda465b79e1d83630000002b4c49545f48445f4b45595f49445f4b3235365f584d443a5348412d3235365f535357555f524f5f4e554c5f00000002706ed9fbf152fcc24fa744f727fb3f1e309344f458f6f1ce5ac395785c40b758d1708a19d70e9eb8f04dded74302e302230ca839d9b0a6b512ebaf6180c397ae48a534627a648dc2f3a555ae215d887a38d1983b962a32215a4c8ab01817aed0405f2ebd4571adc68aab5d1be4193d2bedf2d7ec3c0d5623374509efc16a5aac").unwrap(); + let temp = hex::decode(&input).unwrap(); + let res = derive_cait_sith_pubkey(&temp, 1000000000000000000); assert!(res.is_ok()); } diff --git a/crates/precompile/src/ec_ops.rs b/crates/precompile/src/ec_ops.rs index 5d350ac087..b800ef9f08 100644 --- a/crates/precompile/src/ec_ops.rs +++ b/crates/precompile/src/ec_ops.rs @@ -1,5 +1,4 @@ use blsful::Pairing; -use curve25519_dalek::EdwardsPoint; use elliptic_curve::{ group::{prime::PrimeCurveAffine, Curve, GroupEncoding}, hash2curve::GroupDigest, @@ -217,6 +216,14 @@ const CURVE_NAME_BLS12381GT: &[u8] = &[ 72, 104, 114, 249, 247, 74, 129, 138, 239, 93, 192, 105, 87, 88, 22, 147, 201, 72, 247, 204, 168, 110, 248, 13, 211, 195, 253, 59, 152, 53, 40, 135, ]; +const CURVE_NAME_JUBJUB: &[u8] = &[ + 134, 207, 207, 62, 155, 118, 130, 42, 187, 158, 186, 128, 70, 96, 138, 78, 235, 13, 173, 62, + 30, 220, 174, 128, 204, 21, 33, 35, 77, 117, 80, 189, +]; +const CURVE_NAME_CURVE448: &[u8] = &[ + 168, 208, 60, 254, 40, 51, 250, 69, 203, 225, 43, 80, 125, 84, 58, 230, 136, 19, 36, 161, 32, + 237, 220, 15, 48, 109, 160, 28, 115, 223, 202, 157, +]; const HASH_NAME_SHA2_256: &[u8] = &[ 231, 8, 169, 121, 9, 175, 229, 141, 81, 199, 223, 139, 162, 228, 170, 161, 233, 154, 116, 235, 240, 211, 10, 216, 160, 162, 14, 213, 193, 29, 101, 84, @@ -257,6 +264,10 @@ const HASH_NAME_TAPROOT: &[u8] = &[ 8, 215, 83, 31, 179, 38, 223, 4, 226, 165, 107, 122, 113, 187, 97, 125, 54, 221, 210, 133, 184, 114, 109, 3, 149, 156, 81, 26, 98, 162, 91, 241, ]; +const HASH_NAME_BLAKE2B_512: &[u8] = &[ + 199, 113, 236, 116, 45, 210, 39, 24, 141, 41, 249, 12, 120, 254, 23, 104, 210, 191, 95, 107, + 10, 139, 24, 34, 55, 109, 234, 231, 162, 80, 65, 254, +]; trait EcOps { fn handle(&self, data: &[u8], gas_limit: u64) -> PrecompileResult { @@ -299,6 +310,14 @@ trait EcOps { let result = self.bls12381g1(&data[i + 32..])?; return Ok((gas_used, result)); } + CURVE_NAME_CURVE448 => { + let result = self.curve448(&data[i + 32..])?; + return Ok((gas_used, result)); + } + CURVE_NAME_JUBJUB => { + let result = self.jubjub(&data[i + 32..])?; + return Ok((gas_used, result)); + } _ => {} }; i += 1; @@ -312,6 +331,8 @@ trait EcOps { fn bls12381g1(&self, data: &[u8]) -> Result, Error>; fn bls12381g2(&self, data: &[u8]) -> Result, Error>; fn bls12381gt(&self, data: &[u8]) -> Result, Error>; + fn curve448(&self, data: &[u8]) -> Result, Error>; + fn jubjub(&self, data: &[u8]) -> Result, Error>; } fn parse_hash(data: &[u8]) -> Result<(&[u8], Box), Error> { @@ -373,6 +394,12 @@ fn parse_hash(data: &[u8]) -> Result<(&[u8], Box), Error> _marker: PhantomData, }), )), + HASH_NAME_BLAKE2B_512 => Ok(( + &data[32..], + Box::new(SchnorrFixedDigest:: { + _marker: PhantomData, + }), + )), _ => Err(Error::EcOpsInvalidHash), } } @@ -431,7 +458,7 @@ impl SchnorrChallenge for SchnorrHashTaproot { } } -fn secp256k1_points( +pub(crate) fn secp256k1_points( data: &[u8], point_cnt: usize, ) -> Result<(&[u8], Vec), Error> { @@ -462,7 +489,7 @@ fn secp256k1_scalars(data: &[u8], scalar_cnt: usize) -> Result<(&[u8], Vec Result<(&[u8], Vec), Error> { @@ -493,7 +520,7 @@ fn prime256v1_scalars(data: &[u8], scalar_cnt: usize) -> Result<(&[u8], Vec Result<(&[u8], Vec), Error> { @@ -584,7 +611,10 @@ fn secp384r1_scalars(data: &[u8], scalar_cnt: usize) -> Result<(&[u8], Vec Result<(&[u8], Vec), Error> { +pub(crate) fn curve25519_points( + data: &[u8], + point_cnt: usize, +) -> Result<(&[u8], Vec), Error> { if 64 * point_cnt > data.len() { return Err(Error::EcOpsInvalidPoint); } @@ -603,6 +633,28 @@ fn curve25519_points(data: &[u8], point_cnt: usize) -> Result<(&[u8], Vec Result<(&[u8], Vec), Error> { + if 64 * point_cnt > data.len() { + return Err(Error::EcOpsInvalidPoint); + } + let mut points = Vec::with_capacity(point_cnt); + for i in 0..point_cnt { + let compressed_point = curve25519_dalek::ristretto::CompressedRistretto::from_slice( + &data[(64 * i) + 32..64 * (i + 1)], + ) + .map_err(|_| Error::EcOpsInvalidPoint)?; + let point = compressed_point + .decompress() + .ok_or(Error::EcOpsInvalidPoint)?; + points.push(point); + } + + Ok((&data[64 * point_cnt..], points)) +} + fn curve25519_scalars( data: &[u8], scalar_cnt: usize, @@ -622,7 +674,7 @@ fn curve25519_scalars( Ok((&data[32 * scalar_cnt..], scalars)) } -fn bls12381g1_points( +pub(crate) fn bls12381g1_points( data: &[u8], point_cnt: usize, ) -> Result<(&[u8], Vec), Error> { @@ -648,7 +700,7 @@ fn bls12381g1_points( )) } -fn bls12381g2_points( +pub(crate) fn bls12381g2_points( data: &[u8], point_cnt: usize, ) -> Result<(&[u8], Vec), Error> { @@ -685,8 +737,13 @@ fn bls12381gt_scalar( } let mut scalars = Vec::with_capacity(cnt); for i in 0..cnt { - let bytes = <[u8; Gt::BYTES]>::try_from(&data[Gt::BYTES * i..Gt::BYTES * (i + 1)]).unwrap(); - let scalar = Option::::from(Gt::from_bytes(&bytes)).ok_or(Error::EcOpsInvalidScalar)?; + let mut repr = ::Repr::default(); + repr.as_mut().copy_from_slice( + &data[blsful::inner_types::Gt::BYTES * i..blsful::inner_types::Gt::BYTES * (i + 1)], + ); + let scalar = + Option::::from(blsful::inner_types::Gt::from_bytes(&repr)) + .ok_or(Error::EcOpsInvalidScalar)?; scalars.push(scalar); } @@ -712,6 +769,81 @@ fn bls12381_scalars( Ok((&data[32 * scalar_cnt..], scalars)) } +pub(crate) fn curve448_points( + data: &[u8], + points_cnt: usize, +) -> Result<(&[u8], Vec), Error> { + if 57 * points_cnt > data.len() { + return Err(Error::EcOpsInvalidPoint); + } + let mut points = Vec::with_capacity(points_cnt); + for i in 0..points_cnt { + let compressed_pt = + ed448_goldilocks_plus::CompressedEdwardsY::try_from(&data[57 * i..57 * (i + 1)]) + .map_err(|_| Error::EcOpsInvalidPoint)?; + let point = Option::::from(compressed_pt.decompress()) + .ok_or(Error::EcOpsInvalidPoint)?; + points.push(point); + } + + Ok((&data[57 * points_cnt..], points)) +} + +fn curve448_scalars( + data: &[u8], + scalar_cnt: usize, +) -> Result<(&[u8], Vec), Error> { + if 57 * scalar_cnt > data.len() { + return Err(Error::EcOpsInvalidScalar); + } + let mut bytes = ed448_goldilocks_plus::ScalarBytes::default(); + + let mut scalars = Vec::with_capacity(scalar_cnt); + for i in 0..scalar_cnt { + bytes.copy_from_slice(&data[57 * i..57 * (i + 1)]); + let scalar = Option::::from( + ed448_goldilocks_plus::Scalar::from_canonical_bytes(&bytes), + ) + .ok_or(Error::EcOpsInvalidScalar)?; + scalars.push(scalar); + } + Ok((&data[57 * scalar_cnt..], scalars)) +} + +pub(crate) fn jubjub_points( + data: &[u8], + point_cnt: usize, +) -> Result<(&[u8], Vec), Error> { + if 32 * point_cnt > data.len() { + return Err(Error::EcOpsInvalidPoint); + } + let mut points = Vec::with_capacity(point_cnt); + for i in 0..point_cnt { + let bytes = &data[(32 * i)..32 * (i + 1)] + .try_into() + .map_err(|_| Error::EcOpsInvalidPoint)?; + let compressed_point = jubjub::SubgroupPoint::from_bytes(bytes); + let point = Option::from(compressed_point).ok_or(Error::EcOpsInvalidPoint)?; + points.push(point); + } + + Ok((&data[32 * point_cnt..], points)) +} + +fn jubjub_scalars(data: &[u8], scalar_cnt: usize) -> Result<(&[u8], Vec), Error> { + if 32 * scalar_cnt > data.len() { + return Err(Error::EcOpsInvalidScalar); + } + let mut scalars = Vec::with_capacity(scalar_cnt); + for i in 0..scalar_cnt { + let bytes = <[u8; 32]>::try_from(&data[32 * i..32 * (i + 1)]).unwrap(); + let scalar = Option::::from(jubjub::Scalar::from_bytes(&bytes)) + .ok_or(Error::EcOpsInvalidScalar)?; + scalars.push(scalar); + } + Ok((&data[32 * scalar_cnt..], scalars)) +} + fn read_usizes(data: &[u8], cnt: usize) -> Result<(&[u8], Vec), Error> { if 32 * cnt > data.len() { return Err(Error::EcOpsInvalidSize); @@ -725,24 +857,38 @@ fn read_usizes(data: &[u8], cnt: usize) -> Result<(&[u8], Vec), Error> { Ok((&data[32 * cnt..], lengths)) } -fn secp256k1_point_out(point: &k256::ProjectivePoint) -> Vec { +pub(crate) fn secp256k1_point_out(point: &k256::ProjectivePoint) -> Vec { point.to_encoded_point(false).as_bytes()[1..].to_vec() } -fn prime256v1_point_out(point: &p256::ProjectivePoint) -> Vec { +pub(crate) fn prime256v1_point_out(point: &p256::ProjectivePoint) -> Vec { point.to_encoded_point(false).as_bytes()[1..].to_vec() } -fn secp384r1_point_out(point: &p384::ProjectivePoint) -> Vec { +pub(crate) fn secp384r1_point_out(point: &p384::ProjectivePoint) -> Vec { point.to_affine().to_encoded_point(false).as_bytes()[1..].to_vec() } -fn curve25519_point_out(point: &curve25519_dalek::EdwardsPoint) -> Vec { +pub(crate) fn curve25519_point_out(point: &curve25519_dalek::EdwardsPoint) -> Vec { + let mut out = vec![0u8; 64]; + out[32..].copy_from_slice(point.compress().as_bytes()); + out +} + +pub(crate) fn ristretto25519_point_out(point: &curve25519_dalek::RistrettoPoint) -> Vec { let mut out = vec![0u8; 64]; out[32..].copy_from_slice(point.compress().as_bytes()); out } +pub(crate) fn curve448_point_out(point: &ed448_goldilocks_plus::EdwardsPoint) -> Vec { + point.compress().to_bytes().to_vec() +} + +pub(crate) fn jubjub_point_out(point: &jubjub::SubgroupPoint) -> Vec { + point.to_bytes().as_ref().to_vec() +} + struct EcMultiply {} struct EcAdd {} struct EcNeg {} @@ -814,6 +960,20 @@ impl EcOps for EcMultiply { let (data, points) = bls12381gt_scalar(data, 1)?; let (_, scalars) = bls12381_scalars(data, 1)?; let point = points[0] * scalars[0]; + Ok(point.to_bytes().as_ref().to_vec()) + } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (data, points) = curve448_points(data, 1)?; + let (_, scalars) = curve448_scalars(data, 1)?; + let point = points[0] * scalars[0]; + Ok(point.compress().to_bytes().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (data, points) = jubjub_points(data, 1)?; + let (_, scalars) = jubjub_scalars(data, 1)?; + let point = points[0] * scalars[0]; Ok(point.to_bytes().to_vec()) } } @@ -858,7 +1018,19 @@ impl EcOps for EcAdd { fn bls12381gt(&self, data: &[u8]) -> Result, Error> { let (_, scalars) = bls12381gt_scalar(data, 2)?; let scalar = scalars[0] + scalars[1]; - Ok(scalar.to_bytes().to_vec()) + Ok(scalar.to_bytes().as_ref().to_vec()) + } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, points) = curve448_points(data, 2)?; + let point = points[0] + points[1]; + Ok(point.compress().to_bytes().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, points) = jubjub_points(data, 2)?; + let point = points[0] + points[1]; + Ok(point.to_bytes().to_vec()) } } @@ -902,7 +1074,19 @@ impl EcOps for EcNeg { fn bls12381gt(&self, data: &[u8]) -> Result, Error> { let (_, scalars) = bls12381gt_scalar(data, 1)?; let scalar = -scalars[0]; - Ok(scalar.to_bytes().to_vec()) + Ok(scalar.to_bytes().as_ref().to_vec()) + } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, points) = curve448_points(data, 1)?; + let point = -points[0]; + Ok(point.compress().to_bytes().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, points) = jubjub_points(data, 1)?; + let point = -points[0]; + Ok(point.to_bytes().to_vec()) } } @@ -948,6 +1132,18 @@ impl EcOps for EcEqual { let res = scalars[0] == scalars[1]; Ok(vec![res.into()]) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, points) = curve448_points(data, 2)?; + let res = points[0] == points[1]; + Ok(vec![res.into()]) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, points) = jubjub_points(data, 2)?; + let res = points[0] == points[1]; + Ok(vec![res.into()]) + } } impl EcOps for EcIsInfinity { @@ -992,6 +1188,18 @@ impl EcOps for EcIsInfinity { let res = scalars[0].is_identity().unwrap_u8(); Ok(vec![res]) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, points) = curve448_points(data, 1)?; + let res = points[0].is_identity().unwrap_u8(); + Ok(vec![res]) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, points) = jubjub_points(data, 1)?; + let res = points[0].is_identity().unwrap_u8(); + Ok(vec![res]) + } } impl EcOps for EcIsValid { @@ -1031,6 +1239,16 @@ impl EcOps for EcIsValid { let (_, _scalars) = bls12381gt_scalar(data, 1)?; Ok(vec![1]) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, _points) = curve448_points(data, 1)?; + Ok(vec![1]) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, _points) = jubjub_points(data, 1)?; + Ok(vec![1]) + } } impl EcOps for EcHash { @@ -1095,8 +1313,28 @@ impl EcOps for EcHash { blsful::inner_types::G2Projective::GENERATOR, )]) .to_bytes() + .as_ref() .to_vec()) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (data, lengths) = read_usizes(data, 1)?; + let point = ed448_goldilocks_plus::EdwardsPoint::hash::< + elliptic_curve::hash2curve::ExpandMsgXof, + >(&data[..lengths[0]], b"edwards448_XOF:SHAKE-256_ELL2_RO_"); + Ok(point.compress().to_bytes().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (data, lengths) = read_usizes(data, 1)?; + let point = jubjub::SubgroupPoint::from(jubjub::ExtendedPoint::hash::< + elliptic_curve::hash2curve::ExpandMsgXmd, + >( + &data[..lengths[0]], + b"jubjub_XMD:BLAKE2B-512_SSWU_RO_", + )); + Ok(point.to_bytes().to_vec()) + } } impl EcOps for EcSumOfProducts { @@ -1137,7 +1375,7 @@ impl EcOps for EcSumOfProducts { let cnt = lengths[0]; let (data, points) = curve25519_points(data, cnt)?; let (_, scalars) = curve25519_scalars(data, cnt)?; - let point = EdwardsPoint::multiscalar_mul(scalars.iter(), points.iter()); + let point = curve25519_dalek::EdwardsPoint::multiscalar_mul(scalars.iter(), points.iter()); Ok(curve25519_point_out(&point)) } @@ -1164,11 +1402,35 @@ impl EcOps for EcSumOfProducts { let cnt = lengths[0]; let (data, points) = bls12381gt_scalar(data, cnt)?; let (_, scalars) = bls12381_scalars(data, cnt)?; - let mut result = blsful::inner_types::Gt::IDENTITY; + let mut result = blsful::inner_types::Gt::identity(); for i in 0..cnt { result += points[i] * scalars[i]; } - Ok(result.to_bytes().to_vec()) + Ok(result.to_bytes().as_ref().to_vec()) + } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (data, lengths) = read_usizes(data, 1)?; + let cnt = lengths[0]; + let (data, points) = curve448_points(data, cnt)?; + let (_, scalars) = curve448_scalars(data, cnt)?; + let point = points.into_iter().zip(scalars).fold( + ed448_goldilocks_plus::EdwardsPoint::IDENTITY, + |acc, (p, s)| acc + p * s, + ); + Ok(point.compress().as_bytes().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (data, lengths) = read_usizes(data, 1)?; + let cnt = lengths[0]; + let (data, points) = jubjub_points(data, cnt)?; + let (_, scalars) = jubjub_scalars(data, cnt)?; + let point = points + .into_iter() + .zip(scalars) + .fold(jubjub::SubgroupPoint::IDENTITY, |acc, (p, s)| acc + p * s); + Ok(point.to_bytes().to_vec()) } } @@ -1200,6 +1462,7 @@ impl EcOps for EcPairing { } Ok(blsful::Bls12381G1Impl::pairing(pairs.as_slice()) .to_bytes() + .as_ref() .to_vec()) } @@ -1214,6 +1477,7 @@ impl EcOps for EcPairing { } Ok(blsful::Bls12381G1Impl::pairing(pairs.as_slice()) .to_bytes() + .as_ref() .to_vec()) } @@ -1228,8 +1492,17 @@ impl EcOps for EcPairing { } Ok(blsful::Bls12381G1Impl::pairing(pairs.as_slice()) .to_bytes() + .as_ref() .to_vec()) } + + fn curve448(&self, _data: &[u8]) -> Result, Error> { + Err(Error::EcOpsInvalidCurve) + } + + fn jubjub(&self, _data: &[u8]) -> Result, Error> { + Err(Error::EcOpsInvalidCurve) + } } impl EcOps for ScalarAdd { @@ -1274,6 +1547,18 @@ impl EcOps for ScalarAdd { let scalar = scalars[0] + scalars[1]; Ok(scalar.to_be_bytes().to_vec()) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = curve448_scalars(data, 2)?; + let scalar = scalars[0] + scalars[1]; + Ok(scalar.to_bytes_rfc_8032().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = jubjub_scalars(data, 2)?; + let scalar = scalars[0] + scalars[1]; + Ok(scalar.to_bytes().to_vec()) + } } impl EcOps for ScalarMul { @@ -1318,6 +1603,18 @@ impl EcOps for ScalarMul { let scalar = scalars[0] * scalars[1]; Ok(scalar.to_be_bytes().to_vec()) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = curve448_scalars(data, 2)?; + let scalar = scalars[0] * scalars[1]; + Ok(scalar.to_bytes_rfc_8032().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = jubjub_scalars(data, 2)?; + let scalar = scalars[0] * scalars[1]; + Ok(scalar.to_bytes().to_vec()) + } } impl EcOps for ScalarNeg { @@ -1362,6 +1659,18 @@ impl EcOps for ScalarNeg { let scalar = -scalars[0]; Ok(scalar.to_be_bytes().to_vec()) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = curve448_scalars(data, 1)?; + let scalar = -scalars[0]; + Ok(scalar.to_bytes_rfc_8032().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = jubjub_scalars(data, 1)?; + let scalar = -scalars[0]; + Ok(scalar.to_bytes().to_vec()) + } } impl EcOps for ScalarInv { @@ -1394,24 +1703,37 @@ impl EcOps for ScalarInv { fn bls12381g1(&self, data: &[u8]) -> Result, Error> { let (_, scalars) = bls12381_scalars(data, 1)?; - let scalar = Option::::from(scalars[0].invert()) + let scalar = Option::::from(Field::invert(&scalars[0])) .ok_or(Error::EcOpsInvalidScalar)?; Ok(scalar.to_be_bytes().to_vec()) } fn bls12381g2(&self, data: &[u8]) -> Result, Error> { let (_, scalars) = bls12381_scalars(data, 1)?; - let scalar = Option::::from(scalars[0].invert()) + let scalar = Option::::from(Field::invert(&scalars[0])) .ok_or(Error::EcOpsInvalidScalar)?; Ok(scalar.to_be_bytes().to_vec()) } fn bls12381gt(&self, data: &[u8]) -> Result, Error> { let (_, scalars) = bls12381_scalars(data, 1)?; - let scalar = Option::::from(scalars[0].invert()) + let scalar = Option::::from(Field::invert(&scalars[0])) .ok_or(Error::EcOpsInvalidScalar)?; Ok(scalar.to_be_bytes().to_vec()) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = curve448_scalars(data, 1)?; + let scalar = scalars[0].invert(); + Ok(scalar.to_bytes_rfc_8032().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = jubjub_scalars(data, 1)?; + let scalar = + Option::::from(scalars[0].invert()).ok_or(Error::EcOpsInvalidScalar)?; + Ok(scalar.to_bytes().to_vec()) + } } impl EcOps for ScalarSqrt { @@ -1484,6 +1806,26 @@ impl EcOps for ScalarSqrt { Err(Error::EcOpsInvalidScalar) } } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = curve448_scalars(data, 1)?; + let (is_sqr, res) = scalars[0].sqrt_alt(); + if is_sqr.into() { + Ok(res.to_bytes_rfc_8032().to_vec()) + } else { + Err(Error::EcOpsInvalidScalar) + } + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = jubjub_scalars(data, 1)?; + let (is_sqr, res) = scalars[0].sqrt_alt(); + if is_sqr.into() { + Ok(res.to_bytes().to_vec()) + } else { + Err(Error::EcOpsInvalidScalar) + } + } } impl EcOps for ScalarEqual { @@ -1528,6 +1870,18 @@ impl EcOps for ScalarEqual { let res = scalars[0] == scalars[1]; Ok(vec![res.into()]) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = curve448_scalars(data, 2)?; + let res = scalars[0] == scalars[1]; + Ok(vec![res.into()]) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = jubjub_scalars(data, 2)?; + let res = scalars[0] == scalars[1]; + Ok(vec![res.into()]) + } } impl EcOps for ScalarIsZero { @@ -1572,6 +1926,18 @@ impl EcOps for ScalarIsZero { let res = scalars[0].is_zero().unwrap_u8(); Ok(vec![res]) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = curve448_scalars(data, 1)?; + let res = scalars[0].is_zero().unwrap_u8(); + Ok(vec![res]) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (_, scalars) = jubjub_scalars(data, 1)?; + let res = scalars[0].is_zero().unwrap_u8(); + Ok(vec![res]) + } } impl EcOps for ScalarIsValid { @@ -1609,6 +1975,16 @@ impl EcOps for ScalarIsValid { let res = bls12381_scalars(data, 1).is_ok(); Ok(vec![res.into()]) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let res = curve448_scalars(data, 1).is_ok(); + Ok(vec![res.into()]) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let res = jubjub_scalars(data, 1).is_ok(); + Ok(vec![res.into()]) + } } impl EcOps for ScalarFromWideBytes { @@ -1687,6 +2063,23 @@ impl EcOps for ScalarFromWideBytes { blsful::inner_types::Scalar::from_bytes_wide(&<[u8; 64]>::try_from(data).unwrap()); Ok(scalar.to_be_bytes().to_vec()) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + if data.len() != 114 { + return Err(Error::EcOpsInvalidSize); + } + let bytes = ed448_goldilocks_plus::WideScalarBytes::from_slice(data); + let scalar = ed448_goldilocks_plus::Scalar::from_bytes_mod_order_wide(bytes); + Ok(scalar.to_bytes_rfc_8032().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + if data.len() != 64 { + return Err(Error::EcOpsInvalidSize); + } + let scalar = jubjub::Scalar::from_bytes_wide(&<[u8; 64]>::try_from(data).unwrap()); + Ok(scalar.to_bytes().to_vec()) + } } impl EcOps for ScalarHash { @@ -1753,6 +2146,24 @@ impl EcOps for ScalarHash { >(&data[..cnt], b"BLS12381_XMD:SHA-256_RO_"); Ok(scalar.to_be_bytes().to_vec()) } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (data, lengths) = read_usizes(data, 1)?; + let cnt = lengths[0]; + let scalar = ed448_goldilocks_plus::Scalar::hash::< + elliptic_curve::hash2curve::ExpandMsgXof, + >(&data[..cnt], b"edwards448_XOF:SHAKE-256_RO_"); + Ok(scalar.to_bytes_rfc_8032().to_vec()) + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (data, lengths) = read_usizes(data, 1)?; + let cnt = lengths[0]; + let scalar = jubjub::Scalar::hash::< + elliptic_curve::hash2curve::ExpandMsgXmd, + >(&data[..cnt], b"jubjub_XMD:BLAKE2B-512_RO_"); + Ok(scalar.to_bytes().to_vec()) + } } impl EcOps for EcdsaVerify { @@ -1837,6 +2248,14 @@ impl EcOps for EcdsaVerify { fn bls12381gt(&self, _data: &[u8]) -> Result, Error> { Err(Error::EcOpsNotSupported) } + + fn curve448(&self, _data: &[u8]) -> Result, Error> { + Err(Error::EcOpsNotSupported) + } + + fn jubjub(&self, _data: &[u8]) -> Result, Error> { + Err(Error::EcOpsNotSupported) + } } impl EcOps for SchnorrVerify1 { @@ -1985,8 +2404,12 @@ impl EcOps for SchnorrVerify1 { return Err(Error::EcOpsInvalidPoint); } - let big_r = - EdwardsPoint::vartime_double_scalar_mul_basepoint(&e, &-points[0], &s).compress(); + let big_r = curve25519_dalek::EdwardsPoint::vartime_double_scalar_mul_basepoint( + &e, + &-points[0], + &s, + ) + .compress(); if big_r == r { Ok(vec![1u8]) } else { @@ -2086,6 +2509,79 @@ impl EcOps for SchnorrVerify1 { Ok(vec![0u8]) } } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (data, hasher) = parse_hash(data)?; + if data.len() < 57 { + return Err(Error::EcOpsInvalidSize); + } + let msg = &data[..57]; + let (data, points) = curve448_points(&data[57..], 1)?; + if points[0].is_identity().into() { + return Err(Error::EcOpsInvalidPoint); + } + if data.len() < 114 { + return Err(Error::EcOpsInvalidSignature); + } + let e_bytes = hasher.compute_challenge(&data[..57], points[0].compress().as_bytes(), msg); + let e_arr = ed448_goldilocks_plus::WideScalarBytes::from_slice(&e_bytes); + let e = ed448_goldilocks_plus::Scalar::from_bytes_mod_order_wide(e_arr); + let s_bytes = ed448_goldilocks_plus::ScalarBytes::from_slice(&data[57..114]); + let s = Option::::from( + ed448_goldilocks_plus::Scalar::from_canonical_bytes(s_bytes), + ) + .ok_or(Error::EcOpsInvalidScalar)?; + if s.is_zero().into() { + return Err(Error::EcOpsInvalidScalar); + } + let r = Option::::from( + ed448_goldilocks_plus::CompressedEdwardsY::try_from(&data[..57]) + .map_err(|_| Error::EcOpsInvalidScalar)? + .decompress(), + ) + .ok_or(Error::EcOpsInvalidScalar)?; + if r.is_identity().into() { + return Err(Error::EcOpsInvalidPoint); + } + + let big_r = (-points[0] * e) + ed448_goldilocks_plus::EdwardsPoint::GENERATOR * s; + if big_r == r { + Ok(vec![1u8]) + } else { + Ok(vec![0u8]) + } + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (data, hasher) = parse_hash(data)?; + if data.len() < 32 { + return Err(Error::EcOpsInvalidSize); + } + let msg = &data[..32]; + let (data, points) = jubjub_points(&data[32..], 2)?; + if (points[0].is_identity() | points[1].is_identity()).into() { + return Err(Error::EcOpsInvalidPoint); + } + let pk = points[0]; + let sig_r = points[1]; + let (_, sig_s) = jubjub_scalars(data, 1)?; + if sig_s[0].is_zero().into() { + return Err(Error::EcOpsInvalidScalar); + } + + let e_bytes = + hasher.compute_challenge(sig_r.to_bytes().as_ref(), pk.to_bytes().as_ref(), msg); + let mut e_arr = [0u8; 64]; + e_arr[64 - e_bytes.len()..].copy_from_slice(&e_bytes[..]); + let e = jubjub::Scalar::from_bytes_wide(&e_arr); + + let big_r = jubjub::SubgroupPoint::generator() * sig_s[0] - pk * e; + if big_r == sig_r { + Ok(vec![1u8]) + } else { + Ok(vec![0u8]) + } + } } impl EcOps for SchnorrVerify2 { @@ -2251,7 +2747,8 @@ impl EcOps for SchnorrVerify2 { } let big_r = - EdwardsPoint::vartime_double_scalar_mul_basepoint(&e, &points[0], &s).compress(); + curve25519_dalek::EdwardsPoint::vartime_double_scalar_mul_basepoint(&e, &points[0], &s) + .compress(); if big_r == r { Ok(vec![1u8]) } else { @@ -2360,6 +2857,79 @@ impl EcOps for SchnorrVerify2 { Ok(vec![0u8]) } } + + fn curve448(&self, data: &[u8]) -> Result, Error> { + let (data, hasher) = parse_hash(data)?; + if data.len() < 57 { + return Err(Error::EcOpsInvalidSize); + } + let msg = &data[..57]; + let (data, points) = curve448_points(&data[57..], 1)?; + if points[0].is_identity().into() { + return Err(Error::EcOpsInvalidPoint); + } + if data.len() < 114 { + return Err(Error::EcOpsInvalidSignature); + } + let e_bytes = hasher.compute_challenge(&data[..57], points[0].compress().as_bytes(), msg); + let e_arr = ed448_goldilocks_plus::WideScalarBytes::from_slice(&e_bytes); + let e = ed448_goldilocks_plus::Scalar::from_bytes_mod_order_wide(e_arr); + let s_bytes = ed448_goldilocks_plus::ScalarBytes::from_slice(&data[57..114]); + let s = Option::::from( + ed448_goldilocks_plus::Scalar::from_canonical_bytes(s_bytes), + ) + .ok_or(Error::EcOpsInvalidScalar)?; + if s.is_zero().into() { + return Err(Error::EcOpsInvalidScalar); + } + let r = Option::::from( + ed448_goldilocks_plus::CompressedEdwardsY::try_from(&data[..57]) + .map_err(|_| Error::EcOpsInvalidScalar)? + .decompress(), + ) + .ok_or(Error::EcOpsInvalidScalar)?; + if r.is_identity().into() { + return Err(Error::EcOpsInvalidPoint); + } + + let big_r = (points[0] * e) + ed448_goldilocks_plus::EdwardsPoint::GENERATOR * s; + if big_r == r { + Ok(vec![1u8]) + } else { + Ok(vec![0u8]) + } + } + + fn jubjub(&self, data: &[u8]) -> Result, Error> { + let (data, hasher) = parse_hash(data)?; + if data.len() < 32 { + return Err(Error::EcOpsInvalidSize); + } + let msg = &data[..32]; + let (data, points) = jubjub_points(&data[32..], 2)?; + if (points[0].is_identity() | points[1].is_identity()).into() { + return Err(Error::EcOpsInvalidPoint); + } + let pk = points[0]; + let sig_r = points[1]; + let (_, sig_s) = jubjub_scalars(data, 1)?; + if sig_s[0].is_zero().into() { + return Err(Error::EcOpsInvalidScalar); + } + + let e_bytes = + hasher.compute_challenge(sig_r.to_bytes().as_ref(), pk.to_bytes().as_ref(), msg); + let mut e_arr = [0u8; 64]; + e_arr[64 - e_bytes.len()..].copy_from_slice(&e_bytes[..]); + let e = jubjub::Scalar::from_bytes_wide(&e_arr); + + let big_r = jubjub::SubgroupPoint::generator() * sig_s[0] + pk * e; + if big_r == sig_r { + Ok(vec![1u8]) + } else { + Ok(vec![0u8]) + } + } } impl EcOps for BlsVerify { @@ -2427,6 +2997,14 @@ impl EcOps for BlsVerify { fn bls12381gt(&self, _data: &[u8]) -> Result, Error> { Err(Error::EcOpsNotSupported) } + + fn curve448(&self, _data: &[u8]) -> Result, Error> { + Err(Error::EcOpsNotSupported) + } + + fn jubjub(&self, _data: &[u8]) -> Result, Error> { + Err(Error::EcOpsNotSupported) + } } fn verify_ecdsa( @@ -3377,7 +3955,7 @@ mod test { &g1.to_affine(), &blsful::inner_types::G2Affine::generator(), ); - assert_eq!(&expected.to_bytes()[..], &bytes[..]); + assert_eq!(&expected.to_bytes().as_ref()[..], &bytes[..]); } }