From 4cbb2567b502445ef6c13acac64b5f93218db4ba Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Mon, 20 Jun 2022 16:53:57 +0530 Subject: [PATCH] chore(ext/crypto): update webcrypto deps (#14452) --- Cargo.lock | 662 +++++++++++++++++++------------------ ext/crypto/Cargo.toml | 29 +- ext/crypto/decrypt.rs | 78 +++-- ext/crypto/ec_key.rs | 148 --------- ext/crypto/encrypt.rs | 72 ++-- ext/crypto/export_key.rs | 62 ++-- ext/crypto/generate_key.rs | 4 +- ext/crypto/import_key.rs | 115 ++----- ext/crypto/lib.rs | 111 ++++--- ext/crypto/shared.rs | 87 +++-- 10 files changed, 603 insertions(+), 765 deletions(-) delete mode 100644 ext/crypto/ec_key.rs diff --git a/Cargo.lock b/Cargo.lock index a7b9760a63..93dc62f874 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -35,21 +35,20 @@ dependencies = [ [[package]] name = "aes" -version = "0.7.5" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +checksum = "bfe0133578c0986e1fe3dfcd4af1cc5b2dd6c3dbf534d69916ce16a2701d40ba" dependencies = [ "cfg-if", "cipher", "cpufeatures", - "opaque-debug", ] [[package]] name = "aes-gcm" -version = "0.9.4" +version = "0.10.0-pre" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" +checksum = "8004e8b23ff2c65e28ff77bab0eccd36f4a6c2c8e0b55c46acba481425cc3a4f" dependencies = [ "aead", "aes", @@ -61,12 +60,11 @@ dependencies = [ [[package]] name = "aes-kw" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2cfe3156f99bc2978b812bcc9c98c6850810e2c0cd48366abb7163a1beeed0" +checksum = "69fa2b352dcefb5f7f3a5fb840e02665d311d878955380515e4fd50095dd3d8c" dependencies = [ "aes", - "generic-array", ] [[package]] @@ -145,17 +143,17 @@ checksum = "bc4c00309ed1c8104732df4a5fa9acc3b796b6f8531dfbd5ce0078c86f997244" dependencies = [ "darling", "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", "swc_macros_common", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] name = "async-compression" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8589c784ff02ac80dafc5e4116c3a2a3743ac5e0c902483518a88eec6559cf99" +checksum = "345fd392ab01f746c717b1357165b76f0b67a60192007b234058c9045fdcf695" dependencies = [ "brotli", "flate2", @@ -181,20 +179,20 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] name = "async-trait" -version = "0.1.53" +version = "0.1.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" +checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -215,18 +213,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7862e21c893d65a1650125d157eaeec691439379a1cee17ee49031b79236ada4" dependencies = [ "proc-macro-error", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", -] - -[[package]] -name = "autocfg" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" -dependencies = [ - "autocfg 1.1.0", + "syn 1.0.96", ] [[package]] @@ -235,6 +224,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + [[package]] name = "base64" version = "0.11.0" @@ -249,9 +244,9 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "base64ct" -version = "1.1.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b4d9b1225d28d360ec6a231d65af1fd99a2a095154c8040689617290569c5c" +checksum = "dea908e7347a8c64e378c17e30ef880ad73e3b4498346b055c2c00ea342f3179" [[package]] name = "bencher" @@ -325,19 +320,18 @@ dependencies = [ [[package]] name = "block-modes" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e" -dependencies = [ - "block-padding", - "cipher", -] +checksum = "9e2211b0817f061502a8dd9f11a37e879e79763e3c698d2418cf824d8cb2f21e" [[package]] name = "block-padding" -version = "0.2.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" +checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78" +dependencies = [ + "generic-array", +] [[package]] name = "brotli" @@ -362,9 +356,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" [[package]] name = "byteorder" @@ -384,6 +378,15 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bf2a5fb3207c12b5d208ebc145f967fea5cac41a021c37417ccc31ba40f39ee" +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] + [[package]] name = "cc" version = "1.0.73" @@ -420,11 +423,12 @@ dependencies = [ [[package]] name = "cipher" -version = "0.3.0" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" dependencies = [ - "generic-array", + "crypto-common", + "inout", ] [[package]] @@ -494,9 +498,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.6.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6f2aa4d0537bcc1c74df8755072bd31c1ef1a3a1b85a68e8404a8c353b7b8b" +checksum = "722e23542a15cea1f65d4a1419c4cfd7a26706c70871a13a04238ca3f40f1661" [[package]] name = "convert_case" @@ -593,9 +597,9 @@ dependencies = [ [[package]] name = "crypto-bigint" -version = "0.2.11" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83bd3bb4314701c568e340cd8cf78c975aa0ca79e03d3f6d1677d5b0c9c0c03" +checksum = "ac961631d66e80ac7ac2ac01320628ce214ad2b5ef0a88ceb86eae459069e2b4" dependencies = [ "generic-array", "rand_core", @@ -613,16 +617,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "ctor" version = "0.1.22" @@ -630,14 +624,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" dependencies = [ "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] name = "ctr" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +checksum = "0d14f329cfbaf5d0e06b5e87fff7e265d2673c5ea7d2c27691a2c107db1442a0" dependencies = [ "cipher", ] @@ -677,10 +671,10 @@ checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" dependencies = [ "fnv", "ident_case", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", "strsim 0.9.3", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -691,18 +685,19 @@ checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" dependencies = [ "darling_core", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] name = "dashmap" -version = "5.3.3" +version = "5.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391b56fbd302e585b7a9494fb70e40949567b1cf9003a8e4a6041a1687c26573" +checksum = "3495912c9c1ccf2e18976439f4443f3fee0fd61f424ff99fde6a66b15ecb448f" dependencies = [ "cfg-if", "hashbrown 0.12.1", "lock_api", + "parking_lot_core 0.9.3", ] [[package]] @@ -875,7 +870,7 @@ dependencies = [ "libc", "log", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "pin-project", "serde", "serde_json", @@ -895,6 +890,8 @@ dependencies = [ "aes-kw", "base64 0.13.0", "block-modes", + "cbc", + "const-oid", "ctr", "deno_core", "deno_web", @@ -906,10 +903,11 @@ dependencies = [ "rand", "ring", "rsa", + "sec1", "serde", "serde_bytes", - "sha-1 0.9.8", - "sha2 0.9.9", + "sha-1 0.10.0", + "sha2", "spki", "tokio", "uuid", @@ -987,7 +985,7 @@ dependencies = [ "deno_ast", "futures", "lazy_static", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "regex", "ring", "serde", @@ -1058,10 +1056,10 @@ version = "0.17.0" dependencies = [ "once_cell", "proc-macro-crate", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", + "syn 1.0.96", "regex", - "syn 1.0.93", ] [[package]] @@ -1211,12 +1209,13 @@ dependencies = [ [[package]] name = "der" -version = "0.4.5" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b71cca7d95d7681a4b3b9cdf63c8dbc3730d0584c2c74e31416d64a90493f4" +checksum = "13dd2ae565c0a381dde7fade45fce95984c568bdcb4700a4fdbe3175e0380b2f" dependencies = [ "const-oid", - "crypto-bigint", + "pem-rfc7468", + "zeroize", ] [[package]] @@ -1226,10 +1225,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "convert_case", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", "rustc_version 0.4.0", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -1255,6 +1254,7 @@ checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ "block-buffer 0.10.2", "crypto-common", + "subtle", ] [[package]] @@ -1361,13 +1361,13 @@ checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28" [[package]] name = "ecdsa" -version = "0.12.4" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ee23aa5b4f68c7a092b5c3beb25f50c406adc75e2363634f242f28ab255372" +checksum = "e1e737f9eebb44576f3ee654141a789464071eb369d02c4397b32b6a79790112" dependencies = [ "der", "elliptic-curve", - "hmac", + "rfc6979", "signature", ] @@ -1379,16 +1379,22 @@ checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] name = "elliptic-curve" -version = "0.10.6" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beca177dcb8eb540133e7680baff45e7cc4d93bf22002676cec549f82343721b" +checksum = "4f6664c6a37892ed55da8dda26a99e6ccc783f0c72fa3c2eeaa00ed30d8f4d9a" dependencies = [ + "base16ct", "crypto-bigint", + "der", + "digest 0.10.3", "ff", "generic-array", "group", + "hkdf", + "pem-rfc7468", "pkcs8", "rand_core", + "sec1", "subtle", "zeroize", ] @@ -1415,9 +1421,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" dependencies = [ "heck", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -1427,9 +1433,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b940da354ae81ef0926c5eaa428207b8f4f091d3956c891dfbd124162bed99" dependencies = [ "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "swc_macros_common", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -1500,7 +1506,7 @@ dependencies = [ "futures", "serde", "serde_json", - "sha2 0.10.2", + "sha2", "thiserror", "tokio", "url", @@ -1550,9 +1556,9 @@ dependencies = [ [[package]] name = "ff" -version = "0.10.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f40b2dcd8bc322217a5f6559ae5f9e9d1de202a2ecee2e9eafcbece7562a4f" +checksum = "df689201f395c6b90dfe87127685f8dbfc083a5e779e613575d8bd7314300c3e" dependencies = [ "rand_core", "subtle", @@ -1582,20 +1588,18 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479cde5eb168cf5a056dd98f311cbfab7494c216394e4fb9eba0336827a8db93" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] name = "flate2" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" dependencies = [ - "cfg-if", "crc32fast", - "libc", "miniz_oxide", ] @@ -1648,9 +1652,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0951635027ca477be98f8774abd6f0345233439d63f307e47101acb40c7cc63d" dependencies = [ "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "swc_macros_common", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -1737,9 +1741,9 @@ version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -1803,13 +1807,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if", "libc", - "wasi 0.10.0+wasi-snapshot-preview1", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] @@ -1875,9 +1879,9 @@ dependencies = [ [[package]] name = "group" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c363a5301b8f153d80747126a04b3c82073b9fe3130571a9d170cacdeaf7912" +checksum = "7391856def869c1c81063a03457c676fbcd419709c3dfb33d8d319de484b154d" dependencies = [ "ff", "rand_core", @@ -1949,13 +1953,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] -name = "hmac" -version = "0.11.0" +name = "hkdf" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" dependencies = [ - "crypto-mac", - "digest 0.9.0", + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.3", ] [[package]] @@ -1982,9 +1994,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", @@ -2011,9 +2023,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.18" +version = "0.14.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" +checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f" dependencies = [ "bytes", "futures-channel", @@ -2088,7 +2100,7 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a" dependencies = [ - "autocfg 1.1.0", + "autocfg", "hashbrown 0.11.2", "serde", ] @@ -2113,6 +2125,16 @@ dependencies = [ "libc", ] +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "block-padding", + "generic-array", +] + [[package]] name = "inplace_it" version = "0.3.3" @@ -2154,15 +2176,15 @@ checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b" [[package]] name = "is-macro" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b2c46692aee0d1b3aad44e781ac0f0e7db42ef27adaa0a877b627040019813" +checksum = "1c068d4c6b922cd6284c609cfa6dec0e41615c9c5a1a4ba729a970d8daba05fb" dependencies = [ "Inflector", "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -2176,9 +2198,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" [[package]] name = "jobserver" @@ -2191,9 +2213,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" dependencies = [ "wasm-bindgen", ] @@ -2258,18 +2280,18 @@ dependencies = [ [[package]] name = "lexical" -version = "6.1.0" +version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccd3e434c16f0164124ade12dcdee324fcc3dafb1cad0c7f1d8c2451a1aa6886" +checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6" dependencies = [ "lexical-core", ] [[package]] name = "lexical-core" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92912c4af2e7d9075be3e5e3122c4d7263855fa6cce34fbece4dd08e5884624d" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" dependencies = [ "lexical-parse-float", "lexical-parse-integer", @@ -2280,9 +2302,9 @@ dependencies = [ [[package]] name = "lexical-parse-float" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f518eed87c3be6debe6d26b855c97358d8a11bf05acec137e5f53080f5ad2dd8" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" dependencies = [ "lexical-parse-integer", "lexical-util", @@ -2291,9 +2313,9 @@ dependencies = [ [[package]] name = "lexical-parse-integer" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc852ec67c6538bbb2b9911116a385b24510e879a69ab516e6a151b15a79168" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" dependencies = [ "lexical-util", "static_assertions", @@ -2301,18 +2323,18 @@ dependencies = [ [[package]] name = "lexical-util" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c72a9d52c5c4e62fa2cdc2cb6c694a39ae1382d9c2a17a466f18e272a0930eb1" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" dependencies = [ "static_assertions", ] [[package]] name = "lexical-write-float" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a89ec1d062e481210c309b672f73a0567b7855f21e7d2fae636df44d12e97f9" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" dependencies = [ "lexical-util", "lexical-write-integer", @@ -2321,9 +2343,9 @@ dependencies = [ [[package]] name = "lexical-write-integer" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "094060bd2a7c2ff3a16d5304a6ae82727cb3cc9d1c70f813cc73f744c319337e" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" dependencies = [ "lexical-util", "static_assertions", @@ -2400,7 +2422,7 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" dependencies = [ - "autocfg 1.1.0", + "autocfg", "scopeguard", ] @@ -2478,7 +2500,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ - "autocfg 1.1.0", + "autocfg", ] [[package]] @@ -2503,9 +2525,9 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "miniz_oxide" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" dependencies = [ "adler", ] @@ -2624,7 +2646,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-integer", "num-traits", "serde", @@ -2632,11 +2654,10 @@ dependencies = [ [[package]] name = "num-bigint-dig" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4547ee5541c18742396ae2c895d0717d0f886d8823b8399cdaf7b07d63ad0480" +checksum = "566d173b2f9406afbc5510a90925d5a2cd80cae4605631f1212303df265de011" dependencies = [ - "autocfg 0.1.8", "byteorder", "lazy_static", "libm", @@ -2654,7 +2675,7 @@ version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-traits", ] @@ -2664,7 +2685,7 @@ version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-integer", "num-traits", ] @@ -2675,7 +2696,7 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ - "autocfg 1.1.0", + "autocfg", "libm", ] @@ -2747,9 +2768,9 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "6.0.0" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" +checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa" [[package]] name = "output_vt100" @@ -2762,22 +2783,24 @@ dependencies = [ [[package]] name = "p256" -version = "0.9.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d053368e1bae4c8a672953397bd1bd7183dde1c72b0b7612a15719173148d186" +checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" dependencies = [ "ecdsa", "elliptic-curve", - "sha2 0.9.9", + "sha2", ] [[package]] name = "p384" -version = "0.8.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23bc88c404ccc881c8a1ad62ba5cd7d336a64ecbf46de4874f2ad955f67b157" +checksum = "70723b6e03216e79df3765a7e4cdf39746c4a2392ba4bdb458111a939494cc1d" dependencies = [ + "ecdsa", "elliptic-curve", + "sha2", ] [[package]] @@ -2793,9 +2816,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", "parking_lot_core 0.9.3", @@ -2851,9 +2874,9 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "pem-rfc7468" -version = "0.2.4" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84e93a3b1cc0510b03020f33f21e62acdde3dcaef432edc95bea377fbd4c2cd4" +checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" dependencies = [ "base64ct", ] @@ -2875,9 +2898,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" dependencies = [ "fixedbitset", "indexmap", @@ -2913,9 +2936,9 @@ dependencies = [ "phf_generator", "phf_shared", "proc-macro-hack", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -2942,9 +2965,9 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -2961,25 +2984,23 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkcs1" -version = "0.2.4" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "116bee8279d783c0cf370efa1a94632f2108e5ef0bb32df31f051647810a4e2c" +checksum = "2e3a81571d9455414f4d59ce2830bc9d2654e2efc5460fd67b0e0a6a36b6753a" dependencies = [ "der", + "pkcs8", "zeroize", ] [[package]] name = "pkcs8" -version = "0.7.6" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3ef9b64d26bad0536099c816c6734379e45bbd5f14798def6809e5cc350447" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" dependencies = [ "der", - "pem-rfc7468", - "pkcs1", "spki", - "zeroize", ] [[package]] @@ -2994,9 +3015,9 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3894e5d549cccbe44afecf72922f277f603cd4bb0219c8342631ef18fffbe004" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -3052,9 +3073,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", "version_check", ] @@ -3064,7 +3085,7 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", "version_check", ] @@ -3081,23 +3102,23 @@ version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" dependencies = [ - "unicode-xid 0.1.0", + "unicode-xid", ] [[package]] name = "proc-macro2" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa" +checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" dependencies = [ - "unicode-xid 0.2.3", + "unicode-ident", ] [[package]] name = "profiling" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9145ac0af1d93c638c98c40cf7d25665f427b2a44ad0a99b1dccf3e2f25bb987" +checksum = "2f61dcf0b917cd75d4521d7343d1ffff3d1583054133c9b5cbea3375c703c40d" [[package]] name = "pty" @@ -3141,7 +3162,7 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", ] [[package]] @@ -3305,9 +3326,20 @@ dependencies = [ [[package]] name = "retain_mut" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" +checksum = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0" + +[[package]] +name = "rfc6979" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c0788437d5ee113c49af91d3594ebc4fcdcc962f8b6df5aa1c3eeafd8ad95de" +dependencies = [ + "crypto-bigint", + "hmac", + "zeroize", +] [[package]] name = "ring" @@ -3326,9 +3358,9 @@ dependencies = [ [[package]] name = "ron" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678" +checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" dependencies = [ "base64 0.13.0", "bitflags", @@ -3337,20 +3369,20 @@ dependencies = [ [[package]] name = "rsa" -version = "0.5.0" +version = "0.7.0-pre" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c2603e2823634ab331437001b411b9ed11660fbc4066f3908c84a9439260d" +checksum = "6168b9a0f38e487db90dc109ad6d8f37fc5590183b7bfe8d8687e0b86116d53f" dependencies = [ "byteorder", - "digest 0.9.0", - "lazy_static", + "digest 0.10.3", "num-bigint-dig", "num-integer", "num-iter", "num-traits", "pkcs1", "pkcs8", - "rand", + "rand_core", + "smallvec", "subtle", "zeroize", ] @@ -3391,14 +3423,14 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.9", + "semver 1.0.10", ] [[package]] name = "rustix" -version = "0.34.6" +version = "0.34.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e74b3f02f2b6eb33790923756784614f456de79d821d6b2670dc7d5fbea807" +checksum = "2079c267b8394eb529872c3cf92e181c378b41fea36e68130357b52493701d2e" dependencies = [ "bitflags", "errno 0.2.8", @@ -3410,9 +3442,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.5" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a024a432ae760ab3bff924ad91ce1cfa52cb57ed16e1ef32d0d249cfee1a6c13" +checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" dependencies = [ "log", "ring", @@ -3471,14 +3503,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb35a55ab810b5c0fe31606fe9b47d1354e4dc519bec0a102655f78ea2b38057" dependencies = [ "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "same-file" @@ -3491,12 +3523,12 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "winapi 0.3.9", + "windows-sys 0.36.1", ] [[package]] @@ -3521,6 +3553,20 @@ dependencies = [ "untrusted", ] +[[package]] +name = "sec1" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "security-framework" version = "2.6.1" @@ -3555,9 +3601,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd" +checksum = "a41d061efea015927ac527063765e73601444cdc344ba855bc7bd44578b25e1c" [[package]] name = "semver-parser" @@ -3598,9 +3644,9 @@ version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -3621,9 +3667,9 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -3674,19 +3720,6 @@ dependencies = [ "digest 0.10.3", ] -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - [[package]] name = "sha2" version = "0.10.2" @@ -3715,11 +3748,11 @@ dependencies = [ [[package]] name = "signature" -version = "1.3.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2807892cfa58e081aa1f1111391c7a0649d4fa127a4ffbe34bcbfb35a1171a4" +checksum = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4" dependencies = [ - "digest 0.9.0", + "digest 0.10.3", "rand_core", ] @@ -3794,10 +3827,11 @@ dependencies = [ [[package]] name = "spki" -version = "0.4.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c01a0c15da1b0b0e1494112e7af814a678fec9bd157881b49beac661e9b6f32" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ + "base64ct", "der", ] @@ -3809,9 +3843,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "str-buf" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" [[package]] name = "string_cache" @@ -3821,7 +3855,7 @@ checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08" dependencies = [ "new_debug_unreachable", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "phf_shared", "precomputed-hash", "serde", @@ -3835,7 +3869,7 @@ checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" dependencies = [ "phf_generator", "phf_shared", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", ] @@ -3846,10 +3880,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f584cc881e9e5f1fd6bf827b0444aa94c30d8fe6378cf241071b5f5700b2871f" dependencies = [ "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", "swc_macros_common", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -3872,10 +3906,13 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "swc_atoms" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba8735ce37e421749498e038955abc1135eec6a4af0b54a173e55d2e5542d472" +checksum = "4447e91cfebfe09f630f909358998fe6621afd10389ba5d6d7711e26105dc87c" dependencies = [ + "once_cell", + "rustc-hash", + "serde", "string_cache", "string_cache_codegen", ] @@ -3892,7 +3929,7 @@ dependencies = [ "indexmap", "is-macro", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "petgraph", "radix_fmt", "relative-path", @@ -3959,10 +3996,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb64bc03d90fd5c90d6ab917bb2b1d7fbd31957df39e31ea24a3f554b4372251" dependencies = [ "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", "swc_macros_common", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -4007,10 +4044,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59949619b2ef45eedb6c399d05f2c3c7bc678b5074b3103bb670f9e05bb99042" dependencies = [ "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", "swc_macros_common", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -4118,10 +4155,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18712e4aab969c6508dff3540ade6358f1e013464aa58b3d30da2ab2d9fcbbed" dependencies = [ "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", "swc_macros_common", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -4259,9 +4296,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c8f200a2eaed938e7c1a685faaa66e6d42fa9e17da5f62572d3cbc335898f5e" dependencies = [ "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -4296,9 +4333,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5dca3f08d02da4684c3373150f7c045128f81ea00f0c434b1b012bc65a6cce3" dependencies = [ "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -4319,10 +4356,10 @@ checksum = "c3b9b72892df873972549838bf84d6c56234c7502148a7e23b5a3da6e0fedfb8" dependencies = [ "Inflector", "pmutil", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", "swc_macros_common", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -4333,30 +4370,18 @@ checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" dependencies = [ "proc-macro2 0.4.30", "quote 0.6.13", - "unicode-xid 0.1.0", + "unicode-xid", ] [[package]] name = "syn" -version = "1.0.93" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04066589568b72ec65f42d65a1a52436e954b168773148893c020269563decf2" +checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "unicode-xid 0.2.3", -] - -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2 1.0.38", - "quote 1.0.18", - "syn 1.0.93", - "unicode-xid 0.2.3", + "unicode-ident", ] [[package]] @@ -4412,7 +4437,7 @@ dependencies = [ "lazy_static", "once_cell", "os_pipe", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "pretty_assertions", "pty", "regex", @@ -4461,9 +4486,9 @@ version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -4514,7 +4539,7 @@ dependencies = [ "mio", "num_cpus", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", "socket2", @@ -4524,13 +4549,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -4546,9 +4571,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" +checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" dependencies = [ "futures-core", "pin-project-lite", @@ -4643,9 +4668,9 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ebd99eec668d0a450c177acbc4d05e0d0d13b1f8d3db13cd706c52cbec4ac04" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] @@ -4656,9 +4681,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" +checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" dependencies = [ "cfg-if", "pin-project-lite", @@ -4672,18 +4697,18 @@ version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", ] [[package]] name = "tracing-core" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" +checksum = "7709595b8878a4965ce5e87ebf880a7d39c9afc6837721b21a5a816a8117d921" dependencies = [ - "lazy_static", + "once_cell", ] [[package]] @@ -4744,7 +4769,7 @@ dependencies = [ "lazy_static", "log", "lru-cache", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "resolv-conf", "serde", "smallvec", @@ -4894,6 +4919,12 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69fe8d9274f490a36442acb4edfd0c4e473fdfc6a8b5cd32f28a0235761aedbe" +[[package]] +name = "unicode-ident" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" + [[package]] name = "unicode-normalization" version = "0.1.19" @@ -4921,12 +4952,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -[[package]] -name = "unicode-xid" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" - [[package]] name = "universal-hash" version = "0.4.1" @@ -5066,9 +5091,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -5076,24 +5101,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" dependencies = [ "bumpalo", "lazy_static", "log", - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.30" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" +checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" dependencies = [ "cfg-if", "js-sys", @@ -5103,9 +5128,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" dependencies = [ "quote 1.0.18", "wasm-bindgen-macro-support", @@ -5113,28 +5138,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" dependencies = [ - "proc-macro2 1.0.38", + "proc-macro2 1.0.39", "quote 1.0.18", - "syn 1.0.93", + "syn 1.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" dependencies = [ "js-sys", "wasm-bindgen", @@ -5407,24 +5432,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.4.3" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" -dependencies = [ - "proc-macro2 1.0.38", - "quote 1.0.18", - "syn 1.0.93", - "synstructure", -] +checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07" [[package]] name = "zstd" diff --git a/ext/crypto/Cargo.toml b/ext/crypto/Cargo.toml index b220837570..ffdc61ce52 100644 --- a/ext/crypto/Cargo.toml +++ b/ext/crypto/Cargo.toml @@ -14,26 +14,31 @@ description = "Web Cryptography API implementation for Deno" path = "lib.rs" [dependencies] -aes = "0.7.5" -aes-gcm = "0.9.4" -aes-kw = { version = "0.1", features = ["alloc"] } +aes = "0.8.1" +# TODO(@littledivy): Move to stable release +# https://github.com/RustCrypto/AEADs/issues/411 +aes-gcm = "0.10.0-pre" +aes-kw = { version = "0.2.1", features = ["alloc"] } base64 = "0.13.0" -block-modes = "0.8.1" -ctr = "0.8.0" +block-modes = "0.9.1" +cbc = { version = "0.1.2", features = ["alloc"] } +const-oid = "0.9.0" +ctr = "0.9.1" deno_core = { version = "0.139.0", path = "../../core" } deno_web = { version = "0.88.0", path = "../web" } -elliptic-curve = { version = "0.10.6", features = ["std", "pem"] } +elliptic-curve = { version = "0.12.1", features = ["std", "pem"] } num-traits = "0.2.14" once_cell = "1.10.0" -p256 = { version = "0.9.0", features = ["ecdh"] } -p384 = "0.8.0" +p256 = { version = "0.11.1", features = ["ecdh"] } +p384 = "0.11.1" rand = "0.8.4" ring = { version = "0.16.20", features = ["std"] } -rsa = { version = "0.5.0", default-features = false, features = ["std"] } +rsa = { version = "0.7.0-pre", default-features = false, features = ["std"] } +sec1 = "0.3.0" serde = { version = "1.0.129", features = ["derive"] } serde_bytes = "0.11" -sha-1 = "0.9.7" -sha2 = "0.9.5" -spki = "0.4.1" +sha-1 = "0.10.0" +sha2 = "0.10.2" +spki = "0.6.0" tokio = { version = "1.17", features = ["full"] } uuid = { version = "1.0.0", features = ["v4"] } diff --git a/ext/crypto/decrypt.rs b/ext/crypto/decrypt.rs index b3989a7f6c..85d5f52108 100644 --- a/ext/crypto/decrypt.rs +++ b/ext/crypto/decrypt.rs @@ -1,6 +1,7 @@ use crate::shared::*; -use aes::BlockEncrypt; -use aes::NewBlockCipher; +use aes::cipher::block_padding::Pkcs7; +use aes::cipher::BlockDecryptMut; +use aes::cipher::KeyIvInit; use aes_gcm::aead::generic_array::typenum::U12; use aes_gcm::aead::generic_array::typenum::U16; use aes_gcm::aead::generic_array::ArrayLength; @@ -10,20 +11,16 @@ use aes_gcm::aes::Aes256; use aes_gcm::AeadInPlace; use aes_gcm::NewAead; use aes_gcm::Nonce; -use block_modes::BlockMode; -use ctr::cipher::NewCipher; use ctr::cipher::StreamCipher; -use ctr::flavors::Ctr128BE; -use ctr::flavors::Ctr32BE; -use ctr::flavors::Ctr64BE; -use ctr::flavors::CtrFlavor; -use ctr::Ctr; +use ctr::Ctr128BE; +use ctr::Ctr32BE; +use ctr::Ctr64BE; use deno_core::error::custom_error; use deno_core::error::type_error; use deno_core::error::AnyError; use deno_core::op; use deno_core::ZeroCopyBuf; -use rsa::pkcs1::FromRsaPrivateKey; +use rsa::pkcs1::DecodeRsaPrivateKey; use rsa::PaddingScheme; use serde::Deserialize; use sha1::Digest; @@ -153,11 +150,15 @@ fn decrypt_aes_cbc( let plaintext = match length { 128 => { // Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315 - type Aes128Cbc = - block_modes::Cbc; - let cipher = Aes128Cbc::new_from_slices(key, &iv)?; + type Aes128CbcDec = cbc::Decryptor; + let cipher = Aes128CbcDec::new_from_slices(key, &iv).map_err(|_| { + custom_error( + "DOMExceptionOperationError", + "Invalid key or iv".to_string(), + ) + })?; - cipher.decrypt_vec(data).map_err(|_| { + cipher.decrypt_padded_vec_mut::(data).map_err(|_| { custom_error( "DOMExceptionOperationError", "Decryption failed".to_string(), @@ -166,11 +167,15 @@ fn decrypt_aes_cbc( } 192 => { // Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315 - type Aes192Cbc = - block_modes::Cbc; - let cipher = Aes192Cbc::new_from_slices(key, &iv)?; + type Aes192CbcDec = cbc::Decryptor; + let cipher = Aes192CbcDec::new_from_slices(key, &iv).map_err(|_| { + custom_error( + "DOMExceptionOperationError", + "Invalid key or iv".to_string(), + ) + })?; - cipher.decrypt_vec(data).map_err(|_| { + cipher.decrypt_padded_vec_mut::(data).map_err(|_| { custom_error( "DOMExceptionOperationError", "Decryption failed".to_string(), @@ -179,11 +184,15 @@ fn decrypt_aes_cbc( } 256 => { // Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315 - type Aes256Cbc = - block_modes::Cbc; - let cipher = Aes256Cbc::new_from_slices(key, &iv)?; + type Aes256CbcDec = cbc::Decryptor; + let cipher = Aes256CbcDec::new_from_slices(key, &iv).map_err(|_| { + custom_error( + "DOMExceptionOperationError", + "Invalid key or iv".to_string(), + ) + })?; - cipher.decrypt_vec(data).map_err(|_| { + cipher.decrypt_padded_vec_mut::(data).map_err(|_| { custom_error( "DOMExceptionOperationError", "Decryption failed".to_string(), @@ -197,16 +206,15 @@ fn decrypt_aes_cbc( Ok(plaintext) } -fn decrypt_aes_ctr_gen( +fn decrypt_aes_ctr_gen( key: &[u8], counter: &[u8], data: &[u8], ) -> Result, AnyError> where - B: BlockEncrypt + NewBlockCipher, - F: CtrFlavor, + B: KeyIvInit + StreamCipher, { - let mut cipher = Ctr::::new(key.into(), counter.into()); + let mut cipher = B::new(key.into(), counter.into()); let mut plaintext = data.to_vec(); cipher @@ -279,21 +287,21 @@ fn decrypt_aes_ctr( match ctr_length { 32 => match key_length { - 128 => decrypt_aes_ctr_gen::(key, counter, data), - 192 => decrypt_aes_ctr_gen::(key, counter, data), - 256 => decrypt_aes_ctr_gen::(key, counter, data), + 128 => decrypt_aes_ctr_gen::>(key, counter, data), + 192 => decrypt_aes_ctr_gen::>(key, counter, data), + 256 => decrypt_aes_ctr_gen::>(key, counter, data), _ => Err(type_error("invalid length")), }, 64 => match key_length { - 128 => decrypt_aes_ctr_gen::(key, counter, data), - 192 => decrypt_aes_ctr_gen::(key, counter, data), - 256 => decrypt_aes_ctr_gen::(key, counter, data), + 128 => decrypt_aes_ctr_gen::>(key, counter, data), + 192 => decrypt_aes_ctr_gen::>(key, counter, data), + 256 => decrypt_aes_ctr_gen::>(key, counter, data), _ => Err(type_error("invalid length")), }, 128 => match key_length { - 128 => decrypt_aes_ctr_gen::(key, counter, data), - 192 => decrypt_aes_ctr_gen::(key, counter, data), - 256 => decrypt_aes_ctr_gen::(key, counter, data), + 128 => decrypt_aes_ctr_gen::>(key, counter, data), + 192 => decrypt_aes_ctr_gen::>(key, counter, data), + 256 => decrypt_aes_ctr_gen::>(key, counter, data), _ => Err(type_error("invalid length")), }, _ => Err(type_error( diff --git a/ext/crypto/ec_key.rs b/ext/crypto/ec_key.rs deleted file mode 100644 index 8302bb55d8..0000000000 --- a/ext/crypto/ec_key.rs +++ /dev/null @@ -1,148 +0,0 @@ -use deno_core::error::AnyError; - -use elliptic_curve::AlgorithmParameters; - -use elliptic_curve::pkcs8; -use elliptic_curve::pkcs8::der; -use elliptic_curve::pkcs8::der::asn1::*; -use elliptic_curve::pkcs8::der::Decodable as Pkcs8Decodable; -use elliptic_curve::pkcs8::der::Encodable; -use elliptic_curve::pkcs8::der::TagNumber; -use elliptic_curve::pkcs8::AlgorithmIdentifier; -use elliptic_curve::pkcs8::ObjectIdentifier; -use elliptic_curve::pkcs8::PrivateKeyDocument; -use elliptic_curve::pkcs8::PrivateKeyInfo; -use elliptic_curve::zeroize::Zeroizing; - -use crate::shared::*; - -const VERSION: u8 = 1; - -const PUBLIC_KEY_TAG: TagNumber = TagNumber::new(1); - -pub struct ECPrivateKey<'a, C: elliptic_curve::Curve> { - pub algorithm: AlgorithmIdentifier<'a>, - - pub private_d: elliptic_curve::FieldBytes, - - pub encoded_point: &'a [u8], -} - -impl<'a, C> ECPrivateKey<'a, C> -where - C: elliptic_curve::Curve + AlgorithmParameters, -{ - /// Create a new ECPrivateKey from a serialized private scalar and encoded public key - pub fn from_private_and_public_bytes( - private_d: elliptic_curve::FieldBytes, - encoded_point: &'a [u8], - ) -> Self { - Self { - private_d, - encoded_point, - algorithm: C::algorithm_identifier(), - } - } - - pub fn named_curve_oid(&self) -> Result { - let parameters = self - .algorithm - .parameters - .ok_or_else(|| data_error("malformed parameters"))?; - - Ok(parameters.oid().unwrap()) - } - - fn internal_to_pkcs8_der(&self) -> der::Result> { - // Shamelessly copied from pkcs8 crate and modified so as - // to not require Arithmetic trait currently missing from p384 - let secret_key_field = OctetString::new(&self.private_d)?; - let public_key_bytes = &self.encoded_point; - let public_key_field = ContextSpecific { - tag_number: PUBLIC_KEY_TAG, - value: BitString::new(public_key_bytes)?.into(), - }; - - let der_message_fields: &[&dyn Encodable] = - &[&VERSION, &secret_key_field, &public_key_field]; - - let encoded_len = - der::message::encoded_len(der_message_fields)?.try_into()?; - let mut der_message = Zeroizing::new(vec![0u8; encoded_len]); - let mut encoder = der::Encoder::new(&mut der_message); - encoder.message(der_message_fields)?; - encoder.finish()?; - - Ok(der_message.to_vec()) - } - - pub fn to_pkcs8_der(&self) -> Result { - let pkcs8_der = self - .internal_to_pkcs8_der() - .map_err(|_| data_error("expected valid PKCS#8 data"))?; - - let pki = - pkcs8::PrivateKeyInfo::new(C::algorithm_identifier(), pkcs8_der.as_ref()); - - Ok(pki.to_der()) - } -} - -impl<'a, C: elliptic_curve::Curve> TryFrom<&'a [u8]> for ECPrivateKey<'a, C> { - type Error = AnyError; - - fn try_from(bytes: &'a [u8]) -> Result, AnyError> { - let pk_info = PrivateKeyInfo::from_der(bytes) - .map_err(|_| data_error("expected valid PKCS#8 data"))?; - - Self::try_from(pk_info) - } -} - -impl<'a, C: elliptic_curve::Curve> TryFrom> - for ECPrivateKey<'a, C> -{ - type Error = AnyError; - - fn try_from( - pk_info: PrivateKeyInfo<'a>, - ) -> Result, AnyError> { - let any = der::asn1::Any::from_der(pk_info.private_key).map_err(|_| { - data_error("expected valid PrivateKeyInfo private_key der") - })?; - - if pk_info.algorithm.oid != elliptic_curve::ALGORITHM_OID { - return Err(data_error("unsupported algorithm")); - } - - any - .sequence(|decoder| { - // ver - if decoder.uint8()? != VERSION { - return Err(der::Tag::Integer.value_error()); - } - - // private_key - let priv_key = decoder.octet_string()?.as_bytes(); - let mut private_d = elliptic_curve::FieldBytes::::default(); - if priv_key.len() != private_d.len() { - return Err(der::Tag::Sequence.value_error()); - }; - private_d.copy_from_slice(priv_key); - - let public_key = decoder - .context_specific(PUBLIC_KEY_TAG)? - .ok_or_else(|| { - der::Tag::ContextSpecific(PUBLIC_KEY_TAG).value_error() - })? - .bit_string()?; - - Ok(Self { - private_d, - encoded_point: public_key.as_bytes(), - algorithm: pk_info.algorithm, - }) - }) - .map_err(|_| data_error("expected valid PrivateKeyInfo private_key der")) - } -} diff --git a/ext/crypto/encrypt.rs b/ext/crypto/encrypt.rs index 9d0dd3565e..ffa441c0f1 100644 --- a/ext/crypto/encrypt.rs +++ b/ext/crypto/encrypt.rs @@ -1,8 +1,9 @@ use crate::shared::*; -use aes::cipher::NewCipher; -use aes::BlockEncrypt; -use aes::NewBlockCipher; +use aes::cipher::block_padding::Pkcs7; +use aes::cipher::BlockEncryptMut; +use aes::cipher::KeyIvInit; +use aes::cipher::StreamCipher; use aes_gcm::aead::generic_array::typenum::U12; use aes_gcm::aead::generic_array::typenum::U16; use aes_gcm::aead::generic_array::ArrayLength; @@ -12,21 +13,15 @@ use aes_gcm::aes::Aes256; use aes_gcm::AeadInPlace; use aes_gcm::NewAead; use aes_gcm::Nonce; -use ctr::Ctr; -use deno_core::op; - -use block_modes::BlockMode; -use ctr::cipher::StreamCipher; -use ctr::flavors::Ctr128BE; - -use ctr::flavors::Ctr32BE; -use ctr::flavors::Ctr64BE; -use ctr::flavors::CtrFlavor; +use ctr::Ctr128BE; +use ctr::Ctr32BE; +use ctr::Ctr64BE; use deno_core::error::type_error; use deno_core::error::AnyError; +use deno_core::op; use deno_core::ZeroCopyBuf; use rand::rngs::OsRng; -use rsa::pkcs1::FromRsaPublicKey; +use rsa::pkcs1::DecodeRsaPublicKey; use rsa::PaddingScheme; use rsa::PublicKey; use serde::Deserialize; @@ -156,27 +151,27 @@ fn encrypt_aes_cbc( let ciphertext = match length { 128 => { // Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315 - type Aes128Cbc = - block_modes::Cbc; + type Aes128CbcEnc = cbc::Encryptor; - let cipher = Aes128Cbc::new_from_slices(key, &iv)?; - cipher.encrypt_vec(data) + let cipher = Aes128CbcEnc::new_from_slices(key, &iv) + .map_err(|_| operation_error("invalid key or iv".to_string()))?; + cipher.encrypt_padded_vec_mut::(data) } 192 => { // Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315 - type Aes192Cbc = - block_modes::Cbc; + type Aes192CbcEnc = cbc::Encryptor; - let cipher = Aes192Cbc::new_from_slices(key, &iv)?; - cipher.encrypt_vec(data) + let cipher = Aes192CbcEnc::new_from_slices(key, &iv) + .map_err(|_| operation_error("invalid key or iv".to_string()))?; + cipher.encrypt_padded_vec_mut::(data) } 256 => { // Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315 - type Aes256Cbc = - block_modes::Cbc; + type Aes256CbcEnc = cbc::Encryptor; - let cipher = Aes256Cbc::new_from_slices(key, &iv)?; - cipher.encrypt_vec(data) + let cipher = Aes256CbcEnc::new_from_slices(key, &iv) + .map_err(|_| operation_error("invalid key or iv".to_string()))?; + cipher.encrypt_padded_vec_mut::(data) } _ => return Err(type_error("invalid length")), }; @@ -260,16 +255,15 @@ fn encrypt_aes_gcm( Ok(ciphertext) } -fn encrypt_aes_ctr_gen( +fn encrypt_aes_ctr_gen( key: &[u8], counter: &[u8], data: &[u8], ) -> Result, AnyError> where - B: BlockEncrypt + NewBlockCipher, - F: CtrFlavor, + B: KeyIvInit + StreamCipher, { - let mut cipher = Ctr::::new(key.into(), counter.into()); + let mut cipher = B::new(key.into(), counter.into()); let mut ciphertext = data.to_vec(); cipher @@ -290,21 +284,21 @@ fn encrypt_aes_ctr( match ctr_length { 32 => match key_length { - 128 => encrypt_aes_ctr_gen::(key, counter, data), - 192 => encrypt_aes_ctr_gen::(key, counter, data), - 256 => encrypt_aes_ctr_gen::(key, counter, data), + 128 => encrypt_aes_ctr_gen::>(key, counter, data), + 192 => encrypt_aes_ctr_gen::>(key, counter, data), + 256 => encrypt_aes_ctr_gen::>(key, counter, data), _ => Err(type_error("invalid length")), }, 64 => match key_length { - 128 => encrypt_aes_ctr_gen::(key, counter, data), - 192 => encrypt_aes_ctr_gen::(key, counter, data), - 256 => encrypt_aes_ctr_gen::(key, counter, data), + 128 => encrypt_aes_ctr_gen::>(key, counter, data), + 192 => encrypt_aes_ctr_gen::>(key, counter, data), + 256 => encrypt_aes_ctr_gen::>(key, counter, data), _ => Err(type_error("invalid length")), }, 128 => match key_length { - 128 => encrypt_aes_ctr_gen::(key, counter, data), - 192 => encrypt_aes_ctr_gen::(key, counter, data), - 256 => encrypt_aes_ctr_gen::(key, counter, data), + 128 => encrypt_aes_ctr_gen::>(key, counter, data), + 192 => encrypt_aes_ctr_gen::>(key, counter, data), + 256 => encrypt_aes_ctr_gen::>(key, counter, data), _ => Err(type_error("invalid length")), }, _ => Err(type_error( diff --git a/ext/crypto/export_key.rs b/ext/crypto/export_key.rs index 9e124775b1..e7814fea0f 100644 --- a/ext/crypto/export_key.rs +++ b/ext/crypto/export_key.rs @@ -1,18 +1,19 @@ +use crate::shared::*; +use const_oid::AssociatedOid; +use const_oid::ObjectIdentifier; use deno_core::error::custom_error; use deno_core::error::AnyError; use deno_core::op; use deno_core::ZeroCopyBuf; -use rsa::pkcs1::UIntBytes; +use elliptic_curve::sec1::ToEncodedPoint; +use p256::pkcs8::DecodePrivateKey; +use rsa::pkcs1::UIntRef; use serde::Deserialize; use serde::Serialize; use spki::der::asn1; -use spki::der::Decodable; -use spki::der::Encodable; +use spki::der::Decode; +use spki::der::Encode; use spki::AlgorithmIdentifier; -use spki::ObjectIdentifier; - -use crate::ec_key::ECPrivateKey; -use crate::shared::*; #[derive(Deserialize)] #[serde(rename_all = "camelCase")] @@ -105,7 +106,7 @@ pub fn op_crypto_export_key( } } -fn uint_to_b64(bytes: UIntBytes) -> String { +fn uint_to_b64(bytes: UIntRef) -> String { base64::encode_config(bytes.as_bytes(), base64::URL_SAFE_NO_PAD) } @@ -125,10 +126,10 @@ fn export_key_rsa( let key_info = spki::SubjectPublicKeyInfo { algorithm: spki::AlgorithmIdentifier { // rsaEncryption(1) - oid: spki::ObjectIdentifier::new("1.2.840.113549.1.1.1"), + oid: const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.1"), // parameters field should not be ommited (None). // It MUST have ASN.1 type NULL. - parameters: Some(asn1::Any::from(asn1::Null)), + parameters: Some(asn1::AnyRef::from(asn1::Null)), }, subject_public_key, }; @@ -150,14 +151,13 @@ fn export_key_rsa( // version is 0 when publickey is None let pk_info = rsa::pkcs8::PrivateKeyInfo { - attributes: None, public_key: None, algorithm: rsa::pkcs8::AlgorithmIdentifier { // rsaEncryption(1) - oid: rsa::pkcs8::ObjectIdentifier::new("1.2.840.113549.1.1.1"), + oid: rsa::pkcs8::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.1"), // parameters field should not be ommited (None). // It MUST have ASN.1 type NULL as per defined in RFC 3279 Section 2.3.1 - parameters: Some(asn1::Any::from(asn1::Null)), + parameters: Some(asn1::AnyRef::from(asn1::Null)), }, private_key, }; @@ -266,14 +266,22 @@ fn export_key_ec( }; let alg_id = match named_curve { - EcNamedCurve::P256 => ::algorithm_identifier(), - EcNamedCurve::P384 => ::algorithm_identifier(), - EcNamedCurve::P521 => return Err(data_error("Unsupported named curve")) + EcNamedCurve::P256 => AlgorithmIdentifier { + oid: elliptic_curve::ALGORITHM_OID, + parameters: Some((&p256::NistP256::OID).into()), + }, + EcNamedCurve::P384 => AlgorithmIdentifier { + oid: elliptic_curve::ALGORITHM_OID, + parameters: Some((&p384::NistP384::OID).into()), + }, + EcNamedCurve::P521 => { + return Err(data_error("Unsupported named curve")) + } }; let alg_id = match algorithm { ExportKeyAlgorithm::Ecdh { .. } => AlgorithmIdentifier { - oid: ObjectIdentifier::new("1.3.132.1.12"), + oid: ObjectIdentifier::new_unwrap("1.3.132.1.12"), parameters: alg_id.parameters, }, _ => alg_id, @@ -339,24 +347,22 @@ fn export_key_ec( match named_curve { EcNamedCurve::P256 => { - let ec_key = ECPrivateKey::::try_from(private_key) - .map_err(|_| { + let ec_key = + p256::SecretKey::from_pkcs8_der(private_key).map_err(|_| { custom_error( "DOMExceptionOperationError", "failed to decode private key", ) })?; - let point = p256::EncodedPoint::from_bytes(&ec_key.encoded_point) - .map_err(|_| data_error("expected valid public EC key"))?; - + let point = ec_key.public_key().to_encoded_point(false); if let elliptic_curve::sec1::Coordinates::Uncompressed { x, y } = point.coordinates() { Ok(ExportKeyResult::JwkPrivateEc { x: bytes_to_b64(x), y: bytes_to_b64(y), - d: bytes_to_b64(&ec_key.private_d), + d: bytes_to_b64(&ec_key.to_be_bytes()), }) } else { Err(data_error("expected valid public EC key")) @@ -364,24 +370,22 @@ fn export_key_ec( } EcNamedCurve::P384 => { - let ec_key = ECPrivateKey::::try_from(private_key) - .map_err(|_| { + let ec_key = + p384::SecretKey::from_pkcs8_der(private_key).map_err(|_| { custom_error( "DOMExceptionOperationError", "failed to decode private key", ) })?; - let point = p384::EncodedPoint::from_bytes(&ec_key.encoded_point) - .map_err(|_| data_error("expected valid public EC key"))?; - + let point = ec_key.public_key().to_encoded_point(false); if let elliptic_curve::sec1::Coordinates::Uncompressed { x, y } = point.coordinates() { Ok(ExportKeyResult::JwkPrivateEc { x: bytes_to_b64(x), y: bytes_to_b64(y), - d: bytes_to_b64(&ec_key.private_d), + d: bytes_to_b64(&ec_key.to_be_bytes()), }) } else { Err(data_error("expected valid public EC key")) diff --git a/ext/crypto/generate_key.rs b/ext/crypto/generate_key.rs index 99f9fac62a..9ecbb8d117 100644 --- a/ext/crypto/generate_key.rs +++ b/ext/crypto/generate_key.rs @@ -7,7 +7,7 @@ use num_traits::FromPrimitive; use once_cell::sync::Lazy; use ring::rand::SecureRandom; use ring::signature::EcdsaKeyPair; -use rsa::pkcs1::ToRsaPrivateKey; +use rsa::pkcs1::EncodeRsaPrivateKey; use rsa::BigUint; use rsa::RsaPrivateKey; use serde::Deserialize; @@ -76,7 +76,7 @@ fn generate_key_rsa( .to_pkcs1_der() .map_err(|_| operation_error("Failed to serialize RSA key"))?; - Ok(private_key.as_ref().to_vec()) + Ok(private_key.as_bytes().to_vec()) } fn generate_key_ec(named_curve: EcNamedCurve) -> Result, AnyError> { diff --git a/ext/crypto/import_key.rs b/ext/crypto/import_key.rs index 9b8a9aa5c1..74d5c4bbe4 100644 --- a/ext/crypto/import_key.rs +++ b/ext/crypto/import_key.rs @@ -1,20 +1,18 @@ -use deno_core::error::AnyError; -use deno_core::op; -use deno_core::ZeroCopyBuf; -use elliptic_curve::pkcs8::der::Decodable as Pkcs8Decodable; -use elliptic_curve::pkcs8::PrivateKeyInfo; -use ring::signature::EcdsaKeyPair; -use rsa::pkcs1::UIntBytes; -use rsa::pkcs8::AlgorithmIdentifier; -use serde::Deserialize; -use serde::Serialize; -use spki::der::Encodable; - -use crate::ec_key::ECPrivateKey; use crate::key::CryptoNamedCurve; use crate::shared::*; use crate::OaepPrivateKeyParameters; use crate::PssPrivateKeyParameters; +use deno_core::error::AnyError; +use deno_core::op; +use deno_core::ZeroCopyBuf; +use elliptic_curve::pkcs8::PrivateKeyInfo; +use p256::pkcs8::EncodePrivateKey; +use ring::signature::EcdsaKeyPair; +use rsa::pkcs1::UIntRef; +use serde::Deserialize; +use serde::Serialize; +use spki::der::Decode; +use spki::der::Encode; #[derive(Deserialize)] #[serde(rename_all = "camelCase")] @@ -114,7 +112,7 @@ macro_rules! jwt_b64_int_or_err { ($name:ident, $b64:expr, $err:expr) => { let bytes = base64::decode_config($b64, URL_SAFE_FORGIVING) .map_err(|_| data_error($err))?; - let $name = UIntBytes::new(&bytes).map_err(|_| data_error($err))?; + let $name = UIntRef::new(&bytes).map_err(|_| data_error($err))?; }; } @@ -164,7 +162,6 @@ fn import_key_rsa_jwk( jwt_b64_int_or_err!(coefficient, &qi, "invalid CRT coefficient"); let private_key = rsa::pkcs1::RsaPrivateKey { - version: rsa::pkcs1::Version::TwoPrime, modulus, public_exponent, private_exponent, @@ -173,6 +170,7 @@ fn import_key_rsa_jwk( exponent1, exponent2, coefficient, + other_prime_infos: None, }; let data = private_key @@ -193,28 +191,6 @@ fn import_key_rsa_jwk( } } -fn validate_mask_gen( - mask_gen_algorithm: &AlgorithmIdentifier, - hash_algorithm: &AlgorithmIdentifier, -) -> Result<(), deno_core::anyhow::Error> { - if mask_gen_algorithm.oid != ID_MFG1 { - return Err(not_supported_error("unsupported mask gen algorithm")); - } - - let parameters = mask_gen_algorithm - .parameters_any() - .map_err(|_| not_supported_error("unsupported parameters"))?; - let mgf1_hash_identifier = AlgorithmIdentifier::try_from(parameters) - .map_err(|_| not_supported_error("unsupported parameters"))?; - - // The hash function on which MGF1 is based. - mgf1_hash_identifier - .assert_algorithm_oid(hash_algorithm.oid) - .map_err(|_| not_supported_error("unsupported parameters"))?; - - Ok(()) -} - fn import_key_rsassa( key_data: KeyData, hash: ShaHash, @@ -383,7 +359,6 @@ fn import_key_rsapss( return Err(not_supported_error("unsupported hash algorithm")); } - validate_mask_gen(¶ms.mask_gen_algorithm, &hash_alg)?; hash } _ => return Err(data_error("unsupported algorithm")), @@ -446,7 +421,7 @@ fn import_key_rsapss( .map_err(|_| not_supported_error("malformed parameters"))?; let hash_alg = params.hash_algorithm; - let hash = match hash_alg.oid { + match hash_alg.oid { // id-sha1 ID_SHA1_OID => Some(ShaHash::Sha1), // id-sha256 @@ -456,10 +431,7 @@ fn import_key_rsapss( // id-sha256 ID_SHA512_OID => Some(ShaHash::Sha512), _ => return Err(data_error("unsupported hash algorithm")), - }; - - validate_mask_gen(¶ms.mask_gen_algorithm, &hash_alg)?; - hash + } } _ => return Err(data_error("unsupported algorithm")), }; @@ -532,7 +504,7 @@ fn import_key_rsaoaep( .map_err(|_| data_error("malformed parameters"))?; let hash_alg = params.hash_algorithm; - let hash = match hash_alg.oid { + match hash_alg.oid { // id-sha1 ID_SHA1_OID => Some(ShaHash::Sha1), // id-sha256 @@ -542,10 +514,7 @@ fn import_key_rsaoaep( // id-sha256 ID_SHA512_OID => Some(ShaHash::Sha512), _ => return Err(data_error("unsupported hash algorithm")), - }; - - validate_mask_gen(¶ms.mask_gen_algorithm, &hash_alg)?; - hash + } } _ => return Err(data_error("unsupported algorithm")), }; @@ -607,7 +576,7 @@ fn import_key_rsaoaep( .map_err(|_| not_supported_error("malformed parameters"))?; let hash_alg = params.hash_algorithm; - let hash = match hash_alg.oid { + match hash_alg.oid { // id-sha1 ID_SHA1_OID => Some(ShaHash::Sha1), // id-sha256 @@ -617,9 +586,7 @@ fn import_key_rsaoaep( // id-sha256 ID_SHA512_OID => Some(ShaHash::Sha512), _ => return Err(data_error("unsupported hash algorithm")), - }; - validate_mask_gen(¶ms.mask_gen_algorithm, &hash_alg)?; - hash + } } _ => return Err(data_error("unsupported algorithm")), }; @@ -716,30 +683,18 @@ fn import_key_ec_jwk( }) } KeyData::JwkPrivateEc { d, x, y } => { - let point_bytes = import_key_ec_jwk_to_point(x, y, named_curve)?; - jwt_b64_int_or_err!(private_d, &d, "invalid JWK private key"); - + let point_bytes = import_key_ec_jwk_to_point(x, y, named_curve)?; let pkcs8_der = match named_curve { EcNamedCurve::P256 => { let d = decode_b64url_to_field_bytes::(&d)?; - - let pk = - ECPrivateKey::::from_private_and_public_bytes( - d, - &point_bytes, - ); + let pk = p256::SecretKey::from_be_bytes(&d)?; pk.to_pkcs8_der()? } EcNamedCurve::P384 => { let d = decode_b64url_to_field_bytes::(&d)?; - - let pk = - ECPrivateKey::::from_private_and_public_bytes( - d, - &point_bytes, - ); + let pk = p384::SecretKey::from_be_bytes(&d)?; pk.to_pkcs8_der()? } @@ -764,7 +719,7 @@ fn import_key_ec_jwk( ); Ok(ImportKeyResult::Ec { - raw_data: RawKeyData::Private(pkcs8_der.as_ref().to_vec().into()), + raw_data: RawKeyData::Private(pkcs8_der.as_bytes().to_vec().into()), }) } _ => unreachable!(), @@ -775,11 +730,11 @@ pub struct ECParametersSpki { pub named_curve_alg: spki::der::asn1::ObjectIdentifier, } -impl<'a> TryFrom> for ECParametersSpki { +impl<'a> TryFrom> for ECParametersSpki { type Error = spki::der::Error; fn try_from( - any: spki::der::asn1::Any<'a>, + any: spki::der::asn1::AnyRef<'a>, ) -> spki::der::Result { let x = any.oid()?; @@ -824,15 +779,14 @@ fn import_key_ec( // 2-7 // Deserialize PKCS8 - validate structure, extracts named_curve let named_curve_alg = match named_curve { - EcNamedCurve::P256 => { - let pk = ECPrivateKey::::try_from(data.as_ref())?; - - pk.named_curve_oid().unwrap() - } - EcNamedCurve::P384 => { - let pk = ECPrivateKey::::try_from(data.as_ref())?; - - pk.named_curve_oid().unwrap() + EcNamedCurve::P256 | EcNamedCurve::P384 => { + let pk = PrivateKeyInfo::from_der(data.as_ref()) + .map_err(|_| data_error("expected valid PKCS#8 data"))?; + pk.algorithm + .parameters + .ok_or_else(|| data_error("malformed parameters"))? + .oid() + .unwrap() } EcNamedCurve::P521 => { return Err(data_error("Unsupported named curve")) @@ -922,7 +876,6 @@ fn import_key_ec( p256::EncodedPoint::from_bytes(&*encoded_key).map_err(|_| { data_error("invalid P-256 eliptic curve SPKI data") })?; - if point.is_identity() { return Err(data_error("invalid P-256 eliptic curve point")); } @@ -957,7 +910,7 @@ fn import_key_ec( } Ok(ImportKeyResult::Ec { - raw_data: RawKeyData::Public(encoded_key.to_vec().into()), + raw_data: RawKeyData::Public(encoded_key.into()), }) } KeyData::JwkPublicEc { .. } | KeyData::JwkPrivateEc { .. } => { diff --git a/ext/crypto/lib.rs b/ext/crypto/lib.rs index 6063be1bd9..a5c0d90e92 100644 --- a/ext/crypto/lib.rs +++ b/ext/crypto/lib.rs @@ -17,10 +17,8 @@ use deno_core::ZeroCopyBuf; use serde::Deserialize; use shared::operation_error; -use std::num::NonZeroU32; - use p256::elliptic_curve::sec1::FromEncodedPoint; -use p256::pkcs8::FromPrivateKey; +use p256::pkcs8::DecodePrivateKey; use rand::rngs::OsRng; use rand::rngs::StdRng; use rand::thread_rng; @@ -37,10 +35,10 @@ use ring::signature::EcdsaSigningAlgorithm; use ring::signature::EcdsaVerificationAlgorithm; use ring::signature::KeyPair; use rsa::padding::PaddingScheme; -use rsa::pkcs1::der::Decodable; -use rsa::pkcs1::der::Encodable; -use rsa::pkcs1::FromRsaPrivateKey; -use rsa::pkcs1::FromRsaPublicKey; +use rsa::pkcs1::der::Decode; +use rsa::pkcs1::der::Encode; +use rsa::pkcs1::DecodeRsaPrivateKey; +use rsa::pkcs1::DecodeRsaPublicKey; use rsa::pkcs8::der::asn1; use rsa::PublicKey; use rsa::RsaPrivateKey; @@ -51,12 +49,12 @@ use sha2::Sha256; use sha2::Sha384; use sha2::Sha512; use std::convert::TryFrom; +use std::num::NonZeroU32; use std::path::PathBuf; pub use rand; // Re-export rand mod decrypt; -mod ec_key; mod encrypt; mod export_key; mod generate_key; @@ -537,11 +535,10 @@ pub async fn op_crypto_derive_bits( type_error("Unexpected error decoding private key") })?; - let pk: Option = - p256::PublicKey::from_encoded_point(&point); - - if let Some(pk) = pk { - pk + let pk = p256::PublicKey::from_encoded_point(&point); + // pk is a constant time Option. + if pk.is_some().into() { + pk.unwrap() } else { return Err(type_error( "Unexpected error decoding private key", @@ -552,11 +549,12 @@ pub async fn op_crypto_derive_bits( }; let shared_secret = p256::elliptic_curve::ecdh::diffie_hellman( - secret_key.to_secret_scalar(), + secret_key.to_nonzero_scalar(), public_key.as_affine(), ); - Ok(shared_secret.as_bytes().to_vec().into()) + // raw serialized x-coordinate of the computed point + Ok(shared_secret.raw_secret_bytes().to_vec().into()) } // TODO(@littledivy): support for P384 // https://github.com/RustCrypto/elliptic-curves/issues/240 @@ -654,7 +652,7 @@ static SHA1_HASH_ALGORITHM: Lazy> = // id-sha1 oid: ID_SHA1_OID, // NULL - parameters: Some(asn1::Any::from(asn1::Null)), + parameters: Some(asn1::AnyRef::from(asn1::Null)), } }); @@ -675,7 +673,7 @@ static MGF1_SHA1_MASK_ALGORITHM: Lazy< oid: ID_MFG1, // sha1 parameters: Some( - asn1::Any::from_der(&ENCODED_SHA1_HASH_ALGORITHM).unwrap(), + asn1::AnyRef::from_der(&ENCODED_SHA1_HASH_ALGORITHM).unwrap(), ), } }); @@ -695,33 +693,51 @@ static P_SPECIFIED_EMPTY: Lazy> = // id-pSpecified oid: ID_P_SPECIFIED, // EncodingParameters - parameters: Some(asn1::Any::from(asn1::OctetString::new(b"").unwrap())), + parameters: Some(asn1::AnyRef::from( + asn1::OctetStringRef::new(b"").unwrap(), + )), } }); -impl<'a> TryFrom> +fn decode_content_tag<'a, T>( + decoder: &mut rsa::pkcs8::der::SliceReader<'a>, + tag: rsa::pkcs8::der::TagNumber, +) -> rsa::pkcs8::der::Result> +where + T: rsa::pkcs8::der::Decode<'a>, +{ + Ok( + rsa::pkcs8::der::asn1::ContextSpecific::::decode_explicit(decoder, tag)? + .map(|field| field.value), + ) +} + +impl<'a> TryFrom> for PssPrivateKeyParameters<'a> { type Error = rsa::pkcs8::der::Error; fn try_from( - any: rsa::pkcs8::der::asn1::Any<'a>, - ) -> rsa::pkcs8::der::Result { + any: rsa::pkcs8::der::asn1::AnyRef<'a>, + ) -> rsa::pkcs8::der::Result> { any.sequence(|decoder| { - let hash_algorithm = decoder - .context_specific(HASH_ALGORITHM_TAG)? + let hash_algorithm = + decode_content_tag::( + decoder, + HASH_ALGORITHM_TAG, + )? .map(TryInto::try_into) .transpose()? .unwrap_or(*SHA1_HASH_ALGORITHM); - let mask_gen_algorithm = decoder - .context_specific(MASK_GEN_ALGORITHM_TAG)? - .map(TryInto::try_into) - .transpose()? - .unwrap_or(*MGF1_SHA1_MASK_ALGORITHM); + let mask_gen_algorithm = decode_content_tag::< + rsa::pkcs8::AlgorithmIdentifier, + >(decoder, MASK_GEN_ALGORITHM_TAG)? + .map(TryInto::try_into) + .transpose()? + .unwrap_or(*MGF1_SHA1_MASK_ALGORITHM); - let salt_length = decoder - .context_specific(SALT_LENGTH_TAG)? + let salt_length = decode_content_tag::(decoder, SALT_LENGTH_TAG)? .map(TryInto::try_into) .transpose()? .unwrap_or(20); @@ -749,32 +765,37 @@ pub struct OaepPrivateKeyParameters<'a> { pub p_source_algorithm: rsa::pkcs8::AlgorithmIdentifier<'a>, } -impl<'a> TryFrom> +impl<'a> TryFrom> for OaepPrivateKeyParameters<'a> { type Error = rsa::pkcs8::der::Error; fn try_from( - any: rsa::pkcs8::der::asn1::Any<'a>, - ) -> rsa::pkcs8::der::Result { + any: rsa::pkcs8::der::asn1::AnyRef<'a>, + ) -> rsa::pkcs8::der::Result> { any.sequence(|decoder| { - let hash_algorithm = decoder - .context_specific(HASH_ALGORITHM_TAG)? + let hash_algorithm = + decode_content_tag::( + decoder, + HASH_ALGORITHM_TAG, + )? .map(TryInto::try_into) .transpose()? .unwrap_or(*SHA1_HASH_ALGORITHM); - let mask_gen_algorithm = decoder - .context_specific(MASK_GEN_ALGORITHM_TAG)? - .map(TryInto::try_into) - .transpose()? - .unwrap_or(*MGF1_SHA1_MASK_ALGORITHM); + let mask_gen_algorithm = decode_content_tag::< + rsa::pkcs8::AlgorithmIdentifier, + >(decoder, MASK_GEN_ALGORITHM_TAG)? + .map(TryInto::try_into) + .transpose()? + .unwrap_or(*MGF1_SHA1_MASK_ALGORITHM); - let p_source_algorithm = decoder - .context_specific(P_SOURCE_ALGORITHM_TAG)? - .map(TryInto::try_into) - .transpose()? - .unwrap_or(*P_SPECIFIED_EMPTY); + let p_source_algorithm = decode_content_tag::< + rsa::pkcs8::AlgorithmIdentifier, + >(decoder, P_SOURCE_ALGORITHM_TAG)? + .map(TryInto::try_into) + .transpose()? + .unwrap_or(*P_SPECIFIED_EMPTY); Ok(Self { hash_algorithm, diff --git a/ext/crypto/shared.rs b/ext/crypto/shared.rs index 052744248f..51fed65096 100644 --- a/ext/crypto/shared.rs +++ b/ext/crypto/shared.rs @@ -5,48 +5,46 @@ use deno_core::error::type_error; use deno_core::error::AnyError; use deno_core::ZeroCopyBuf; use elliptic_curve::sec1::ToEncodedPoint; -use p256::pkcs8::FromPrivateKey; -use rsa::pkcs1::FromRsaPrivateKey; -use rsa::pkcs1::ToRsaPublicKey; +use rsa::pkcs1::DecodeRsaPrivateKey; +use rsa::pkcs1::EncodeRsaPublicKey; +use rsa::pkcs8::DecodePrivateKey; use rsa::RsaPrivateKey; use serde::Deserialize; use serde::Serialize; -use crate::ec_key::ECPrivateKey; +pub const RSA_ENCRYPTION_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.1"); +pub const SHA1_RSA_ENCRYPTION_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.5"); +pub const SHA256_RSA_ENCRYPTION_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.11"); +pub const SHA384_RSA_ENCRYPTION_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.12"); +pub const SHA512_RSA_ENCRYPTION_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.13"); +pub const RSASSA_PSS_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.10"); +pub const ID_SHA1_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.3.14.3.2.26"); +pub const ID_SHA256_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("2.16.840.1.101.3.4.2.1"); +pub const ID_SHA384_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("2.16.840.1.101.3.4.2.2"); +pub const ID_SHA512_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("2.16.840.1.101.3.4.2.3"); +pub const ID_MFG1: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.8"); +pub const RSAES_OAEP_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.7"); +pub const ID_P_SPECIFIED: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.9"); -pub const RSA_ENCRYPTION_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.2.840.113549.1.1.1"); -pub const SHA1_RSA_ENCRYPTION_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.2.840.113549.1.1.5"); -pub const SHA256_RSA_ENCRYPTION_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.2.840.113549.1.1.11"); -pub const SHA384_RSA_ENCRYPTION_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.2.840.113549.1.1.12"); -pub const SHA512_RSA_ENCRYPTION_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.2.840.113549.1.1.13"); -pub const RSASSA_PSS_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.2.840.113549.1.1.10"); -pub const ID_SHA1_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.3.14.3.2.26"); -pub const ID_SHA256_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("2.16.840.1.101.3.4.2.1"); -pub const ID_SHA384_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("2.16.840.1.101.3.4.2.2"); -pub const ID_SHA512_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("2.16.840.1.101.3.4.2.3"); -pub const ID_MFG1: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.2.840.113549.1.1.8"); -pub const RSAES_OAEP_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.2.840.113549.1.1.7"); -pub const ID_P_SPECIFIED: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.2.840.113549.1.1.9"); - -pub const ID_SECP256R1_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.2.840.10045.3.1.7"); -pub const ID_SECP384R1_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.3.132.0.34"); -pub const ID_SECP521R1_OID: rsa::pkcs8::ObjectIdentifier = - rsa::pkcs8::ObjectIdentifier::new("1.3.132.0.35"); +pub const ID_SECP256R1_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.2.840.10045.3.1.7"); +pub const ID_SECP384R1_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.3.132.0.34"); +pub const ID_SECP521R1_OID: const_oid::ObjectIdentifier = + const_oid::ObjectIdentifier::new_unwrap("1.3.132.0.35"); #[derive(Serialize, Deserialize, Copy, Clone, PartialEq)] pub enum ShaHash { @@ -91,7 +89,7 @@ impl RawKeyData { .to_pkcs1_der() .map_err(|_| type_error("expected valid public key"))?; - Ok(Cow::Owned(public_key_doc.as_der().into())) + Ok(Cow::Owned(public_key_doc.as_bytes().into())) } _ => Err(type_error("expected public key")), } @@ -136,16 +134,9 @@ impl RawKeyData { .map_err(|_| type_error("expected valid public EC key")) } RawKeyData::Private(data) => { - let ec_key = ECPrivateKey::::try_from(&**data) - .map_err(|_| { - custom_error( - "DOMExceptionOperationError", - "failed to decode private key", - ) - })?; - let point = p384::EncodedPoint::from_bytes(&ec_key.encoded_point) - .map_err(|_| data_error("expected valid public EC key"))?; - Ok(point) + let signing_key = p384::SecretKey::from_pkcs8_der(data) + .map_err(|_| type_error("expected valid private EC key"))?; + Ok(signing_key.public_key().to_encoded_point(false)) } // Should never reach here. RawKeyData::Secret(_) => unreachable!(),