diff --git a/.github/workflows/test-cli.yaml b/.github/workflows/test-cli.yaml index eb87e771..b47d3f08 100644 --- a/.github/workflows/test-cli.yaml +++ b/.github/workflows/test-cli.yaml @@ -16,6 +16,6 @@ jobs: steps: - uses: actions/checkout@v2 - name: Grant executive permissions to script - run: chmod +x ./vach-cli/test_data/test.sh + run: chmod +x ./vach-cli/test_data/test.sh\ - name: Run CLI tests - run: sh ./vach-cli/test_data/test.sh + run: cd ./vach-cli/test_data/ && ./test.sh diff --git a/Cargo.lock b/Cargo.lock index c887bc30..c61c3e17 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,30 +4,30 @@ version = 3 [[package]] name = "aead" -version = "0.4.3" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ + "crypto-common", "generic-array", ] [[package]] name = "aes" -version = "0.7.5" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ "cfg-if", "cipher", "cpufeatures", - "opaque-debug", ] [[package]] name = "aes-gcm" -version = "0.9.4" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" +checksum = "209b47e8954a928e1d72e86eca7000ebb6655fe1436d33eefc2201cad027e237" dependencies = [ "aead", "aes", @@ -39,9 +39,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.19" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" dependencies = [ "memchr", ] @@ -63,9 +63,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.66" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "atty" @@ -73,7 +73,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -84,17 +84,29 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" + [[package]] name = "block-buffer" -version = "0.9.0" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] @@ -112,37 +124,25 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.2" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" +checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", ] -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", - "serde", -] - [[package]] name = "bumpalo" -version = "3.11.1" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] -name = "byteorder" -version = "1.4.3" +name = "bytecount" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" [[package]] name = "cast" @@ -150,6 +150,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + [[package]] name = "cfg-if" version = "1.0.0" @@ -158,11 +167,12 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cipher" -version = "0.3.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "generic-array", + "crypto-common", + "inout", ] [[package]] @@ -171,19 +181,19 @@ version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ - "bitflags", + "bitflags 1.3.2", "textwrap 0.11.0", "unicode-width", ] [[package]] name = "clap" -version = "3.2.23" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ "atty", - "bitflags", + "bitflags 1.3.2", "clap_lex", "indexmap", "strsim", @@ -202,22 +212,28 @@ dependencies = [ [[package]] name = "console" -version = "0.15.2" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c050367d967ced717c04b65d8c619d863ef9292ce0c5760028655a2fb298718c" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" dependencies = [ "encode_unicode", "lazy_static", "libc", - "terminal_size", - "winapi", + "unicode-width", + "windows-sys 0.45.0", ] +[[package]] +name = "const-oid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" + [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ "libc", ] @@ -260,9 +276,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -270,9 +286,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -281,9 +297,9 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.11" +version = "0.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f916dfc5d356b0ed9dae65f1db9fc9770aa2851d2662b988ccf4fe3516e86348" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" dependencies = [ "autocfg", "cfg-if", @@ -294,22 +310,32 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.12" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" dependencies = [ "cfg-if", ] +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core", + "typenum", +] + [[package]] name = "csv" -version = "1.1.6" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +checksum = "626ae34994d3d8d668f4269922248239db4ae42d538b14c398b74a52208e8086" dependencies = [ - "bstr", "csv-core", - "itoa 0.4.8", + "itoa", "ryu", "serde", ] @@ -325,53 +351,79 @@ dependencies = [ [[package]] name = "ctr" -version = "0.8.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ "cipher", ] [[package]] name = "curve25519-dalek" -version = "3.2.1" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" +checksum = "622178105f911d937a42cdb140730ba4a3ed2becd8ae6ce39c7d28b5d75d4588" dependencies = [ - "byteorder", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", "digest", - "rand_core", + "fiat-crypto", + "platforms", + "rustc_version", "subtle", "zeroize", ] +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.36", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + [[package]] name = "digest" -version = "0.9.0" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "generic-array", + "block-buffer", + "crypto-common", ] [[package]] name = "ed25519" -version = "1.5.2" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369" +checksum = "60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1d" dependencies = [ + "pkcs8", "signature", ] [[package]] name = "ed25519-dalek" -version = "1.0.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980" dependencies = [ "curve25519-dalek", "ed25519", - "rand", "serde", "sha2", "zeroize", @@ -379,9 +431,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "encode_unicode" @@ -391,22 +443,55 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "env_logger" -version = "0.7.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ - "atty", "humantime", + "is-terminal", "log", "regex", "termcolor", ] +[[package]] +name = "errno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -414,9 +499,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.16" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", @@ -425,9 +510,9 @@ dependencies = [ [[package]] name = "ghash" -version = "0.4.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ "opaque-debug", "polyval", @@ -445,6 +530,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -454,20 +545,23 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + [[package]] name = "humantime" -version = "1.3.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -dependencies = [ - "quick-error", -] +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "indexmap" -version = "1.9.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -475,14 +569,44 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.16.2" +version = "0.17.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b" +checksum = "0b297dc40733f23a0e52728a58fa9489a5b7638a324932de16b41adc3ef80730" dependencies = [ "console", - "lazy_static", + "instant", "number_prefix", - "regex", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi 0.3.2", + "rustix", + "windows-sys 0.48.0", ] [[package]] @@ -496,21 +620,15 @@ dependencies = [ [[package]] name = "itoa" -version = "0.4.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "itoa" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" dependencies = [ "wasm-bindgen", ] @@ -523,15 +641,21 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.137" +version = "0.2.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" +checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" + +[[package]] +name = "linux-raw-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ "autocfg", "scopeguard", @@ -539,53 +663,50 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "lz4_flex" -version = "0.9.5" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a8cbbb2831780bc3b9c15a41f5b49222ef756b6730a95f3decfdd15903eb5a3" +checksum = "3ea9b256699eda7b0387ffbc776dd625e28bde3918446381781245b7a50349d8" dependencies = [ "twox-hash", ] [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memoffset" -version = "0.6.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" dependencies = [ "autocfg", ] [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.14.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.2", "libc", ] @@ -597,9 +718,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "once_cell" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "oorandom" @@ -615,16 +736,18 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "os_str_bytes" -version = "6.4.0" +version = "6.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5bf27447411e9ee3ff51186bf7a08e16c341efdde93f4d823e8844429bed7e" +checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" [[package]] name = "papergrid" -version = "0.3.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63709d10e2c2ec58f7bd91d8258d27ce80de090064b0ddf3a4bf38b907b61b8a" +checksum = "a2ccbe15f2b6db62f9a9871642746427e297b0ceb85f9a7f1ee5ff47d184d0c8" dependencies = [ + "bytecount", + "fnv", "unicode-width", ] @@ -640,22 +763,38 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.4" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys", + "windows-targets 0.48.5", ] +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "platforms" +version = "3.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8" + [[package]] name = "plotters" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" dependencies = [ "num-traits", "plotters-backend", @@ -666,24 +805,24 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" [[package]] name = "plotters-svg" -version = "0.3.3" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" dependencies = [ "plotters-backend", ] [[package]] name = "polyval" -version = "0.5.3" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" +checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" dependencies = [ "cfg-if", "cpufeatures", @@ -691,6 +830,12 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "portable-atomic" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -699,56 +844,72 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "pretty_env_logger" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" +checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c" dependencies = [ "env_logger", "log", ] [[package]] -name = "proc-macro2" -version = "1.0.47" +name = "proc-macro-error" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ - "unicode-ident", + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", ] [[package]] -name = "quick-error" -version = "1.2.3" +name = "proc-macro2" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" +dependencies = [ + "unicode-ident", +] [[package]] name = "quote" -version = "1.0.21" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] [[package]] name = "rand" -version = "0.7.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "getrandom", "libc", "rand_chacha", "rand_core", - "rand_hc", ] [[package]] name = "rand_chacha" -version = "0.2.2" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", "rand_core", @@ -756,39 +917,28 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.5.1" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core", -] - [[package]] name = "rayon" -version = "1.5.3" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ - "autocfg", - "crossbeam-deque", "either", "rayon-core", ] [[package]] name = "rayon-core" -version = "1.9.3" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -798,41 +948,69 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "regex" -version = "1.7.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", + "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "d7db8590df6dfcd144d22afd1b83b36c21a18d7cbc1dc4bb5295a8712e9eb662" +dependencies = [ + "bitflags 2.4.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -845,15 +1023,24 @@ dependencies = [ [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" [[package]] name = "serde" -version = "1.0.147" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +dependencies = [ + "serde_derive", +] [[package]] name = "serde_cbor" @@ -867,56 +1054,64 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.147" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.36", ] [[package]] name = "serde_json" -version = "1.0.87" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" dependencies = [ - "itoa 1.0.4", + "itoa", "ryu", "serde", ] [[package]] name = "sha2" -version = "0.9.9" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ - "block-buffer", "cfg-if", "cpufeatures", "digest", - "opaque-debug", ] [[package]] name = "signature" -version = "1.6.4" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "snap" -version = "1.0.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" + +[[package]] +name = "spki" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +dependencies = [ + "base64ct", + "der", +] [[package]] name = "static_assertions" @@ -932,15 +1127,15 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" -version = "1.0.103" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -948,36 +1143,38 @@ dependencies = [ ] [[package]] -name = "synstructure" -version = "0.12.6" +name = "syn" +version = "2.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "91e02e55d62894af2a08aca894c6577281f76769ba47c94d5756bec8ac6e7373" dependencies = [ "proc-macro2", "quote", - "syn", - "unicode-xid", + "unicode-ident", ] [[package]] name = "tabled" -version = "0.6.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d15827061abcf689257b1841c8e2732b1dfcc3ef825b24ce6c606e1e9e1a7bde" +checksum = "dfe9c3632da101aba5131ed63f9eed38665f8b3c68703a6bb18124835c1a5d22" dependencies = [ "papergrid", "tabled_derive", + "unicode-width", ] [[package]] name = "tabled_derive" -version = "0.3.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "278ea3921cee8c5a69e0542998a089f7a14fa43c9c4e4f9951295da89bd0c943" +checksum = "99f688a08b54f4f02f0a3c382aefdb7884d3d69609f785bd253dc033243e3fe4" dependencies = [ + "heck", + "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -992,23 +1189,13 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] -[[package]] -name = "terminal_size" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "textwrap" version = "0.11.0" @@ -1026,22 +1213,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.36", ] [[package]] @@ -1066,15 +1253,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.15.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.5" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-width" @@ -1082,25 +1269,19 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - [[package]] name = "universal-hash" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "generic-array", + "crypto-common", "subtle", ] [[package]] name = "vach" -version = "0.4.5" +version = "0.5.0" dependencies = [ "aes-gcm", "brotli", @@ -1123,10 +1304,10 @@ dependencies = [ [[package]] name = "vach-cli" -version = "0.4.1" +version = "0.5.0" dependencies = [ "anyhow", - "clap 3.2.23", + "clap 3.2.25", "indicatif", "log", "pretty_env_logger", @@ -1144,26 +1325,25 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", - "winapi", "winapi-util", ] [[package]] name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.83" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1171,24 +1351,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.83" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.36", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.83" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1196,28 +1376,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.83" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.36", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.83" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ "js-sys", "wasm-bindgen", @@ -1256,78 +1436,138 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows-targets 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] -name = "zeroize" -version = "1.3.0" +name = "windows_x86_64_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" -dependencies = [ - "zeroize_derive", -] +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] -name = "zeroize_derive" -version = "1.3.2" +name = "zeroize" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" diff --git a/vach-benchmarks/benches/main.rs b/vach-benchmarks/benches/main.rs index 1107da10..64d8ae14 100644 --- a/vach-benchmarks/benches/main.rs +++ b/vach-benchmarks/benches/main.rs @@ -31,7 +31,7 @@ impl io::Write for Sink { pub fn criterion_benchmark(c: &mut Criterion) { const MAGIC: &[u8; 5] = b"BNCMK"; - let keypair_bytes = &gen_keypair().to_bytes() as &[u8]; + let keypair_bytes = &gen_keypair().to_keypair_bytes() as &[u8]; let mut b_config = BuilderConfig::default().magic(*MAGIC); b_config.load_keypair(keypair_bytes).unwrap(); diff --git a/vach-cli/Cargo.toml b/vach-cli/Cargo.toml index bc100aaa..e85e4f13 100644 --- a/vach-cli/Cargo.toml +++ b/vach-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vach-cli" -version = "0.4.1" +version = "0.5.0" edition = "2021" authors = [ "Jasper Fortuin ", @@ -19,13 +19,13 @@ name = "vach" path = "src/main.rs" [dependencies] -indicatif = "0.16.2" +indicatif = "0.17.6" clap = "3.1.15" anyhow = "1.0.57" -tabled = "0.6.1" +tabled = "0.14.0" log = "0.4.17" walkdir = "2.3.2" -pretty_env_logger = "0.4.0" +pretty_env_logger = "0.5.0" term_size = "0.3.2" [dependencies.vach] diff --git a/vach-cli/src/commands/keypair.rs b/vach-cli/src/commands/keypair.rs index 96e3b5e8..62de29b4 100644 --- a/vach-cli/src/commands/keypair.rs +++ b/vach-cli/src/commands/keypair.rs @@ -6,7 +6,7 @@ use crate::keys::key_names; use super::CommandTrait; // Default keypair write destination -const KEYPAIR_FILE_NAME: &str = "keypair.kp"; +const DEFAULT_KEYPAIR_FILE_NAME: &str = "keypair.kp"; pub const VERSION: &str = "0.0.1"; /// This command is used to generate keypair @@ -16,13 +16,11 @@ impl CommandTrait for Evaluator { fn evaluate(&self, args: &clap::ArgMatches) -> anyhow::Result<()> { let mut output_path = match args.value_of(key_names::OUTPUT) { Some(path) => path.to_string(), - None => KEYPAIR_FILE_NAME.to_string(), + None => DEFAULT_KEYPAIR_FILE_NAME.to_string(), }; - let to_split = args.is_present(key_names::SPLIT_KEY); let kp = gen_keypair(); - - if to_split { + if args.is_present(key_names::SPLIT_KEY) { output_path = output_path.trim_end_matches(".kp").to_string(); let mut sk_path = output_path.clone(); @@ -31,13 +29,13 @@ impl CommandTrait for Evaluator { let mut pk_path = output_path; pk_path.push_str(".pk"); - utils::create_and_write_to_file(&sk_path, &kp.secret.to_bytes())?; + utils::create_and_write_to_file(&sk_path, &kp.to_bytes())?; log::info!("Secret Key successfully generated and saved in: {}", sk_path); - utils::create_and_write_to_file(&pk_path, &kp.public.to_bytes())?; + utils::create_and_write_to_file(&pk_path, &kp.verifying_key().to_bytes())?; log::info!("Public Key successfully generated and saved in: {}", pk_path); } else { - utils::create_and_write_to_file(&output_path, &kp.to_bytes())?; + utils::create_and_write_to_file(&output_path, &kp.to_keypair_bytes())?; log::info!("KeyPair successfully generated and saved in: {}", output_path); } diff --git a/vach-cli/src/commands/list.rs b/vach-cli/src/commands/list.rs index e89bb09c..6be3810f 100644 --- a/vach-cli/src/commands/list.rs +++ b/vach-cli/src/commands/list.rs @@ -1,6 +1,9 @@ use std::fs::File; -use tabled::{Style, Table, Tabled, Modify, Full, MaxWidth, Alignment, Columns}; +use tabled::{ + Table, Tabled, + settings::{*, object::Columns}, +}; use vach::{ prelude::{ArchiveConfig, Archive, Flags}, archive::{CompressionAlgorithm, RegistryEntry}, @@ -97,14 +100,10 @@ impl CommandTrait for Evaluator { }) .collect(); - let mut table = Table::new(table_entries) - .with(Style::modern().horizontal_off()) - .with(Modify::new(Columns::new(..1)).with(Alignment::left())); - - // Make sure table fills terminal - if let Some((term_width, _)) = term_size::dimensions() { - table = table.with(Modify::new(Full).with(MaxWidth::truncating(term_width - 50).suffix("..."))); - }; + let mut table = Table::new(table_entries); + table + .with(Style::rounded()) + .with(Modify::list(Columns::new(..1), Alignment::left())); println!("{}", table); } diff --git a/vach-cli/src/commands/pack.rs b/vach-cli/src/commands/pack.rs index b0321eb4..76bb0a2b 100644 --- a/vach-cli/src/commands/pack.rs +++ b/vach-cli/src/commands/pack.rs @@ -163,7 +163,7 @@ impl CommandTrait for Evaluator { let secret_key = match args.value_of(key_names::KEYPAIR) { Some(path) => { let file = File::open(path)?; - Some(crypto_utils::read_keypair(file)?.secret) + Some(crypto_utils::read_secret_key(file)?) }, None => match args.value_of(key_names::SECRET_KEY) { Some(path) => { @@ -175,20 +175,14 @@ impl CommandTrait for Evaluator { }; // Generate a keypair from the secret key - let mut kp = match secret_key { - Some(sk) => { - let pk = PublicKey::from(&sk); - Some(Keypair { secret: sk, public: pk }) - }, - None => None, - }; + let mut kp = secret_key.map(|sk| SigningKey::from(sk)); // If encrypt is true, and no keypair was found: Generate and write a new keypair to a file if (encrypt || hash) && kp.is_none() { let generated = crypto_utils::gen_keypair(); let mut file = File::create("keypair.kp")?; - file.write_all(&generated.to_bytes())?; + file.write_all(&generated.to_keypair_bytes())?; log::info!("Generated a new keypair @ keypair.kp"); kp = Some(generated); @@ -197,20 +191,15 @@ impl CommandTrait for Evaluator { let pbar = ProgressBar::new(inputs.len() as u64 + 5 + if truncate { 3 } else { 0 }); pbar.set_style( ProgressStyle::default_bar() - .template(super::PROGRESS_BAR_STYLE) + .template(super::PROGRESS_BAR_STYLE)? .progress_chars("█░-") - .tick_strings(&[ - "⢀ ", "⡀ ", "⠄ ", "⢂ ", "⡂ ", "⠅ ", "⢃ ", "⡃ ", "⠍ ", "⢋ ", "⡋ ", "⠍⠁", "⢋⠁", "⡋⠁", "⠍⠉", "⠋⠉", - "⠋⠉", "⠉⠙", "⠉⠙", "⠉⠩", "⠈⢙", "⠈⡙", "⢈⠩", "⡀⢙", "⠄⡙", "⢂⠩", "⡂⢘", "⠅⡘", "⢃⠨", "⡃⢐", "⠍⡐", "⢋⠠", - "⡋⢀", "⠍⡁", "⢋⠁", "⡋⠁", "⠍⠉", "⠋⠉", "⠋⠉", "⠉⠙", "⠉⠙", "⠉⠩", "⠈⢙", "⠈⡙", "⠈⠩", " ⢙", " ⡙", " ⠩", - " ⢘", " ⡘", " ⠨", " ⢐", " ⡐", " ⠠", " ⢀", " ⡀", - ]), + .tick_chars("⢀ ⡀ ⠄ ⢂ ⡂ ⠅ ⢃ ⡃ ⠍ ⢋ ⡋ ⠍⠁⢋⠁⡋⠁⠍⠉⠋⠉⠋⠉⠉⠙⠉⠙⠉⠩⠈⢙⠈⡙⢈⠩⡀⢙⠄⡙⢂⠩⡂⢘⠅⡘⢃⠨⡃⢐⠍⡐⢋⠠⡋⢀⠍⡁⢋⠁⡋⠁⠍⠉⠋⠉⠋⠉⠉⠙⠉⠙⠉⠩⠈⢙⠈⡙⠈⠩ ⢙ ⡙ ⠩ ⢘ ⡘ ⠨ ⢐ ⡐ ⠠ ⢀ ⡀"), ); // Since it wraps it's internal state in an arc, we can safely clone and send across threads let callback = |leaf: &Leaf, _: &RegistryEntry| { pbar.inc(1); - pbar.set_message(leaf.id.to_string()) + pbar.set_message(leaf.id.clone()) }; // Build a builder-config using the above extracted data diff --git a/vach-cli/src/commands/split.rs b/vach-cli/src/commands/split.rs index a8062d49..44f9cf5a 100644 --- a/vach-cli/src/commands/split.rs +++ b/vach-cli/src/commands/split.rs @@ -32,8 +32,8 @@ impl CommandTrait for Evaluator { pk_path.push_str(".pk"); // Write key parts - utils::create_and_write_to_file(&pk_path, &kp.public.to_bytes())?; - utils::create_and_write_to_file(&sk_path, &kp.secret.to_bytes())?; + utils::create_and_write_to_file(&pk_path, &kp.verifying_key().to_bytes())?; + utils::create_and_write_to_file(&sk_path, &kp.to_bytes())?; log::info!( "Successfully split keypair: {} -> into {} and {}", diff --git a/vach-cli/src/commands/unpack.rs b/vach-cli/src/commands/unpack.rs index 483b0958..e4953840 100644 --- a/vach-cli/src/commands/unpack.rs +++ b/vach-cli/src/commands/unpack.rs @@ -46,7 +46,7 @@ impl CommandTrait for Evaluator { Err(err) => anyhow::bail!("IOError: {} @ {}", err, path), }; - Some(crypto_utils::read_keypair(file)?.public) + Some(crypto_utils::read_keypair(file)?.verifying_key()) }, None => match args.value_of(key_names::PUBLIC_KEY) { Some(path) => { @@ -109,29 +109,19 @@ fn extract_archive(archive: &Archive, target_fo // NOTE: More styling is to come pbar.set_style( ProgressStyle::default_bar() - .template(super::PROGRESS_BAR_STYLE) + .template(super::PROGRESS_BAR_STYLE)? .progress_chars("█░-") - .tick_strings(&[ - "⢀ ", "⡀ ", "⠄ ", "⢂ ", "⡂ ", "⠅ ", "⢃ ", "⡃ ", "⠍ ", "⢋ ", "⡋ ", "⠍⠁", "⢋⠁", "⡋⠁", "⠍⠉", "⠋⠉", "⠋⠉", - "⠉⠙", "⠉⠙", "⠉⠩", "⠈⢙", "⠈⡙", "⢈⠩", "⡀⢙", "⠄⡙", "⢂⠩", "⡂⢘", "⠅⡘", "⢃⠨", "⡃⢐", "⠍⡐", "⢋⠠", "⡋⢀", "⠍⡁", - "⢋⠁", "⡋⠁", "⠍⠉", "⠋⠉", "⠋⠉", "⠉⠙", "⠉⠙", "⠉⠩", "⠈⢙", "⠈⡙", "⠈⠩", " ⢙", " ⡙", " ⠩", " ⢘", " ⡘", " ⠨", - " ⢐", " ⡐", " ⠠", " ⢀", " ⡀", - ]), + .tick_chars("⢀ ⡀ ⠄ ⢂ ⡂ ⠅ ⢃ ⡃ ⠍ ⢋ ⡋ ⠍⠁⢋⠁⡋⠁⠍⠉⠋⠉⠋⠉⠉⠙⠉⠙⠉⠩⠈⢙⠈⡙⢈⠩⡀⢙⠄⡙⢂⠩⡂⢘⠅⡘⢃⠨⡃⢐⠍⡐⢋⠠⡋⢀⠍⡁⢋⠁⡋⠁⠍⠉⠋⠉⠋⠉⠉⠙⠉⠙⠉⠩⠈⢙⠈⡙⠈⠩ ⢙ ⡙ ⠩ ⢘ ⡘ ⠨ ⢐ ⡐ ⠠ ⢀ ⡀"), ); - // Vector to allow us to window later via .as_slice() - let entry_vec = archive.entries().iter().map(|a| (a.0, a.1.offset)).collect::>(); - // ignore the unprofessional match clause - if let Err(err) = entry_vec.as_slice().par_iter().try_for_each(|(id, offset)| { - let msg = id.to_string(); - + if let Err(err) = archive.entries().par_iter().try_for_each(|(id, entry)| { // Set's the Progress Bar message - pbar.set_message(msg); + pbar.set_message(id.to_string()); // Process filesystem let mut save_path = target_folder.clone(); - save_path.push(&id); + save_path.push(id); if let Some(parent_dir) = save_path.ancestors().nth(1) { fs::create_dir_all(parent_dir)?; @@ -143,7 +133,7 @@ fn extract_archive(archive: &Archive, target_fo file.write_all(&resource.data)?; // Increment Progress Bar - pbar.inc(*offset); + pbar.inc(entry.offset); Ok(()) }) { return Err(err); diff --git a/vach-cli/test_data/test.sh b/vach-cli/test_data/test.sh index 4a92b200..d7a3934e 100755 --- a/vach-cli/test_data/test.sh +++ b/vach-cli/test_data/test.sh @@ -1,5 +1,7 @@ #! /usr/bin/sh +set -xe + # # Variables EXCLUDE=test.sh ARTIFACTS="keypair.sk keypair.pk keypair.kp signed.vach custom.vach encrypted.vach" @@ -18,7 +20,7 @@ cargo check -q cargo build -q --release # # Create simple archive with simple input, no compression only signatures -$VACH pack -o signed.vach -r ./ -c detect -g brotli -a -x $EXCLUDE +$VACH pack --output signed.vach --directory-r ./ --compress-mode detect --compress-algo brotli --hash --exclude $EXCLUDE # # Split the resulting keypair $VACH split -i keypair.kp diff --git a/vach/Cargo.toml b/vach/Cargo.toml index b8bf788f..0e8ab73f 100644 --- a/vach/Cargo.toml +++ b/vach/Cargo.toml @@ -2,7 +2,7 @@ name = "vach" # NOTE: Make sure spec.txt and vach::VERSION constants are all synced up -version = "0.4.5" +version = "0.5.0" edition = "2021" authors = [ @@ -22,15 +22,14 @@ include = ["Cargo.toml", "Cargo.lock", "src/*"] thiserror = "1.0.31" # Authentication dependencies -ed25519-dalek = { version = "1.0.1", optional = true } -rand = { version = "0.7.0", optional = true } +ed25519-dalek = { version = "2.0.0", optional = true } +rand = { version = "0.8.5", optional = true } # Encryption dependencies -aes-gcm = { version = "0.9.4", features = ["aes"], optional = true } +aes-gcm = { version = "0.10.2", features = ["aes"], optional = true } # Compression dependencies -lz4_flex = { version = "0.9.2", optional = true, default-features = false, features = [ - "checked-decode", +lz4_flex = { version = "0.11.1", optional = true, default-features = false, features = [ "frame", ] } snap = { version = "1.0.5", optional = true } diff --git a/vach/src/crypto.rs b/vach/src/crypto.rs index 72d852e2..31a16246 100644 --- a/vach/src/crypto.rs +++ b/vach/src/crypto.rs @@ -2,11 +2,11 @@ #![cfg_attr(docsrs, doc(cfg(feature = "crypto")))] use std::fmt; -use aes_gcm::aead::{Aead, NewAead}; +use aes_gcm::aead::Aead; use aes_gcm::aes::cipher::consts::U12; -use aes_gcm::{Aes256Gcm, Key, Nonce}; +use aes_gcm::{Aes256Gcm, Nonce, KeyInit}; -pub use ed25519_dalek::{Keypair, PublicKey, SecretKey, Signature}; +pub use ed25519_dalek::{SigningKey, VerifyingKey, SecretKey, Signature}; use crate::prelude::{InternalResult, InternalError}; @@ -23,27 +23,30 @@ impl fmt::Debug for Encryptor { } impl Encryptor { - pub(crate) fn new(pk: &PublicKey, magic: [u8; crate::MAGIC_LENGTH]) -> Encryptor { + pub(crate) fn new(vk: &VerifyingKey, magic: [u8; crate::MAGIC_LENGTH]) -> Encryptor { // Build encryption key - let bytes = &pk.to_bytes(); + let bytes = &vk.to_bytes(); // Build Nonce - let key = Key::from_slice(bytes); let mut v = [178, 5, 239, 228, 165, 44, 169, 0, 0, 0, 0, 0]; (&mut v[7..12]).copy_from_slice(&magic); Encryptor { - cipher: Aes256Gcm::new(key), + cipher: Aes256Gcm::new_from_slice(bytes).unwrap(), nonce: *Nonce::from_slice(v.as_slice()), } } // The meat and the mass of this struct pub(crate) fn encrypt(&self, data: &[u8]) -> InternalResult> { - self.cipher.encrypt(&self.nonce, data).map_err(InternalError::CryptoError) + self.cipher + .encrypt(&self.nonce, data) + .map_err(InternalError::CryptoError) } pub(crate) fn decrypt(&self, data: &[u8]) -> InternalResult> { - self.cipher.decrypt(&self.nonce, data).map_err(InternalError::CryptoError) + self.cipher + .decrypt(&self.nonce, data) + .map_err(InternalError::CryptoError) } } diff --git a/vach/src/crypto_utils/mod.rs b/vach/src/crypto_utils/mod.rs index 5bf49063..94bfb668 100644 --- a/vach/src/crypto_utils/mod.rs +++ b/vach/src/crypto_utils/mod.rs @@ -7,30 +7,30 @@ use { crypto, global::{error::InternalError, result::InternalResult}, }, - std::{io::Read}, + std::io::Read, }; +use rand::RngCore; + // A favour #[cfg(feature = "compression")] pub use super::global::compressor::Compressor; /// Use this function to easily generate a [Keypair](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/struct.Keypair.html) using `OsRng` #[inline(always)] -pub fn gen_keypair() -> crypto::Keypair { - crypto::Keypair::generate(&mut OsRng) +pub fn gen_keypair() -> crypto::SigningKey { + let mut bytes = [0u8; 32]; + (&mut OsRng).fill_bytes(&mut bytes); + crypto::SigningKey::from_bytes(&bytes) } /// Use this to read and parse a `Keypair` from a read stream /// ### Errors /// - If the data can't be parsed into a keypair -pub fn read_keypair(mut handle: R) -> InternalResult { - let mut keypair_bytes = [0; crate::KEYPAIR_LENGTH]; +pub fn read_keypair(mut handle: R) -> InternalResult { + let mut keypair_bytes = [0; crate::SECRET_KEY_LENGTH + crate::PUBLIC_KEY_LENGTH]; handle.read_exact(&mut keypair_bytes)?; - - Ok(match crypto::Keypair::from_bytes(&keypair_bytes) { - Ok(kep) => kep, - Err(err) => return Err(InternalError::ParseError(err.to_string())), - }) + crypto::SigningKey::from_keypair_bytes(&keypair_bytes).map_err(|err| InternalError::ParseError(err.to_string())) } /// Read and parse a public key from a read stream @@ -38,28 +38,18 @@ pub fn read_keypair(mut handle: R) -> InternalResult { /// ### Errors /// - If parsing of the public key fails /// - `io` errors -pub fn read_public_key(mut handle: T) -> InternalResult { +pub fn read_public_key(mut handle: T) -> InternalResult { let mut keypair_bytes = [0; crate::PUBLIC_KEY_LENGTH]; - handle.read_exact(&mut keypair_bytes)?; - - match crypto::PublicKey::from_bytes(&keypair_bytes) { - Ok(pk) => Ok(pk), - Err(err) => Err(InternalError::ParseError(err.to_string())), - } + crypto::VerifyingKey::from_bytes(&keypair_bytes).map_err(|err| InternalError::ParseError(err.to_string())) } /// Read and parse a secret key from a read stream /// /// ### Errors /// - If parsing of the secret key fails /// - `io` errors -pub fn read_secret_key(mut handle: T) -> InternalResult { +pub fn read_secret_key(mut handle: T) -> InternalResult { let mut secret_bytes = [0; crate::SECRET_KEY_LENGTH]; - handle.read_exact(&mut secret_bytes)?; - - match crypto::SecretKey::from_bytes(&secret_bytes) { - Ok(sk) => Ok(sk), - Err(err) => Err(InternalError::ParseError(err.to_string())), - } + Ok(crypto::SigningKey::from_bytes(&secret_bytes)) } diff --git a/vach/src/global/error.rs b/vach/src/global/error.rs index aa9d336c..90270082 100644 --- a/vach/src/global/error.rs +++ b/vach/src/global/error.rs @@ -48,5 +48,5 @@ pub enum InternalError { /// Errors thrown during compression or decompression #[error("[VachError::CompressorDecompressorError]: {0}")] #[cfg(feature = "compression")] - DeCompressionError(#[from] lz4_flex::frame::Error), + DeCompressionError(#[from] lz4_flex::frame::Error) } diff --git a/vach/src/global/header.rs b/vach/src/global/header.rs index 88b3d830..c8973ca1 100644 --- a/vach/src/global/header.rs +++ b/vach/src/global/header.rs @@ -15,7 +15,7 @@ pub struct ArchiveConfig { /// archive source has signatures. #[cfg(feature = "crypto")] #[cfg_attr(docsrs, doc(cfg(feature = "crypto")))] - pub public_key: Option, + pub public_key: Option, } impl ArchiveConfig { @@ -27,7 +27,7 @@ impl ArchiveConfig { #[inline(always)] #[cfg(feature = "crypto")] #[cfg_attr(docsrs, doc(cfg(feature = "crypto")))] - pub const fn new(magic: [u8; crate::MAGIC_LENGTH], key: Option) -> ArchiveConfig { + pub const fn new(magic: [u8; crate::MAGIC_LENGTH], key: Option) -> ArchiveConfig { ArchiveConfig { magic, public_key: key } } @@ -45,7 +45,9 @@ impl ArchiveConfig { /// ``` /// use vach::{crypto_utils::gen_keypair, prelude::ArchiveConfig}; /// let mut config = ArchiveConfig::default(); - /// let keypair_bytes = gen_keypair().to_bytes(); + /// let keypair_bytes = gen_keypair().to_keypair_bytes(); + /// // let keypair_bytes = gen_keypair().verifying_key().to_bytes(); + /// // config.load_public_key(&keypair_bytes).unwrap(); /// config.load_public_key(&keypair_bytes[32..]).unwrap(); /// ``` /// @@ -65,8 +67,8 @@ impl ArchiveConfig { /// Shorthand to load a PublicKey into the [ArchiveConfig] #[cfg(feature = "crypto")] #[cfg_attr(docsrs, doc(cfg(feature = "crypto")))] - pub fn key(mut self, public_key: crypto::PublicKey) -> ArchiveConfig { - self.public_key = Some(public_key); + pub fn key(mut self, verifying_key: crypto::VerifyingKey) -> ArchiveConfig { + self.public_key = Some(verifying_key); self } diff --git a/vach/src/lib.rs b/vach/src/lib.rs index 2b05b3c6..212d7834 100644 --- a/vach/src/lib.rs +++ b/vach/src/lib.rs @@ -110,27 +110,7 @@ assert!(resource.authenticated); ##### > Serialize and de-serialize a `Keypair`, `SecretKey` and `PublicKey` -As `Keypair`, `SecretKey` and `PublicKey` are reflected from [ed25519_dalek](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/), you could refer to their docs to read further about them. These are needed for any cryptography related procedures, - -```ignore -use vach::prelude::{Keypair, SecretKey, PublicKey}; -use vach::crypto_utils::gen_keypair; - -// Generate keys -let keypair : Keypair = gen_keypair(); -let secret : SecretKey = keypair.secret; -let public : PublicKey = keypair.public; - -// Serialize -let public_key_bytes : [u8; vach::PUBLIC_KEY_LENGTH] = public.to_bytes(); -let secret_key_bytes : [u8; vach::SECRET_KEY_LENGTH] = secret.to_bytes(); -let keypair_bytes : [u8; vach::KEYPAIR_LENGTH] = keypair.to_bytes(); - -// Deserialize -let public_key : PublicKey = PublicKey::from_bytes(&public_key_bytes).unwrap(); -let secret_key : SecretKey = SecretKey::from_bytes(&secret_key_bytes).unwrap(); -let keypair : Keypair = Keypair::from_bytes(&keypair_bytes).unwrap(); -``` +As `SigningKey`, `SecretKey` and `VerifyingKey` are reflected from [ed25519_dalek](https://docs.rs/ed25519-dalek/latest/ed25519_dalek/), you could refer to their docs to read further about them. These are needed for any cryptography related procedures, */ /// All tests are included in this module. @@ -158,9 +138,6 @@ pub use rayon; /// Current [`vach`](crate) spec version. increments by ten with every spec change pub const VERSION: u16 = 30; -/// Size of a keypair: (secret + public) -pub const KEYPAIR_LENGTH: usize = 64; - /// Size of a secret key pub const SECRET_KEY_LENGTH: usize = 32; diff --git a/vach/src/loader/archive.rs b/vach/src/loader/archive.rs index ccba7baa..104f1929 100644 --- a/vach/src/loader/archive.rs +++ b/vach/src/loader/archive.rs @@ -5,14 +5,12 @@ use std::{ }; use super::resource::Resource; -use crate::{ - global::{ - error::InternalError, - flags::Flags, - header::{Header, ArchiveConfig}, - reg_entry::RegistryEntry, - result::InternalResult, - }, +use crate::global::{ + error::InternalError, + flags::Flags, + header::{Header, ArchiveConfig}, + reg_entry::RegistryEntry, + result::InternalResult, }; use parking_lot::Mutex; @@ -43,15 +41,15 @@ pub struct Archive { #[cfg(feature = "crypto")] decryptor: Option, #[cfg(feature = "crypto")] - key: Option, + key: Option, } impl std::fmt::Display for Archive { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let bytes = self .entries - .iter() - .map(|(_, entry)| entry.offset) + .values() + .map(|re| re.offset) .reduce(|a, b| a + b) .unwrap_or(0); @@ -280,7 +278,7 @@ where Ok(Resource { content_version: entry.content_version, flags: entry.flags, - data: buffer, + data: buffer.into_boxed_slice(), authenticated: is_secure, }) } else { @@ -305,7 +303,7 @@ where Ok(Resource { content_version: entry.content_version, flags: entry.flags, - data: buffer, + data: buffer.into_boxed_slice(), authenticated: is_secure, }) } else { diff --git a/vach/src/loader/resource.rs b/vach/src/loader/resource.rs index fc241ec0..adfa8d2f 100644 --- a/vach/src/loader/resource.rs +++ b/vach/src/loader/resource.rs @@ -8,7 +8,7 @@ use crate::global::flags::Flags; #[derive(Debug)] pub struct Resource { /// The processed data, stored as a vector of bytes `Vec`. - pub data: Vec, + pub data: Box<[u8]>, /// The flags extracted from the archive's registry entry pub flags: Flags, /// The content version of the extracted archive entry diff --git a/vach/src/tests/mod.rs b/vach/src/tests/mod.rs index af54343d..f24460e0 100644 --- a/vach/src/tests/mod.rs +++ b/vach/src/tests/mod.rs @@ -7,7 +7,7 @@ use crate::prelude::*; // Contains both the public key and secret key in the same file: // secret -> [u8; crate::SECRET_KEY_LENGTH], public -> [u8; crate::PUBLIC_KEY_LENGTH] -const KEYPAIR: &[u8; crate::KEYPAIR_LENGTH] = include_bytes!("../../test_data/pair.pub"); +const KEYPAIR: &[u8; crate::SECRET_KEY_LENGTH + crate::PUBLIC_KEY_LENGTH] = include_bytes!("../../test_data/pair.pub"); // The paths to the Archives, to be written|loaded const SIGNED_TARGET: &str = "test_data/signed/target.vach"; @@ -25,6 +25,9 @@ const CUSTOM_FLAG_4: u32 = 0b0000_0000_0000_0000_0000_0000_0001_0000; fn custom_bitflags() -> InternalResult { let target = File::open(SIMPLE_TARGET)?; let archive = Archive::new(target)?; + + dbg!(archive.entries()); + let entry = archive.fetch_entry("poem").unwrap(); let flags = entry.flags; @@ -110,25 +113,14 @@ fn builder_no_signature() -> InternalResult { fn simple_fetch() -> InternalResult { let target = File::open(SIMPLE_TARGET)?; let mut archive = Archive::new(target)?; - let resource = archive.fetch_mut("poem")?; - - // Windows bullshit - #[cfg(target_os = "windows")] - { - assert_eq!(resource.data.len(), 359); - } - #[cfg(not(any(target_os = "windows", target_os = "ios")))] - { - assert_eq!(resource.data.len(), 345); - } + let resource = archive.fetch_mut("wasm")?; + assert_eq!(resource.data.len(), 106537); assert!(!resource.authenticated); - assert!(resource.flags.contains(Flags::COMPRESSED_FLAG)); - - println!("{}", String::from_utf8(resource.data).unwrap()); + assert!(!resource.flags.contains(Flags::COMPRESSED_FLAG)); let hello = archive.fetch_mut("greeting")?; - assert_eq!("Hello, Cassandra!", String::from_utf8(hello.data).unwrap()); + assert_eq!("Hello, Cassandra!", str::from_utf8(&hello.data).unwrap()); assert!(!hello.flags.contains(Flags::COMPRESSED_FLAG)); Ok(()) @@ -172,7 +164,7 @@ fn fetch_with_signature() -> InternalResult { let mut archive = Archive::with_config(target, &config)?; let resource = archive.fetch_mut("test_data/song.txt")?; - let song = str::from_utf8(resource.data.as_slice()).unwrap(); + let song = str::from_utf8(&resource.data).unwrap(); // The adjacent resource was flagged to not be signed let not_signed_resource = archive.fetch_mut("not_signed")?; @@ -208,9 +200,9 @@ fn fetch_with_signature() -> InternalResult { fn edcryptor_test() -> InternalResult { use crate::crypto_utils::gen_keypair; - let pk = gen_keypair().public; + let vk = gen_keypair().verifying_key(); - let crypt = Encryptor::new(&pk, crate::DEFAULT_MAGIC.clone()); + let crypt = Encryptor::new(&vk, crate::DEFAULT_MAGIC.clone()); let data = vec![12, 12, 12, 12]; let ciphertext = crypt.encrypt(&data)?; @@ -259,19 +251,9 @@ fn fetch_from_encrypted() -> InternalResult { config.load_public_key(public_key)?; let mut archive = Archive::with_config(target, &config)?; - let resource = archive.fetch_mut("test_data/song.txt")?; - let song = str::from_utf8(resource.data.as_slice()).unwrap(); - - // Windows bullshit - #[cfg(target_os = "windows")] - { - assert_eq!(song.len(), 2041); - } - #[cfg(not(any(target_os = "windows", target_os = "ios")))] - { - assert_eq!(song.len(), 1977); - } + let resource = archive.fetch_mut("test_data/quicksort.wasm")?; + assert_eq!(resource.data.len(), 106537); assert!(resource.authenticated); assert!(!resource.flags.contains(Flags::COMPRESSED_FLAG)); assert!(resource.flags.contains(Flags::ENCRYPTED_FLAG)); @@ -294,7 +276,7 @@ fn consolidated_example() -> InternalResult { let data_3 = b"Fast-Acting Long-Lasting, *Bathroom Reader*" as &[u8]; // Builder definition - let keypair_bytes = gen_keypair().to_bytes(); + let keypair_bytes = gen_keypair().to_keypair_bytes(); let config = BuilderConfig::default() .magic(*MAGIC) .keypair(read_keypair(&keypair_bytes as &[u8])?); @@ -324,9 +306,9 @@ fn consolidated_example() -> InternalResult { // Quick assertions let then = Instant::now(); - assert_eq!(archive.fetch_mut("d1")?.data.as_slice(), data_1); - assert_eq!(archive.fetch_mut("d2")?.data.as_slice(), data_2); - assert_eq!(archive.fetch_mut("d3")?.data.as_slice(), data_3); + assert_eq!(archive.fetch_mut("d1")?.data.as_ref(), data_1); + assert_eq!(archive.fetch_mut("d2")?.data.as_ref(), data_2); + assert_eq!(archive.fetch_mut("d3")?.data.as_ref(), data_3); println!("Fetching took: {}us on average", then.elapsed().as_micros() / 4u128); @@ -444,7 +426,7 @@ fn test_batch_fetching() -> InternalResult { }; for (_, res) in resources { - assert_eq!(res?.data.as_slice(), &INPUT[..]); + assert_eq!(res?.data.as_ref(), &INPUT[..]); } Ok(()) diff --git a/vach/src/writer/builder/config.rs b/vach/src/writer/builder/config.rs index e5e22428..19d19f83 100644 --- a/vach/src/writer/builder/config.rs +++ b/vach/src/writer/builder/config.rs @@ -18,7 +18,7 @@ pub struct BuilderConfig<'a> { /// An optional keypair. If a key is provided, then the write target will have signatures for tamper verification. #[cfg(feature = "crypto")] #[cfg_attr(docsrs, doc(cfg(feature = "crypto")))] - pub keypair: Option, + pub keypair: Option, /// An optional callback that is called every time a [Leaf](crate::builder::Leaf) finishes processing. /// The callback get passed to it: a reference to the leaf and the generated registry entry. Use the RegEntry to get info on how the data was integrated for the given [`Leaf`]. /// > **To avoid** the `implementation of "FnOnce" is not general enough` error consider adding types to the closure's parameters, as this is a type inference error. Rust somehow cannot infer enough information, [link](https://www.reddit.com/r/rust/comments/ntqu68/implementation_of_fnonce_is_not_general_enough/). @@ -28,11 +28,12 @@ pub struct BuilderConfig<'a> { /// /// let builder_config = BuilderConfig::default(); /// fn callback(leaf: &Leaf, reg_entry: &RegistryEntry) { - /// println!("Leaf: {leaf:?} has been processed into Entry: {reg_entry:?}") + /// println!("Leaf: {leaf:?} has been processed into Entry: {reg_entry:?}") /// } /// /// builder_config.callback(&callback); /// ``` + #[allow(clippy::type_complexity)] pub progress_callback: Option<&'a (dyn Fn(&Leaf, &RegistryEntry) + Send + Sync)>, } @@ -62,7 +63,7 @@ impl<'a> BuilderConfig<'a> { // Helper functions /// Setter for the `keypair` field #[cfg(feature = "crypto")] - pub fn keypair(mut self, keypair: crypto::Keypair) -> Self { + pub fn keypair(mut self, keypair: crypto::SigningKey) -> Self { self.keypair = Some(keypair); self } diff --git a/vach/src/writer/builder/mod.rs b/vach/src/writer/builder/mod.rs index f7434ac8..f86d99cf 100644 --- a/vach/src/writer/builder/mod.rs +++ b/vach/src/writer/builder/mod.rs @@ -182,7 +182,7 @@ impl<'a> Builder<'a> { #[cfg(feature = "crypto")] let encryptor = if use_encryption { if let Some(keypair) = config.keypair.as_ref() { - Some(Encryptor::new(&keypair.public, config.magic)) + Some(Encryptor::new(&keypair.verifying_key(), config.magic)) } else { return Err(InternalError::NoKeypairError); } diff --git a/vach/test_data/encrypted/target.vach b/vach/test_data/encrypted/target.vach index 0a2e3bc2..c11e4029 100644 Binary files a/vach/test_data/encrypted/target.vach and b/vach/test_data/encrypted/target.vach differ diff --git a/vach/test_data/signed/target.vach b/vach/test_data/signed/target.vach index e038b0bb..208aea51 100644 Binary files a/vach/test_data/signed/target.vach and b/vach/test_data/signed/target.vach differ diff --git a/vach/test_data/simple/target.vach b/vach/test_data/simple/target.vach index f2ebc73d..2214b3d1 100644 Binary files a/vach/test_data/simple/target.vach and b/vach/test_data/simple/target.vach differ