From cc5178d1c135954f2b918cc01e6a5ba29d67ec0d Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Mon, 13 Jan 2025 00:37:48 +0800 Subject: [PATCH] feat: v1.8.4, load config from multipl locations --- Cargo.lock | 280 ++++++++++++++---------------- Cargo.toml | 2 +- src/cmd_config.rs | 3 +- src/cmd_decrypt.rs | 4 +- src/cmd_encrypt.rs | 9 +- src/cmd_execenv.rs | 3 +- src/cmd_info.rs | 4 +- src/cmd_simple_encrypt_decrypt.rs | 5 +- src/config.rs | 109 +++++++++--- src/consts.rs | 1 + 10 files changed, 229 insertions(+), 191 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 23f1fda..cfbfcf2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "adler2" @@ -109,7 +109,7 @@ dependencies = [ "num-traits", "rusticata-macros", "thiserror", - "time 0.3.36", + "time 0.3.37", ] [[package]] @@ -120,7 +120,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", "synstructure", ] @@ -132,7 +132,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -167,15 +167,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bitflags" -version = "1.3.2" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" [[package]] name = "blanket" @@ -185,7 +179,7 @@ checksum = "e0b121a9fe0df916e362fb3271088d071159cdf11db0e4182d02152850756eff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -217,9 +211,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cc" -version = "1.2.1" +version = "1.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +checksum = "c8293772165d9345bdaaa39b45b2109591e63fe5e6fbc23c6ff930a048aa310b" dependencies = [ "jobserver", "libc", @@ -250,9 +244,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -274,9 +268,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.21" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" dependencies = [ "clap_builder", "clap_derive", @@ -284,9 +278,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.21" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" dependencies = [ "anstream", "anstyle", @@ -296,21 +290,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.18" +version = "4.5.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "clap_lex" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" @@ -320,15 +314,15 @@ checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "console" -version = "0.15.8" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" dependencies = [ "encode_unicode", - "lazy_static", "libc", - "unicode-width 0.1.11", - "windows-sys 0.52.0", + "once_cell", + "unicode-width", + "windows-sys 0.59.0", ] [[package]] @@ -361,9 +355,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -432,7 +426,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -476,7 +470,7 @@ checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -551,7 +545,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -603,25 +597,25 @@ dependencies = [ [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "fastrand" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "ff" @@ -663,13 +657,13 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fs-set-times" -version = "0.20.1" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "033b337d725b97690d86893f9de22b67b80dcc4e9ad815f348254c38119db8fb" +checksum = "5e2e6123af26f0f2c51cc66869137080199406754903cc926a7690401ce09cb4" dependencies = [ "io-lifetimes", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -718,9 +712,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "group" @@ -777,11 +771,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -816,7 +810,7 @@ dependencies = [ "console", "number_prefix", "portable-atomic", - "unicode-width 0.2.0", + "unicode-width", "web-time", ] @@ -831,9 +825,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a611371471e98973dbcab4e0ec66c31a10bc356eeb4d54a0e05eac8158fe38c" +checksum = "06432fb54d3be7964ecd3649233cddf80db2832f47fec34c01f65b3d9d774983" [[package]] name = "is_terminal_polyfill" @@ -852,9 +846,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "jobserver" @@ -867,10 +861,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -885,9 +880,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.164" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libm" @@ -901,15 +896,15 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.6.0", + "bitflags", "libc", ] [[package]] name = "linux-raw-sys" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "log" @@ -931,9 +926,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ "adler2", ] @@ -944,7 +939,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.6.0", + "bitflags", "cfg-if", "cfg_aliases", "libc", @@ -1109,7 +1104,7 @@ checksum = "d2b0f8def1f117e13c895f3eda65a7b5650688da29d6ad04635f61bc7b92eebd" dependencies = [ "bytecount", "fnv", - "unicode-width 0.2.0", + "unicode-width", ] [[package]] @@ -1124,19 +1119,19 @@ dependencies = [ [[package]] name = "pcsc" -version = "2.8.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ed9d7f816b7d9ce9ddb0062dd2f393b3af31411a95a35411809b4b9116ea08" +checksum = "7dd833ecf8967e65934c49d3521a175929839bf6d0e497f3bd0d3a2ca08943da" dependencies = [ - "bitflags 1.3.2", + "bitflags", "pcsc-sys", ] [[package]] name = "pcsc-sys" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09e9ba80f2c4d167f936d27594f7248bca3295921ffbfa44a24b339b6cb7403" +checksum = "e14ef017e15d2e5592a9e39a346c1dbaea5120bab7ed7106b210ef58ebd97003" dependencies = [ "pkg-config", ] @@ -1211,9 +1206,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -1232,9 +1227,9 @@ dependencies = [ [[package]] name = "pqcrypto-internals" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10cdd9eee50fe65bbd4f40211f1a492f1ee52e97a51100950b6f1fa319ab7cd" +checksum = "62cd8ebf02b43967cda06e6a3f54d0bd9659459c3003d16aeedd07b44c6db06c" dependencies = [ "cc", "dunce", @@ -1289,14 +1284,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -1309,9 +1304,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1427,9 +1422,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.6" +version = "0.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519" dependencies = [ "const-oid", "digest", @@ -1502,22 +1497,22 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.40" +version = "0.38.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" dependencies = [ - "bitflags 2.6.0", + "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "rustversion" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" @@ -1559,11 +1554,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "3.0.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1415a607e92bec364ea2cf9264646dcce0f91e6d65281bd6f2819cca3bf39c8" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "bitflags 2.6.0", + "bitflags", "core-foundation", "core-foundation-sys", "libc", @@ -1572,9 +1567,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -1582,35 +1577,35 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" [[package]] name = "serde" -version = "1.0.215" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] name = "serde_json" -version = "1.0.133" +version = "1.0.135" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" dependencies = [ "itoa", "memchr", @@ -1730,9 +1725,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -1747,7 +1742,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -1775,12 +1770,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.14.0" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", "fastrand", + "getrandom", "once_cell", "rustix", "windows-sys 0.59.0", @@ -1824,7 +1820,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -1840,9 +1836,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -1861,9 +1857,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -1871,7 +1867,7 @@ dependencies = [ [[package]] name = "tiny-encrypt" -version = "1.8.3" +version = "1.8.4" dependencies = [ "aes-gcm-stream", "base64 0.22.1", @@ -1928,7 +1924,7 @@ checksum = "8d9ef545650e79f30233c0003bcc2504d7efac6dad25fca40744de773fe2049c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -1939,15 +1935,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" - -[[package]] -name = "unicode-width" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-width" @@ -1979,9 +1969,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" dependencies = [ "getrandom", ] @@ -2006,9 +1996,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -2017,24 +2007,23 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2042,22 +2031,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-time" @@ -2121,15 +2110,6 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.59.0" @@ -2300,7 +2280,7 @@ dependencies = [ "oid-registry", "rusticata-macros", "thiserror", - "time 0.3.36", + "time 0.3.37", ] [[package]] @@ -2354,7 +2334,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] [[package]] @@ -2374,5 +2354,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.96", ] diff --git a/Cargo.toml b/Cargo.toml index 1c9fcee..1404a17 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tiny-encrypt" -version = "1.8.3" +version = "1.8.4" edition = "2021" license = "MIT" description = "A simple and tiny file encrypt tool" diff --git a/src/cmd_config.rs b/src/cmd_config.rs index ed83cf2..3da4e2c 100644 --- a/src/cmd_config.rs +++ b/src/cmd_config.rs @@ -7,7 +7,6 @@ use tabled::{Table, Tabled}; use tabled::settings::Style; use crate::config::TinyEncryptConfig; -use crate::consts::TINY_ENC_CONFIG_FILE; use crate::util_envelop; #[derive(Tabled, Eq)] @@ -57,7 +56,7 @@ pub struct CmdConfig { } pub fn config(cmd_version: CmdConfig) -> XResult<()> { - let config = TinyEncryptConfig::load(TINY_ENC_CONFIG_FILE)?; + let config = TinyEncryptConfig::load_default()?; if cmd_version.profile.is_some() || cmd_version.key_filter.is_some() { return config_key_filter(&cmd_version, &config); diff --git a/src/cmd_decrypt.rs b/src/cmd_decrypt.rs index 13bae2c..abd3d03 100644 --- a/src/cmd_decrypt.rs +++ b/src/cmd_decrypt.rs @@ -31,7 +31,7 @@ use crate::consts::{ ENC_AES256_GCM_KYBER1204, ENC_AES256_GCM_P256, ENC_AES256_GCM_P384, ENC_AES256_GCM_X25519, ENC_CHACHA20_POLY1305_KYBER1204, ENC_CHACHA20_POLY1305_P256, ENC_CHACHA20_POLY1305_P384, ENC_CHACHA20_POLY1305_X25519, - SALT_COMMENT, TINY_ENC_CONFIG_FILE, TINY_ENC_FILE_EXT, + SALT_COMMENT, TINY_ENC_FILE_EXT, }; use crate::crypto_cryptor::{Cryptor, KeyNonce}; use crate::spec::{EncEncryptedMeta, TinyEncryptEnvelop, TinyEncryptEnvelopType, TinyEncryptMeta}; @@ -105,7 +105,7 @@ impl Drop for CmdDecrypt { pub fn decrypt(cmd_decrypt: CmdDecrypt) -> XResult<()> { if cmd_decrypt.split_print { util_msg::set_logger_std_out(false); } debugging!("Cmd decrypt: {:?}", cmd_decrypt); - let config = TinyEncryptConfig::load(TINY_ENC_CONFIG_FILE).ok(); + let config = TinyEncryptConfig::load_default().ok(); let start = Instant::now(); let mut succeed_count = 0; diff --git a/src/cmd_encrypt.rs b/src/cmd_encrypt.rs index c2a851a..333b444 100644 --- a/src/cmd_encrypt.rs +++ b/src/cmd_encrypt.rs @@ -12,7 +12,12 @@ use rust_util::{debugging, failure, iff, information, opt_result, simple_error, use crate::compress::GzStreamEncoder; use crate::config::{TinyEncryptConfig, TinyEncryptConfigEnvelop}; -use crate::consts::{ENC_AES256_GCM_KYBER1204, ENC_AES256_GCM_P256, ENC_AES256_GCM_P384, ENC_AES256_GCM_X25519, ENC_CHACHA20_POLY1305_KYBER1204, ENC_CHACHA20_POLY1305_P256, ENC_CHACHA20_POLY1305_P384, ENC_CHACHA20_POLY1305_X25519, SALT_COMMENT, TINY_ENC_CONFIG_FILE, TINY_ENC_FILE_EXT, TINY_ENC_PEM_FILE_EXT, TINY_ENC_PEM_NAME}; +use crate::consts::{ + ENC_AES256_GCM_KYBER1204, ENC_AES256_GCM_P256, ENC_AES256_GCM_P384, ENC_AES256_GCM_X25519, + ENC_CHACHA20_POLY1305_KYBER1204, ENC_CHACHA20_POLY1305_P256, ENC_CHACHA20_POLY1305_P384, + ENC_CHACHA20_POLY1305_X25519, SALT_COMMENT, TINY_ENC_FILE_EXT, TINY_ENC_PEM_FILE_EXT, + TINY_ENC_PEM_NAME, +}; use crate::crypto_cryptor::{Cryptor, KeyNonce}; use crate::spec::{ EncEncryptedMeta, EncMetadata, @@ -76,7 +81,7 @@ pub struct CmdEncrypt { } pub fn encrypt(cmd_encrypt: CmdEncrypt) -> XResult<()> { - let config = TinyEncryptConfig::load(TINY_ENC_CONFIG_FILE)?; + let config = TinyEncryptConfig::load_default()?; debugging!("Found tiny encrypt config: {:?}", config); let envelops = config.find_envelops(&cmd_encrypt.profile, &cmd_encrypt.key_filter)?; if envelops.is_empty() { return simple_error!("Cannot find any valid envelops"); } diff --git a/src/cmd_execenv.rs b/src/cmd_execenv.rs index 2dca621..da295f6 100644 --- a/src/cmd_execenv.rs +++ b/src/cmd_execenv.rs @@ -11,7 +11,6 @@ use zeroize::Zeroize; use crate::{config, consts, util, util_env}; use crate::cmd_decrypt::{decrypt_limited_content_to_vec, select_envelop, try_decrypt_key}; use crate::config::TinyEncryptConfig; -use crate::consts::TINY_ENC_CONFIG_FILE; use crate::crypto_cryptor::{Cryptor, KeyNonce}; use crate::util::SecVec; use crate::util_enc_file; @@ -46,7 +45,7 @@ impl Drop for CmdExecEnv { pub fn exec_env(cmd_exec_env: CmdExecEnv) -> XResult<()> { util_msg::set_logger_std_out(false); debugging!("Cmd exec env: {:?}", cmd_exec_env); - let config = TinyEncryptConfig::load(TINY_ENC_CONFIG_FILE).ok(); + let config = TinyEncryptConfig::load_default().ok(); if cmd_exec_env.command_arguments.is_empty() { return simple_error!("No commands assigned."); } diff --git a/src/cmd_info.rs b/src/cmd_info.rs index d0617c3..80f32a0 100644 --- a/src/cmd_info.rs +++ b/src/cmd_info.rs @@ -13,7 +13,7 @@ use simpledateformat::format_human2; use crate::{config, util, util_enc_file, util_envelop}; use crate::config::TinyEncryptConfig; -use crate::consts::{DATE_TIME_FORMAT, TINY_ENC_AES_GCM, TINY_ENC_CONFIG_FILE}; +use crate::consts::{DATE_TIME_FORMAT, TINY_ENC_AES_GCM}; use crate::util::is_tiny_enc_file; use crate::wrap_key::WrapKey; @@ -28,7 +28,7 @@ pub struct CmdInfo { } pub fn info(cmd_info: CmdInfo) -> XResult<()> { - let config = TinyEncryptConfig::load(TINY_ENC_CONFIG_FILE).ok(); + let config = TinyEncryptConfig::load_default().ok(); for (i, path) in cmd_info.paths.iter().enumerate() { let path = config::resolve_path_namespace(&config, path, true); if i > 0 { println!("{}", "-".repeat(88)); } diff --git a/src/cmd_simple_encrypt_decrypt.rs b/src/cmd_simple_encrypt_decrypt.rs index 14bad58..5c4b2cd 100644 --- a/src/cmd_simple_encrypt_decrypt.rs +++ b/src/cmd_simple_encrypt_decrypt.rs @@ -1,5 +1,4 @@ use crate::config::TinyEncryptConfig; -use crate::consts::TINY_ENC_CONFIG_FILE; use crate::spec::TinyEncryptEnvelop; use crate::{cmd_encrypt, crypto_cryptor, util, util_env}; use base64::engine::general_purpose::{STANDARD, URL_SAFE_NO_PAD}; @@ -164,7 +163,7 @@ pub fn simple_decrypt(cmd_simple_decrypt: CmdSimpleDecrypt) -> XResult<()> { } pub fn inner_simple_encrypt(cmd_simple_encrypt: CmdSimpleEncrypt) -> XResult<()> { - let config = TinyEncryptConfig::load(TINY_ENC_CONFIG_FILE)?; + let config = TinyEncryptConfig::load_default()?; debugging!("Found tiny encrypt config: {:?}", config); let envelops = config.find_envelops(&cmd_simple_encrypt.profile, &cmd_simple_encrypt.key_filter)?; if envelops.is_empty() { return simple_error!("Cannot find any valid envelops"); } @@ -197,7 +196,7 @@ pub fn inner_simple_encrypt(cmd_simple_encrypt: CmdSimpleEncrypt) -> XResult<()> #[cfg(feature = "decrypt")] pub fn inner_simple_decrypt(cmd_simple_decrypt: CmdSimpleDecrypt) -> XResult<()> { - let config = TinyEncryptConfig::load(TINY_ENC_CONFIG_FILE).ok(); + let config = TinyEncryptConfig::load_default().ok(); let pin = cmd_simple_decrypt.pin.clone().or_else(util_env::get_pin); let slot = cmd_simple_decrypt.slot.clone(); diff --git a/src/config.rs b/src/config.rs index 7312003..b13af4e 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,14 +1,14 @@ -use std::{env, fs}; use std::cmp::Ordering; use std::collections::HashMap; use std::path::Path; use std::path::PathBuf; +use std::{env, fs}; -use rust_util::{debugging, opt_result, simple_error, warning, XResult}; use rust_util::util_file::resolve_file_path; +use rust_util::{debugging, opt_result, simple_error, warning, XResult}; use serde::{Deserialize, Serialize}; -use crate::consts::TINY_ENC_FILE_EXT; +use crate::consts::{TINY_ENC_CONFIG_FILE, TINY_ENC_CONFIG_FILE_2, TINY_ENC_FILE_EXT}; use crate::spec::TinyEncryptEnvelopType; /// Config file sample: @@ -65,13 +65,34 @@ pub struct TinyEncryptConfigEnvelop { } impl TinyEncryptConfig { + pub fn load_default() -> XResult { + let resolved_file = resolve_file_path(TINY_ENC_CONFIG_FILE); + let resolved_file_2 = resolve_file_path(TINY_ENC_CONFIG_FILE_2); + let config_file = if fs::metadata(&resolved_file).is_ok() { + debugging!("Load config from: {resolved_file}"); + resolved_file + } else if fs::metadata(&resolved_file_2).is_ok() { + debugging!("Load config from: {resolved_file_2}"); + resolved_file_2 + } else { + warning!("Cannot find config file from:\n- {resolved_file}\n- {resolved_file_2}"); + resolved_file + }; + Self::load(&config_file) + } + pub fn load(file: &str) -> XResult { let resolved_file = resolve_file_path(file); let config_contents = opt_result!( - fs::read_to_string(resolved_file), "Read config file: {}, failed: {}", file + fs::read_to_string(resolved_file), + "Read config file: {}, failed: {}", + file ); let mut config: TinyEncryptConfig = opt_result!( - serde_json::from_str(&config_contents),"Parse config file: {}, failed: {}", file); + serde_json::from_str(&config_contents), + "Parse config file: {}, failed: {}", + file + ); let mut splited_profiles = HashMap::new(); for (k, v) in config.profiles.into_iter() { if !k.contains(',') { @@ -90,8 +111,8 @@ impl TinyEncryptConfig { if let Some(environment) = &config.environment { for (k, v) in environment { let v = match v { - StringOrVecString::String(s) => { s.to_string() } - StringOrVecString::Vec(vs) => { vs.join(",") } + StringOrVecString::String(s) => s.to_string(), + StringOrVecString::Vec(vs) => vs.join(","), }; debugging!("Set env: {}={}", k, v); env::set_var(k, v); @@ -104,10 +125,17 @@ impl TinyEncryptConfig { pub fn resolve_path_namespace(&self, path: &Path, append_te: bool) -> PathBuf { if let Some(path_str) = path.to_str() { if path_str.starts_with(':') { - let namespace = path_str.chars().skip(1) - .take_while(|c| *c != ':').collect::(); - let mut filename = path_str.chars().skip(1) - .skip_while(|c| *c != ':').skip(1).collect::(); + let namespace = path_str + .chars() + .skip(1) + .take_while(|c| *c != ':') + .collect::(); + let mut filename = path_str + .chars() + .skip(1) + .skip_while(|c| *c != ':') + .skip(1) + .collect::(); if append_te && !filename.ends_with(TINY_ENC_FILE_EXT) { filename.push_str(TINY_ENC_FILE_EXT); } @@ -145,7 +173,10 @@ impl TinyEncryptConfig { } if k_filter.ends_with('*') { let new_k_filter = k_filter.chars().collect::>(); - let new_k_filter = new_k_filter.iter().take(new_k_filter.len() - 1).collect::(); + let new_k_filter = new_k_filter + .iter() + .take(new_k_filter.len() - 1) + .collect::(); if e.kid.starts_with(&new_k_filter) || envelop_type.starts_with(&new_k_filter) { return true; } @@ -155,18 +186,30 @@ impl TinyEncryptConfig { } pub fn find_by_kid_or_filter(&self, kid: &str, f: F) -> Vec<&TinyEncryptConfigEnvelop> - where F: Fn(&TinyEncryptConfigEnvelop) -> bool { - self.envelops.iter().filter(|e| { - if e.kid == kid { return true; } - if let Some(sid) = &e.sid { - if sid == kid { return true; } - } - f(e) - }).collect() + where + F: Fn(&TinyEncryptConfigEnvelop) -> bool, + { + self.envelops + .iter() + .filter(|e| { + if e.kid == kid { + return true; + } + if let Some(sid) = &e.sid { + if sid == kid { + return true; + } + } + f(e) + }) + .collect() } - pub fn find_envelops(&self, profile: &Option, key_filter: &Option) - -> XResult> { + pub fn find_envelops( + &self, + profile: &Option, + key_filter: &Option, + ) -> XResult> { debugging!("Profile: {:?}", profile); debugging!("Key filter: {:?}", key_filter); let mut matched_envelops_map = HashMap::new(); @@ -203,17 +246,29 @@ impl TinyEncryptConfig { return simple_error!("Profile or key filter cannot find any valid envelopes"); } envelops.sort_by(|e1, e2| { - if e1.r#type < e2.r#type { return Ordering::Greater; } - if e1.r#type > e2.r#type { return Ordering::Less; } - if e1.kid < e2.kid { return Ordering::Greater; } - if e1.kid > e2.kid { return Ordering::Less; } + if e1.r#type < e2.r#type { + return Ordering::Greater; + } + if e1.r#type > e2.r#type { + return Ordering::Less; + } + if e1.kid < e2.kid { + return Ordering::Greater; + } + if e1.kid > e2.kid { + return Ordering::Less; + } Ordering::Equal }); Ok(envelops) } } -pub fn resolve_path_namespace(config: &Option, path: &Path, append_te: bool) -> PathBuf { +pub fn resolve_path_namespace( + config: &Option, + path: &Path, + append_te: bool, +) -> PathBuf { match config { None => path.to_path_buf(), Some(config) => config.resolve_path_namespace(path, append_te), diff --git a/src/consts.rs b/src/consts.rs index 1d1fbbf..71f521e 100644 --- a/src/consts.rs +++ b/src/consts.rs @@ -12,6 +12,7 @@ pub const ENC_CHACHA20_POLY1305_KYBER1204: &str = "chacha20-poly1305-kyber1204"; pub const TINY_ENC_FILE_EXT: &str = ".tinyenc"; pub const TINY_ENC_PEM_FILE_EXT: &str = ".tinyenc.pem"; pub const TINY_ENC_CONFIG_FILE: &str = "~/.tinyencrypt/config-rs.json"; +pub const TINY_ENC_CONFIG_FILE_2: &str = "/etc/tinyencrypt/config-rs.json"; pub const TINY_ENC_PEM_NAME: &str = "TINY ENCRYPT";