summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock658
-rw-r--r--ext/crypto/Cargo.toml29
-rw-r--r--ext/crypto/decrypt.rs78
-rw-r--r--ext/crypto/ec_key.rs148
-rw-r--r--ext/crypto/encrypt.rs72
-rw-r--r--ext/crypto/export_key.rs62
-rw-r--r--ext/crypto/generate_key.rs4
-rw-r--r--ext/crypto/import_key.rs109
-rw-r--r--ext/crypto/lib.rs113
-rw-r--r--ext/crypto/shared.rs89
10 files changed, 600 insertions, 762 deletions
diff --git a/Cargo.lock b/Cargo.lock
index a7b9760a6..93dc62f87 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,25 +213,22 @@ 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",
+ "syn 1.0.96",
]
[[package]]
name = "autocfg"
-version = "0.1.8"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
-dependencies = [
- "autocfg 1.1.0",
-]
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
-name = "autocfg"
-version = "1.1.0"
+name = "base16ct"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
[[package]]
name = "base64"
@@ -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"
@@ -385,6 +379,15 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -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",
@@ -614,30 +618,20 @@ dependencies = [
]
[[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"
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 = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
name = "hmac"
-version = "0.11.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
dependencies = [
- "crypto-mac",
- "digest 0.9.0",
+ "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",
]
@@ -2114,6 +2126,16 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -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 = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0"
+
+[[package]]
+name = "rfc6979"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086"
+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]]
@@ -3522,6 +3554,20 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -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]]
@@ -3676,19 +3722,6 @@ dependencies = [
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
@@ -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"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04066589568b72ec65f42d65a1a52436e954b168773148893c020269563decf2"
-dependencies = [
- "proc-macro2 1.0.38",
- "quote 1.0.18",
- "unicode-xid 0.2.3",
-]
-
-[[package]]
-name = "synstructure"
-version = "0.12.6"
+version = "1.0.96"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf"
dependencies = [
- "proc-macro2 1.0.38",
+ "proc-macro2 1.0.39",
"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",
@@ -4895,6 +4920,12 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4922,12 +4953,6 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -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"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619"
-dependencies = [
- "zeroize_derive",
-]
-
-[[package]]
-name = "zeroize_derive"
-version = "1.3.2"
+version = "1.5.5"
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 b22083757..ffdc61ce5 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 b3989a7f6..85d5f5210 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<aes::Aes128, block_modes::block_padding::Pkcs7>;
- let cipher = Aes128Cbc::new_from_slices(key, &iv)?;
+ type Aes128CbcDec = cbc::Decryptor<aes::Aes128>;
+ 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::<Pkcs7>(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<aes::Aes192, block_modes::block_padding::Pkcs7>;
- let cipher = Aes192Cbc::new_from_slices(key, &iv)?;
+ type Aes192CbcDec = cbc::Decryptor<aes::Aes192>;
+ 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::<Pkcs7>(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<aes::Aes256, block_modes::block_padding::Pkcs7>;
- let cipher = Aes256Cbc::new_from_slices(key, &iv)?;
+ type Aes256CbcDec = cbc::Decryptor<aes::Aes256>;
+ 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::<Pkcs7>(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<B, F>(
+fn decrypt_aes_ctr_gen<B>(
key: &[u8],
counter: &[u8],
data: &[u8],
) -> Result<Vec<u8>, AnyError>
where
- B: BlockEncrypt + NewBlockCipher,
- F: CtrFlavor<B::BlockSize>,
+ B: KeyIvInit + StreamCipher,
{
- let mut cipher = Ctr::<B, F>::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::<aes::Aes128, Ctr32BE>(key, counter, data),
- 192 => decrypt_aes_ctr_gen::<aes::Aes192, Ctr32BE>(key, counter, data),
- 256 => decrypt_aes_ctr_gen::<aes::Aes256, Ctr32BE>(key, counter, data),
+ 128 => decrypt_aes_ctr_gen::<Ctr32BE<aes::Aes128>>(key, counter, data),
+ 192 => decrypt_aes_ctr_gen::<Ctr32BE<aes::Aes192>>(key, counter, data),
+ 256 => decrypt_aes_ctr_gen::<Ctr32BE<aes::Aes256>>(key, counter, data),
_ => Err(type_error("invalid length")),
},
64 => match key_length {
- 128 => decrypt_aes_ctr_gen::<aes::Aes128, Ctr64BE>(key, counter, data),
- 192 => decrypt_aes_ctr_gen::<aes::Aes192, Ctr64BE>(key, counter, data),
- 256 => decrypt_aes_ctr_gen::<aes::Aes256, Ctr64BE>(key, counter, data),
+ 128 => decrypt_aes_ctr_gen::<Ctr64BE<aes::Aes128>>(key, counter, data),
+ 192 => decrypt_aes_ctr_gen::<Ctr64BE<aes::Aes192>>(key, counter, data),
+ 256 => decrypt_aes_ctr_gen::<Ctr64BE<aes::Aes256>>(key, counter, data),
_ => Err(type_error("invalid length")),
},
128 => match key_length {
- 128 => decrypt_aes_ctr_gen::<aes::Aes128, Ctr128BE>(key, counter, data),
- 192 => decrypt_aes_ctr_gen::<aes::Aes192, Ctr128BE>(key, counter, data),
- 256 => decrypt_aes_ctr_gen::<aes::Aes256, Ctr128BE>(key, counter, data),
+ 128 => decrypt_aes_ctr_gen::<Ctr128BE<aes::Aes128>>(key, counter, data),
+ 192 => decrypt_aes_ctr_gen::<Ctr128BE<aes::Aes192>>(key, counter, data),
+ 256 => decrypt_aes_ctr_gen::<Ctr128BE<aes::Aes256>>(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 8302bb55d..000000000
--- 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<C>,
-
- 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<C>,
- encoded_point: &'a [u8],
- ) -> Self {
- Self {
- private_d,
- encoded_point,
- algorithm: C::algorithm_identifier(),
- }
- }
-
- pub fn named_curve_oid(&self) -> Result<ObjectIdentifier, AnyError> {
- let parameters = self
- .algorithm
- .parameters
- .ok_or_else(|| data_error("malformed parameters"))?;
-
- Ok(parameters.oid().unwrap())
- }
-
- fn internal_to_pkcs8_der(&self) -> der::Result<Vec<u8>> {
- // 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<PrivateKeyDocument, AnyError> {
- 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<ECPrivateKey<C>, 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<PrivateKeyInfo<'a>>
- for ECPrivateKey<'a, C>
-{
- type Error = AnyError;
-
- fn try_from(
- pk_info: PrivateKeyInfo<'a>,
- ) -> Result<ECPrivateKey<'a, C>, 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::<C>::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 9d0dd3565..ffa441c0f 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<aes::Aes128, block_modes::block_padding::Pkcs7>;
+ type Aes128CbcEnc = cbc::Encryptor<aes::Aes128>;
- 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::<Pkcs7>(data)
}
192 => {
// Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315
- type Aes192Cbc =
- block_modes::Cbc<aes::Aes192, block_modes::block_padding::Pkcs7>;
+ type Aes192CbcEnc = cbc::Encryptor<aes::Aes192>;
- 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::<Pkcs7>(data)
}
256 => {
// Section 10.3 Step 2 of RFC 2315 https://www.rfc-editor.org/rfc/rfc2315
- type Aes256Cbc =
- block_modes::Cbc<aes::Aes256, block_modes::block_padding::Pkcs7>;
+ type Aes256CbcEnc = cbc::Encryptor<aes::Aes256>;
- 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::<Pkcs7>(data)
}
_ => return Err(type_error("invalid length")),
};
@@ -260,16 +255,15 @@ fn encrypt_aes_gcm(
Ok(ciphertext)
}
-fn encrypt_aes_ctr_gen<B, F>(
+fn encrypt_aes_ctr_gen<B>(
key: &[u8],
counter: &[u8],
data: &[u8],
) -> Result<Vec<u8>, AnyError>
where
- B: BlockEncrypt + NewBlockCipher,
- F: CtrFlavor<B::BlockSize>,
+ B: KeyIvInit + StreamCipher,
{
- let mut cipher = Ctr::<B, F>::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::<aes::Aes128, Ctr32BE>(key, counter, data),
- 192 => encrypt_aes_ctr_gen::<aes::Aes192, Ctr32BE>(key, counter, data),
- 256 => encrypt_aes_ctr_gen::<aes::Aes256, Ctr32BE>(key, counter, data),
+ 128 => encrypt_aes_ctr_gen::<Ctr32BE<aes::Aes128>>(key, counter, data),
+ 192 => encrypt_aes_ctr_gen::<Ctr32BE<aes::Aes192>>(key, counter, data),
+ 256 => encrypt_aes_ctr_gen::<Ctr32BE<aes::Aes256>>(key, counter, data),
_ => Err(type_error("invalid length")),
},
64 => match key_length {
- 128 => encrypt_aes_ctr_gen::<aes::Aes128, Ctr64BE>(key, counter, data),
- 192 => encrypt_aes_ctr_gen::<aes::Aes192, Ctr64BE>(key, counter, data),
- 256 => encrypt_aes_ctr_gen::<aes::Aes256, Ctr64BE>(key, counter, data),
+ 128 => encrypt_aes_ctr_gen::<Ctr64BE<aes::Aes128>>(key, counter, data),
+ 192 => encrypt_aes_ctr_gen::<Ctr64BE<aes::Aes192>>(key, counter, data),
+ 256 => encrypt_aes_ctr_gen::<Ctr64BE<aes::Aes256>>(key, counter, data),
_ => Err(type_error("invalid length")),
},
128 => match key_length {
- 128 => encrypt_aes_ctr_gen::<aes::Aes128, Ctr128BE>(key, counter, data),
- 192 => encrypt_aes_ctr_gen::<aes::Aes192, Ctr128BE>(key, counter, data),
- 256 => encrypt_aes_ctr_gen::<aes::Aes256, Ctr128BE>(key, counter, data),
+ 128 => encrypt_aes_ctr_gen::<Ctr128BE<aes::Aes128>>(key, counter, data),
+ 192 => encrypt_aes_ctr_gen::<Ctr128BE<aes::Aes192>>(key, counter, data),
+ 256 => encrypt_aes_ctr_gen::<Ctr128BE<aes::Aes256>>(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 9e124775b..e7814fea0 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 => <p256::NistP256 as p256::elliptic_curve::AlgorithmParameters>::algorithm_identifier(),
- EcNamedCurve::P384 => <p384::NistP384 as p384::elliptic_curve::AlgorithmParameters>::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::<p256::NistP256>::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::<p384::NistP384>::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 99f9fac62..9ecbb8d11 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<Vec<u8>, AnyError> {
diff --git a/ext/crypto/import_key.rs b/ext/crypto/import_key.rs
index 9b8a9aa5c..74d5c4bbe 100644
--- a/ext/crypto/import_key.rs
+++ b/ext/crypto/import_key.rs
@@ -1,20 +1,18 @@
+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::der::Decodable as Pkcs8Decodable;
use elliptic_curve::pkcs8::PrivateKeyInfo;
+use p256::pkcs8::EncodePrivateKey;
use ring::signature::EcdsaKeyPair;
-use rsa::pkcs1::UIntBytes;
-use rsa::pkcs8::AlgorithmIdentifier;
+use rsa::pkcs1::UIntRef;
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 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(&params.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(&params.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(&params.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(&params.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::<p256::NistP256>(&d)?;
-
- let pk =
- ECPrivateKey::<p256::NistP256>::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::<p384::NistP384>(&d)?;
-
- let pk =
- ECPrivateKey::<p384::NistP384>::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<spki::der::asn1::Any<'a>> for ECParametersSpki {
+impl<'a> TryFrom<spki::der::asn1::AnyRef<'a>> 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<ECParametersSpki> {
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::<p256::NistP256>::try_from(data.as_ref())?;
-
- pk.named_curve_oid().unwrap()
- }
- EcNamedCurve::P384 => {
- let pk = ECPrivateKey::<p384::NistP384>::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 6063be1bd..a5c0d90e9 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> =
- 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<rsa::pkcs8::AlgorithmIdentifier<'static>> =
// 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<rsa::pkcs8::AlgorithmIdentifier<'static>> =
// 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<rsa::pkcs8::der::asn1::Any<'a>>
+fn decode_content_tag<'a, T>(
+ decoder: &mut rsa::pkcs8::der::SliceReader<'a>,
+ tag: rsa::pkcs8::der::TagNumber,
+) -> rsa::pkcs8::der::Result<Option<T>>
+where
+ T: rsa::pkcs8::der::Decode<'a>,
+{
+ Ok(
+ rsa::pkcs8::der::asn1::ContextSpecific::<T>::decode_explicit(decoder, tag)?
+ .map(|field| field.value),
+ )
+}
+
+impl<'a> TryFrom<rsa::pkcs8::der::asn1::AnyRef<'a>>
for PssPrivateKeyParameters<'a>
{
type Error = rsa::pkcs8::der::Error;
fn try_from(
- any: rsa::pkcs8::der::asn1::Any<'a>,
- ) -> rsa::pkcs8::der::Result<PssPrivateKeyParameters> {
+ any: rsa::pkcs8::der::asn1::AnyRef<'a>,
+ ) -> rsa::pkcs8::der::Result<PssPrivateKeyParameters<'a>> {
any.sequence(|decoder| {
- let hash_algorithm = decoder
- .context_specific(HASH_ALGORITHM_TAG)?
+ let hash_algorithm =
+ decode_content_tag::<rsa::pkcs8::AlgorithmIdentifier>(
+ 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::<u32>(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<rsa::pkcs8::der::asn1::Any<'a>>
+impl<'a> TryFrom<rsa::pkcs8::der::asn1::AnyRef<'a>>
for OaepPrivateKeyParameters<'a>
{
type Error = rsa::pkcs8::der::Error;
fn try_from(
- any: rsa::pkcs8::der::asn1::Any<'a>,
- ) -> rsa::pkcs8::der::Result<OaepPrivateKeyParameters> {
+ any: rsa::pkcs8::der::asn1::AnyRef<'a>,
+ ) -> rsa::pkcs8::der::Result<OaepPrivateKeyParameters<'a>> {
any.sequence(|decoder| {
- let hash_algorithm = decoder
- .context_specific(HASH_ALGORITHM_TAG)?
+ let hash_algorithm =
+ decode_content_tag::<rsa::pkcs8::AlgorithmIdentifier>(
+ 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 p_source_algorithm = decoder
- .context_specific(P_SOURCE_ALGORITHM_TAG)?
- .map(TryInto::try_into)
- .transpose()?
- .unwrap_or(*P_SPECIFIED_EMPTY);
+ 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 = 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 052744248..51fed6509 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: 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 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 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::<p384::NistP384>::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!(),