Workspacify
This commit is contained in:
335
Cargo.lock
generated
335
Cargo.lock
generated
@@ -36,7 +36,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
|
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"getrandom 0.2.15",
|
"getrandom 0.2.16",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"version_check",
|
"version_check",
|
||||||
"zerocopy 0.7.35",
|
"zerocopy 0.7.35",
|
||||||
@@ -109,9 +109,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.97"
|
version = "1.0.98"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f"
|
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "arbitrary"
|
name = "arbitrary"
|
||||||
@@ -337,9 +337,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "4.5.35"
|
version = "4.5.37"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944"
|
checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
"clap_derive",
|
"clap_derive",
|
||||||
@@ -347,9 +347,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_builder"
|
name = "clap_builder"
|
||||||
version = "4.5.35"
|
version = "4.5.37"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9"
|
checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anstyle",
|
"anstyle",
|
||||||
@@ -375,12 +375,49 @@ version = "0.7.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
|
checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "client"
|
||||||
|
version = "0.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"configuration",
|
||||||
|
"crypto",
|
||||||
|
"error-stack",
|
||||||
|
"host",
|
||||||
|
"resolver",
|
||||||
|
"ssh",
|
||||||
|
"thiserror",
|
||||||
|
"tracing",
|
||||||
|
"whoami",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "colorchoice"
|
name = "colorchoice"
|
||||||
version = "1.0.3"
|
version = "1.0.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
|
checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "configuration"
|
||||||
|
version = "0.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"clap",
|
||||||
|
"console-subscriber",
|
||||||
|
"crypto",
|
||||||
|
"nix",
|
||||||
|
"proptest",
|
||||||
|
"rustix",
|
||||||
|
"serde",
|
||||||
|
"tempfile",
|
||||||
|
"thiserror",
|
||||||
|
"tokio",
|
||||||
|
"toml",
|
||||||
|
"tracing",
|
||||||
|
"tracing-core",
|
||||||
|
"tracing-subscriber",
|
||||||
|
"url",
|
||||||
|
"xdg",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "console-api"
|
name = "console-api"
|
||||||
version = "0.8.1"
|
version = "0.8.1"
|
||||||
@@ -446,9 +483,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-channel"
|
name = "crossbeam-channel"
|
||||||
version = "0.5.14"
|
version = "0.5.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471"
|
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
]
|
]
|
||||||
@@ -459,6 +496,17 @@ version = "0.8.21"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crypto"
|
||||||
|
version = "0.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"num-bigint-dig",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
"thiserror",
|
||||||
|
"zeroize",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crypto-bigint"
|
name = "crypto-bigint"
|
||||||
version = "0.5.5"
|
version = "0.5.5"
|
||||||
@@ -532,9 +580,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "der"
|
name = "der"
|
||||||
version = "0.7.9"
|
version = "0.7.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0"
|
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"const-oid",
|
"const-oid",
|
||||||
"pem-rfc7468",
|
"pem-rfc7468",
|
||||||
@@ -639,9 +687,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "errno"
|
name = "errno"
|
||||||
version = "0.3.10"
|
version = "0.3.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
|
checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.59.0",
|
||||||
@@ -681,9 +729,9 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "flate2"
|
name = "flate2"
|
||||||
version = "1.1.0"
|
version = "1.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc"
|
checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crc32fast",
|
"crc32fast",
|
||||||
"miniz_oxide",
|
"miniz_oxide",
|
||||||
@@ -812,9 +860,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "getrandom"
|
name = "getrandom"
|
||||||
version = "0.2.15"
|
version = "0.2.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
|
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -852,9 +900,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "h2"
|
name = "h2"
|
||||||
version = "0.4.8"
|
version = "0.4.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2"
|
checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"atomic-waker",
|
"atomic-waker",
|
||||||
"bytes",
|
"bytes",
|
||||||
@@ -862,7 +910,7 @@ dependencies = [
|
|||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
"http",
|
"http",
|
||||||
"indexmap 2.8.0",
|
"indexmap 2.9.0",
|
||||||
"slab",
|
"slab",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
@@ -883,9 +931,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hashbrown"
|
name = "hashbrown"
|
||||||
version = "0.15.2"
|
version = "0.15.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
|
checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"allocator-api2",
|
"allocator-api2",
|
||||||
"equivalent",
|
"equivalent",
|
||||||
@@ -941,6 +989,18 @@ dependencies = [
|
|||||||
"digest",
|
"digest",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "host"
|
||||||
|
version = "0.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"error-stack",
|
||||||
|
"futures",
|
||||||
|
"resolver",
|
||||||
|
"thiserror",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "http"
|
name = "http"
|
||||||
version = "1.3.1"
|
version = "1.3.1"
|
||||||
@@ -993,53 +1053,6 @@ version = "2.2.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f"
|
checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hushd"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"aes",
|
|
||||||
"base64 0.22.1",
|
|
||||||
"bcrypt-pbkdf",
|
|
||||||
"bytes",
|
|
||||||
"clap",
|
|
||||||
"console-subscriber",
|
|
||||||
"ctr",
|
|
||||||
"ed25519-dalek",
|
|
||||||
"elliptic-curve",
|
|
||||||
"error-stack",
|
|
||||||
"futures",
|
|
||||||
"generic-array",
|
|
||||||
"getrandom 0.3.2",
|
|
||||||
"internment",
|
|
||||||
"itertools",
|
|
||||||
"nix",
|
|
||||||
"num-bigint-dig",
|
|
||||||
"num-integer",
|
|
||||||
"num-traits",
|
|
||||||
"num_enum",
|
|
||||||
"p256",
|
|
||||||
"p384",
|
|
||||||
"p521",
|
|
||||||
"proptest",
|
|
||||||
"proptest-derive",
|
|
||||||
"rand 0.9.0",
|
|
||||||
"rand_chacha 0.9.0",
|
|
||||||
"rustix",
|
|
||||||
"sec1",
|
|
||||||
"serde",
|
|
||||||
"tempfile",
|
|
||||||
"thiserror",
|
|
||||||
"tokio",
|
|
||||||
"toml",
|
|
||||||
"tracing",
|
|
||||||
"tracing-core",
|
|
||||||
"tracing-subscriber",
|
|
||||||
"url",
|
|
||||||
"whoami",
|
|
||||||
"xdg",
|
|
||||||
"zeroize",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hyper"
|
name = "hyper"
|
||||||
version = "1.6.0"
|
version = "1.6.0"
|
||||||
@@ -1076,9 +1089,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hyper-util"
|
name = "hyper-util"
|
||||||
version = "0.1.10"
|
version = "0.1.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"
|
checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
@@ -1086,6 +1099,7 @@ dependencies = [
|
|||||||
"http",
|
"http",
|
||||||
"http-body",
|
"http-body",
|
||||||
"hyper",
|
"hyper",
|
||||||
|
"libc",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"socket2",
|
"socket2",
|
||||||
"tokio",
|
"tokio",
|
||||||
@@ -1244,12 +1258,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
version = "2.8.0"
|
version = "2.9.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
|
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"hashbrown 0.15.2",
|
"hashbrown 0.15.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1269,7 +1283,7 @@ checksum = "636d4b0f6a39fd684effe2a73f5310df16a3fa7954c26d36833e98f44d1977a2"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash",
|
"ahash",
|
||||||
"dashmap",
|
"dashmap",
|
||||||
"hashbrown 0.15.2",
|
"hashbrown 0.15.3",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1294,6 +1308,30 @@ version = "1.0.15"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "keys"
|
||||||
|
version = "0.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"aes",
|
||||||
|
"base64 0.22.1",
|
||||||
|
"bcrypt-pbkdf",
|
||||||
|
"bytes",
|
||||||
|
"crypto",
|
||||||
|
"ctr",
|
||||||
|
"ed25519-dalek",
|
||||||
|
"elliptic-curve",
|
||||||
|
"error-stack",
|
||||||
|
"generic-array",
|
||||||
|
"num-bigint-dig",
|
||||||
|
"p256",
|
||||||
|
"p384",
|
||||||
|
"p521",
|
||||||
|
"sec1",
|
||||||
|
"ssh",
|
||||||
|
"thiserror",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lazy_static"
|
name = "lazy_static"
|
||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
@@ -1305,21 +1343,21 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.171"
|
version = "0.2.172"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
|
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libm"
|
name = "libm"
|
||||||
version = "0.2.11"
|
version = "0.2.13"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
|
checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "linux-raw-sys"
|
name = "linux-raw-sys"
|
||||||
version = "0.9.3"
|
version = "0.9.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413"
|
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "litemap"
|
name = "litemap"
|
||||||
@@ -1378,9 +1416,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "miniz_oxide"
|
name = "miniz_oxide"
|
||||||
version = "0.8.5"
|
version = "0.8.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
|
checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"adler2",
|
"adler2",
|
||||||
]
|
]
|
||||||
@@ -1657,7 +1695,7 @@ version = "0.2.21"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
|
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"zerocopy 0.8.24",
|
"zerocopy 0.8.25",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1681,9 +1719,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.94"
|
version = "1.0.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
|
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
@@ -1785,13 +1823,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rand"
|
name = "rand"
|
||||||
version = "0.9.0"
|
version = "0.9.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
|
checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rand_chacha 0.9.0",
|
"rand_chacha 0.9.0",
|
||||||
"rand_core 0.9.3",
|
"rand_core 0.9.3",
|
||||||
"zerocopy 0.8.24",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1820,7 +1857,7 @@ version = "0.6.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom 0.2.15",
|
"getrandom 0.2.16",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1843,9 +1880,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.5.10"
|
version = "0.5.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
|
checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
]
|
]
|
||||||
@@ -1894,6 +1931,27 @@ version = "0.8.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "resolver"
|
||||||
|
version = "0.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"configuration",
|
||||||
|
"crypto",
|
||||||
|
"error-stack",
|
||||||
|
"futures",
|
||||||
|
"internment",
|
||||||
|
"num_enum",
|
||||||
|
"proptest",
|
||||||
|
"proptest-derive",
|
||||||
|
"serde",
|
||||||
|
"thiserror",
|
||||||
|
"tokio",
|
||||||
|
"toml",
|
||||||
|
"tracing",
|
||||||
|
"url",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rfc6979"
|
name = "rfc6979"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
@@ -1921,9 +1979,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustix"
|
name = "rustix"
|
||||||
version = "1.0.5"
|
version = "1.0.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
|
checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"errno",
|
"errno",
|
||||||
@@ -2034,11 +2092,22 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "server"
|
||||||
|
version = "0.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"configuration",
|
||||||
|
"error-stack",
|
||||||
|
"thiserror",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sha2"
|
name = "sha2"
|
||||||
version = "0.10.8"
|
version = "0.10.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
|
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"cpufeatures",
|
"cpufeatures",
|
||||||
@@ -2056,9 +2125,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "signal-hook-registry"
|
name = "signal-hook-registry"
|
||||||
version = "1.4.2"
|
version = "1.4.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
|
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
@@ -2084,9 +2153,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.14.0"
|
version = "1.15.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
|
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "socket2"
|
name = "socket2"
|
||||||
@@ -2114,6 +2183,25 @@ dependencies = [
|
|||||||
"der",
|
"der",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ssh"
|
||||||
|
version = "0.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"configuration",
|
||||||
|
"error-stack",
|
||||||
|
"getrandom 0.3.2",
|
||||||
|
"itertools",
|
||||||
|
"num_enum",
|
||||||
|
"proptest",
|
||||||
|
"proptest-derive",
|
||||||
|
"rand 0.9.1",
|
||||||
|
"rand_chacha 0.9.0",
|
||||||
|
"thiserror",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stable_deref_trait"
|
name = "stable_deref_trait"
|
||||||
version = "1.2.0"
|
version = "1.2.0"
|
||||||
@@ -2134,9 +2222,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.100"
|
version = "2.0.101"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
|
checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2151,9 +2239,9 @@ checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "synstructure"
|
name = "synstructure"
|
||||||
version = "0.13.1"
|
version = "0.13.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
|
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2256,9 +2344,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio-util"
|
name = "tokio-util"
|
||||||
version = "0.7.14"
|
version = "0.7.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034"
|
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
@@ -2269,9 +2357,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml"
|
name = "toml"
|
||||||
version = "0.8.20"
|
version = "0.8.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148"
|
checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_spanned",
|
"serde_spanned",
|
||||||
@@ -2281,26 +2369,33 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml_datetime"
|
name = "toml_datetime"
|
||||||
version = "0.6.8"
|
version = "0.6.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
|
checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml_edit"
|
name = "toml_edit"
|
||||||
version = "0.22.24"
|
version = "0.22.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474"
|
checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.8.0",
|
"indexmap 2.9.0",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_spanned",
|
"serde_spanned",
|
||||||
"toml_datetime",
|
"toml_datetime",
|
||||||
|
"toml_write",
|
||||||
"winnow",
|
"winnow",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml_write"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tonic"
|
name = "tonic"
|
||||||
version = "0.12.3"
|
version = "0.12.3"
|
||||||
@@ -2671,9 +2766,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winnow"
|
name = "winnow"
|
||||||
version = "0.7.4"
|
version = "0.7.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36"
|
checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
@@ -2740,11 +2835,11 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerocopy"
|
name = "zerocopy"
|
||||||
version = "0.8.24"
|
version = "0.8.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
|
checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"zerocopy-derive 0.8.24",
|
"zerocopy-derive 0.8.25",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2760,9 +2855,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerocopy-derive"
|
name = "zerocopy-derive"
|
||||||
version = "0.8.24"
|
version = "0.8.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
|
checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|||||||
47
Cargo.toml
47
Cargo.toml
@@ -1,17 +1,32 @@
|
|||||||
[package]
|
[workspace]
|
||||||
name = "hushd"
|
resolver = "3"
|
||||||
version = "0.1.0"
|
members = [
|
||||||
|
"client",
|
||||||
|
"configuration",
|
||||||
|
"crypto",
|
||||||
|
"host",
|
||||||
|
"keys",
|
||||||
|
"resolver",
|
||||||
|
"server",
|
||||||
|
"ssh",
|
||||||
|
]
|
||||||
|
|
||||||
|
[workspace.package]
|
||||||
|
authors = ["Adam Wick <awick@uhsure.com>"]
|
||||||
|
categories = ["cryptography", "network-programming", "security"]
|
||||||
|
description = "A collection of privacy- and security-focused network protocol implementations."
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["awick"]
|
homepage = "https://github.com/acw/hushd"
|
||||||
|
keywords = ["hush", "security", "dns", "ssh", "ssl", "tor"]
|
||||||
|
license = "Apache-2.0"
|
||||||
|
publish = false
|
||||||
|
readme = "README.md"
|
||||||
|
repository = "https://github.com/acw/hushd"
|
||||||
|
rust-version = "1.85.0"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
[lib]
|
|
||||||
name = "hush"
|
|
||||||
path = "src/lib.rs"
|
|
||||||
|
|
||||||
[lints.rust]
|
[workspace.dependencies]
|
||||||
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] }
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
aes = { version = "0.8.4", features = ["zeroize"] }
|
aes = { version = "0.8.4", features = ["zeroize"] }
|
||||||
base64 = "0.22.1"
|
base64 = "0.22.1"
|
||||||
bcrypt-pbkdf = "0.10.0"
|
bcrypt-pbkdf = "0.10.0"
|
||||||
@@ -53,3 +68,13 @@ url = "2.5.4"
|
|||||||
whoami = { version = "1.6.0", default-features = false }
|
whoami = { version = "1.6.0", default-features = false }
|
||||||
xdg = "2.5.2"
|
xdg = "2.5.2"
|
||||||
zeroize = "1.8.1"
|
zeroize = "1.8.1"
|
||||||
|
|
||||||
|
client = { path = "./client" }
|
||||||
|
configuration = { path = "./configuration" }
|
||||||
|
crypto = { path = "./crypto" }
|
||||||
|
host = { path = "./host" }
|
||||||
|
keys = { path = "./keys" }
|
||||||
|
resolver = { path = "./resolver" }
|
||||||
|
server = { path = "./server" }
|
||||||
|
ssh = { path = "./ssh" }
|
||||||
|
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@@ -186,7 +186,7 @@
|
|||||||
same "printed page" as the copyright notice for easier
|
same "printed page" as the copyright notice for easier
|
||||||
identification within third-party archives.
|
identification within third-party archives.
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
Copyright 2025 Adam Wick
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|||||||
14
client/Cargo.toml
Normal file
14
client/Cargo.toml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[package]
|
||||||
|
name = "client"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
configuration = { workspace = true }
|
||||||
|
crypto = { workspace = true }
|
||||||
|
error-stack = { workspace = true }
|
||||||
|
host = { workspace = true }
|
||||||
|
resolver = { workspace = true }
|
||||||
|
ssh = { workspace = true }
|
||||||
|
thiserror = { workspace = true }
|
||||||
|
tracing = { workspace = true }
|
||||||
|
whoami = { workspace = true }
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
use crate::config::client::{ClientCommand, ClientConfiguration};
|
use configuration::client::{ClientCommand, ClientConfiguration};
|
||||||
use crate::crypto::{
|
use crypto::{
|
||||||
CompressionAlgorithm, EncryptionAlgorithm, HostKeyAlgorithm, KeyExchangeAlgorithm, MacAlgorithm,
|
CompressionAlgorithm, EncryptionAlgorithm, HostKeyAlgorithm, KeyExchangeAlgorithm, MacAlgorithm,
|
||||||
};
|
};
|
||||||
use crate::network::host::Host;
|
use host::Host;
|
||||||
use crate::network::resolver::Resolver;
|
use resolver::Resolver;
|
||||||
use crate::ssh::{self, SshKeyExchange};
|
use ssh::{self, SshKeyExchange};
|
||||||
use crate::OperationalError;
|
use ssh::OperationalError;
|
||||||
use error_stack::{report, Report, ResultExt};
|
use error_stack::{report, Report, ResultExt};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
@@ -51,7 +51,7 @@ pub enum TargetParseError {
|
|||||||
#[error("Invalid hostname '{hostname}': {error}")]
|
#[error("Invalid hostname '{hostname}': {error}")]
|
||||||
InvalidHostname {
|
InvalidHostname {
|
||||||
hostname: String,
|
hostname: String,
|
||||||
error: crate::network::host::HostParseError,
|
error: host::HostParseError,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
24
configuration/Cargo.toml
Normal file
24
configuration/Cargo.toml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
[package]
|
||||||
|
name = "configuration"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[lints.rust]
|
||||||
|
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] }
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
clap = { workspace = true }
|
||||||
|
console-subscriber = { workspace = true }
|
||||||
|
crypto = { workspace = true }
|
||||||
|
nix = { workspace = true }
|
||||||
|
proptest = { workspace = true }
|
||||||
|
rustix = { workspace = true }
|
||||||
|
serde = { workspace = true, features = ["derive"] }
|
||||||
|
tempfile = { workspace = true }
|
||||||
|
thiserror = { workspace = true }
|
||||||
|
tokio = { workspace = true }
|
||||||
|
toml = { workspace = true }
|
||||||
|
tracing = { workspace = true }
|
||||||
|
tracing-core = { workspace = true }
|
||||||
|
tracing-subscriber = { workspace = true }
|
||||||
|
url = { workspace = true }
|
||||||
|
xdg = { workspace = true }
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
use crate::config::command_line::ClientArguments;
|
use crate::command_line::ClientArguments;
|
||||||
pub use crate::config::command_line::ClientCommand;
|
pub use crate::command_line::ClientCommand;
|
||||||
use crate::config::config_file::ConfigFile;
|
use crate::config_file::ConfigFile;
|
||||||
use crate::config::error::ConfigurationError;
|
use crate::error::ConfigurationError;
|
||||||
use crate::config::logging::LoggingConfiguration;
|
use crate::logging::LoggingConfiguration;
|
||||||
use crate::config::resolver::DnsConfig;
|
use crate::resolver::DnsConfig;
|
||||||
use crate::config::runtime::RuntimeConfiguration;
|
use crate::runtime::RuntimeConfiguration;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use std::ffi::OsString;
|
use std::ffi::OsString;
|
||||||
use tracing_core::LevelFilter;
|
use tracing_core::LevelFilter;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
use crate::config::console::ConsoleConfiguration;
|
use crate::console::ConsoleConfiguration;
|
||||||
use crate::config::logging::{LogTarget, LoggingConfiguration};
|
use crate::logging::{LogTarget, LoggingConfiguration};
|
||||||
use crate::config::runtime::RuntimeConfiguration;
|
use crate::runtime::RuntimeConfiguration;
|
||||||
use clap::{Args, Parser, Subcommand};
|
use clap::{Args, Parser, Subcommand};
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
use crate::config::error::ConfigurationError;
|
use crate::error::ConfigurationError;
|
||||||
use crate::config::logging::{LogMode, LogTarget, LoggingConfiguration};
|
use crate::logging::{LogMode, LogTarget, LoggingConfiguration};
|
||||||
use crate::config::resolver::DnsConfig;
|
use crate::resolver::DnsConfig;
|
||||||
use crate::config::runtime::RuntimeConfiguration;
|
use crate::runtime::RuntimeConfiguration;
|
||||||
use crate::crypto::known_algorithms::{
|
use crypto::known_algorithms::{
|
||||||
ALLOWED_COMPRESSION_ALGORITHMS, ALLOWED_ENCRYPTION_ALGORITHMS, ALLOWED_HOST_KEY_ALGORITHMS,
|
ALLOWED_COMPRESSION_ALGORITHMS, ALLOWED_ENCRYPTION_ALGORITHMS, ALLOWED_HOST_KEY_ALGORITHMS,
|
||||||
ALLOWED_KEY_EXCHANGE_ALGORITHMS, ALLOWED_MAC_ALGORITHMS,
|
ALLOWED_KEY_EXCHANGE_ALGORITHMS, ALLOWED_MAC_ALGORITHMS,
|
||||||
};
|
};
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
use crate::crypto::known_algorithms::{
|
use crypto::known_algorithms::{
|
||||||
ALLOWED_COMPRESSION_ALGORITHMS, ALLOWED_ENCRYPTION_ALGORITHMS, ALLOWED_HOST_KEY_ALGORITHMS,
|
ALLOWED_COMPRESSION_ALGORITHMS, ALLOWED_ENCRYPTION_ALGORITHMS, ALLOWED_HOST_KEY_ALGORITHMS,
|
||||||
ALLOWED_KEY_EXCHANGE_ALGORITHMS, ALLOWED_MAC_ALGORITHMS,
|
ALLOWED_KEY_EXCHANGE_ALGORITHMS, ALLOWED_MAC_ALGORITHMS,
|
||||||
};
|
};
|
||||||
use crate::crypto::{
|
use crypto::{
|
||||||
CompressionAlgorithm, EncryptionAlgorithm, HostKeyAlgorithm, KeyExchangeAlgorithm, MacAlgorithm,
|
CompressionAlgorithm, EncryptionAlgorithm, HostKeyAlgorithm, KeyExchangeAlgorithm, MacAlgorithm,
|
||||||
};
|
};
|
||||||
use proptest::arbitrary::Arbitrary;
|
use proptest::arbitrary::Arbitrary;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::config::config_file::ConfigFileError;
|
use crate::config_file::ConfigFileError;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
use crate::network::resolver::name::Name;
|
|
||||||
use proptest::arbitrary::Arbitrary;
|
use proptest::arbitrary::Arbitrary;
|
||||||
use proptest::strategy::{BoxedStrategy, Just, Strategy};
|
use proptest::strategy::{BoxedStrategy, Just, Strategy};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
@@ -226,7 +225,7 @@ impl Arbitrary for NameServerConfig {
|
|||||||
Just("tcp".to_string()),
|
Just("tcp".to_string()),
|
||||||
Just("udp".to_string()),
|
Just("udp".to_string()),
|
||||||
];
|
];
|
||||||
let domain = Name::arbitrary();
|
let domain = proptest::string::string_regex("[A-Za-z0-9]{1,40}").unwrap();
|
||||||
let port = proptest::option::of(u16::arbitrary());
|
let port = proptest::option::of(u16::arbitrary());
|
||||||
let user = proptest::option::of(proptest::string::string_regex("[A-Za-z]{1,30}").unwrap());
|
let user = proptest::option::of(proptest::string::string_regex("[A-Za-z]{1,30}").unwrap());
|
||||||
let password =
|
let password =
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::config::console::ConsoleConfiguration;
|
use crate::console::ConsoleConfiguration;
|
||||||
|
|
||||||
pub struct RuntimeConfiguration {
|
pub struct RuntimeConfiguration {
|
||||||
pub tokio_worker_threads: usize,
|
pub tokio_worker_threads: usize,
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
use crate::config::command_line::ServerArguments;
|
use crate::command_line::ServerArguments;
|
||||||
use crate::config::config_file::{ConfigFile, SocketConfig};
|
use crate::config_file::{ConfigFile, SocketConfig};
|
||||||
use crate::config::error::ConfigurationError;
|
use crate::error::ConfigurationError;
|
||||||
use crate::config::logging::LoggingConfiguration;
|
use crate::logging::LoggingConfiguration;
|
||||||
use crate::config::runtime::RuntimeConfiguration;
|
use crate::runtime::RuntimeConfiguration;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::ffi::OsString;
|
use std::ffi::OsString;
|
||||||
10
crypto/Cargo.toml
Normal file
10
crypto/Cargo.toml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "crypto"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
num-bigint-dig = { workspace = true }
|
||||||
|
num-integer = { workspace = true }
|
||||||
|
num-traits = { workspace = true }
|
||||||
|
thiserror = { workspace = true }
|
||||||
|
zeroize = { workspace = true }
|
||||||
11
host/Cargo.toml
Normal file
11
host/Cargo.toml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[package]
|
||||||
|
name = "host"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
error-stack = { workspace = true }
|
||||||
|
futures = { workspace = true }
|
||||||
|
resolver = { workspace = true }
|
||||||
|
thiserror = { workspace = true }
|
||||||
|
tokio = { workspace = true }
|
||||||
|
tracing = { workspace = true }
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
use crate::network::resolver::name::Name;
|
|
||||||
use crate::network::resolver::{ResolveError, Resolver};
|
|
||||||
use error_stack::{report, ResultExt};
|
use error_stack::{report, ResultExt};
|
||||||
use futures::stream::{FuturesUnordered, StreamExt};
|
use futures::stream::{FuturesUnordered, StreamExt};
|
||||||
|
use resolver::name::Name;
|
||||||
|
use resolver::{ResolveError, Resolver};
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::net::{AddrParseError, IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
|
use std::net::{AddrParseError, IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
|
||||||
23
keys/Cargo.toml
Normal file
23
keys/Cargo.toml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
[package]
|
||||||
|
name = "keys"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
aes = { workspace = true }
|
||||||
|
base64 = { workspace = true }
|
||||||
|
bcrypt-pbkdf = { workspace = true }
|
||||||
|
bytes = { workspace = true }
|
||||||
|
ctr = { workspace = true }
|
||||||
|
crypto = { workspace = true }
|
||||||
|
ed25519-dalek = { workspace = true }
|
||||||
|
elliptic-curve = { workspace = true }
|
||||||
|
error-stack = { workspace = true }
|
||||||
|
generic-array = { workspace = true }
|
||||||
|
num-bigint-dig = { workspace = true }
|
||||||
|
p256 = { workspace = true }
|
||||||
|
p384 = { workspace = true }
|
||||||
|
p521 = { workspace = true }
|
||||||
|
sec1 = { workspace = true }
|
||||||
|
ssh = { workspace = true }
|
||||||
|
thiserror = { workspace = true }
|
||||||
|
tokio = { workspace = true }
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
use crate::crypto::rsa;
|
use crypto::rsa;
|
||||||
use crate::encodings::ssh::buffer::SshReadBuffer;
|
use crate::buffer::SshReadBuffer;
|
||||||
use crate::encodings::ssh::public_key::PublicKey;
|
use crate::public_key::PublicKey;
|
||||||
use bytes::Buf;
|
use bytes::Buf;
|
||||||
use elliptic_curve::scalar::ScalarPrimitive;
|
use elliptic_curve::scalar::ScalarPrimitive;
|
||||||
use elliptic_curve::sec1::FromEncodedPoint;
|
use elliptic_curve::sec1::FromEncodedPoint;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
use super::{PublicKey, PublicKeyLoadError};
|
use super::{PublicKey, PublicKeyLoadError};
|
||||||
use crate::encodings::ssh::buffer::SshReadBuffer;
|
use crate::buffer::SshReadBuffer;
|
||||||
use crate::encodings::ssh::private_key::{read_private_key, PrivateKey};
|
use crate::private_key::{read_private_key, PrivateKey};
|
||||||
use aes::cipher::{KeyIvInit, StreamCipher};
|
use aes::cipher::{KeyIvInit, StreamCipher};
|
||||||
use base64::engine::{self, Engine};
|
use base64::engine::{self, Engine};
|
||||||
use bytes::{Buf, Bytes};
|
use bytes::{Buf, Bytes};
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
use crate::crypto::rsa;
|
use crypto::rsa;
|
||||||
use crate::encodings::ssh::buffer::SshReadBuffer;
|
use crate::buffer::SshReadBuffer;
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use elliptic_curve::sec1::FromEncodedPoint;
|
use elliptic_curve::sec1::FromEncodedPoint;
|
||||||
use error_stack::{report, ResultExt};
|
use error_stack::{report, ResultExt};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::encodings::ssh::public_key::PublicKey;
|
use crate::public_key::PublicKey;
|
||||||
use base64::engine::{self, Engine};
|
use base64::engine::{self, Engine};
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use error_stack::{report, ResultExt};
|
use error_stack::{report, ResultExt};
|
||||||
20
resolver/Cargo.toml
Normal file
20
resolver/Cargo.toml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[package]
|
||||||
|
name = "resolver"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
bytes = { workspace = true }
|
||||||
|
configuration = { workspace = true }
|
||||||
|
crypto = { workspace = true }
|
||||||
|
error-stack = { workspace = true }
|
||||||
|
futures = { workspace = true }
|
||||||
|
internment = { workspace = true }
|
||||||
|
num_enum = { workspace = true }
|
||||||
|
proptest = { workspace = true }
|
||||||
|
proptest-derive = { workspace = true }
|
||||||
|
serde = { workspace = true }
|
||||||
|
thiserror = { workspace = true }
|
||||||
|
tokio = { workspace = true }
|
||||||
|
toml = { workspace = true }
|
||||||
|
tracing = { workspace = true }
|
||||||
|
url = { workspace = true }
|
||||||
@@ -2,9 +2,9 @@ pub mod name;
|
|||||||
mod protocol;
|
mod protocol;
|
||||||
mod resolution_table;
|
mod resolution_table;
|
||||||
|
|
||||||
use crate::config::resolver::{DnsConfig, NameServerConfig};
|
use configuration::resolver::{DnsConfig, NameServerConfig};
|
||||||
use crate::network::resolver::name::Name;
|
use crate::name::Name;
|
||||||
use crate::network::resolver::resolution_table::ResolutionTable;
|
use crate::resolution_table::ResolutionTable;
|
||||||
use error_stack::{report, ResultExt};
|
use error_stack::{report, ResultExt};
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
|
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
use crate::network::resolver::protocol::header::Header;
|
use crate::protocol::header::Header;
|
||||||
use crate::network::resolver::protocol::question::Question;
|
use crate::protocol::question::Question;
|
||||||
use bytes::{Bytes, BytesMut};
|
use bytes::{Bytes, BytesMut};
|
||||||
use error_stack::ResultExt;
|
use error_stack::ResultExt;
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
use crate::network::resolver::name::Name;
|
use crate::name::Name;
|
||||||
use crate::network::resolver::protocol::resource_record::raw::{RecordClass, RecordType};
|
use crate::protocol::resource_record::raw::{RecordClass, RecordType};
|
||||||
use bytes::{Buf, BufMut, TryGetError};
|
use bytes::{Buf, BufMut, TryGetError};
|
||||||
use error_stack::{report, ResultExt};
|
use error_stack::{report, ResultExt};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
use bytes::{Buf, BufMut};
|
use bytes::{Buf, BufMut};
|
||||||
use error_stack::{report, ResultExt};
|
use error_stack::{report, ResultExt};
|
||||||
use crate::network::resolver::protocol::header::{Header, OpCode, ResponseCode};
|
use crate::protocol::header::{Header, OpCode, ResponseCode};
|
||||||
use crate::network::resolver::protocol::question::Question;
|
use crate::protocol::question::Question;
|
||||||
use crate::network::resolver::protocol::resource_record::ResourceRecord;
|
use crate::protocol::resource_record::ResourceRecord;
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, proptest_derive::Arbitrary)]
|
#[derive(Clone, Debug, PartialEq, proptest_derive::Arbitrary)]
|
||||||
pub struct Request {
|
pub struct Request {
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
pub mod raw;
|
pub mod raw;
|
||||||
|
|
||||||
use crate::network::resolver::name::Name;
|
use crate::name::Name;
|
||||||
use crate::network::resolver::protocol::resource_record::raw::RawResourceRecord;
|
use crate::protocol::resource_record::raw::RawResourceRecord;
|
||||||
use bytes::{Buf, BufMut, Bytes, BytesMut};
|
use bytes::{Buf, BufMut, Bytes, BytesMut};
|
||||||
use error_stack::{report, ResultExt};
|
use error_stack::{report, ResultExt};
|
||||||
use proptest::arbitrary::Arbitrary;
|
use proptest::arbitrary::Arbitrary;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::network::resolver::name::Name;
|
use crate::name::Name;
|
||||||
use bytes::{Buf, BufMut, Bytes};
|
use bytes::{Buf, BufMut, Bytes};
|
||||||
use error_stack::{report, ResultExt};
|
use error_stack::{report, ResultExt};
|
||||||
use num_enum::{FromPrimitive, IntoPrimitive};
|
use num_enum::{FromPrimitive, IntoPrimitive};
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
use bytes::{Buf, BufMut};
|
use bytes::{Buf, BufMut};
|
||||||
use error_stack::ResultExt;
|
use error_stack::ResultExt;
|
||||||
use crate::network::resolver::protocol::header::{Header, ResponseCode};
|
use crate::protocol::header::{Header, ResponseCode};
|
||||||
use crate::network::resolver::protocol::question::Question;
|
use crate::protocol::question::Question;
|
||||||
use crate::network::resolver::protocol::resource_record::ResourceRecord;
|
use crate::protocol::resource_record::ResourceRecord;
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, proptest_derive::Arbitrary)]
|
#[derive(Clone, Debug, PartialEq, proptest_derive::Arbitrary)]
|
||||||
pub enum Response {
|
pub enum Response {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::network::resolver::name::Name;
|
use crate::name::Name;
|
||||||
use std::collections::hash_map::Entry;
|
use std::collections::hash_map::Entry;
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::net::IpAddr;
|
use std::net::IpAddr;
|
||||||
10
server/Cargo.toml
Normal file
10
server/Cargo.toml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "server"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
configuration = { workspace = true }
|
||||||
|
error-stack = { workspace = true }
|
||||||
|
thiserror = { workspace = true }
|
||||||
|
tokio = { workspace = true }
|
||||||
|
tracing = { workspace = true }
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
mod socket;
|
mod socket;
|
||||||
mod state;
|
mod state;
|
||||||
|
|
||||||
use crate::config::server::ServerConfiguration;
|
use configuration::server::ServerConfiguration;
|
||||||
use error_stack::ResultExt;
|
use error_stack::ResultExt;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::server::TopLevelError;
|
use crate::TopLevelError;
|
||||||
use error_stack::ResultExt;
|
use error_stack::ResultExt;
|
||||||
use tokio::net::{UnixListener, UnixStream};
|
use tokio::net::{UnixListener, UnixStream};
|
||||||
use tracing::Instrument;
|
use tracing::Instrument;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::server::TopLevelError;
|
use crate::TopLevelError;
|
||||||
use tokio::task::JoinSet;
|
use tokio::task::JoinSet;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
@@ -1 +0,0 @@
|
|||||||
pub mod ssh;
|
|
||||||
10
src/lib.rs
10
src/lib.rs
@@ -1,10 +0,0 @@
|
|||||||
pub mod client;
|
|
||||||
pub mod config;
|
|
||||||
pub mod crypto;
|
|
||||||
pub mod encodings;
|
|
||||||
pub mod network;
|
|
||||||
mod operational_error;
|
|
||||||
pub mod server;
|
|
||||||
pub mod ssh;
|
|
||||||
|
|
||||||
pub use operational_error::OperationalError;
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
pub mod host;
|
|
||||||
pub mod resolver;
|
|
||||||
18
ssh/Cargo.toml
Normal file
18
ssh/Cargo.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[package]
|
||||||
|
name = "ssh"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
bytes = { workspace = true }
|
||||||
|
configuration = { workspace = true }
|
||||||
|
error-stack = { workspace = true }
|
||||||
|
getrandom = { workspace = true }
|
||||||
|
itertools = { workspace = true }
|
||||||
|
num_enum = { workspace = true }
|
||||||
|
proptest = { workspace = true }
|
||||||
|
proptest-derive = { workspace = true }
|
||||||
|
rand = { workspace = true }
|
||||||
|
rand_chacha = { workspace = true }
|
||||||
|
thiserror = { workspace = true }
|
||||||
|
tokio = { workspace = true }
|
||||||
|
tracing = { workspace = true }
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
mod channel;
|
mod channel;
|
||||||
mod message_ids;
|
mod message_ids;
|
||||||
|
mod operational_error;
|
||||||
mod packets;
|
mod packets;
|
||||||
mod preamble;
|
mod preamble;
|
||||||
|
|
||||||
pub use channel::SshChannel;
|
pub use channel::SshChannel;
|
||||||
pub use message_ids::SshMessageID;
|
pub use message_ids::SshMessageID;
|
||||||
|
pub use operational_error::OperationalError;
|
||||||
pub use packets::{SshKeyExchange, SshKeyExchangeProcessingError};
|
pub use packets::{SshKeyExchange, SshKeyExchangeProcessingError};
|
||||||
pub use preamble::Preamble;
|
pub use preamble::Preamble;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::ssh::{SshKeyExchangeProcessingError, SshMessageID};
|
use crate::{SshKeyExchangeProcessingError, SshMessageID};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
#[derive(Debug, Error)]
|
#[derive(Debug, Error)]
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
use crate::config::connection::ClientConnectionOpts;
|
use configuration::connection::ClientConnectionOpts;
|
||||||
use crate::ssh::channel::SshPacket;
|
use crate::channel::SshPacket;
|
||||||
use crate::ssh::message_ids::SshMessageID;
|
use crate::message_ids::SshMessageID;
|
||||||
use bytes::{Buf, BufMut, Bytes, BytesMut};
|
use bytes::{Buf, BufMut, Bytes, BytesMut};
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use proptest::arbitrary::Arbitrary;
|
use proptest::arbitrary::Arbitrary;
|
||||||
Reference in New Issue
Block a user