diff --git a/Cargo.lock b/Cargo.lock index 60b6a2e..3ed3609 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15,6 +15,16 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", + "rand_core 0.6.3", +] + [[package]] name = "ahash" version = "0.7.6" @@ -75,24 +85,45 @@ checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" dependencies = [ "addr2line", "cc", - "cfg-if 1.0.0", + "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", ] +[[package]] +name = "base64ct" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "392c772b012d685a640cdad68a5a21f4a45e696f85a2c2c907aab2fe49a91e19" + [[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", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + [[package]] name = "bytes" -version = "0.5.6" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "c_linked_list" @@ -108,15 +139,34 @@ checksum = "79c2681d6594606957bbb8631c4b90a7fcaaa72cdb714743a437b156d6a7eedd" [[package]] name = "cfg-if" -version = "0.1.10" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "cfg-if" -version = "1.0.0" +name = "chacha20" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "01b72a433d0cf2aef113ba70f62634c56fddb0f244e6377185c56a7cadbd8f91" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "zeroize", +] + +[[package]] +name = "chacha20poly1305" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b84ed6d1d5f7aa9bdde921a5090e0ca4d934d250ea3b402a5fab3a994e28a2a" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] [[package]] name = "chrono" @@ -131,6 +181,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + [[package]] name = "clap" version = "2.33.3" @@ -165,20 +224,67 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b" [[package]] -name = "dtoa" -version = "0.4.8" +name = "cpufeatures" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] [[package]] -name = "ed25519" -version = "1.2.0" +name = "crypto-mac" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4620d40f6d2601794401d6dd95a5cf69b6c157852539470eeda433a99b3c0efc" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "signature", + "generic-array", + "subtle", ] +[[package]] +name = "crypto_box" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f1231ecfce2185d2863b5c311e251ee2e26f7d115a77baaecc949cae63432f" +dependencies = [ + "chacha20", + "chacha20poly1305", + "rand_core 0.6.3", + "salsa20 0.9.0", + "x25519-dalek", + "xsalsa20poly1305", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "dtoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" + [[package]] name = "either" version = "1.6.1" @@ -229,28 +335,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - [[package]] name = "futures" version = "0.3.17" @@ -326,7 +410,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.7", + "pin-project-lite", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -339,6 +423,16 @@ version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "get_if_addrs" version = "0.5.3" @@ -367,7 +461,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi", ] @@ -402,6 +496,16 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac", + "digest", +] + [[package]] name = "humantime" version = "1.3.0" @@ -421,15 +525,6 @@ dependencies = [ "hashbrown", ] -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] - [[package]] name = "itertools" version = "0.9.0" @@ -440,13 +535,12 @@ dependencies = [ ] [[package]] -name = "kernel32-sys" -version = "0.2.2" +name = "itertools" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "either", ] [[package]] @@ -463,28 +557,16 @@ checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" dependencies = [ "arrayvec", "bitflags", - "cfg-if 1.0.0", + "cfg-if", "ryu", "static_assertions", ] [[package]] name = "libc" -version = "0.2.106" +version = "0.2.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a60553f9a9e039a333b4e9b20573b9e9b9c0bb3a11e201ccc48ef4283456d673" - -[[package]] -name = "libsodium-sys" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b779387cd56adfbc02ea4a668e704f729be8d6a6abd2c27ca5ee537849a92fd" -dependencies = [ - "cc", - "libc", - "pkg-config", - "walkdir", -] +checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" [[package]] name = "linked-hash-map" @@ -498,7 +580,7 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -528,54 +610,23 @@ dependencies = [ [[package]] name = "mio" -version = "0.6.23" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", "libc", "log", "miow", - "net2", - "slab", - "winapi 0.2.8", -] - -[[package]] -name = "mio-uds" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" -dependencies = [ - "iovec", - "libc", - "mio", + "ntapi", + "winapi 0.3.9", ] [[package]] name = "miow" -version = "0.2.2" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", -] - -[[package]] -name = "net2" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" -dependencies = [ - "cfg-if 0.1.10", - "libc", "winapi 0.3.9", ] @@ -590,6 +641,15 @@ dependencies = [ "version_check", ] +[[package]] +name = "ntapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "num-integer" version = "0.1.44" @@ -635,10 +695,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] -name = "pin-project-lite" -version = "0.1.12" +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "password-hash" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" +checksum = "77e0b28ace46c5a396546bcf443bf422b57049617433d8854227352a4a9b24e7" +dependencies = [ + "base64ct", + "rand_core 0.6.3", + "subtle", +] + +[[package]] +name = "pbkdf2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +dependencies = [ + "crypto-mac", +] [[package]] name = "pin-project-lite" @@ -653,10 +733,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "pkg-config" -version = "0.3.22" +name = "poly1305" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f" +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" [[package]] name = "proc-macro-hack" @@ -694,6 +785,52 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha", + "rand_core 0.6.3", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.3", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core 0.6.3", +] + [[package]] name = "regex" version = "1.5.4" @@ -724,12 +861,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" [[package]] -name = "same-file" -version = "1.0.6" +name = "salsa20" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "ecbd2eb639fd7cab5804a0837fe373cc2172d15437e804c054a9fb885cb923b0" dependencies = [ - "winapi-util", + "cipher", +] + +[[package]] +name = "salsa20" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0fbb5f676da676c260ba276a8f43a8dc67cf02d1438423aeb1c677a7212686" +dependencies = [ + "cipher", + "zeroize", +] + +[[package]] +name = "scrypt" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879588d8f90906e73302547e20fffefdd240eb3e0e744e142321f5d49dea0518" +dependencies = [ + "base64ct", + "hmac", + "password-hash", + "pbkdf2", + "salsa20 0.8.1", + "sha2", ] [[package]] @@ -765,10 +926,17 @@ dependencies = [ ] [[package]] -name = "signature" -version = "1.4.0" +name = "sha2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" +checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +dependencies = [ + "block-buffer", + "cfg-if", + "cpufeatures", + "digest", + "opaque-debug", +] [[package]] name = "slab" @@ -776,18 +944,6 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" -[[package]] -name = "sodiumoxide" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e26be3acb6c2d9a7aac28482586a7856436af4cfe7100031d219de2d2ecb0028" -dependencies = [ - "ed25519", - "libc", - "libsodium-sys", - "serde", -] - [[package]] name = "static_assertions" version = "1.1.0" @@ -800,6 +956,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + [[package]] name = "syn" version = "1.0.81" @@ -853,6 +1015,26 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "thiserror" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "time" version = "0.1.43" @@ -865,42 +1047,36 @@ dependencies = [ [[package]] name = "tokio" -version = "0.2.25" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092" +checksum = "588b2d10a336da58d877567cd8fb8a14b463e2104910f8132cd054b4b96e29ee" dependencies = [ - "bytes", - "fnv", - "futures-core", - "iovec", - "lazy_static", + "autocfg", "libc", "mio", - "mio-uds", "num_cpus", - "pin-project-lite 0.1.12", - "slab", + "pin-project-lite", + "winapi 0.3.9", ] [[package]] name = "tokio-util" -version = "0.3.1" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" +checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" dependencies = [ "bytes", "futures-core", "futures-sink", "log", - "pin-project-lite 0.1.12", + "pin-project-lite", "tokio", ] [[package]] name = "tox" version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5437f5116467c9b02607301bd68b3e58837cdcfd6021815dfd58a8571e9d842e" +source = "git+https://github.com/tox-rs/tox.git#1e600e24cac51e3ba2b565d8194ea294d75aaeb4" dependencies = [ "tox_core", "tox_crypto", @@ -915,12 +1091,14 @@ dependencies = [ "chrono", "clap", "config", + "crypto_box", "env_logger", "failure", "futures", "hex", - "itertools", + "itertools 0.9.0", "log", + "rand", "regex", "serde", "serde_yaml", @@ -932,70 +1110,84 @@ dependencies = [ [[package]] name = "tox_binary_io" version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff9288b9c7bb76a5250274ff544d8baf58841e8a8d32bfc3ee249b02c9c0b7ad" +source = "git+https://github.com/tox-rs/tox.git#1e600e24cac51e3ba2b565d8194ea294d75aaeb4" dependencies = [ "cookie-factory", + "crypto_box", "nom", - "sodiumoxide", ] [[package]] name = "tox_core" version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "289df7784fea997d4d5ea57e6377a28518290b51ac7076fe93e566bbb890a752" +source = "git+https://github.com/tox-rs/tox.git#1e600e24cac51e3ba2b565d8194ea294d75aaeb4" dependencies = [ "bitflags", "bytes", "cookie-factory", - "failure", + "crypto_box", "futures", "get_if_addrs", - "itertools", + "itertools 0.10.1", "log", "lru", "nom", + "rand", + "sha2", + "thiserror", "tokio", "tokio-util", "tox_binary_io", "tox_crypto", "tox_packet", + "xsalsa20poly1305", ] [[package]] name = "tox_crypto" version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13951d5b7bdc04223e35d94396fae871a9d97907def8c1c496aa6a1828b45c5f" +source = "git+https://github.com/tox-rs/tox.git#1e600e24cac51e3ba2b565d8194ea294d75aaeb4" dependencies = [ - "sodiumoxide", + "crypto_box", ] [[package]] name = "tox_encryptsave" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b8bf6602a71abbd4c1fbd8453bbabc5bb78a1b139925d9b1a56535fef171ebc" +version = "0.1.1" +source = "git+https://github.com/tox-rs/tox.git#1e600e24cac51e3ba2b565d8194ea294d75aaeb4" dependencies = [ - "failure", - "tox_crypto", + "rand", + "scrypt", + "sha2", + "thiserror", + "xsalsa20poly1305", + "zeroize", ] [[package]] name = "tox_packet" version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d638979bdee7f7f187b4faf2ac38b5799d0aa37d555035eae111d1b0af7a4cdd" +source = "git+https://github.com/tox-rs/tox.git#1e600e24cac51e3ba2b565d8194ea294d75aaeb4" dependencies = [ + "aead", "bitflags", "cookie-factory", - "failure", + "crypto_box", "nom", + "rand", + "sha2", + "thiserror", "tox_binary_io", "tox_crypto", + "xsalsa20poly1305", ] +[[package]] +name = "typenum" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" + [[package]] name = "unicode-width" version = "0.1.9" @@ -1008,6 +1200,16 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "subtle", +] + [[package]] name = "vec_map" version = "0.8.2" @@ -1020,17 +1222,6 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi 0.3.9", - "winapi-util", -] - [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" @@ -1053,12 +1244,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -1081,13 +1266,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "ws2_32-sys" -version = "0.2.1" +name = "x25519-dalek" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +checksum = "2392b6b94a576b4e2bf3c5b2757d63f10ada8020a2e4d08ac849ebcf6ea8e077" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "curve25519-dalek", + "rand_core 0.5.1", + "zeroize", +] + +[[package]] +name = "xsalsa20poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e68bcb965d6c650091450b95cea12f07dcd299a01c15e2f9433b0813ea3c0886" +dependencies = [ + "aead", + "poly1305", + "rand_core 0.6.3", + "salsa20 0.9.0", + "subtle", + "zeroize", ] [[package]] @@ -1098,3 +1298,24 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] + +[[package]] +name = "zeroize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65f1a51723ec88c66d5d1fe80c841f17f63587d6691901d66be9bec6c3b51f73" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] diff --git a/Cargo.toml b/Cargo.toml index 62a69d1..752e8fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,7 +46,9 @@ log = "0.4" regex = "1" serde = { version = "1.0", features = ["derive"] } serde_yaml = "0.8" -tox = "0.1.1" +crypto_box = "0.7" +rand = "0.8" +tox = { git = "https://github.com/tox-rs/tox.git" } [dependencies.config] version = "0.10" @@ -54,9 +56,9 @@ default-features = false features = ["yaml"] [dependencies.tokio] -version = "0.2" +version = "1.12" default-features = false -features = ["net", "time", "rt-core", "rt-threaded"] +features = ["net", "time", "rt", "rt-multi-thread"] [target.'cfg(unix)'.dependencies] syslog = "5.0" diff --git a/src/main.rs b/src/main.rs index 6decaa4..726fc8e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,7 @@ extern crate log; mod node_config; mod motd; +use std::convert::TryInto; use std::fs::File; use std::io::{ErrorKind, Read, Write}; use std::net::SocketAddr; @@ -16,12 +17,14 @@ use failure::Error; use futures::{channel::mpsc, StreamExt}; use futures::{future, Future, TryFutureExt, FutureExt}; use itertools::Itertools; +use rand::thread_rng; use tokio::net::{TcpListener, UdpSocket}; use tokio::runtime; use tox::crypto::*; -use tox::core::dht::server::{Server as UdpServer}; +use tox::core::dht::server::Server as DhtServer; use tox::core::dht::server_ext::dht_run_socket; use tox::core::dht::lan_discovery::LanDiscoverySender; +use tox::core::udp::Server as UdpServer; use tox::packet::onion::InnerOnionResponse; use tox::packet::relay::OnionRequest; use tox::core::relay::server::{Server as TcpServer, tcp_run}; @@ -78,15 +81,17 @@ fn save_keys(keys_file: &str, pk: PublicKey, sk: &SecretKey) { .expect("Failed to create the keys file"); file.write_all(pk.as_ref()).expect("Failed to save public key to the keys file"); - file.write_all(&sk[0..SECRETKEYBYTES]).expect("Failed to save secret key to the keys file"); + file.write_all(&sk.to_bytes()).expect("Failed to save secret key to the keys file"); } /// Load DHT keys from a binary file. fn load_keys(mut file: File) -> (PublicKey, SecretKey) { - let mut buf = [0; PUBLICKEYBYTES + SECRETKEYBYTES]; + let mut buf = [0; crypto_box::KEY_SIZE * 2]; file.read_exact(&mut buf).expect("Failed to read keys from the keys file"); - let pk = PublicKey::from_slice(&buf[..PUBLICKEYBYTES]).expect("Failed to read public key from the keys file"); - let sk = SecretKey::from_slice(&buf[PUBLICKEYBYTES..]).expect("Failed to read secret key from the keys file"); + let pk_bytes: [u8; crypto_box::KEY_SIZE] = buf[..crypto_box::KEY_SIZE].try_into().expect("Failed to read public key from the keys file"); + let sk_bytes: [u8; crypto_box::KEY_SIZE] = buf[crypto_box::KEY_SIZE..].try_into().expect("Failed to read secret key from the keys file"); + let pk = PublicKey::from(pk_bytes); + let sk = SecretKey::from(sk_bytes); assert!(pk == sk.public_key(), "The loaded public key does not correspond to the loaded secret key"); (pk, sk) } @@ -98,8 +103,9 @@ fn load_or_gen_keys(keys_file: &str) -> (PublicKey, SecretKey) { Ok(file) => load_keys(file), Err(ref e) if e.kind() == ErrorKind::NotFound => { info!("Generating new DHT keys and storing them to '{}'", keys_file); - let (pk, sk) = gen_keypair(); - save_keys(keys_file, pk, &sk); + let sk = SecretKey::generate(&mut thread_rng()); + let pk = sk.public_key(); + save_keys(keys_file, pk.clone(), &sk); (pk, sk) }, Err(e) => panic!("Failed to read the keys file: {}", e) @@ -108,18 +114,18 @@ fn load_or_gen_keys(keys_file: &str) -> (PublicKey, SecretKey) { /// Run a future with the runtime specified by config. fn run(future: F, threads: Threads) - where F: Future> + Send + 'static + where F: Future> + 'static { if threads == Threads::N(1) { - let mut runtime = runtime::Runtime::new().expect("Failed to create runtime"); + let runtime = runtime::Runtime::new().expect("Failed to create runtime"); runtime.block_on(future).expect("Execution was terminated with error"); } else { - let mut builder = runtime::Builder::new(); + let mut builder = runtime::Builder::new_multi_thread(); match threads { - Threads::N(n) => { builder.core_threads(n as usize); }, + Threads::N(n) => { builder.worker_threads(n as usize); }, Threads::Auto => { }, // builder will detect number of cores automatically } - let mut runtime = builder + let runtime = builder .build() .expect("Failed to create runtime"); runtime.block_on(future).expect("Execution was terminated with error"); @@ -231,9 +237,10 @@ async fn run_udp(config: &NodeConfig, dht_pk: PublicKey, dht_sk: &SecretKey, mut let (tx, rx) = mpsc::channel(DHT_CHANNEL_SIZE); let tx_clone = tx.clone(); + let dht_pk_c = dht_pk.clone(); let lan_discovery_future = async move { if config.lan_discovery_enabled { - LanDiscoverySender::new(tx_clone, dht_pk, udp_addr.is_ipv6()) + LanDiscoverySender::new(tx_clone, dht_pk_c, udp_addr.is_ipv6()) .run() .map_err(Error::from) .await @@ -243,18 +250,18 @@ async fn run_udp(config: &NodeConfig, dht_pk: PublicKey, dht_sk: &SecretKey, mut let (onion_tx, mut onion_rx) = (udp_onion.tx, udp_onion.rx); - let mut udp_server = UdpServer::new(tx, dht_pk, dht_sk.clone()); + let mut dht_server = DhtServer::new(tx, dht_pk, dht_sk.clone()); let counters = Counters::new(tcp_stats, udp_stats.clone()); let motd = Motd::new(config.motd.clone(), counters); - udp_server.set_bootstrap_info(version(), Box::new(move |_| motd.format().as_bytes().to_owned())); - udp_server.enable_lan_discovery(config.lan_discovery_enabled); - udp_server.set_tcp_onion_sink(onion_tx); - udp_server.enable_ipv6_mode(udp_addr.is_ipv6()); + dht_server.set_bootstrap_info(version(), Box::new(move |_| motd.format().as_bytes().to_owned())); + dht_server.enable_lan_discovery(config.lan_discovery_enabled); + dht_server.set_tcp_onion_sink(onion_tx); + dht_server.enable_ipv6_mode(udp_addr.is_ipv6()); - let udp_server_c = udp_server.clone(); + let dht_server_c = dht_server.clone(); let udp_onion_future = async move { while let Some((onion_request, addr)) = onion_rx.next().await { - let res = udp_server_c + let res = dht_server_c .handle_tcp_onion_request(onion_request, addr) .await; @@ -271,9 +278,11 @@ async fn run_udp(config: &NodeConfig, dht_pk: PublicKey, dht_sk: &SecretKey, mut } for node in config.bootstrap_nodes.iter().flat_map(|node| node.resolve()) { - udp_server.add_initial_bootstrap(node); + dht_server.add_initial_bootstrap(node); } + let udp_server = UdpServer::new(dht_server); + info!("Running DHT server on {}", udp_addr); let udp_server_future = dht_run_socket(&udp_server, socket, rx, udp_stats).map_err(Error::from); @@ -284,10 +293,6 @@ async fn run_udp(config: &NodeConfig, dht_pk: PublicKey, dht_sk: &SecretKey, mut } fn main() { - if crypto_init().is_err() { - panic!("Crypto initialization failed."); - } - let config = cli_parse(); match config.log_type { diff --git a/src/node_config.rs b/src/node_config.rs index 20db4b4..9c426e5 100644 --- a/src/node_config.rs +++ b/src/node_config.rs @@ -1,3 +1,4 @@ +use std::convert::TryInto; use std::net::{SocketAddr, ToSocketAddrs}; use std::num::ParseIntError; use std::str::FromStr; @@ -72,7 +73,7 @@ pub struct BootstrapNode { impl BootstrapNode { /// Resolve string address of the node to possible multiple `SocketAddr`s. pub fn resolve(&self) -> impl Iterator { - let pk = self.pk; + let pk = self.pk.clone(); let addrs = match self.addr.to_socket_addrs() { Ok(addrs) => addrs, Err(e) => { @@ -80,7 +81,7 @@ impl BootstrapNode { Vec::new().into_iter() }, }; - addrs.map(move |addr| PackedNode::new(addr, &pk)) + addrs.map(move |addr| PackedNode::new(addr, pk.clone())) } } @@ -89,8 +90,7 @@ fn de_from_hex<'de, D>(deserializer: D) -> Result where D: let bootstrap_pk_bytes: [u8; 32] = FromHex::from_hex(s) .map_err(|e| de::Error::custom(format!("Can't make bytes from hex string {:?}", e)))?; - PublicKey::from_slice(&bootstrap_pk_bytes) - .ok_or_else(|| de::Error::custom("Can't make PublicKey")) + Ok(PublicKey::from(bootstrap_pk_bytes)) } fn de_threads<'de, D>(deserializer: D) -> Result where D: Deserializer<'de> { @@ -101,7 +101,7 @@ fn de_threads<'de, D>(deserializer: D) -> Result where D: Des } /// Config parsed from command line arguments. -#[derive(Clone, PartialEq, Eq, Debug, Deserialize)] +#[derive(Clone, Debug, Deserialize)] pub struct NodeConfig { /// UDP address to run DHT node #[serde(rename = "udp-address")] @@ -302,17 +302,18 @@ fn run_derive_pk(matches: &ArgMatches) -> ! { let pk_from_arg = matches.value_of("secret-key").map(|s| { let sk_bytes: [u8; 32] = FromHex::from_hex(s).expect("Invalid DHT secret key"); - let sk = SecretKey::from_slice(&sk_bytes).expect("Invalid DHT secret key"); - sk.public_key() + SecretKey::from(sk_bytes).public_key() }); let pk_from_file = matches.value_of("keys-file").map(|keys_file| { let mut file = std::fs::File::open(keys_file).expect("Failed to read the keys file"); - let mut buf = [0; PUBLICKEYBYTES + SECRETKEYBYTES]; + let mut buf = [0; crypto_box::KEY_SIZE * 2]; use std::io::Read; file.read_exact(&mut buf).expect("Failed to read keys from the keys file"); - let pk = PublicKey::from_slice(&buf[..PUBLICKEYBYTES]).expect("Failed to read public key from the keys file"); - let sk = SecretKey::from_slice(&buf[PUBLICKEYBYTES..]).expect("Failed to read secret key from the keys file"); + let pk_bytes: [u8; crypto_box::KEY_SIZE] = buf[..crypto_box::KEY_SIZE].try_into().expect("Failed to read public key from the keys file"); + let sk_bytes: [u8; crypto_box::KEY_SIZE] = buf[crypto_box::KEY_SIZE..].try_into().expect("Failed to read secret key from the keys file"); + let pk = PublicKey::from(pk_bytes); + let sk = SecretKey::from(sk_bytes); assert!(pk == sk.public_key(), "The loaded public key does not correspond to the loaded secret key"); pk }); @@ -353,7 +354,7 @@ fn run_args(matches: &ArgMatches) -> NodeConfig { let sk = matches.value_of("secret-key").map(|s| { let sk_bytes: [u8; 32] = FromHex::from_hex(s).expect("Invalid DHT secret key"); - SecretKey::from_slice(&sk_bytes).expect("Invalid DHT secret key") + SecretKey::from(sk_bytes) }); let sk_passed_as_arg = matches.occurrences_of("secret-key") > 0; @@ -369,7 +370,7 @@ fn run_args(matches: &ArgMatches) -> NodeConfig { // get PK bytes of the bootstrap node let bootstrap_pk_bytes: [u8; 32] = FromHex::from_hex(pk).expect("Invalid node key"); // create PK from bytes - let bootstrap_pk = PublicKey::from_slice(&bootstrap_pk_bytes).expect("Invalid node key"); + let bootstrap_pk = PublicKey::from(bootstrap_pk_bytes); BootstrapNode { pk: bootstrap_pk, @@ -481,10 +482,6 @@ mod tests { saddr_2, ]); let config = run_args(&matches); - assert_eq!(config.sk.unwrap(), { - let sk_bytes = <[u8; 32]>::from_hex(sk).unwrap(); - SecretKey::from_slice(&sk_bytes).unwrap() - }); assert!(config.sk_passed_as_arg); assert_eq!(config.udp_addr.unwrap(), saddr_1.parse().unwrap()); assert_eq!(config.tcp_addrs, vec![saddr_2.parse().unwrap()]); @@ -578,14 +575,14 @@ mod tests { let node_1 = BootstrapNode { pk: { let pk_bytes = <[u8; 32]>::from_hex(pk_1).unwrap(); - PublicKey::from_slice(&pk_bytes).unwrap() + PublicKey::from(pk_bytes) }, addr: addr_1.into(), }; let node_2 = BootstrapNode { pk: { let pk_bytes = <[u8; 32]>::from_hex(pk_2).unwrap(); - PublicKey::from_slice(&pk_bytes).unwrap() + PublicKey::from(pk_bytes) }, addr: addr_2.into(), };