From 5f47efbfd83a13844b62e86f45ce3e92157372d4 Mon Sep 17 00:00:00 2001 From: Matt Johnston <matt@ucc.asn.au> Date: Sat, 3 Dec 2022 00:06:10 +0800 Subject: [PATCH] Add zeroize embassy picow demo fails to compile probably due to recent async changes. switch to custom branch for salty --- Cargo.toml | 17 +- embassy/demos/picow/Cargo.lock | 280 ++++------------ embassy/demos/picow/rust-toolchain.toml | 2 +- embassy/demos/std/Cargo.lock | 407 +++++++----------------- embassy/demos/std/rust-toolchain.toml | 2 +- src/conn.rs | 9 +- src/encrypt.rs | 11 +- src/kex.rs | 8 +- src/packets.rs | 1 + src/sign.rs | 5 +- src/ssh_chapoly.rs | 3 +- 11 files changed, 209 insertions(+), 536 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 06a629b..a5c48ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,18 +39,20 @@ ascii = { version = "1.0", default-features = false } rand = { version = "0.8", default-features = false } rand_core = { version = "0.6", default-features = false } -ctr = "0.9" -aes = "0.8" +ctr = { version = "0.9", features = ["zeroize"] } +aes = { version = "0.8", features = ["zeroize"] } +chacha20 = { version = "0.9", features = ["zeroize"] } sha2 = { version = "0.10", default-features = false } hmac = "0.12" +poly1305 = "0.7" digest = "0.10" signature = { version = "1.4", default-features = false } -chacha20 = "0.9" -poly1305 = "0.7" +zeroize = { version = "1", default-features = false, features = ["derive"] } +cipher = { version = "0.4", features = ["zeroize"] } # ed25519/x25519 -salty = { version = "0.2", git = "https://github.com/mkj/salty", branch = "parts" } -# could be optional? though isn't linked if openssh keys aren't loaded -ssh-key = { version = "0.4", default-features = false, features = ["ed25519", "ecdsa", "sha2"] } +# fork allows hashing by parts (sign/verify from sshwire), and zeroize +salty = { version = "0.2", git = "https://github.com/mkj/salty", branch = "sunset" } +ssh-key = { version = "0.5", default-features = false, optional = true } # for debug printing pretty-hex = { version = "0.3", default-features = false } @@ -61,6 +63,7 @@ async-trait = { version = "0.1", optional = true } default = [ "getrandom" ] std = ["async-trait", "snafu/std"] # tokio-queue = ["dep:tokio"] +openssh-key = ["ssh-key"] getrandom = ["rand/getrandom"] diff --git a/embassy/demos/picow/Cargo.lock b/embassy/demos/picow/Cargo.lock index c9e083d..82d90c5 100644 --- a/embassy/demos/picow/Cargo.lock +++ b/embassy/demos/picow/Cargo.lock @@ -11,15 +11,7 @@ dependencies = [ "cfg-if", "cipher", "cpufeatures", -] - -[[package]] -name = "aho-corasick" -version = "0.7.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" -dependencies = [ - "memchr", + "zeroize", ] [[package]] @@ -51,11 +43,11 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "atomic-polyfill" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c041a8d9751a520ee19656232a18971f18946a7900f1520ee4400002244dd89" +checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28" dependencies = [ - "critical-section 0.2.7", + "critical-section 1.1.1", ] [[package]] @@ -100,18 +92,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603" -[[package]] -name = "base64ct" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" - -[[package]] -name = "bit_field" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" - [[package]] name = "bitfield" version = "0.13.2" @@ -124,15 +104,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.6", -] - [[package]] name = "block-buffer" version = "0.10.3" @@ -151,16 +122,16 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "caprand" version = "0.1.0" -source = "git+https://github.com/mkj/caprand#ddd00562d65a9750136dbde53d30773797906801" +source = "git+https://github.com/mkj/caprand#648d3bfa9e563380dce0aeb780b91e7f2a70cbdc" dependencies = [ "cortex-m", "critical-section 1.1.1", "embassy-rp", - "embassy-time", "getrandom", "log", + "rand", "rand_chacha", - "sha2 0.10.6", + "sha2", ] [[package]] @@ -188,14 +159,9 @@ checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" dependencies = [ "crypto-common", "inout", + "zeroize", ] -[[package]] -name = "const-oid" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" - [[package]] name = "cortex-m" version = "0.7.6" @@ -211,9 +177,9 @@ dependencies = [ [[package]] name = "cortex-m-rt" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c433da385b720d5bb9f52362fa2782420798e68d40d67bfe4b0d992aba5dfe7" +checksum = "d6d3328b8b5534f0c90acd66b68950f2763b37e0173cac4d8b4937c4a80761f9" dependencies = [ "cortex-m-rt-macros", ] @@ -240,14 +206,12 @@ dependencies = [ [[package]] name = "critical-section" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95da181745b56d4bd339530ec393508910c909c784e8962d15d722bacf0bcbcd" +checksum = "c1706d332edc22aef4d9f23a6bb1c92360a403013c291af51247a737472dcae6" dependencies = [ "bare-metal 1.0.0", - "cfg-if", - "cortex-m", - "riscv", + "critical-section 1.1.1", ] [[package]] @@ -275,25 +239,12 @@ dependencies = [ "cipher", ] -[[package]] -name = "curve25519-dalek" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - [[package]] name = "cyw43" version = "0.1.0" -source = "git+https://github.com/embassy-rs/cyw43/#8a81114baf4ffe12ec54e80e342f098c596177d1" +source = "git+https://github.com/embassy-rs/cyw43/#432240162ac4131aca8aa7de61d83492f2fe3d32" dependencies = [ - "atomic-polyfill 0.1.10", + "atomic-polyfill 0.1.11", "cortex-m", "cortex-m-rt", "defmt", @@ -302,7 +253,7 @@ dependencies = [ "embassy-sync", "embassy-time", "embedded-hal 1.0.0-alpha.9", - "embedded-hal-async", + "embedded-hal-async 0.2.0-alpha.0", "futures", "num_enum", ] @@ -377,35 +328,17 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d2cbbbd58847d508d97629b32cd9730a2d28532f71e219714614406029f18b1" dependencies = [ - "critical-section 0.2.7", + "critical-section 0.2.8", "defmt", ] -[[package]] -name = "der" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" -dependencies = [ - "const-oid", -] - [[package]] name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "digest" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.3", + "block-buffer", "crypto-common", "subtle", ] @@ -425,18 +358,6 @@ dependencies = [ "signature", ] -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek", - "ed25519", - "sha2 0.9.9", - "zeroize", -] - [[package]] name = "embassy-cortex-m" version = "0.1.0" @@ -460,7 +381,7 @@ dependencies = [ "embassy-sync", "embedded-hal 0.2.7", "embedded-hal 1.0.0-alpha.9", - "embedded-hal-async", + "embedded-hal-async 0.1.0-alpha.3", "embedded-storage", "embedded-storage-async", "nb 1.0.0", @@ -545,7 +466,7 @@ dependencies = [ "embassy-usb-driver", "embedded-hal 0.2.7", "embedded-hal 1.0.0-alpha.9", - "embedded-hal-async", + "embedded-hal-async 0.1.0-alpha.3", "embedded-hal-nb", "embedded-io", "embedded-storage", @@ -615,6 +536,15 @@ dependencies = [ "embedded-hal 1.0.0-alpha.9", ] +[[package]] +name = "embedded-hal-async" +version = "0.2.0-alpha.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608a322808d65da06715e03109c0cb69f79a5459af756fba393ab83e875d4969" +dependencies = [ + "embedded-hal 1.0.0-alpha.9", +] + [[package]] name = "embedded-hal-nb" version = "1.0.0-alpha.1" @@ -782,7 +712,7 @@ version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743" dependencies = [ - "atomic-polyfill 0.1.10", + "atomic-polyfill 0.1.11", "hash32", "rustc_version 0.4.0", "spin", @@ -801,7 +731,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.5", + "digest", ] [[package]] @@ -819,12 +749,6 @@ dependencies = [ "generic-array 0.14.6", ] -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - [[package]] name = "libc" version = "0.2.137" @@ -856,12 +780,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ca88d725a0a943b096803bd34e73a4437208b6077654cc4ecb2947a5f91618d" -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - [[package]] name = "menu" version = "0.3.2" @@ -939,15 +857,6 @@ dependencies = [ "defmt", ] -[[package]] -name = "pem-rfc7468" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" -dependencies = [ - "base64ct", -] - [[package]] name = "pin-project-lite" version = "0.2.9" @@ -973,9 +882,9 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "pretty-hex" @@ -1031,7 +940,7 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -1041,15 +950,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", + "rand_core", ] -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" - [[package]] name = "rand_core" version = "0.6.4" @@ -1059,44 +962,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "riscv" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6907ccdd7a31012b70faf2af85cd9e5ba97657cc3987c4f13f8e4d2c2a088aba" -dependencies = [ - "bare-metal 1.0.0", - "bit_field", - "riscv-target", -] - -[[package]] -name = "riscv-target" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88aa938cda42a0cf62a20cfe8d139ff1af20c2e681212b5b34adb5a58333f222" -dependencies = [ - "lazy_static", - "regex", -] - [[package]] name = "rp2040-pac2" version = "0.1.0" @@ -1127,9 +992,9 @@ dependencies = [ [[package]] name = "salty" version = "0.2.0" -source = "git+https://github.com/mkj/salty?branch=parts#5005b15bf53785714d8e6114c105a8757107f824" +source = "git+https://github.com/mkj/salty?branch=sunset#89ba100e03a6ffe7f95e7ac60cabfb9e535be03b" dependencies = [ - "digest 0.10.5", + "digest", "ed25519", "subtle", "zeroize", @@ -1141,16 +1006,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "sec1" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" -dependencies = [ - "der", - "generic-array 0.14.6", -] - [[package]] name = "semver" version = "0.9.0" @@ -1172,19 +1027,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -[[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.6" @@ -1193,7 +1035,7 @@ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.5", + "digest", ] [[package]] @@ -1246,21 +1088,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "ssh-key" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02d3730e8785e797a4552137d1acc0d7f7146dad3b5fe65ed83637711dfc6c5" -dependencies = [ - "base64ct", - "ed25519-dalek", - "pem-rfc7468", - "rand_core 0.6.4", - "sec1", - "sha2 0.10.6", - "zeroize", -] - [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -1295,8 +1122,9 @@ dependencies = [ "aes", "ascii", "chacha20", + "cipher", "ctr", - "digest 0.10.5", + "digest", "heapless", "hmac", "log", @@ -1304,20 +1132,20 @@ dependencies = [ "poly1305", "pretty-hex", "rand", - "rand_core 0.6.4", + "rand_core", "salty", - "sha2 0.10.6", + "sha2", "signature", "snafu", - "ssh-key", "sunset-sshwire-derive", + "zeroize", ] [[package]] name = "sunset-demo-embassy-picow" version = "0.1.0" dependencies = [ - "atomic-polyfill 0.1.10", + "atomic-polyfill 0.1.11", "caprand", "cortex-m", "cortex-m-rt", @@ -1332,7 +1160,7 @@ dependencies = [ "embassy-sync", "embassy-time", "embedded-hal 1.0.0-alpha.9", - "embedded-hal-async", + "embedded-hal-async 0.1.0-alpha.3", "embedded-io", "futures", "getrandom", @@ -1341,7 +1169,7 @@ dependencies = [ "panic-probe", "pin-utils", "rand", - "sha2 0.10.6", + "sha2", "static_cell", "sunset", "sunset-embassy", @@ -1368,9 +1196,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.103" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" dependencies = [ "proc-macro2", "quote", @@ -1458,18 +1286,18 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "zeroize" -version = "1.3.0" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", diff --git a/embassy/demos/picow/rust-toolchain.toml b/embassy/demos/picow/rust-toolchain.toml index a35a11b..ffbcbd6 100644 --- a/embassy/demos/picow/rust-toolchain.toml +++ b/embassy/demos/picow/rust-toolchain.toml @@ -1,7 +1,7 @@ # Before upgrading check that everything is available on all tier1 targets here: # https://rust-lang.github.io/rustup-components-history [toolchain] -channel = "nightly-2022-09-22" +channel = "nightly-2022-11-22" components = [ "rust-src", "rustfmt" ] targets = [ "thumbv6m-none-eabi", diff --git a/embassy/demos/std/Cargo.lock b/embassy/demos/std/Cargo.lock index 6f8387f..c21300f 100644 --- a/embassy/demos/std/Cargo.lock +++ b/embassy/demos/std/Cargo.lock @@ -11,13 +11,14 @@ dependencies = [ "cfg-if", "cipher", "cpufeatures", + "zeroize", ] [[package]] name = "aho-corasick" -version = "0.7.19" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] @@ -51,9 +52,9 @@ checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" [[package]] name = "async-io" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8121296a9f05be7f34aa4196b1747243b3b62e048bb7906f644f3fbfc490cf7" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" dependencies = [ "async-lock", "autocfg", @@ -66,7 +67,7 @@ dependencies = [ "slab", "socket2", "waker-fn", - "winapi", + "windows-sys", ] [[package]] @@ -81,11 +82,11 @@ dependencies = [ [[package]] name = "atomic-polyfill" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c041a8d9751a520ee19656232a18971f18946a7900f1520ee4400002244dd89" +checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28" dependencies = [ - "critical-section 0.2.7", + "critical-section", ] [[package]] @@ -94,7 +95,7 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d299f547288d6db8d5c3a2916f7b2f66134b15b8c1ac1c4357dd3b8752af7bb2" dependencies = [ - "critical-section 1.1.1", + "critical-section", ] [[package]] @@ -126,54 +127,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "bare-metal" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" -dependencies = [ - "rustc_version 0.2.3", -] - -[[package]] -name = "bare-metal" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603" - -[[package]] -name = "base64ct" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" - -[[package]] -name = "bit_field" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb6dd1c2376d2e096796e234a70e17e94cc2d5d54ff8ce42b28cef1d0d359a4" - -[[package]] -name = "bitfield" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" - [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.6", -] - [[package]] name = "block-buffer" version = "0.10.3" @@ -189,17 +148,11 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" -[[package]] -name = "cache-padded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" - [[package]] name = "cc" -version = "1.0.74" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581f5dba903aac52ea3feb5ec4810848460ee833876f1f9b0fdeab1f19091574" +checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" [[package]] name = "cfg-if" @@ -226,33 +179,16 @@ checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" dependencies = [ "crypto-common", "inout", + "zeroize", ] [[package]] name = "concurrent-queue" -version = "1.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" -dependencies = [ - "cache-padded", -] - -[[package]] -name = "const-oid" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" - -[[package]] -name = "cortex-m" -version = "0.7.6" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70858629a458fdfd39f9675c4dc309411f2a3f83bede76988d81bf1a0ecee9e0" +checksum = "bd7bef69dc86e3c610e4e7aed41035e2a7ed12e72dd7530f61327a6579a4390b" dependencies = [ - "bare-metal 0.2.5", - "bitfield", - "embedded-hal 0.2.7", - "volatile-register", + "crossbeam-utils", ] [[package]] @@ -266,21 +202,18 @@ dependencies = [ [[package]] name = "critical-section" -version = "0.2.7" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95da181745b56d4bd339530ec393508910c909c784e8962d15d722bacf0bcbcd" -dependencies = [ - "bare-metal 1.0.0", - "cfg-if", - "cortex-m", - "riscv", -] +checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52" [[package]] -name = "critical-section" -version = "1.1.1" +name = "crossbeam-utils" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +dependencies = [ + "cfg-if", +] [[package]] name = "crypto-common" @@ -301,19 +234,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "curve25519-dalek" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - [[package]] name = "darling" version = "0.13.4" @@ -378,31 +298,13 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0db23d29972d99baa3de2ee2ae3f104c10564a6d05a346eb3f4c4f2c0525a06e" -[[package]] -name = "der" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" -dependencies = [ - "const-oid", -] - [[package]] name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array 0.14.6", -] - -[[package]] -name = "digest" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.3", + "block-buffer", "crypto-common", "subtle", ] @@ -422,18 +324,6 @@ dependencies = [ "signature", ] -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek", - "ed25519", - "sha2 0.9.9", - "zeroize", -] - [[package]] name = "embassy-executor" version = "0.1.0" @@ -441,7 +331,7 @@ source = "git+https://github.com/embassy-rs/embassy?rev=61be0e75c83961a42fc1d844 dependencies = [ "atomic-polyfill 1.0.1", "cfg-if", - "critical-section 1.1.1", + "critical-section", "embassy-macros", "embassy-time", "futures-util", @@ -491,7 +381,7 @@ source = "git+https://github.com/embassy-rs/embassy?rev=61be0e75c83961a42fc1d844 dependencies = [ "atomic-polyfill 1.0.1", "cfg-if", - "critical-section 1.1.1", + "critical-section", "embedded-io", "futures-util", "heapless", @@ -504,7 +394,7 @@ source = "git+https://github.com/embassy-rs/embassy?rev=61be0e75c83961a42fc1d844 dependencies = [ "atomic-polyfill 1.0.1", "cfg-if", - "critical-section 1.1.1", + "critical-section", "embassy-sync", "embedded-hal 0.2.7", "futures-util", @@ -548,9 +438,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ "atty", "humantime", @@ -722,9 +612,9 @@ version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743" dependencies = [ - "atomic-polyfill 0.1.10", + "atomic-polyfill 0.1.11", "hash32", - "rustc_version 0.4.0", + "rustc_version", "spin", "stable_deref_trait", ] @@ -750,7 +640,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.5", + "digest", ] [[package]] @@ -783,12 +673,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - [[package]] name = "libc" version = "0.2.137" @@ -870,15 +754,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" -[[package]] -name = "pem-rfc7468" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" -dependencies = [ - "base64ct", -] - [[package]] name = "pin-project-lite" version = "0.2.9" @@ -893,16 +768,16 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "polling" -version = "2.4.0" +version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab4609a838d88b73d8238967b60dd115cc08d38e2bbaf51ee1e4b695f89122e2" +checksum = "166ca89eb77fd403230b9c156612965a81e094ec6ec3aa13663d4c8b113fa748" dependencies = [ "autocfg", "cfg-if", "libc", "log", "wepoll-ffi", - "winapi", + "windows-sys", ] [[package]] @@ -970,15 +845,9 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "rand_core 0.6.4", + "rand_core", ] -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" - [[package]] name = "rand_core" version = "0.6.4" @@ -990,9 +859,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" dependencies = [ "aho-corasick", "memchr", @@ -1001,39 +870,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "riscv" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6907ccdd7a31012b70faf2af85cd9e5ba97657cc3987c4f13f8e4d2c2a088aba" -dependencies = [ - "bare-metal 1.0.0", - "bit_field", - "riscv-target", -] - -[[package]] -name = "riscv-target" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88aa938cda42a0cf62a20cfe8d139ff1af20c2e681212b5b34adb5a58333f222" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "rustc_version" -version = "0.2.3" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "rustc_version" @@ -1041,15 +880,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.14", + "semver", ] [[package]] name = "salty" version = "0.2.0" -source = "git+https://github.com/mkj/salty?branch=parts#5005b15bf53785714d8e6114c105a8757107f824" +source = "git+https://github.com/mkj/salty?branch=sunset#89ba100e03a6ffe7f95e7ac60cabfb9e535be03b" dependencies = [ - "digest 0.10.5", + "digest", "ed25519", "subtle", "zeroize", @@ -1061,50 +900,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "sec1" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" -dependencies = [ - "der", - "generic-array 0.14.6", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[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.6" @@ -1113,7 +914,7 @@ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.5", + "digest", ] [[package]] @@ -1184,21 +985,6 @@ dependencies = [ "lock_api", ] -[[package]] -name = "ssh-key" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02d3730e8785e797a4552137d1acc0d7f7146dad3b5fe65ed83637711dfc6c5" -dependencies = [ - "base64ct", - "ed25519-dalek", - "pem-rfc7468", - "rand_core 0.6.4", - "sec1", - "sha2 0.10.6", - "zeroize", -] - [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -1233,8 +1019,9 @@ dependencies = [ "aes", "ascii", "chacha20", + "cipher", "ctr", - "digest 0.10.5", + "digest", "heapless", "hmac", "log", @@ -1242,13 +1029,13 @@ dependencies = [ "poly1305", "pretty-hex", "rand", - "rand_core 0.6.4", + "rand_core", "salty", - "sha2 0.10.6", + "sha2", "signature", "snafu", - "ssh-key", "sunset-sshwire-derive", + "zeroize", ] [[package]] @@ -1256,8 +1043,8 @@ name = "sunset-demo-embassy-std" version = "0.1.0" dependencies = [ "async-io", - "atomic-polyfill 0.1.10", - "critical-section 1.1.1", + "atomic-polyfill 0.1.11", + "critical-section", "embassy-executor", "embassy-futures", "embassy-net", @@ -1273,7 +1060,7 @@ dependencies = [ "log", "menu", "rand", - "sha2 0.10.6", + "sha2", "static_cell", "sunset", "sunset-embassy", @@ -1300,9 +1087,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.103" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" dependencies = [ "proc-macro2", "quote", @@ -1358,12 +1145,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "vcell" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" - [[package]] name = "version_check" version = "0.9.4" @@ -1382,15 +1163,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" -[[package]] -name = "volatile-register" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee8f19f9d74293faf70901bc20ad067dc1ad390d2cbf1e3f75f721ffee908b6" -dependencies = [ - "vcell", -] - [[package]] name = "waker-fn" version = "1.1.0" @@ -1443,20 +1215,77 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" + [[package]] name = "zeroize" -version = "1.3.0" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", diff --git a/embassy/demos/std/rust-toolchain.toml b/embassy/demos/std/rust-toolchain.toml index a35a11b..ffbcbd6 100644 --- a/embassy/demos/std/rust-toolchain.toml +++ b/embassy/demos/std/rust-toolchain.toml @@ -1,7 +1,7 @@ # Before upgrading check that everything is available on all tier1 targets here: # https://rust-lang.github.io/rustup-components-history [toolchain] -channel = "nightly-2022-09-22" +channel = "nightly-2022-11-22" components = [ "rust-src", "rustfmt" ] targets = [ "thumbv6m-none-eabi", diff --git a/src/conn.rs b/src/conn.rs index 465a255..d63b346 100644 --- a/src/conn.rs +++ b/src/conn.rs @@ -8,7 +8,6 @@ use core::char::MAX; use core::task::{Waker,Poll}; use pretty_hex::PrettyHex; - use heapless::Vec; use crate::*; @@ -288,9 +287,11 @@ impl Conn { match self.state { ConnState::InKex { done_auth, ref mut output } => { // NewKeys shouldn't be received before kexdhinit/kexdhreply - let output = output.take().ok_or(Error::PacketWrong)?; - s.rekey(output.keys); - self.sess_id.get_or_insert(output.h); + let mut ko = output.take().ok_or(Error::PacketWrong)?; + s.rekey(ko.keys.take().trap()?); + self.sess_id.get_or_insert(ko.h.clone()); + // force ZeroizeOnDrop to run + *output = Default::default(); self.state = if done_auth { ConnState::Authed } else { diff --git a/src/encrypt.rs b/src/encrypt.rs index fd73c50..fb0f197 100644 --- a/src/encrypt.rs +++ b/src/encrypt.rs @@ -6,12 +6,13 @@ use { log::{debug, error, info, log, trace, warn}, }; -use aes::{cipher::{BlockSizeUser, KeyIvInit, KeySizeUser, StreamCipher}, Aes256}; use core::num::Wrapping; -use pretty_hex::PrettyHex; use core::fmt; use core::fmt::Debug; +use aes::{cipher::{BlockSizeUser, KeyIvInit, KeySizeUser, StreamCipher}, Aes256}; +use pretty_hex::PrettyHex; +use zeroize::ZeroizeOnDrop; use hmac::{Hmac, Mac}; use sha2::Digest as Sha2DigestForTrait; @@ -133,12 +134,14 @@ impl KeyState { } } -#[derive(Debug)] +#[derive(Debug, ZeroizeOnDrop)] pub(crate) struct Keys { pub(crate) enc: EncKey, pub(crate) dec: DecKey, + #[zeroize(skip)] pub(crate) integ_enc: IntegKey, + #[zeroize(skip)] pub(crate) integ_dec: IntegKey, } @@ -529,6 +532,7 @@ impl Cipher { } } +#[derive(ZeroizeOnDrop)] pub(crate) enum EncKey { ChaPoly(SSHChaPoly), Aes256Ctr(Aes256Ctr32BE), @@ -581,6 +585,7 @@ impl EncKey { } } +#[derive(ZeroizeOnDrop)] pub(crate) enum DecKey { ChaPoly(SSHChaPoly), Aes256Ctr(Aes256Ctr32BE), diff --git a/src/kex.rs b/src/kex.rs index c04770f..252c79e 100644 --- a/src/kex.rs +++ b/src/kex.rs @@ -10,6 +10,7 @@ use core::fmt; use sha2::Sha256; use digest::Digest; +use zeroize::{Zeroize, ZeroizeOnDrop}; use crate::*; use encrypt::{Cipher, Integ, Keys}; @@ -382,7 +383,7 @@ impl Kex { } } -#[derive(Debug)] +#[derive(Debug, ZeroizeOnDrop)] pub(crate) enum SharedSecret { KexCurve25519(KexCurve25519), // ECDH? @@ -488,7 +489,7 @@ impl SharedSecret { pub(crate) struct KexOutput { pub h: SessId, - pub keys: Keys, + pub keys: Option<Keys>, } impl fmt::Debug for KexOutput { @@ -505,13 +506,14 @@ impl<'a> KexOutput { let h = kex_hash.finish(k); let sess_id = sess_id.as_ref().unwrap_or(&h); - let keys = Keys::new_from(k, &h, &sess_id, algos)?; + let keys = Some(Keys::new_from(k, &h, &sess_id, algos)?); Ok(KexOutput { h, keys }) } } +#[derive(ZeroizeOnDrop)] pub(crate) struct KexCurve25519 { // Initialised in `new()`, cleared after deriving the secret ours: Option<salty::agreement::SecretKey>, diff --git a/src/packets.rs b/src/packets.rs index c469b31..2a46875 100644 --- a/src/packets.rs +++ b/src/packets.rs @@ -253,6 +253,7 @@ impl<'a> PubKey<'a> { } } + #[cfg(feature = "openssh-key")] pub fn matches_openssh(&self, k: &str) -> Result<bool> { let k = ssh_key::PublicKey::from_openssh(k) .map_err(|_| { diff --git a/src/sign.rs b/src/sign.rs index 3ddef7d..f0892d2 100644 --- a/src/sign.rs +++ b/src/sign.rs @@ -7,6 +7,7 @@ use { use salty::{SecretKey, PublicKey}; use signature::Verifier; +use zeroize::ZeroizeOnDrop; use crate::*; use packets::ParseContext; @@ -125,6 +126,7 @@ pub enum KeyType { /// A SSH signing key. This may hold the private part locally /// or could potentially send the signing requests to a SSH agent /// or other entitiy. +#[derive(ZeroizeOnDrop)] pub enum SignKey { Ed25519(salty::Keypair), } @@ -148,6 +150,7 @@ impl SignKey { } } + #[cfg(feature = "openssh-key")] pub fn from_openssh(k: impl AsRef<[u8]>) -> Result<Self> { let k = ssh_key::PrivateKey::from_openssh(k) .map_err(|_| { @@ -177,7 +180,7 @@ impl SignKey { } } -// TODO: this might go behind a feature? +#[cfg(feature = "openssh-key")] impl TryFrom<ssh_key::PrivateKey> for SignKey { type Error = Error; fn try_from(k: ssh_key::PrivateKey) -> Result<Self> { diff --git a/src/ssh_chapoly.rs b/src/ssh_chapoly.rs index d23e068..1e6ba76 100644 --- a/src/ssh_chapoly.rs +++ b/src/ssh_chapoly.rs @@ -9,11 +9,12 @@ use chacha20::cipher::{KeyIvInit, StreamCipher, StreamCipherSeek, StreamCipherSe use poly1305::Poly1305; use poly1305::universal_hash::{NewUniversalHash, UniversalHash}; use poly1305::universal_hash::generic_array::GenericArray; - +use zeroize::{Zeroize, ZeroizeOnDrop}; use crate::*; use encrypt::SSH_LENGTH_SIZE; +#[derive(Zeroize, ZeroizeOnDrop)] pub struct SSHChaPoly { k1: [u8; 32], k2: [u8; 32], -- GitLab