diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index cb13aa9..658e7c6 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -14,7 +14,7 @@ jobs: os: [ubuntu-latest, macos-latest, windows-latest] rust: - stable - - 1.42.0 + - 1.51.0 steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 diff --git a/Cargo.lock b/Cargo.lock index 87c0b5d..ceccc28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,31 +1,48 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + [[package]] name = "addr2line" -version = "0.14.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" +checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" dependencies = [ "gimli", ] [[package]] name = "adler" -version = "0.2.3" +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 = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +dependencies = [ + "generic-array", + "rand_core 0.6.3", +] [[package]] name = "ahash" -version = "0.4.7" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" +checksum = "43bb833f0bf979d8475d38fbf09ed3b8a55e1885fe93ad3f93239fc6a4f17b98" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] [[package]] name = "aho-corasick" -version = "0.7.15" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" dependencies = [ "memchr", ] @@ -64,29 +81,51 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.55" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef5140344c85b01f9bbb4d4b7288a8aa4b3287ccef913a14bcc78a1063623598" +checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" dependencies = [ "addr2line", - "cfg-if 1.0.0", + "cc", + "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", ] +[[package]] +name = "base64ct" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a96587c05c810ddbb79e2674d519cff1379517e7b91d166dff7a7cc0e9af6e" + [[package]] name = "bitflags" -version = "1.2.1" +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 = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +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" @@ -96,21 +135,40 @@ checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" [[package]] name = "cc" -version = "1.0.66" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" +checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" [[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" @@ -125,6 +183,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" @@ -154,15 +221,71 @@ dependencies = [ [[package]] name = "cookie-factory" -version = "0.3.1" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b" + +[[package]] +name = "cpufeatures" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "crypto_box" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f21b581d2f0cb891554812435667bb9610d74feb1a4c6415bf09c28ff0381d" +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.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134951f4028bdadb9b84baf4232681efbf277da25144b9b0ad65df75946c422b" +checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" [[package]] name = "either" @@ -214,33 +337,11 @@ 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.8" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" +checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" dependencies = [ "futures-channel", "futures-core", @@ -252,9 +353,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.8" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" dependencies = [ "futures-core", "futures-sink", @@ -262,22 +363,23 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.8" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" [[package]] name = "futures-io" -version = "0.3.8" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" [[package]] name = "futures-macro" -version = "0.3.8" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" dependencies = [ + "autocfg", "proc-macro-hack", "proc-macro2", "quote", @@ -286,25 +388,23 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.8" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" [[package]] name = "futures-task" -version = "0.3.8" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" -dependencies = [ - "once_cell", -] +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" [[package]] name = "futures-util" -version = "0.3.8" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ + "autocfg", "futures-channel", "futures-core", "futures-io", @@ -312,7 +412,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project", + "pin-project-lite", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -325,6 +425,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" @@ -347,35 +457,56 @@ dependencies = [ "libc", ] +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "gimli" -version = "0.23.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" +checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" [[package]] name = "hashbrown" -version = "0.9.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ "ahash", ] [[package]] name = "hermit-abi" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] [[package]] name = "hex" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" +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" @@ -387,12 +518,13 @@ dependencies = [ ] [[package]] -name = "iovec" -version = "0.1.4" +name = "indexmap" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" dependencies = [ - "libc", + "autocfg", + "hashbrown", ] [[package]] @@ -405,13 +537,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]] @@ -422,69 +553,58 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "lexical-core" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db65c6da02e61f55dae90a0ae427b2a5f6b3e8db09f58d10efab23af92592616" +checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" dependencies = [ "arrayvec", "bitflags", - "cfg-if 0.1.10", + "cfg-if", "ryu", "static_assertions", ] [[package]] name = "libc" -version = "0.2.81" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" - -[[package]] -name = "libsodium-sys" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a685b64f837b339074115f2e7f7b431ac73681d08d75b389db7498b8892b8a58" -dependencies = [ - "cc", - "libc", - "pkg-config", -] +checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" [[package]] name = "linked-hash-map" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" +checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" [[package]] name = "log" -version = "0.4.11" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 0.1.10", + "cfg-if", ] [[package]] name = "lru" -version = "0.6.3" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3aae342b73d57ad0b8b364bd12584819f2c1fe9114285dfcf8b0722607671635" +checksum = "7ea2d928b485416e8908cff2d97d621db22b27f7b3b6729e438bcf42c671ba91" dependencies = [ "hashbrown", ] [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "miniz_oxide" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" dependencies = [ "adler", "autocfg", @@ -492,54 +612,23 @@ dependencies = [ [[package]] name = "mio" -version = "0.6.23" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" 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", ] @@ -554,6 +643,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" @@ -585,41 +683,50 @@ dependencies = [ [[package]] name = "object" -version = "0.22.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" +checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2" +dependencies = [ + "memchr", +] [[package]] name = "once_cell" -version = "1.5.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] -name = "pin-project" -version = "1.0.2" +name = "opaque-debug" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "password-hash" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e0b28ace46c5a396546bcf443bf422b57049617433d8854227352a4a9b24e7" dependencies = [ - "pin-project-internal", + "base64ct", + "rand_core 0.6.3", + "subtle", ] [[package]] -name = "pin-project-internal" -version = "1.0.2" +name = "pbkdf2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" dependencies = [ - "proc-macro2", - "quote", - "syn", + "crypto-mac", ] [[package]] name = "pin-project-lite" -version = "0.1.11" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" [[package]] name = "pin-utils" @@ -628,10 +735,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "pkg-config" -version = "0.3.19" +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.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] name = "proc-macro-hack" @@ -641,15 +759,15 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro-nested" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.24" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" dependencies = [ "unicode-xid", ] @@ -662,36 +780,81 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" 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.4.2" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" dependencies = [ "aho-corasick", "memchr", "regex-syntax", - "thread_local", ] [[package]] name = "regex-syntax" -version = "0.6.21" +version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] name = "rustc-demangle" -version = "0.1.18" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "ryu" @@ -699,20 +862,53 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +[[package]] +name = "salsa20" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecbd2eb639fd7cab5804a0837fe373cc2172d15437e804c054a9fb885cb923b0" +dependencies = [ + "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]] name = "serde" -version = "1.0.118" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.118" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" dependencies = [ "proc-macro2", "quote", @@ -721,32 +917,34 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.8.14" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7baae0a99f1a324984bcdc5f0718384c1f69775f1c7eec8b859b71b443e3fd7" +checksum = "d8c608a35705a5d3cdc9fbe403147647ff34b921f8e833e49306df898f9b20af" dependencies = [ "dtoa", - "linked-hash-map", + "indexmap", "serde", "yaml-rust", ] [[package]] -name = "slab" -version = "0.4.2" +name = "sha2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +dependencies = [ + "block-buffer", + "cfg-if", + "cpufeatures", + "digest", + "opaque-debug", +] [[package]] -name = "sodiumoxide" -version = "0.2.6" +name = "slab" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7038b67c941e23501573cb7242ffb08709abe9b11eb74bceff875bbda024a6a8" -dependencies = [ - "libc", - "libsodium-sys", - "serde", -] +checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" [[package]] name = "static_assertions" @@ -760,11 +958,17 @@ 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.56" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9802ddde94170d186eeee5005b798d9c159fa970403f1be19976d0cfb939b72" +checksum = "5239bc68e0fef57495900cfea4e8dc75596d9a319d7e16b1e0a440d24e6fe0a0" dependencies = [ "proc-macro2", "quote", @@ -773,9 +977,9 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" +checksum = "474aaa926faa1603c40b7885a9eaea29b444d1cb2850cb7c0e37bb1a4182f4fa" dependencies = [ "proc-macro2", "quote", @@ -813,50 +1017,35 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "thread_local" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" -dependencies = [ - "lazy_static", -] - [[package]] name = "time" -version = "0.1.44" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ "libc", - "wasi", "winapi 0.3.9", ] [[package]] name = "tokio" -version = "0.2.24" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099837d3464c16a808060bb3f02263b412f6fafcb5d01c533d309985fbeebe48" +checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc" dependencies = [ - "bytes", - "fnv", - "futures-core", - "iovec", - "lazy_static", + "autocfg", "libc", "mio", - "mio-uds", "num_cpus", "pin-project-lite", - "slab", + "winapi 0.3.9", ] [[package]] name = "tokio-util" -version = "0.3.1" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" +checksum = "08d3725d3efa29485e87311c5b699de63cde14b00ed4d256b8318aa30ca452cd" dependencies = [ "bytes", "futures-core", @@ -869,8 +1058,7 @@ dependencies = [ [[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#6657c8420248a53171538e1e6199a9fe2db77aac" dependencies = [ "tox_core", "tox_crypto", @@ -885,12 +1073,14 @@ dependencies = [ "chrono", "clap", "config", + "crypto_box", "env_logger", "failure", "futures", "hex", - "itertools", + "itertools 0.9.0", "log", + "rand", "regex", "serde", "serde_yaml", @@ -902,81 +1092,105 @@ 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#6657c8420248a53171538e1e6199a9fe2db77aac" 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#6657c8420248a53171538e1e6199a9fe2db77aac" dependencies = [ "bitflags", "bytes", "cookie-factory", + "crypto_box", "failure", "futures", "get_if_addrs", - "itertools", + "itertools 0.10.1", "log", "lru", "nom", + "rand", + "sha2", "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#6657c8420248a53171538e1e6199a9fe2db77aac" 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#6657c8420248a53171538e1e6199a9fe2db77aac" dependencies = [ "failure", - "tox_crypto", + "rand", + "scrypt", + "sha2", + "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#6657c8420248a53171538e1e6199a9fe2db77aac" dependencies = [ + "aead", "bitflags", "cookie-factory", + "crypto_box", "failure", "nom", + "rand", + "sha2", "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.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "unicode-xid" -version = "0.2.1" +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 = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "subtle", +] [[package]] name = "vec_map" @@ -986,15 +1200,15 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" [[package]] name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" +version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "winapi" @@ -1012,12 +1226,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" @@ -1040,20 +1248,56 @@ 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]] name = "yaml-rust" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f0c922f1a334134dc2f7a8b67dc5d25f0735263feec974345ff706bcf20b0d" +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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdff2024a851a322b08f179173ae2ba620445aef1e838f0c196820eade4ae0c7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] diff --git a/Cargo.toml b/Cargo.toml index a870b3c..8ba43fa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -45,7 +45,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" @@ -53,9 +55,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/README.md b/README.md index ea53c6e..a8bedeb 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A server application to run tox bootstrap node. ## Building and running -You'll need [Rust] >= 1.42.0. +You'll need [Rust] >= 1.51.0. Build with: 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(), };