git.delta.rocks / jrsonnet / refs/commits / 989a90dd7b97

difftreelog

feat move secret generation helpers to core

Yaroslav Bolyukin2024-03-02parent: #a31940c.patch.diff
in: trunk

13 files changed

modifiedCargo.lockdiffbeforeafterboth
3838
39[[package]]39[[package]]
40name = "aes"40name = "aes"
41version = "0.8.3"41version = "0.8.4"
42source = "registry+https://github.com/rust-lang/crates.io-index"42source = "registry+https://github.com/rust-lang/crates.io-index"
43checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"43checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"
44dependencies = [44dependencies = [
45 "cfg-if",45 "cfg-if",
46 "cipher",46 "cipher",
6363
64[[package]]64[[package]]
65name = "age"65name = "age"
66version = "0.9.2"66version = "0.10.0"
67source = "registry+https://github.com/rust-lang/crates.io-index"67source = "registry+https://github.com/rust-lang/crates.io-index"
68checksum = "6d55a4d912c80a92762ffd1c884065f3f9646467d22c95390e824a0ff7def472"68checksum = "edeef7d7b199195a2d7d7a8155d2d04aee736e60c5c7bdd7097d115369a8817d"
69dependencies = [69dependencies = [
70 "aes",70 "aes",
71 "aes-gcm",71 "aes-gcm",
72 "age-core",72 "age-core",
73 "base64 0.13.1",73 "base64",
74 "bcrypt-pbkdf",74 "bcrypt-pbkdf",
75 "bech32",75 "bech32",
76 "cbc",76 "cbc",
79 "cookie-factory",79 "cookie-factory",
80 "ctr",80 "ctr",
81 "curve25519-dalek",81 "curve25519-dalek",
82 "hkdf",
83 "hmac",82 "hmac",
84 "i18n-embed",83 "i18n-embed",
85 "i18n-embed-fl",84 "i18n-embed-fl",
86 "lazy_static",85 "lazy_static",
87 "nom",86 "nom",
88 "num-traits",87 "num-traits",
89 "pin-project",88 "pin-project",
90 "rand 0.7.3",89 "rand",
91 "rand 0.8.5",
92 "rsa",90 "rsa",
93 "rust-embed",91 "rust-embed",
94 "scrypt",92 "scrypt",
10098
101[[package]]99[[package]]
102name = "age-core"100name = "age-core"
103version = "0.9.0"101version = "0.10.0"
104source = "registry+https://github.com/rust-lang/crates.io-index"102source = "registry+https://github.com/rust-lang/crates.io-index"
105checksum = "e3d2e815ac879dc23c1139e720d21c6cd4d1276345c772587285d965a69b8f32"103checksum = "a5f11899bc2bbddd135edbc30c36b1924fa59d0746bb45beb5933fafe3fe509b"
106dependencies = [104dependencies = [
107 "base64 0.13.1",105 "base64",
108 "chacha20poly1305",106 "chacha20poly1305",
109 "cookie-factory",107 "cookie-factory",
110 "hkdf",108 "hkdf",
111 "io_tee",109 "io_tee",
112 "nom",110 "nom",
113 "rand 0.8.5",111 "rand",
114 "secrecy",112 "secrecy",
115 "sha2",113 "sha2",
116]114]
149 "libc",147 "libc",
150]148]
151
152[[package]]
153name = "ansi-str"
154version = "0.8.0"
155source = "registry+https://github.com/rust-lang/crates.io-index"
156checksum = "1cf4578926a981ab0ca955dc023541d19de37112bc24c1a197bd806d3d86ad1d"
157dependencies = [
158 "ansitok",
159]
160
161[[package]]
162name = "ansitok"
163version = "0.2.0"
164source = "registry+https://github.com/rust-lang/crates.io-index"
165checksum = "220044e6a1bb31ddee4e3db724d29767f352de47445a6cd75e1a173142136c83"
166dependencies = [
167 "nom",
168 "vte 0.10.1",
169]
170149
171[[package]]150[[package]]
172name = "anstream"151name = "anstream"
173version = "0.6.5"152version = "0.6.11"
174source = "registry+https://github.com/rust-lang/crates.io-index"153source = "registry+https://github.com/rust-lang/crates.io-index"
175checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6"154checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5"
176dependencies = [155dependencies = [
177 "anstyle",156 "anstyle",
178 "anstyle-parse",157 "anstyle-parse",
184163
185[[package]]164[[package]]
186name = "anstyle"165name = "anstyle"
187version = "1.0.4"166version = "1.0.6"
188source = "registry+https://github.com/rust-lang/crates.io-index"167source = "registry+https://github.com/rust-lang/crates.io-index"
189checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"168checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc"
190169
191[[package]]170[[package]]
192name = "anstyle-parse"171name = "anstyle-parse"
218197
219[[package]]198[[package]]
220name = "anyhow"199name = "anyhow"
221version = "1.0.77"200version = "1.0.79"
222source = "registry+https://github.com/rust-lang/crates.io-index"201source = "registry+https://github.com/rust-lang/crates.io-index"
223checksum = "c9d19de80eff169429ac1e9f48fffb163916b448a44e8e046186232046d9e1f9"202checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
224203
225[[package]]204[[package]]
226name = "arc-swap"205name = "arc-swap"
227version = "1.6.0"206version = "1.6.0"
228source = "registry+https://github.com/rust-lang/crates.io-index"207source = "registry+https://github.com/rust-lang/crates.io-index"
229checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"208checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
230
231[[package]]
232name = "arrayvec"
233version = "0.5.2"
234source = "registry+https://github.com/rust-lang/crates.io-index"
235checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
236209
237[[package]]210[[package]]
238name = "arrayvec"211name = "arrayvec"
248dependencies = [221dependencies = [
249 "proc-macro2",222 "proc-macro2",
250 "quote",223 "quote",
251 "syn 2.0.48",224 "syn 2.0.49",
252]225]
253
254[[package]]
255name = "atty"
256version = "0.2.14"
257source = "registry+https://github.com/rust-lang/crates.io-index"
258checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
259dependencies = [
260 "hermit-abi 0.1.19",
261 "libc",
262 "winapi",
263]
264226
265[[package]]227[[package]]
266name = "autocfg"228name = "autocfg"
283 "rustc-demangle",245 "rustc-demangle",
284]246]
285
286[[package]]
287name = "base64"
288version = "0.13.1"
289source = "registry+https://github.com/rust-lang/crates.io-index"
290checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
291247
292[[package]]248[[package]]
293name = "base64"249name = "base64"
294version = "0.21.5"250version = "0.21.7"
295source = "registry+https://github.com/rust-lang/crates.io-index"251source = "registry+https://github.com/rust-lang/crates.io-index"
296checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"252checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
297253
298[[package]]254[[package]]
299name = "base64ct"255name = "base64ct"
303259
304[[package]]260[[package]]
305name = "bcrypt-pbkdf"261name = "bcrypt-pbkdf"
306version = "0.9.0"262version = "0.10.0"
307source = "registry+https://github.com/rust-lang/crates.io-index"263source = "registry+https://github.com/rust-lang/crates.io-index"
308checksum = "3806a8db60cf56efee531616a34a6aaa9a114d6da2add861b0fa4a188881b2c7"264checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2"
309dependencies = [265dependencies = [
310 "blowfish",266 "blowfish",
311 "pbkdf2",267 "pbkdf2",
338294
339[[package]]295[[package]]
340name = "bitflags"296name = "bitflags"
341version = "2.4.1"297version = "2.4.2"
342source = "registry+https://github.com/rust-lang/crates.io-index"298source = "registry+https://github.com/rust-lang/crates.io-index"
343checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"299checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
344dependencies = [300dependencies = [
345 "serde",301 "serde",
346]302]
375331
376[[package]]332[[package]]
377name = "bumpalo"333name = "bumpalo"
378version = "3.14.0"334version = "3.15.0"
379source = "registry+https://github.com/rust-lang/crates.io-index"335source = "registry+https://github.com/rust-lang/crates.io-index"
380checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"336checksum = "d32a994c2b3ca201d9b263612a374263f05e7adde37c4707f693dcd375076d1f"
381337
382[[package]]338[[package]]
383name = "bytecount"339name = "bytecount"
456412
457[[package]]413[[package]]
458name = "chrono"414name = "chrono"
459version = "0.4.31"415version = "0.4.34"
460source = "registry+https://github.com/rust-lang/crates.io-index"416source = "registry+https://github.com/rust-lang/crates.io-index"
461checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"417checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b"
462dependencies = [418dependencies = [
463 "android-tzdata",419 "android-tzdata",
464 "iana-time-zone",420 "iana-time-zone",
465 "js-sys",421 "js-sys",
466 "num-traits",422 "num-traits",
467 "serde",423 "serde",
468 "wasm-bindgen",424 "wasm-bindgen",
469 "windows-targets 0.48.5",425 "windows-targets 0.52.0",
470]426]
471427
472[[package]]428[[package]]
482438
483[[package]]439[[package]]
484name = "clap"440name = "clap"
485version = "4.4.12"441version = "4.5.1"
486source = "registry+https://github.com/rust-lang/crates.io-index"442source = "registry+https://github.com/rust-lang/crates.io-index"
487checksum = "dcfab8ba68f3668e89f6ff60f5b205cea56aa7b769451a59f34b8682f51c056d"443checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da"
488dependencies = [444dependencies = [
489 "clap_builder",445 "clap_builder",
490 "clap_derive",446 "clap_derive",
491]447]
492448
493[[package]]449[[package]]
494name = "clap_builder"450name = "clap_builder"
495version = "4.4.12"451version = "4.5.1"
496source = "registry+https://github.com/rust-lang/crates.io-index"452source = "registry+https://github.com/rust-lang/crates.io-index"
497checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9"453checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb"
498dependencies = [454dependencies = [
499 "anstream",455 "anstream",
500 "anstyle",456 "anstyle",
501 "clap_lex",457 "clap_lex",
502 "strsim",458 "strsim 0.11.0",
503 "terminal_size",459 "terminal_size",
504 "unicase",460 "unicase",
505 "unicode-width",461 "unicode-width",
506]462]
507463
508[[package]]464[[package]]
509name = "clap_derive"465name = "clap_derive"
510version = "4.4.7"466version = "4.5.0"
511source = "registry+https://github.com/rust-lang/crates.io-index"467source = "registry+https://github.com/rust-lang/crates.io-index"
512checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"468checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47"
513dependencies = [469dependencies = [
514 "heck",470 "heck",
515 "proc-macro2",471 "proc-macro2",
516 "quote",472 "quote",
517 "syn 2.0.48",473 "syn 2.0.49",
518]474]
519475
520[[package]]476[[package]]
521name = "clap_lex"477name = "clap_lex"
522version = "0.6.0"478version = "0.7.0"
523source = "registry+https://github.com/rust-lang/crates.io-index"479source = "registry+https://github.com/rust-lang/crates.io-index"
524checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"480checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
525481
526[[package]]482[[package]]
527name = "colorchoice"483name = "colorchoice"
531487
532[[package]]488[[package]]
533name = "console"489name = "console"
534version = "0.15.7"490version = "0.15.8"
535source = "registry+https://github.com/rust-lang/crates.io-index"491source = "registry+https://github.com/rust-lang/crates.io-index"
536checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"492checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"
537dependencies = [493dependencies = [
538 "encode_unicode",494 "encode_unicode",
539 "lazy_static",495 "lazy_static",
540 "libc",496 "libc",
541 "unicode-width",497 "unicode-width",
542 "windows-sys 0.45.0",498 "windows-sys 0.52.0",
543]499]
544500
545[[package]]501[[package]]
568524
569[[package]]525[[package]]
570name = "cpufeatures"526name = "cpufeatures"
571version = "0.2.11"527version = "0.2.12"
572source = "registry+https://github.com/rust-lang/crates.io-index"528source = "registry+https://github.com/rust-lang/crates.io-index"
573checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"529checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
574dependencies = [530dependencies = [
575 "libc",531 "libc",
576]532]
582checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"538checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
583dependencies = [539dependencies = [
584 "generic-array",540 "generic-array",
585 "rand_core 0.6.4",541 "rand_core",
586 "typenum",542 "typenum",
587]543]
588544
597553
598[[package]]554[[package]]
599name = "curve25519-dalek"555name = "curve25519-dalek"
600version = "3.2.0"556version = "4.1.2"
601source = "registry+https://github.com/rust-lang/crates.io-index"557source = "registry+https://github.com/rust-lang/crates.io-index"
602checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"558checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348"
603dependencies = [559dependencies = [
560 "cfg-if",
604 "byteorder",561 "cpufeatures",
562 "curve25519-dalek-derive",
605 "digest 0.9.0",563 "fiat-crypto",
564 "platforms",
606 "rand_core 0.5.1",565 "rustc_version",
607 "subtle",566 "subtle",
608 "zeroize",567 "zeroize",
609]568]
569
570[[package]]
571name = "curve25519-dalek-derive"
572version = "0.1.1"
573source = "registry+https://github.com/rust-lang/crates.io-index"
574checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
575dependencies = [
576 "proc-macro2",
577 "quote",
578 "syn 2.0.49",
579]
610580
611[[package]]581[[package]]
612name = "dashmap"582name = "dashmap"
623593
624[[package]]594[[package]]
625name = "der"595name = "der"
626version = "0.6.1"596version = "0.7.8"
627source = "registry+https://github.com/rust-lang/crates.io-index"597source = "registry+https://github.com/rust-lang/crates.io-index"
628checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"598checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
629dependencies = [599dependencies = [
630 "const-oid",600 "const-oid",
631 "zeroize",601 "zeroize",
641 "serde",611 "serde",
642]612]
643
644[[package]]
645name = "digest"
646version = "0.9.0"
647source = "registry+https://github.com/rust-lang/crates.io-index"
648checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
649dependencies = [
650 "generic-array",
651]
652613
653[[package]]614[[package]]
654name = "digest"615name = "digest"
662 "subtle",623 "subtle",
663]624]
664
665[[package]]
666name = "dirs"
667version = "5.0.1"
668source = "registry+https://github.com/rust-lang/crates.io-index"
669checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
670dependencies = [
671 "dirs-sys",
672]
673
674[[package]]
675name = "dirs-sys"
676version = "0.4.1"
677source = "registry+https://github.com/rust-lang/crates.io-index"
678checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
679dependencies = [
680 "libc",
681 "option-ext",
682 "redox_users",
683 "windows-sys 0.48.0",
684]
685625
686[[package]]626[[package]]
687name = "displaydoc"627name = "displaydoc"
691dependencies = [631dependencies = [
692 "proc-macro2",632 "proc-macro2",
693 "quote",633 "quote",
694 "syn 2.0.48",634 "syn 2.0.49",
695]635]
696636
697[[package]]637[[package]]
698name = "either"638name = "either"
699version = "1.9.0"639version = "1.10.0"
700source = "registry+https://github.com/rust-lang/crates.io-index"640source = "registry+https://github.com/rust-lang/crates.io-index"
701checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"641checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a"
702642
703[[package]]643[[package]]
704name = "encode_unicode"644name = "encode_unicode"
705version = "0.3.6"645version = "0.3.6"
706source = "registry+https://github.com/rust-lang/crates.io-index"646source = "registry+https://github.com/rust-lang/crates.io-index"
707checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"647checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
708
709[[package]]
710name = "env_logger"
711version = "0.10.1"
712source = "registry+https://github.com/rust-lang/crates.io-index"
713checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
714dependencies = [
715 "humantime",
716 "is-terminal",
717 "log",
718 "regex",
719 "termcolor",
720]
721648
722[[package]]649[[package]]
723name = "equivalent"650name = "equivalent"
741source = "registry+https://github.com/rust-lang/crates.io-index"668source = "registry+https://github.com/rust-lang/crates.io-index"
742checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"669checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
670
671[[package]]
672name = "fiat-crypto"
673version = "0.2.6"
674source = "registry+https://github.com/rust-lang/crates.io-index"
675checksum = "1676f435fc1dadde4d03e43f5d62b259e1ce5f40bd4ffb21db2b42ebe59c1382"
743676
744[[package]]677[[package]]
745name = "find-crate"678name = "find-crate"
759 "age-core",692 "age-core",
760 "anyhow",693 "anyhow",
761 "async-trait",694 "async-trait",
762 "base64 0.21.5",695 "base64",
763 "better-command",696 "better-command",
764 "chrono",697 "chrono",
765 "clap",698 "clap",
797 "age",730 "age",
798 "anyhow",731 "anyhow",
799 "clap",732 "clap",
800 "env_logger",
801 "log",
802 "nix",733 "nix",
803 "serde",734 "serde",
804 "serde_json",735 "serde_json",
805 "tempfile",736 "tempfile",
737 "tracing",
738 "tracing-subscriber",
806 "z85",739 "z85",
807]740]
808741
912dependencies = [845dependencies = [
913 "proc-macro2",846 "proc-macro2",
914 "quote",847 "quote",
915 "syn 2.0.48",848 "syn 2.0.49",
916]849]
917850
918[[package]]851[[package]]
955 "version_check",888 "version_check",
956]889]
957
958[[package]]
959name = "getrandom"
960version = "0.1.16"
961source = "registry+https://github.com/rust-lang/crates.io-index"
962checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
963dependencies = [
964 "cfg-if",
965 "libc",
966 "wasi 0.9.0+wasi-snapshot-preview1",
967]
968890
969[[package]]891[[package]]
970name = "getrandom"892name = "getrandom"
971version = "0.2.11"893version = "0.2.12"
972source = "registry+https://github.com/rust-lang/crates.io-index"894source = "registry+https://github.com/rust-lang/crates.io-index"
973checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"895checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
974dependencies = [896dependencies = [
975 "cfg-if",897 "cfg-if",
976 "libc",898 "libc",
977 "wasi 0.11.0+wasi-snapshot-preview1",899 "wasi",
978]900]
979901
980[[package]]902[[package]]
1011source = "registry+https://github.com/rust-lang/crates.io-index"933source = "registry+https://github.com/rust-lang/crates.io-index"
1012checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"934checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
1013
1014[[package]]
1015name = "hermit-abi"
1016version = "0.1.19"
1017source = "registry+https://github.com/rust-lang/crates.io-index"
1018checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
1019dependencies = [
1020 "libc",
1021]
1022935
1023[[package]]936[[package]]
1024name = "hermit-abi"937name = "hermit-abi"
1025version = "0.3.3"938version = "0.3.6"
1026source = "registry+https://github.com/rust-lang/crates.io-index"939source = "registry+https://github.com/rust-lang/crates.io-index"
1027checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"940checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd"
1028941
1029[[package]]942[[package]]
1030name = "hkdf"943name = "hkdf"
1041source = "registry+https://github.com/rust-lang/crates.io-index"954source = "registry+https://github.com/rust-lang/crates.io-index"
1042checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"955checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
1043dependencies = [956dependencies = [
1044 "digest 0.10.7",957 "digest",
1045]958]
1046959
1047[[package]]960[[package]]
1061source = "registry+https://github.com/rust-lang/crates.io-index"974source = "registry+https://github.com/rust-lang/crates.io-index"
1062checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1"975checksum = "f58b778a5761513caf593693f8951c97a5b610841e754788400f32102eefdff1"
1063
1064[[package]]
1065name = "humantime"
1066version = "2.1.0"
1067source = "registry+https://github.com/rust-lang/crates.io-index"
1068checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
1069976
1070[[package]]977[[package]]
1071name = "i18n-config"978name = "i18n-config"
1077 "serde",984 "serde",
1078 "serde_derive",985 "serde_derive",
1079 "thiserror",986 "thiserror",
1080 "toml 0.8.8",987 "toml 0.8.10",
1081 "unic-langid",988 "unic-langid",
1082]989]
1083990
1084[[package]]991[[package]]
1085name = "i18n-embed"992name = "i18n-embed"
1086version = "0.13.9"993version = "0.14.1"
1087source = "registry+https://github.com/rust-lang/crates.io-index"994source = "registry+https://github.com/rust-lang/crates.io-index"
1088checksum = "92a86226a7a16632de6723449ee5fe70bac5af718bc642ee9ca2f0f6e14fa1fa"995checksum = "94205d95764f5bb9db9ea98fa77f89653365ca748e27161f5bbea2ffd50e459c"
1089dependencies = [996dependencies = [
1090 "arc-swap",997 "arc-swap",
1091 "fluent",998 "fluent",
11041011
1105[[package]]1012[[package]]
1106name = "i18n-embed-fl"1013name = "i18n-embed-fl"
1107version = "0.6.7"1014version = "0.7.0"
1108source = "registry+https://github.com/rust-lang/crates.io-index"1015source = "registry+https://github.com/rust-lang/crates.io-index"
1109checksum = "d26a3d3569737dfaac7fc1c4078e6af07471c3060b8e570bcd83cdd5f4685395"1016checksum = "9fc1f8715195dffc4caddcf1cf3128da15fe5d8a137606ea8856c9300047d5a2"
1110dependencies = [1017dependencies = [
1111 "dashmap",1018 "dashmap",
1112 "find-crate",1019 "find-crate",
1118 "proc-macro-error",1025 "proc-macro-error",
1119 "proc-macro2",1026 "proc-macro2",
1120 "quote",1027 "quote",
1121 "strsim",1028 "strsim 0.10.0",
1122 "syn 2.0.48",1029 "syn 2.0.49",
1123 "unic-langid",1030 "unic-langid",
1124]1031]
11251032
1133 "i18n-config",1040 "i18n-config",
1134 "proc-macro2",1041 "proc-macro2",
1135 "quote",1042 "quote",
1136 "syn 2.0.48",1043 "syn 2.0.49",
1137]1044]
11381045
1139[[package]]1046[[package]]
1140name = "iana-time-zone"1047name = "iana-time-zone"
1141version = "0.1.59"1048version = "0.1.60"
1142source = "registry+https://github.com/rust-lang/crates.io-index"1049source = "registry+https://github.com/rust-lang/crates.io-index"
1143checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539"1050checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
1144dependencies = [1051dependencies = [
1145 "android_system_properties",1052 "android_system_properties",
1146 "core-foundation-sys",1053 "core-foundation-sys",
11611068
1162[[package]]1069[[package]]
1163name = "indexmap"1070name = "indexmap"
1164version = "2.1.0"1071version = "2.2.3"
1165source = "registry+https://github.com/rust-lang/crates.io-index"1072source = "registry+https://github.com/rust-lang/crates.io-index"
1166checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"1073checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177"
1167dependencies = [1074dependencies = [
1168 "equivalent",1075 "equivalent",
1169 "hashbrown 0.14.3",1076 "hashbrown 0.14.3",
1170]1077]
11711078
1172[[package]]1079[[package]]
1173name = "indicatif"1080name = "indicatif"
1174version = "0.17.7"1081version = "0.17.8"
1175source = "registry+https://github.com/rust-lang/crates.io-index"1082source = "registry+https://github.com/rust-lang/crates.io-index"
1176checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"1083checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3"
1177dependencies = [1084dependencies = [
1178 "console",1085 "console",
1179 "instant",1086 "instant",
12291136
1230[[package]]1137[[package]]
1231name = "is-terminal"1138name = "is-terminal"
1232version = "0.4.10"1139version = "0.4.12"
1233source = "registry+https://github.com/rust-lang/crates.io-index"1140source = "registry+https://github.com/rust-lang/crates.io-index"
1234checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455"1141checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b"
1235dependencies = [1142dependencies = [
1236 "hermit-abi 0.3.3",1143 "hermit-abi",
1237 "rustix",1144 "libc",
1238 "windows-sys 0.52.0",1145 "windows-sys 0.52.0",
1239]1146]
12401147
1241[[package]]1148[[package]]
1242name = "is_ci"1149name = "is_ci"
1243version = "1.1.1"1150version = "1.2.0"
1244source = "registry+https://github.com/rust-lang/crates.io-index"1151source = "registry+https://github.com/rust-lang/crates.io-index"
1245checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"1152checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45"
12461153
1247[[package]]1154[[package]]
1248name = "itertools"1155name = "itertools"
1249version = "0.11.0"1156version = "0.12.1"
1250source = "registry+https://github.com/rust-lang/crates.io-index"1157source = "registry+https://github.com/rust-lang/crates.io-index"
1251checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"1158checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
1252dependencies = [1159dependencies = [
1253 "either",1160 "either",
1254]1161]
12611168
1262[[package]]1169[[package]]
1263name = "js-sys"1170name = "js-sys"
1264version = "0.3.66"1171version = "0.3.68"
1265source = "registry+https://github.com/rust-lang/crates.io-index"1172source = "registry+https://github.com/rust-lang/crates.io-index"
1266checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"1173checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee"
1267dependencies = [1174dependencies = [
1268 "wasm-bindgen",1175 "wasm-bindgen",
1269]1176]
12791186
1280[[package]]1187[[package]]
1281name = "libc"1188name = "libc"
1282version = "0.2.151"1189version = "0.2.153"
1283source = "registry+https://github.com/rust-lang/crates.io-index"1190source = "registry+https://github.com/rust-lang/crates.io-index"
1284checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"1191checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
12851192
1286[[package]]1193[[package]]
1287name = "libm"1194name = "libm"
1299 "libc",1206 "libc",
1300]1207]
1301
1302[[package]]
1303name = "libredox"
1304version = "0.0.1"
1305source = "registry+https://github.com/rust-lang/crates.io-index"
1306checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
1307dependencies = [
1308 "bitflags 2.4.1",
1309 "libc",
1310 "redox_syscall",
1311]
13121208
1313[[package]]1209[[package]]
1314name = "linked-hash-map"1210name = "linked-hash-map"
13181214
1319[[package]]1215[[package]]
1320name = "linux-raw-sys"1216name = "linux-raw-sys"
1321version = "0.4.12"1217version = "0.4.13"
1322source = "registry+https://github.com/rust-lang/crates.io-index"1218source = "registry+https://github.com/rust-lang/crates.io-index"
1323checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"1219checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
13241220
1325[[package]]1221[[package]]
1326name = "lock_api"1222name = "lock_api"
13851281
1386[[package]]1282[[package]]
1387name = "miniz_oxide"1283name = "miniz_oxide"
1388version = "0.7.1"1284version = "0.7.2"
1389source = "registry+https://github.com/rust-lang/crates.io-index"1285source = "registry+https://github.com/rust-lang/crates.io-index"
1390checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"1286checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7"
1391dependencies = [1287dependencies = [
1392 "adler",1288 "adler",
1393]1289]
1399checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"1295checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
1400dependencies = [1296dependencies = [
1401 "libc",1297 "libc",
1402 "wasi 0.11.0+wasi-snapshot-preview1",1298 "wasi",
1403 "windows-sys 0.48.0",1299 "windows-sys 0.48.0",
1404]1300]
14051301
1409source = "registry+https://github.com/rust-lang/crates.io-index"1305source = "registry+https://github.com/rust-lang/crates.io-index"
1410checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"1306checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
1411dependencies = [1307dependencies = [
1412 "bitflags 2.4.1",1308 "bitflags 2.4.2",
1413 "cfg-if",1309 "cfg-if",
1414 "libc",1310 "libc",
1415]1311]
1460 "num-integer",1356 "num-integer",
1461 "num-iter",1357 "num-iter",
1462 "num-traits",1358 "num-traits",
1463 "rand 0.8.5",1359 "rand",
1464 "smallvec",1360 "smallvec",
1465 "zeroize",1361 "zeroize",
1466]1362]
1363
1364[[package]]
1365name = "num-conv"
1366version = "0.1.0"
1367source = "registry+https://github.com/rust-lang/crates.io-index"
1368checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
14671369
1468[[package]]1370[[package]]
1469name = "num-integer"1371name = "num-integer"
1470version = "0.1.45"1372version = "0.1.46"
1471source = "registry+https://github.com/rust-lang/crates.io-index"1373source = "registry+https://github.com/rust-lang/crates.io-index"
1472checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"1374checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
1473dependencies = [1375dependencies = [
1474 "autocfg",
1475 "num-traits",1376 "num-traits",
1476]1377]
14771378
1478[[package]]1379[[package]]
1479name = "num-iter"1380name = "num-iter"
1480version = "0.1.43"1381version = "0.1.44"
1481source = "registry+https://github.com/rust-lang/crates.io-index"1382source = "registry+https://github.com/rust-lang/crates.io-index"
1482checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"1383checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9"
1483dependencies = [1384dependencies = [
1484 "autocfg",1385 "autocfg",
1485 "num-integer",1386 "num-integer",
14881389
1489[[package]]1390[[package]]
1490name = "num-traits"1391name = "num-traits"
1491version = "0.2.17"1392version = "0.2.18"
1492source = "registry+https://github.com/rust-lang/crates.io-index"1393source = "registry+https://github.com/rust-lang/crates.io-index"
1493checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"1394checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
1494dependencies = [1395dependencies = [
1495 "autocfg",1396 "autocfg",
1496 "libm",1397 "libm",
1502source = "registry+https://github.com/rust-lang/crates.io-index"1403source = "registry+https://github.com/rust-lang/crates.io-index"
1503checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"1404checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
1504dependencies = [1405dependencies = [
1505 "hermit-abi 0.3.3",1406 "hermit-abi",
1506 "libc",1407 "libc",
1507]1408]
15081409
15351436
1536[[package]]1437[[package]]
1537name = "openssh"1438name = "openssh"
1538version = "0.10.2"1439version = "0.10.3"
1539source = "registry+https://github.com/rust-lang/crates.io-index"1440source = "registry+https://github.com/rust-lang/crates.io-index"
1540checksum = "8274f2bf1fc3785406a3ff07c92c15590c00e84efb883da77b671562ca9a6115"1441checksum = "cab71dc3fc68747816c7eecdffcede064d6bac9621fd658bf1ab5414e91558a3"
1541dependencies = [1442dependencies = [
1542 "dirs",
1543 "libc",1443 "libc",
1544 "once_cell",1444 "once_cell",
1545 "shell-escape",1445 "shell-escape",
1549 "tokio-pipe",1449 "tokio-pipe",
1550]1450]
1551
1552[[package]]
1553name = "option-ext"
1554version = "0.2.0"
1555source = "registry+https://github.com/rust-lang/crates.io-index"
1556checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
15571451
1558[[package]]1452[[package]]
1559name = "overload"1453name = "overload"
15631457
1564[[package]]1458[[package]]
1565name = "owo-colors"1459name = "owo-colors"
1566version = "3.5.0"1460version = "4.0.0"
1567source = "registry+https://github.com/rust-lang/crates.io-index"1461source = "registry+https://github.com/rust-lang/crates.io-index"
1568checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"1462checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f"
1569dependencies = [1463dependencies = [
1570 "supports-color",1464 "supports-color",
1571]1465]
15721466
1573[[package]]1467[[package]]
1574name = "papergrid"1468name = "papergrid"
1575version = "0.10.0"1469version = "0.11.0"
1576source = "registry+https://github.com/rust-lang/crates.io-index"1470source = "registry+https://github.com/rust-lang/crates.io-index"
1577checksum = "a2ccbe15f2b6db62f9a9871642746427e297b0ceb85f9a7f1ee5ff47d184d0c8"1471checksum = "9ad43c07024ef767f9160710b3a6773976194758c7919b17e63b863db0bdf7fb"
1578dependencies = [1472dependencies = [
1579 "ansi-str",
1580 "ansitok",
1581 "bytecount",1473 "bytecount",
1582 "fnv",1474 "fnv",
1583 "unicode-width",1475 "unicode-width",
16081500
1609[[package]]1501[[package]]
1610name = "pbkdf2"1502name = "pbkdf2"
1611version = "0.11.0"1503version = "0.12.2"
1612source = "registry+https://github.com/rust-lang/crates.io-index"1504source = "registry+https://github.com/rust-lang/crates.io-index"
1613checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"1505checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
1614dependencies = [1506dependencies = [
1615 "digest 0.10.7",1507 "digest",
1508 "hmac",
1616]1509]
16171510
1618[[package]]1511[[package]]
16441537
1645[[package]]1538[[package]]
1646name = "pin-project"1539name = "pin-project"
1647version = "1.1.3"1540version = "1.1.4"
1648source = "registry+https://github.com/rust-lang/crates.io-index"1541source = "registry+https://github.com/rust-lang/crates.io-index"
1649checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"1542checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0"
1650dependencies = [1543dependencies = [
1651 "pin-project-internal",1544 "pin-project-internal",
1652]1545]
16531546
1654[[package]]1547[[package]]
1655name = "pin-project-internal"1548name = "pin-project-internal"
1656version = "1.1.3"1549version = "1.1.4"
1657source = "registry+https://github.com/rust-lang/crates.io-index"1550source = "registry+https://github.com/rust-lang/crates.io-index"
1658checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"1551checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690"
1659dependencies = [1552dependencies = [
1660 "proc-macro2",1553 "proc-macro2",
1661 "quote",1554 "quote",
1662 "syn 2.0.48",1555 "syn 2.0.49",
1663]1556]
16641557
1665[[package]]1558[[package]]
16761569
1677[[package]]1570[[package]]
1678name = "pkcs1"1571name = "pkcs1"
1679version = "0.4.1"1572version = "0.7.5"
1680source = "registry+https://github.com/rust-lang/crates.io-index"1573source = "registry+https://github.com/rust-lang/crates.io-index"
1681checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719"1574checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
1682dependencies = [1575dependencies = [
1683 "der",1576 "der",
1684 "pkcs8",1577 "pkcs8",
1685 "spki",1578 "spki",
1686 "zeroize",
1687]1579]
16881580
1689[[package]]1581[[package]]
1690name = "pkcs8"1582name = "pkcs8"
1691version = "0.9.0"1583version = "0.10.2"
1692source = "registry+https://github.com/rust-lang/crates.io-index"1584source = "registry+https://github.com/rust-lang/crates.io-index"
1693checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba"1585checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
1694dependencies = [1586dependencies = [
1695 "der",1587 "der",
1696 "spki",1588 "spki",
1697]1589]
1590
1591[[package]]
1592name = "platforms"
1593version = "3.3.0"
1594source = "registry+https://github.com/rust-lang/crates.io-index"
1595checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c"
16981596
1699[[package]]1597[[package]]
1700name = "poly1305"1598name = "poly1305"
17631661
1764[[package]]1662[[package]]
1765name = "proc-macro2"1663name = "proc-macro2"
1766version = "1.0.75"1664version = "1.0.78"
1767source = "registry+https://github.com/rust-lang/crates.io-index"1665source = "registry+https://github.com/rust-lang/crates.io-index"
1768checksum = "907a61bd0f64c2f29cd1cf1dc34d05176426a3f504a78010f08416ddb7b13708"1666checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
1769dependencies = [1667dependencies = [
1770 "unicode-ident",1668 "unicode-ident",
1771]1669]
1790 "scheduled-thread-pool",1688 "scheduled-thread-pool",
1791]1689]
1792
1793[[package]]
1794name = "rand"
1795version = "0.7.3"
1796source = "registry+https://github.com/rust-lang/crates.io-index"
1797checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
1798dependencies = [
1799 "getrandom 0.1.16",
1800 "libc",
1801 "rand_chacha 0.2.2",
1802 "rand_core 0.5.1",
1803 "rand_hc",
1804]
18051690
1806[[package]]1691[[package]]
1807name = "rand"1692name = "rand"
1810checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"1695checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
1811dependencies = [1696dependencies = [
1812 "libc",1697 "libc",
1813 "rand_chacha 0.3.1",1698 "rand_chacha",
1814 "rand_core 0.6.4",1699 "rand_core",
1815]1700]
1816
1817[[package]]
1818name = "rand_chacha"
1819version = "0.2.2"
1820source = "registry+https://github.com/rust-lang/crates.io-index"
1821checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
1822dependencies = [
1823 "ppv-lite86",
1824 "rand_core 0.5.1",
1825]
18261701
1827[[package]]1702[[package]]
1828name = "rand_chacha"1703name = "rand_chacha"
1831checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"1706checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
1832dependencies = [1707dependencies = [
1833 "ppv-lite86",1708 "ppv-lite86",
1834 "rand_core 0.6.4",1709 "rand_core",
1835]1710]
1836
1837[[package]]
1838name = "rand_core"
1839version = "0.5.1"
1840source = "registry+https://github.com/rust-lang/crates.io-index"
1841checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
1842dependencies = [
1843 "getrandom 0.1.16",
1844]
18451711
1846[[package]]1712[[package]]
1847name = "rand_core"1713name = "rand_core"
1848version = "0.6.4"1714version = "0.6.4"
1849source = "registry+https://github.com/rust-lang/crates.io-index"1715source = "registry+https://github.com/rust-lang/crates.io-index"
1850checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"1716checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
1851dependencies = [1717dependencies = [
1852 "getrandom 0.2.11",1718 "getrandom",
1853]1719]
1854
1855[[package]]
1856name = "rand_hc"
1857version = "0.2.0"
1858source = "registry+https://github.com/rust-lang/crates.io-index"
1859checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
1860dependencies = [
1861 "rand_core 0.5.1",
1862]
18631720
1864[[package]]1721[[package]]
1865name = "redox_syscall"1722name = "redox_syscall"
1870 "bitflags 1.3.2",1727 "bitflags 1.3.2",
1871]1728]
1872
1873[[package]]
1874name = "redox_users"
1875version = "0.4.4"
1876source = "registry+https://github.com/rust-lang/crates.io-index"
1877checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
1878dependencies = [
1879 "getrandom 0.2.11",
1880 "libredox",
1881 "thiserror",
1882]
18831729
1884[[package]]1730[[package]]
1885name = "regex"1731name = "regex"
1886version = "1.10.2"1732version = "1.10.3"
1887source = "registry+https://github.com/rust-lang/crates.io-index"1733source = "registry+https://github.com/rust-lang/crates.io-index"
1888checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"1734checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
1889dependencies = [1735dependencies = [
1890 "aho-corasick",1736 "aho-corasick",
1891 "memchr",1737 "memchr",
1892 "regex-automata 0.4.3",1738 "regex-automata 0.4.5",
1893 "regex-syntax 0.8.2",1739 "regex-syntax 0.8.2",
1894]1740]
18951741
19041750
1905[[package]]1751[[package]]
1906name = "regex-automata"1752name = "regex-automata"
1907version = "0.4.3"1753version = "0.4.5"
1908source = "registry+https://github.com/rust-lang/crates.io-index"1754source = "registry+https://github.com/rust-lang/crates.io-index"
1909checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"1755checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
1910dependencies = [1756dependencies = [
1911 "aho-corasick",1757 "aho-corasick",
1912 "memchr",1758 "memchr",
1950source = "registry+https://github.com/rust-lang/crates.io-index"1796source = "registry+https://github.com/rust-lang/crates.io-index"
1951checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"1797checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
1952dependencies = [1798dependencies = [
1953 "base64 0.21.5",1799 "base64",
1954 "bitflags 2.4.1",1800 "bitflags 2.4.2",
1955 "serde",1801 "serde",
1956 "serde_derive",1802 "serde_derive",
1957]1803]
19711817
1972[[package]]1818[[package]]
1973name = "rsa"1819name = "rsa"
1974version = "0.7.2"1820version = "0.9.6"
1975source = "registry+https://github.com/rust-lang/crates.io-index"1821source = "registry+https://github.com/rust-lang/crates.io-index"
1976checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c"1822checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc"
1977dependencies = [1823dependencies = [
1978 "byteorder",1824 "const-oid",
1979 "digest 0.10.7",1825 "digest",
1980 "num-bigint-dig",1826 "num-bigint-dig",
1981 "num-integer",1827 "num-integer",
1982 "num-iter",
1983 "num-traits",1828 "num-traits",
1984 "pkcs1",1829 "pkcs1",
1985 "pkcs8",1830 "pkcs8",
1986 "rand_core 0.6.4",1831 "rand_core",
1987 "signature",1832 "signature",
1988 "smallvec",1833 "spki",
1989 "subtle",1834 "subtle",
1990 "zeroize",1835 "zeroize",
1991]1836]
19921837
1993[[package]]1838[[package]]
1994name = "rust-embed"1839name = "rust-embed"
1995version = "6.8.1"1840version = "8.2.0"
1996source = "registry+https://github.com/rust-lang/crates.io-index"1841source = "registry+https://github.com/rust-lang/crates.io-index"
1997checksum = "a36224c3276f8c4ebc8c20f158eca7ca4359c8db89991c4925132aaaf6702661"1842checksum = "a82c0bbc10308ed323529fd3c1dce8badda635aa319a5ff0e6466f33b8101e3f"
1998dependencies = [1843dependencies = [
1999 "rust-embed-impl",1844 "rust-embed-impl",
2000 "rust-embed-utils",1845 "rust-embed-utils",
20031848
2004[[package]]1849[[package]]
2005name = "rust-embed-impl"1850name = "rust-embed-impl"
2006version = "6.8.1"1851version = "8.2.0"
2007source = "registry+https://github.com/rust-lang/crates.io-index"1852source = "registry+https://github.com/rust-lang/crates.io-index"
2008checksum = "49b94b81e5b2c284684141a2fb9e2a31be90638caf040bf9afbc5a0416afe1ac"1853checksum = "6227c01b1783cdfee1bcf844eb44594cd16ec71c35305bf1c9fb5aade2735e16"
2009dependencies = [1854dependencies = [
2010 "proc-macro2",1855 "proc-macro2",
2011 "quote",1856 "quote",
2012 "rust-embed-utils",1857 "rust-embed-utils",
2013 "syn 2.0.48",1858 "syn 2.0.49",
2014 "walkdir",1859 "walkdir",
2015]1860]
20161861
2017[[package]]1862[[package]]
2018name = "rust-embed-utils"1863name = "rust-embed-utils"
2019version = "7.8.1"1864version = "8.2.0"
2020source = "registry+https://github.com/rust-lang/crates.io-index"1865source = "registry+https://github.com/rust-lang/crates.io-index"
2021checksum = "9d38ff6bf570dc3bb7100fce9f7b60c33fa71d80e88da3f2580df4ff2bdded74"1866checksum = "8cb0a25bfbb2d4b4402179c2cf030387d9990857ce08a32592c6238db9fa8665"
2022dependencies = [1867dependencies = [
2023 "sha2",1868 "sha2",
2024 "walkdir",1869 "walkdir",
2036source = "registry+https://github.com/rust-lang/crates.io-index"1881source = "registry+https://github.com/rust-lang/crates.io-index"
2037checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"1882checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
1883
1884[[package]]
1885name = "rustc_version"
1886version = "0.4.0"
1887source = "registry+https://github.com/rust-lang/crates.io-index"
1888checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
1889dependencies = [
1890 "semver",
1891]
20381892
2039[[package]]1893[[package]]
2040name = "rustix"1894name = "rustix"
2041version = "0.38.28"1895version = "0.38.31"
2042source = "registry+https://github.com/rust-lang/crates.io-index"1896source = "registry+https://github.com/rust-lang/crates.io-index"
2043checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316"1897checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
2044dependencies = [1898dependencies = [
2045 "bitflags 2.4.1",1899 "bitflags 2.4.2",
2046 "errno",1900 "errno",
2047 "libc",1901 "libc",
2048 "linux-raw-sys",1902 "linux-raw-sys",
20901944
2091[[package]]1945[[package]]
2092name = "scrypt"1946name = "scrypt"
2093version = "0.10.0"1947version = "0.11.0"
2094source = "registry+https://github.com/rust-lang/crates.io-index"1948source = "registry+https://github.com/rust-lang/crates.io-index"
2095checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d"1949checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f"
2096dependencies = [1950dependencies = [
2097 "hmac",
2098 "pbkdf2",1951 "pbkdf2",
2099 "salsa20",1952 "salsa20",
2100 "sha2",1953 "sha2",
2124source = "registry+https://github.com/rust-lang/crates.io-index"1977source = "registry+https://github.com/rust-lang/crates.io-index"
2125checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba"1978checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba"
1979
1980[[package]]
1981name = "semver"
1982version = "1.0.21"
1983source = "registry+https://github.com/rust-lang/crates.io-index"
1984checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
21261985
2127[[package]]1986[[package]]
2128name = "serde"1987name = "serde"
2129version = "1.0.193"1988version = "1.0.196"
2130source = "registry+https://github.com/rust-lang/crates.io-index"1989source = "registry+https://github.com/rust-lang/crates.io-index"
2131checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"1990checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
2132dependencies = [1991dependencies = [
2133 "serde_derive",1992 "serde_derive",
2134]1993]
21442003
2145[[package]]2004[[package]]
2146name = "serde_derive"2005name = "serde_derive"
2147version = "1.0.193"2006version = "1.0.196"
2148source = "registry+https://github.com/rust-lang/crates.io-index"2007source = "registry+https://github.com/rust-lang/crates.io-index"
2149checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"2008checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
2150dependencies = [2009dependencies = [
2151 "proc-macro2",2010 "proc-macro2",
2152 "quote",2011 "quote",
2153 "syn 2.0.48",2012 "syn 2.0.49",
2154]2013]
21552014
2156[[package]]2015[[package]]
2157name = "serde_json"2016name = "serde_json"
2158version = "1.0.108"2017version = "1.0.113"
2159source = "registry+https://github.com/rust-lang/crates.io-index"2018source = "registry+https://github.com/rust-lang/crates.io-index"
2160checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"2019checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
2161dependencies = [2020dependencies = [
2162 "itoa",2021 "itoa",
2163 "ryu",2022 "ryu",
2181dependencies = [2040dependencies = [
2182 "cfg-if",2041 "cfg-if",
2183 "cpufeatures",2042 "cpufeatures",
2184 "digest 0.10.7",2043 "digest",
2185]2044]
21862045
2187[[package]]2046[[package]]
22012060
2202[[package]]2061[[package]]
2203name = "shlex"2062name = "shlex"
2204version = "1.2.0"2063version = "1.3.0"
2205source = "registry+https://github.com/rust-lang/crates.io-index"2064source = "registry+https://github.com/rust-lang/crates.io-index"
2206checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"2065checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
22072066
2208[[package]]2067[[package]]
2209name = "signal-hook-registry"2068name = "signal-hook-registry"
22162075
2217[[package]]2076[[package]]
2218name = "signature"2077name = "signature"
2219version = "1.6.4"2078version = "2.2.0"
2220source = "registry+https://github.com/rust-lang/crates.io-index"2079source = "registry+https://github.com/rust-lang/crates.io-index"
2221checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"2080checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
2222dependencies = [2081dependencies = [
2223 "digest 0.10.7",2082 "digest",
2224 "rand_core 0.6.4",2083 "rand_core",
2225]2084]
22262085
2227[[package]]2086[[package]]
22352094
2236[[package]]2095[[package]]
2237name = "smallvec"2096name = "smallvec"
2238version = "1.11.2"2097version = "1.13.1"
2239source = "registry+https://github.com/rust-lang/crates.io-index"2098source = "registry+https://github.com/rust-lang/crates.io-index"
2240checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"2099checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
22412100
2242[[package]]2101[[package]]
2243name = "smol_str"2102name = "smol_str"
22662125
2267[[package]]2126[[package]]
2268name = "spki"2127name = "spki"
2269version = "0.6.0"2128version = "0.7.3"
2270source = "registry+https://github.com/rust-lang/crates.io-index"2129source = "registry+https://github.com/rust-lang/crates.io-index"
2271checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b"2130checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
2272dependencies = [2131dependencies = [
2273 "base64ct",2132 "base64ct",
2274 "der",2133 "der",
2280source = "registry+https://github.com/rust-lang/crates.io-index"2139source = "registry+https://github.com/rust-lang/crates.io-index"
2281checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"2140checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
2141
2142[[package]]
2143name = "strsim"
2144version = "0.11.0"
2145source = "registry+https://github.com/rust-lang/crates.io-index"
2146checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01"
22822147
2283[[package]]2148[[package]]
2284name = "subtle"2149name = "subtle"
22882153
2289[[package]]2154[[package]]
2290name = "supports-color"2155name = "supports-color"
2291version = "1.3.1"2156version = "2.1.0"
2292source = "registry+https://github.com/rust-lang/crates.io-index"2157source = "registry+https://github.com/rust-lang/crates.io-index"
2293checksum = "8ba6faf2ca7ee42fdd458f4347ae0a9bd6bcc445ad7cb57ad82b383f18870d6f"2158checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89"
2294dependencies = [2159dependencies = [
2295 "atty",2160 "is-terminal",
2296 "is_ci",2161 "is_ci",
2297]2162]
22982163
23092174
2310[[package]]2175[[package]]
2311name = "syn"2176name = "syn"
2312version = "2.0.48"2177version = "2.0.49"
2313source = "registry+https://github.com/rust-lang/crates.io-index"2178source = "registry+https://github.com/rust-lang/crates.io-index"
2314checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"2179checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496"
2315dependencies = [2180dependencies = [
2316 "proc-macro2",2181 "proc-macro2",
2317 "quote",2182 "quote",
23202185
2321[[package]]2186[[package]]
2322name = "tabled"2187name = "tabled"
2323version = "0.14.0"2188version = "0.15.0"
2324source = "registry+https://github.com/rust-lang/crates.io-index"2189source = "registry+https://github.com/rust-lang/crates.io-index"
2325checksum = "dfe9c3632da101aba5131ed63f9eed38665f8b3c68703a6bb18124835c1a5d22"2190checksum = "4c998b0c8b921495196a48aabaf1901ff28be0760136e31604f7967b0792050e"
2326dependencies = [2191dependencies = [
2327 "ansi-str",
2328 "ansitok",
2329 "papergrid",2192 "papergrid",
2330 "tabled_derive",2193 "tabled_derive",
2331 "unicode-width",2194 "unicode-width",
2332]2195]
23332196
2334[[package]]2197[[package]]
2335name = "tabled_derive"2198name = "tabled_derive"
2336version = "0.6.0"2199version = "0.7.0"
2337source = "registry+https://github.com/rust-lang/crates.io-index"2200source = "registry+https://github.com/rust-lang/crates.io-index"
2338checksum = "99f688a08b54f4f02f0a3c382aefdb7884d3d69609f785bd253dc033243e3fe4"2201checksum = "4c138f99377e5d653a371cdad263615634cfc8467685dfe8e73e2b8e98f44b17"
2339dependencies = [2202dependencies = [
2340 "heck",2203 "heck",
2341 "proc-macro-error",2204 "proc-macro-error",
23462209
2347[[package]]2210[[package]]
2348name = "tempfile"2211name = "tempfile"
2349version = "3.9.0"2212version = "3.10.0"
2350source = "registry+https://github.com/rust-lang/crates.io-index"2213source = "registry+https://github.com/rust-lang/crates.io-index"
2351checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"2214checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67"
2352dependencies = [2215dependencies = [
2353 "cfg-if",2216 "cfg-if",
2354 "fastrand",2217 "fastrand",
2355 "redox_syscall",
2356 "rustix",2218 "rustix",
2357 "windows-sys 0.52.0",2219 "windows-sys 0.52.0",
2358]2220]
2359
2360[[package]]
2361name = "termcolor"
2362version = "1.4.0"
2363source = "registry+https://github.com/rust-lang/crates.io-index"
2364checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
2365dependencies = [
2366 "winapi-util",
2367]
23682221
2369[[package]]2222[[package]]
2370name = "terminal_size"2223name = "terminal_size"
23842237
2385[[package]]2238[[package]]
2386name = "thiserror"2239name = "thiserror"
2387version = "1.0.53"2240version = "1.0.57"
2388source = "registry+https://github.com/rust-lang/crates.io-index"2241source = "registry+https://github.com/rust-lang/crates.io-index"
2389checksum = "b2cd5904763bad08ad5513ddbb12cf2ae273ca53fa9f68e843e236ec6dfccc09"2242checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b"
2390dependencies = [2243dependencies = [
2391 "thiserror-impl",2244 "thiserror-impl",
2392]2245]
23932246
2394[[package]]2247[[package]]
2395name = "thiserror-impl"2248name = "thiserror-impl"
2396version = "1.0.53"2249version = "1.0.57"
2397source = "registry+https://github.com/rust-lang/crates.io-index"2250source = "registry+https://github.com/rust-lang/crates.io-index"
2398checksum = "3dcf4a824cce0aeacd6f38ae6f24234c8e80d68632338ebaa1443b5df9e29e19"2251checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81"
2399dependencies = [2252dependencies = [
2400 "proc-macro2",2253 "proc-macro2",
2401 "quote",2254 "quote",
2402 "syn 2.0.48",2255 "syn 2.0.49",
2403]2256]
24042257
2405[[package]]2258[[package]]
24142267
2415[[package]]2268[[package]]
2416name = "time"2269name = "time"
2417version = "0.3.31"2270version = "0.3.34"
2418source = "registry+https://github.com/rust-lang/crates.io-index"2271source = "registry+https://github.com/rust-lang/crates.io-index"
2419checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e"2272checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749"
2420dependencies = [2273dependencies = [
2421 "deranged",2274 "deranged",
2275 "num-conv",
2422 "powerfmt",2276 "powerfmt",
2423 "serde",2277 "serde",
2424 "time-core",2278 "time-core",
24332287
2434[[package]]2288[[package]]
2435name = "time-macros"2289name = "time-macros"
2436version = "0.2.16"2290version = "0.2.17"
2437source = "registry+https://github.com/rust-lang/crates.io-index"2291source = "registry+https://github.com/rust-lang/crates.io-index"
2438checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f"2292checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774"
2439dependencies = [2293dependencies = [
2294 "num-conv",
2440 "time-core",2295 "time-core",
2441]2296]
24422297
24512306
2452[[package]]2307[[package]]
2453name = "tokio"2308name = "tokio"
2454version = "1.35.1"2309version = "1.36.0"
2455source = "registry+https://github.com/rust-lang/crates.io-index"2310source = "registry+https://github.com/rust-lang/crates.io-index"
2456checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"2311checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931"
2457dependencies = [2312dependencies = [
2458 "backtrace",2313 "backtrace",
2459 "bytes",2314 "bytes",
2475dependencies = [2330dependencies = [
2476 "proc-macro2",2331 "proc-macro2",
2477 "quote",2332 "quote",
2478 "syn 2.0.48",2333 "syn 2.0.49",
2479]2334]
24802335
2481[[package]]2336[[package]]
25132368
2514[[package]]2369[[package]]
2515name = "toml"2370name = "toml"
2516version = "0.8.8"2371version = "0.8.10"
2517source = "registry+https://github.com/rust-lang/crates.io-index"2372source = "registry+https://github.com/rust-lang/crates.io-index"
2518checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"2373checksum = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290"
2519dependencies = [2374dependencies = [
2520 "serde",2375 "serde",
2521 "serde_spanned",2376 "serde_spanned",
25342389
2535[[package]]2390[[package]]
2536name = "toml_edit"2391name = "toml_edit"
2537version = "0.21.0"2392version = "0.22.6"
2538source = "registry+https://github.com/rust-lang/crates.io-index"2393source = "registry+https://github.com/rust-lang/crates.io-index"
2539checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"2394checksum = "2c1b5fd4128cc8d3e0cb74d4ed9a9cc7c7284becd4df68f5f940e1ad123606f6"
2540dependencies = [2395dependencies = [
2541 "indexmap",2396 "indexmap",
2542 "serde",2397 "serde",
2564dependencies = [2419dependencies = [
2565 "proc-macro2",2420 "proc-macro2",
2566 "quote",2421 "quote",
2567 "syn 2.0.48",2422 "syn 2.0.49",
2568]2423]
25692424
2570[[package]]2425[[package]]
2716 "itoa",2571 "itoa",
2717 "log",2572 "log",
2718 "unicode-width",2573 "unicode-width",
2719 "vte 0.11.1",2574 "vte",
2720]2575]
2721
2722[[package]]
2723name = "vte"
2724version = "0.10.1"
2725source = "registry+https://github.com/rust-lang/crates.io-index"
2726checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983"
2727dependencies = [
2728 "arrayvec 0.5.2",
2729 "utf8parse",
2730 "vte_generate_state_changes",
2731]
27322576
2733[[package]]2577[[package]]
2734name = "vte"2578name = "vte"
2735version = "0.11.1"2579version = "0.11.1"
2736source = "registry+https://github.com/rust-lang/crates.io-index"2580source = "registry+https://github.com/rust-lang/crates.io-index"
2737checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197"2581checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197"
2738dependencies = [2582dependencies = [
2739 "arrayvec 0.7.4",2583 "arrayvec",
2740 "utf8parse",2584 "utf8parse",
2741 "vte_generate_state_changes",2585 "vte_generate_state_changes",
2742]2586]
2761 "winapi-util",2605 "winapi-util",
2762]2606]
2763
2764[[package]]
2765name = "wasi"
2766version = "0.9.0+wasi-snapshot-preview1"
2767source = "registry+https://github.com/rust-lang/crates.io-index"
2768checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
27692607
2770[[package]]2608[[package]]
2771name = "wasi"2609name = "wasi"
27752613
2776[[package]]2614[[package]]
2777name = "wasm-bindgen"2615name = "wasm-bindgen"
2778version = "0.2.89"2616version = "0.2.91"
2779source = "registry+https://github.com/rust-lang/crates.io-index"2617source = "registry+https://github.com/rust-lang/crates.io-index"
2780checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"2618checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f"
2781dependencies = [2619dependencies = [
2782 "cfg-if",2620 "cfg-if",
2783 "wasm-bindgen-macro",2621 "wasm-bindgen-macro",
2784]2622]
27852623
2786[[package]]2624[[package]]
2787name = "wasm-bindgen-backend"2625name = "wasm-bindgen-backend"
2788version = "0.2.89"2626version = "0.2.91"
2789source = "registry+https://github.com/rust-lang/crates.io-index"2627source = "registry+https://github.com/rust-lang/crates.io-index"
2790checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"2628checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b"
2791dependencies = [2629dependencies = [
2792 "bumpalo",2630 "bumpalo",
2793 "log",2631 "log",
2794 "once_cell",2632 "once_cell",
2795 "proc-macro2",2633 "proc-macro2",
2796 "quote",2634 "quote",
2797 "syn 2.0.48",2635 "syn 2.0.49",
2798 "wasm-bindgen-shared",2636 "wasm-bindgen-shared",
2799]2637]
28002638
2801[[package]]2639[[package]]
2802name = "wasm-bindgen-macro"2640name = "wasm-bindgen-macro"
2803version = "0.2.89"2641version = "0.2.91"
2804source = "registry+https://github.com/rust-lang/crates.io-index"2642source = "registry+https://github.com/rust-lang/crates.io-index"
2805checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"2643checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed"
2806dependencies = [2644dependencies = [
2807 "quote",2645 "quote",
2808 "wasm-bindgen-macro-support",2646 "wasm-bindgen-macro-support",
2809]2647]
28102648
2811[[package]]2649[[package]]
2812name = "wasm-bindgen-macro-support"2650name = "wasm-bindgen-macro-support"
2813version = "0.2.89"2651version = "0.2.91"
2814source = "registry+https://github.com/rust-lang/crates.io-index"2652source = "registry+https://github.com/rust-lang/crates.io-index"
2815checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"2653checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66"
2816dependencies = [2654dependencies = [
2817 "proc-macro2",2655 "proc-macro2",
2818 "quote",2656 "quote",
2819 "syn 2.0.48",2657 "syn 2.0.49",
2820 "wasm-bindgen-backend",2658 "wasm-bindgen-backend",
2821 "wasm-bindgen-shared",2659 "wasm-bindgen-shared",
2822]2660]
28232661
2824[[package]]2662[[package]]
2825name = "wasm-bindgen-shared"2663name = "wasm-bindgen-shared"
2826version = "0.2.89"2664version = "0.2.91"
2827source = "registry+https://github.com/rust-lang/crates.io-index"2665source = "registry+https://github.com/rust-lang/crates.io-index"
2828checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"2666checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838"
28292667
2830[[package]]2668[[package]]
2831name = "winapi"2669name = "winapi"
2867 "windows-targets 0.52.0",2705 "windows-targets 0.52.0",
2868]2706]
2869
2870[[package]]
2871name = "windows-sys"
2872version = "0.45.0"
2873source = "registry+https://github.com/rust-lang/crates.io-index"
2874checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
2875dependencies = [
2876 "windows-targets 0.42.2",
2877]
28782707
2879[[package]]2708[[package]]
2880name = "windows-sys"2709name = "windows-sys"
2894 "windows-targets 0.52.0",2723 "windows-targets 0.52.0",
2895]2724]
2896
2897[[package]]
2898name = "windows-targets"
2899version = "0.42.2"
2900source = "registry+https://github.com/rust-lang/crates.io-index"
2901checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
2902dependencies = [
2903 "windows_aarch64_gnullvm 0.42.2",
2904 "windows_aarch64_msvc 0.42.2",
2905 "windows_i686_gnu 0.42.2",
2906 "windows_i686_msvc 0.42.2",
2907 "windows_x86_64_gnu 0.42.2",
2908 "windows_x86_64_gnullvm 0.42.2",
2909 "windows_x86_64_msvc 0.42.2",
2910]
29112725
2912[[package]]2726[[package]]
2913name = "windows-targets"2727name = "windows-targets"
2939 "windows_x86_64_msvc 0.52.0",2753 "windows_x86_64_msvc 0.52.0",
2940]2754]
2941
2942[[package]]
2943name = "windows_aarch64_gnullvm"
2944version = "0.42.2"
2945source = "registry+https://github.com/rust-lang/crates.io-index"
2946checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
29472755
2948[[package]]2756[[package]]
2949name = "windows_aarch64_gnullvm"2757name = "windows_aarch64_gnullvm"
2957source = "registry+https://github.com/rust-lang/crates.io-index"2765source = "registry+https://github.com/rust-lang/crates.io-index"
2958checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"2766checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
2959
2960[[package]]
2961name = "windows_aarch64_msvc"
2962version = "0.42.2"
2963source = "registry+https://github.com/rust-lang/crates.io-index"
2964checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
29652767
2966[[package]]2768[[package]]
2967name = "windows_aarch64_msvc"2769name = "windows_aarch64_msvc"
2975source = "registry+https://github.com/rust-lang/crates.io-index"2777source = "registry+https://github.com/rust-lang/crates.io-index"
2976checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"2778checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
2977
2978[[package]]
2979name = "windows_i686_gnu"
2980version = "0.42.2"
2981source = "registry+https://github.com/rust-lang/crates.io-index"
2982checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
29832779
2984[[package]]2780[[package]]
2985name = "windows_i686_gnu"2781name = "windows_i686_gnu"
2993source = "registry+https://github.com/rust-lang/crates.io-index"2789source = "registry+https://github.com/rust-lang/crates.io-index"
2994checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"2790checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
2995
2996[[package]]
2997name = "windows_i686_msvc"
2998version = "0.42.2"
2999source = "registry+https://github.com/rust-lang/crates.io-index"
3000checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
30012791
3002[[package]]2792[[package]]
3003name = "windows_i686_msvc"2793name = "windows_i686_msvc"
3011source = "registry+https://github.com/rust-lang/crates.io-index"2801source = "registry+https://github.com/rust-lang/crates.io-index"
3012checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"2802checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
3013
3014[[package]]
3015name = "windows_x86_64_gnu"
3016version = "0.42.2"
3017source = "registry+https://github.com/rust-lang/crates.io-index"
3018checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
30192803
3020[[package]]2804[[package]]
3021name = "windows_x86_64_gnu"2805name = "windows_x86_64_gnu"
3029source = "registry+https://github.com/rust-lang/crates.io-index"2813source = "registry+https://github.com/rust-lang/crates.io-index"
3030checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"2814checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
3031
3032[[package]]
3033name = "windows_x86_64_gnullvm"
3034version = "0.42.2"
3035source = "registry+https://github.com/rust-lang/crates.io-index"
3036checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
30372815
3038[[package]]2816[[package]]
3039name = "windows_x86_64_gnullvm"2817name = "windows_x86_64_gnullvm"
3047source = "registry+https://github.com/rust-lang/crates.io-index"2825source = "registry+https://github.com/rust-lang/crates.io-index"
3048checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"2826checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
3049
3050[[package]]
3051name = "windows_x86_64_msvc"
3052version = "0.42.2"
3053source = "registry+https://github.com/rust-lang/crates.io-index"
3054checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
30552827
3056[[package]]2828[[package]]
3057name = "windows_x86_64_msvc"2829name = "windows_x86_64_msvc"
30672839
3068[[package]]2840[[package]]
3069name = "winnow"2841name = "winnow"
3070version = "0.5.31"2842version = "0.6.1"
3071source = "registry+https://github.com/rust-lang/crates.io-index"2843source = "registry+https://github.com/rust-lang/crates.io-index"
3072checksum = "97a4882e6b134d6c28953a387571f1acdd3496830d5e36c5e3a1075580ea641c"2844checksum = "d90f4e0f530c4c69f62b80d839e9ef3855edc9cba471a160c4d692deed62b401"
3073dependencies = [2845dependencies = [
3074 "memchr",2846 "memchr",
3075]2847]
30762848
3077[[package]]2849[[package]]
3078name = "x25519-dalek"2850name = "x25519-dalek"
3079version = "1.1.1"2851version = "2.0.1"
3080source = "registry+https://github.com/rust-lang/crates.io-index"2852source = "registry+https://github.com/rust-lang/crates.io-index"
3081checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f"2853checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277"
3082dependencies = [2854dependencies = [
3083 "curve25519-dalek",2855 "curve25519-dalek",
3084 "rand_core 0.5.1",2856 "rand_core",
2857 "serde",
3085 "zeroize",2858 "zeroize",
3086]2859]
30872860
3108dependencies = [2881dependencies = [
3109 "proc-macro2",2882 "proc-macro2",
3110 "quote",2883 "quote",
3111 "syn 2.0.48",2884 "syn 2.0.49",
3112]2885]
31132886
modifiedCargo.tomldiffbeforeafterboth
6nixlike = { path = "./crates/nixlike" }6nixlike = { path = "./crates/nixlike" }
7better-command = { path = "./crates/better-command" }7better-command = { path = "./crates/better-command" }
8bifrostlink = "0.1.0"8bifrostlink = "0.1.0"
9uuid = { version = "1.3.3", features = ["v4"] }9uuid = { version = "1.7.0", features = ["v4"] }
10tokio = { version = "1.33.0", features = ["fs", "rt", "macros", "sync", "time", "rt-multi-thread"] }10tokio = { version = "1.36.0", features = ["fs", "rt", "macros", "sync", "time", "rt-multi-thread"] }
1111
modifiedREADME.adocdiffbeforeafterboth
12- Secrets can be securely stored in Git (No one except target hosts can decrypt them), automatically regenerated, reencrypted, etc.12- Secrets can be securely stored in Git (No one except target hosts can decrypt them), automatically regenerated, reencrypted, etc.
13- Automatic rollback on deployment failure, which will work, as long as system is passing initrd stage (So still be carefull with root filesystem mount)13- Automatic rollback on deployment failure, which will work, as long as system is passing initrd stage (So still be carefull with root filesystem mount)
14
15== Secret generator example
16
17TODO:: This section should into some kind of fleet documentation... But as there is none, it is just left here as-is.
18
19=== Quickly run securely setup gitlab
20
21[source,nix]
22----
23{config, ...}: {
24 secrets = let ownership = { owner = "gitlab"; group = "gitlab"; }; in {
25 gitlab-initial-root = {
26 generator = {mkPassword}: mkPassword {};
27 } // ownership;
28 gitlab-secret = {
29 generator = {mkPassword}: mkPassword {};
30 } // ownership;
31 gitlab-otp = {
32 generator = {mkPassword}: mkPassword {};
33 } // ownership;
34 gitlab-db = {
35 generator = {mkPassword}: mkPassword {};
36 } // ownership;
37 gitlab-jws = {
38 generator = {mkRsa}: mkRsa {};
39 } // ownership;
40 };
41 services.gitlab = let secrets = config.secrets; in {
42 enable = true;
43 initialRootPasswordFile = secrets.gitlab-initial-root.secretPath;
44 secrets = {
45 secretFile = secrets.gitlab-secret.secretPath;
46 otpFile = secrets.gitlab-otp.secretPath;
47 dbFile = secrets.gitlab-db.secretPath;
48 jwsFile = secrets.gitlab-jws.secretPath;
49 };
50 };
51}
52----
53
54=== Securely initialize kubernetes secrets
55
56In my homelab and clusters, I almost always have some sort of HSM, and to issue new kubernetes certs I directly connect to it.
57This setup should probably split into multiple steps, where I allow target machine to generate CSR, then copy it to the HSM machine, and then sign it there... But this is just the plan.
58I want to build ansible-like script execution in fleet for this kind of tasks.
59
60[source,nix]
61----
62{...}: {
63 # First I define required secret generators:
64 nixpkgs.overlays = [
65 (final: prev: let
66 lib = final.lib;
67 in {
68 readKubernetesCa = {impureOn}:
69 final.mkImpureSecretGenerator ''
70 cd ~/ca
71
72 cert=kubernetes-intermediateCA.crt
73
74 expires_at=$(openssl x509 -in $cert -noout -enddate | cut -d= -f2 | xargs -I{} date -u -d {} +"%Y-%m-%dT%H:%M:%S.%NZ")
75 echo -n $expires_at > $out/expires_at
76
77 cat $cert > $out/public
78 ''
79 impureOn;
80 mkKubernetesCert = {
81 subj,
82 sans ? [],
83 impureOn,
84 }:
85 final.mkImpureSecretGenerator ''
86 cd ~/ca
87
88 params=$(sudo mktemp)
89 csr=$(sudo mktemp)
90 cert=$(sudo mktemp)
91 sudo openssl ecparam -genkey -name secp384r1 -out $params
92 sudo openssl req -new -key $params \
93 -subj "${lib.strings.concatStringsSep "" (lib.attrsets.mapAttrsToList (k: v: "/${k}=${v}") subj)}" \
94 ${lib.optionalString (sans != []) "-addext \"subjectAltName = ${lib.strings.concatStringsSep "," sans}\""} \
95 -out $csr
96 sudo hsms x509 -req -days 365 -in $csr -CA kubernetes-intermediateCA.crt -CAkey "pkcs11:object=[CENSORED] Kubernetes Intermediate CA;type=private" -CAcreateserial -copy_extensions copy -out $cert
97
98 expires_at=$(sudo openssl x509 -in $cert -noout -enddate | cut -d= -f2 | xargs -I{} date -u -d {} +"%Y-%m-%dT%H:%M:%S.%NZ")
99 echo -n $expires_at > $out/expires_at
100
101 sudo cat $params | encrypt > $out/secret
102 sudo cat $cert > $out/public
103 ''
104 impureOn;
105 })
106 ];
107 # Those secret generators are impure, thus they are run in system environment.
108 # Probably there needs to be a dedicated user for that kind of tasks, but this is my current setup, don't judge.
109 # I write a couple of scripts for executing openssl with HSM.
110 environment.systemPackages = [
111 pkgs.openssl.bin
112 (pkgs.writeShellApplication {
113 name = "hsms";
114 text = ''
115 set -eu
116 export OPENSSL_CONF=${openssl-conf}
117 # Yay, using secrets to generate secrets!
118 HSM_PIN=$(cat ${config.secrets.hsm-pin.secretPath})
119 exec ${pkgs.openssl}/bin/openssl "$@" -keyform=engine -CAkeyform=engine -engine=pkcs11 -passin=pass:"$HSM_PIN"
120 '';
121 })
122 (pkgs.writeShellApplication {
123 name = "hsmt";
124 text = ''
125 set -eu
126 HSM_PIN=$(cat ${config.secrets.hsm-pin.secretPath})
127 exec ${pkgs.opensc}/bin/pkcs11-tool -l --pin="$HSM_PIN" "$@"
128 '';
129 })
130 ];
131 # And finally, I have secrets, which are shared between machines.
132 # Note that this example is somewhat wrong, as this goes not into the machine configuration, but to fleet configuration.
133 sharedSecrets = {
134 "ca.pem" = {
135 # This is just the public key, no need to regenerate it to change owner list
136 regenerateOnOwnerAdded = false;
137 # For secret regeneration/reencryption, we need to specify which machines SHOULD have it.
138 expectedOwners = ["controlplane-1" "controlplane-2" "worker-1" "worker-2"];
139 generator = {readKubernetesCa}:
140 readKubernetesCa {
141 impureOn = "[CENSORED]";
142 };
143 };
144 "kube-admin.pem" = {
145 regenerateOnOwnerAdded = false;
146 expectedOwners = ["cluster-admin"];
147 generator = {mkKubernetesCert}:
148 mkKubernetesCert {
149 subj = {
150 CN = "admin";
151 O = "system:masters";
152 };
153 impureOn = "[CENSORED]";
154 };
155 };
156 "kube-apiserver.pem" = {
157 # This secret depends on machine SANS, so if owner list has been changed, then we need to regenerate it.
158 # However, SANS dependency is in fact handled by secret seed, and secret is regenerated if the seed is changed...
159 #
160 # In this case regeneration is added as a half-assed security measure, as if apiserver is removed, we don't
161 # want for it to be able to pretend like it is a valid server.
162 #
163 # However, certificate revokation is complicated in my setup, and I can't show it here.
164 regenerateOnOwnerAdded = true;
165 expectedOwners = ["controlplane-1" "controlplane-2"];
166 generator = {mkKubernetesCert}:
167 mkKubernetesCert {
168 inherit sans;
169 subj.CN = "kubernetes";
170 impureOn = "[CENSORED]";
171 };
172 };
173}
174----
14175
modifiedcmds/fleet/Cargo.tomldiffbeforeafterboth
12anyhow = "1.0"12anyhow = "1.0"
13serde = { version = "1.0", features = ["derive"] }13serde = { version = "1.0", features = ["derive"] }
14serde_json = "1.0"14serde_json = "1.0"
15time = { version = "0.3.30", features = ["serde"] }15time = { version = "0.3", features = ["serde"] }
16tempfile = "3.8"16tempfile = "3.10"
17once_cell = "1.18.0"17once_cell = "1.19"
18hostname = "0.3.1"18hostname = "0.3"
19age-core = "0.9.0"19age-core = "0.10"
20peg = "0.8.2"20peg = "0.8"
21age = { version = "0.9.2", features = ["ssh", "armor"] }21age = { version = "0.10", features = ["ssh", "armor"] }
22base64 = "0.21.5"22base64 = "0.21"
23chrono = { version = "0.4.31", features = ["serde"] }23chrono = { version = "0.4", features = ["serde"] }
24z85 = "3.0.5"24z85 = "3.0"
25clap = { version = "4.4.7", features = [25clap = { version = "4.5", features = [
26 "derive",26 "derive",
27 "env",27 "env",
28 "wrap_help",28 "wrap_help",
29 "unicode",29 "unicode",
30] }30] }
31tracing = "0.1"31tracing = "0.1"
32tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] }32tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] }
33tokio-util = { version = "0.7.10", features = ["codec"] }33tokio-util = { version = "0.7", features = ["codec"] }
34async-trait = "0.1.74"34async-trait = "0.1"
35futures = "0.3.29"35futures = "0.3"
36tracing-indicatif = "0.3.5"36tracing-indicatif = "0.3"
37indicatif = "0.17.7"37indicatif = "0.17"
38itertools = "0.11.0"38itertools = "0.12"
39shlex = "1.2.0"39shlex = "1.3"
40tabled = { version = "0.14.0", features = ["color"] }40tabled = { version = "0.15" }
41owo-colors = { version = "3.5.0", features = ["supports-color", "supports-colors"] }41owo-colors = { version = "4.0", features = ["supports-color", "supports-colors"] }
42r2d2 = "0.8.10"42r2d2 = "0.8.10"
43abort-on-drop = "0.2.2"43abort-on-drop = "0.2"
44unindent = "0.2.3"44unindent = "0.2"
45regex = "1.10.2"45regex = "1.10"
46openssh = "0.10.1"46openssh = "0.10"
47human-repr = "1.1.0"47human-repr = "1.1"
4848
modifiedcmds/fleet/src/cmds/secrets/mod.rsdiffbeforeafterboth
1use crate::{1use crate::{
2 better_nix_eval::Field,2 better_nix_eval::Field,
3 command::MyCommand,
3 fleetdata::{FleetSecret, FleetSharedSecret, SecretData},4 fleetdata::{FleetSecret, FleetSharedSecret, SecretData},
4 host::Config,5 host::Config,
5 nix_go, nix_go_json,6 nix_go, nix_go_json,
8use chrono::{DateTime, Utc};9use chrono::{DateTime, Utc};
9use clap::Parser;10use clap::Parser;
10use owo_colors::OwoColorize;11use owo_colors::OwoColorize;
11use serde::Deserialize;12use serde::{de::DeserializeOwned, Deserialize};
12use std::{13use std::{
13 collections::{BTreeSet, HashSet},14 collections::{BTreeSet, HashSet},
14 io::{self, Cursor, Read},15 io::{self, Cursor, Read},
15 path::PathBuf,16 path::{Path, PathBuf},
17 str::FromStr,
16};18};
17use tabled::{Table, Tabled};19use tabled::{Table, Tabled};
20use tempfile::tempdir;
18use tokio::fs::read_to_string;21use tokio::fs::{self, read_to_string};
19use tracing::{error, info, info_span, warn, Instrument};22use tracing::{error, info, info_span, warn, Instrument};
2023
21#[derive(Parser)]24#[derive(Parser)]
67 #[clap(long)]70 #[clap(long)]
68 plaintext: bool,71 plaintext: bool,
69 },72 },
73 ReadPublic {
74 name: String,
75 machine: String,
76 },
70 UpdateShared {77 UpdateShared {
71 name: String,78 name: String,
7279
151#[serde(rename_all = "camelCase")]158#[serde(rename_all = "camelCase")]
152enum GeneratorKind {159enum GeneratorKind {
153 Impure,160 Impure,
161 Pure,
154}162}
155163
164async fn generate_pure(
165 config: &Config,
166 _display_name: &str,
167 secret: Field,
168 default_generator: Field,
169 owners: &[String],
170) -> Result<FleetSecret> {
171 // TODO: pure secrets are supposed to be generated by nix daemon itself,
172 // inside of a sandbox... But we aren't here yet.
173 let config_field = &config.config_unchecked_field;
174 let generator = nix_go!(secret.generator);
175 let default_pkgs = &config.default_pkgs;
176
177 let call_package = nix_go!(default_pkgs.callPackage);
178
179 let generator = nix_go!(call_package(generator)(Obj {}));
180 let generator = generator.build().await?;
181 let generator = generator
182 .get("out")
183 .ok_or_else(|| anyhow!("missing generate out"))?;
184
185 let mut recipients = String::new();
186 for owner in owners {
187 let key = config.key(owner).await?;
188 recipients.push_str(&format!("-r \"{key}\" "));
189 }
190 recipients.push_str("-e");
191
192 let out = tempdir()?;
193
194 let mut gen = MyCommand::new(generator);
195 gen.env("rageArgs", recipients);
196 gen.env(
197 "out",
198 out.path().to_str().expect("sane tempdir should be utf-8"),
199 );
200 gen.run().await.context("impure generator")?;
201
202 {
203 let mut marker_path = out.path().to_owned();
204 marker_path.push("marker");
205 let marker = fs::read_to_string(&marker_path).await?;
206 ensure!(marker == "SUCCESS", "generation not succeeded");
207 }
208
209 let mut public_path = out.path().to_owned();
210 public_path.push("public");
211 let mut secret_path = out.path().to_owned();
212 secret_path.push("secret");
213 let public = fs::read_to_string(&public_path).await.ok();
214 let secret = fs::read(&secret_path).await.ok();
215 if let Some(secret) = &secret {
216 ensure!(
217 age::Decryptor::new(Cursor::new(&secret)).is_ok(),
218 "builder produced non-encrypted value as secret, this is highly insecure, and not allowed."
219 );
220 }
221
222 let mut created_at_path = out.path().to_owned();
223 created_at_path.push("created_at");
224 let mut expires_at_path = out.path().to_owned();
225 expires_at_path.push("expires_at");
226
227 async fn read_value<T: FromStr>(path: &Path) -> Result<T> {
228 dbg!(path);
229 let raw = fs::read(path).await?;
230 let raw = String::from_utf8(raw)?;
231 raw.parse().map_err(|_| anyhow!("fromStr failed"))
232 }
233
234 let created_at = read_value(&created_at_path).await?;
235 let expires_at = read_value(&expires_at_path).await.ok();
236
237 Ok(FleetSecret {
238 created_at,
239 expires_at,
240 public,
241 secret: secret.map(SecretData),
242 })
243}
156async fn generate_impure(244async fn generate_impure(
157 config: &Config,245 config: &Config,
158 _display_name: &str,246 _display_name: &str,
254 GeneratorKind::Impure => {342 GeneratorKind::Impure => {
255 generate_impure(config, display_name, secret, default_generator, owners).await343 generate_impure(config, display_name, secret, default_generator, owners).await
256 }344 }
345 GeneratorKind::Pure => {
346 generate_pure(config, display_name, secret, default_generator, owners).await
347 }
257 }348 }
258}349}
259async fn generate_shared(350async fn generate_shared(
357 expires_at,448 expires_at,
358 re_add,449 re_add,
359 } => {450 } => {
451 // TODO: Forbid updating secrets with set expectedOwners (= not user-managed).
452
360 let exists = config.has_shared(&name);453 let exists = config.has_shared(&name);
361 if exists && !force && !re_add {454 if exists && !force && !re_add {
456 println!("{}", z85::encode(&data));549 println!("{}", z85::encode(&data));
457 }550 }
458 }551 }
552 Secret::ReadPublic {
553 name,
554 machine,
555 } => {
556 let secret = config.host_secret(&machine, &name)?;
557 let Some(public) = secret.public else {
558 bail!("no secret {name}");
559 };
560 print!("{public}");
561 }
459 Secret::UpdateShared {562 Secret::UpdateShared {
460 name,563 name,
461 machines,564 machines,
462 add_machines,565 add_machines,
463 remove_machines,566 remove_machines,
464 prefer_identities,567 prefer_identities,
465 } => {568 } => {
569 // TODO: Forbid updating secrets with set expectedOwners (= not user-managed).
570
466 let secret = config.shared_secret(&name)?;571 let secret = config.shared_secret(&name)?;
467 if secret.secret.secret.is_none() {572 if secret.secret.secret.is_none() {
modifiedcmds/fleet/src/main.rsdiffbeforeafterboth
1111
12mod fleetdata;12mod fleetdata;
1313
14use std::ffi::OsString;14use std::time::Duration;
15use std::process::exit;15use std::{ffi::OsString, process::ExitCode};
16use std::time::Duration;
1716
18use anyhow::{bail, Result};17use anyhow::{bail, Result};
19use clap::Parser;18use clap::Parser;
62 path.push(entry.path());61 path.push(entry.path());
6362
64 let mut status = MyCommand::new("nix");63 let mut status = MyCommand::new("nix");
64 status.args(&config.nix_args);
65 status.arg("store").arg("prefetch-file").arg(path);65 status.arg("store").arg("prefetch-file").arg(path);
66 status.run_nix_string().instrument(span).await?;66 status.run_nix_string().instrument(span).await?;
67 Ok(())67 Ok(())
118 return;118 return;
119 };119 };
120 let pos = state.pos();120 let pos = state.pos();
121 if pos > len {
122 let _ = write!(writer, "{}", pos.human_count_bare());
123 } else {
121 let _ = write!(writer, "{} / {}", pos.human_count_bare(), len.human_count_bare());124 let _ = write!(writer, "{} / {}", pos.human_count_bare(), len.human_count_bare());
125 }
122 })126 })
123 .with_key(127 .with_key(
124 "color_start",128 "color_start",
151 tracing_subscriber::fmt::layer()155 tracing_subscriber::fmt::layer()
152 .without_time()156 .without_time()
153 .with_target(true)157 .with_target(true)
154 .with_writer(indicatif_layer.get_stderr_writer())158 .with_writer(indicatif_layer.get_stdout_writer())
155 .with_filter(filter), // .withou,159 .with_filter(filter), // .withou,
156 )160 )
157 .with(indicatif_layer)161 .with(indicatif_layer)
158 .init();162 .init();
159}163}
160164
161#[tokio::main]165#[tokio::main]
162async fn main() {166async fn main() -> ExitCode {
163 setup_logging();167 setup_logging();
164 if let Err(e) = main_real().await {168 if let Err(e) = main_real().await {
169 // If I remove this line, the next error!() line gets eaten.
170 info!("fixme: this line gets eaten by tracing-indicatif on levels info+");
165 error!("{e:#}");171 error!("{e:#}");
166 exit(1);172 return ExitCode::FAILURE;
167 }173 }
174 ExitCode::SUCCESS
168}175}
169176
170async fn main_real() -> Result<()> {177async fn main_real() -> Result<()> {
modifiedcmds/install-secrets/Cargo.tomldiffbeforeafterboth
4edition = "2021"4edition = "2021"
55
6[dependencies]6[dependencies]
7age = { version = "0.9.2", features = ["ssh"] }7age = { version = "0.10.0", features = ["ssh"] }
8anyhow = "1.0.75"8anyhow = "1.0.79"
9env_logger = "0.10.0"9tracing-subscriber = "0.3"
10log = "0.4.20"10tracing = "0.1"
11nix = {version = "0.27.1", features = ["user", "fs"]}11nix = {version = "0.27.1", features = ["user", "fs"]}
12serde = { version = "1.0.190", features = ["derive"] }12serde = { version = "1.0.196", features = ["derive"] }
13serde_json = "1.0.107"13serde_json = "1.0.113"
14clap = { version = "4.4.7", features = [14clap = { version = "4.5.1", features = [
15 "derive",15 "derive",
16 "env",16 "env",
17 "wrap_help",17 "wrap_help",
18 "unicode",18 "unicode",
19] }19] }
20tempfile = "3.8.1"20tempfile = "3.10.0"
21z85 = "3.0.5"21z85 = "3.0.5"
2222
modifiedcmds/install-secrets/src/main.rsdiffbeforeafterboth
2use age::{Encryptor, Identity, Recipient};2use age::{Encryptor, Identity, Recipient};
3use anyhow::{anyhow, bail, Context, Result};3use anyhow::{anyhow, bail, Context, Result};
4use clap::Parser;4use clap::Parser;
5use log::{error, info, warn};
6use nix::sys::stat::Mode;5use nix::sys::stat::Mode;
7use nix::unistd::{User, Group, chown};6use nix::unistd::{chown, Group, User};
8use serde::{Deserialize, Deserializer};7use serde::{Deserialize, Deserializer};
9use std::fmt::{self, Display};8use std::fmt::{self, Display};
10use std::fs::{self, File};9use std::fs::{self, File};
14use std::path::Path;13use std::path::Path;
15use std::str::{from_utf8, FromStr};14use std::str::{from_utf8, FromStr};
16use std::{collections::HashMap, path::PathBuf};15use std::{collections::HashMap, path::PathBuf};
16use tracing::{error, info, warn};
17use tracing_subscriber::filter::LevelFilter;
18use tracing_subscriber::EnvFilter;
1719
18#[derive(Clone, Debug)]20#[derive(Clone, Debug)]
19struct SecretWrapper(Vec<u8>);21struct SecretWrapper(Vec<u8>);
228}230}
229231
230fn main() -> anyhow::Result<()> {232fn main() -> anyhow::Result<()> {
233 tracing_subscriber::fmt()
234 .with_env_filter(
231 env_logger::Builder::new()235 EnvFilter::builder()
236 .with_default_directive(LevelFilter::INFO.into())
237 .from_env_lossy(),
238 )
232 .filter_level(log::LevelFilter::Info)239 .without_time()
233 .init();240 .init();
234241
235 let opts = Opts::parse();242 let opts = Opts::parse();
modifiedcrates/better-command/Cargo.tomldiffbeforeafterboth
3version = "0.1.0"3version = "0.1.0"
4edition = "2021"4edition = "2021"
5
6# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
75
8[dependencies]6[dependencies]
9once_cell = "1.19.0"7once_cell = "1.19"
10regex = "1.10.2"8regex = "1.10"
11serde = { version = "1.0.193", features = ["derive"] }9serde = { version = "1.0", features = ["derive"] }
12serde_json = "1.0.108"10serde_json = "1.0"
13tracing = "0.1.40"11tracing = "0.1"
14tracing-indicatif = "0.3.6"12tracing-indicatif = "0.3"
1513
modifiedcrates/nixlike/Cargo.tomldiffbeforeafterboth
7alejandra = {git = "https://github.com/kamadorueda/alejandra"}7alejandra = {git = "https://github.com/kamadorueda/alejandra"}
8linked-hash-map = "0.5.6"8linked-hash-map = "0.5.6"
9peg = "0.8.2"9peg = "0.8.2"
10serde = "1.0.190"10serde = "1.0.196"
11thiserror = "1.0.50"11thiserror = "1.0.57"
12serde_json = "1.0.107"12serde_json = "1.0.113"
13ron = "0.8.1"13ron = "0.8.1"
14serde-transcode = "1.1.1"14serde-transcode = "1.1.1"
1515
modifiedflake.lockdiffbeforeafterboth
5 "systems": "systems"5 "systems": "systems"
6 },6 },
7 "locked": {7 "locked": {
8 "lastModified": 1701680307,8 "lastModified": 1705309234,
9 "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",9 "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
10 "owner": "numtide",10 "owner": "numtide",
11 "repo": "flake-utils",11 "repo": "flake-utils",
12 "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",12 "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
13 "type": "github"13 "type": "github"
14 },14 },
15 "original": {15 "original": {
23 "systems": "systems_2"23 "systems": "systems_2"
24 },24 },
25 "locked": {25 "locked": {
26 "lastModified": 1681202837,26 "lastModified": 1705309234,
27 "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",27 "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
28 "owner": "numtide",28 "owner": "numtide",
29 "repo": "flake-utils",29 "repo": "flake-utils",
30 "rev": "cfacdce06f30d2b68473a46042957675eebb3401",30 "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
31 "type": "github"31 "type": "github"
32 },32 },
33 "original": {33 "original": {
38 },38 },
39 "nixpkgs": {39 "nixpkgs": {
40 "locked": {40 "locked": {
41 "lastModified": 1704409229,41 "lastModified": 1708177587,
42 "narHash": "sha256-Vc41cRJ3trOnocovLe0zZE35pK5Lfuo/zHk0xx3CNDY=",42 "narHash": "sha256-Tj/YV9kdC+I7V/kjrq3Bdl8z2VIHT5hiAG74s52vLgw=",
43 "owner": "nixos",43 "owner": "nixos",
44 "repo": "nixpkgs",44 "repo": "nixpkgs",
45 "rev": "786f788914f2a6e94cedf361541894e972b8fd23",45 "rev": "3c43b81701e73452df1c080b05770407da9e16d6",
46 "type": "github"46 "type": "github"
47 },47 },
48 "original": {48 "original": {
67 ]67 ]
68 },68 },
69 "locked": {69 "locked": {
70 "lastModified": 1704075545,70 "lastModified": 1708135817,
71 "narHash": "sha256-L3zgOuVKhPjKsVLc3yTm2YJ6+BATyZBury7wnhyc8QU=",71 "narHash": "sha256-EUMO/K3+Wgh0THOLoRXhxrh6G/pQ7BlJ8No+ciy1nKA=",
72 "owner": "oxalica",72 "owner": "oxalica",
73 "repo": "rust-overlay",73 "repo": "rust-overlay",
74 "rev": "a0df72e106322b67e9c6e591fe870380bd0da0d5",74 "rev": "c77e68d33a84ce3f9e86905c0f2ef78d5defad28",
75 "type": "github"75 "type": "github"
76 },76 },
77 "original": {77 "original": {
modifiedflake.nixdiffbeforeafterboth
29 llvmPkgs = pkgs.buildPackages.llvmPackages_11;29 llvmPkgs = pkgs.buildPackages.llvmPackages_11;
30 rust =30 rust =
31 (pkgs.rustChannelOf {31 (pkgs.rustChannelOf {
32 date = "2024-01-01";32 date = "2024-02-10";
33 channel = "nightly";33 channel = "nightly";
34 })34 })
35 .default35 .default
38 packages = (import ./pkgs) pkgs pkgs;38 packages = (import ./pkgs) pkgs pkgs;
39 devShell = (pkgs.mkShell.override {stdenv = llvmPkgs.stdenv;}) {39 devShell = (pkgs.mkShell.override {stdenv = llvmPkgs.stdenv;}) {
40 nativeBuildInputs = with pkgs; [40 nativeBuildInputs = with pkgs; [
41 alejandra
41 rust42 rust
42 lld43 lld
43 cargo-edit44 cargo-edit
44 cargo-udeps45 cargo-udeps
45 cargo-fuzz46 cargo-fuzz
46 cargo-watch47 cargo-watch
48 cargo-outdated
4749
48 pkg-config50 pkg-config
49 openssl51 openssl
modifiedmodules/fleet/secrets.nixdiffbeforeafterboth
915
10 Secrets would be decrypted and stored to /run/secrets/$\{name} on owners16 Secrets would be decrypted and stored to /run/secrets/$\{name} on owners
11 '';17 '';
18 default = null;
12 };19 };
13 # TODO: Aren't those options may be just desugared to data/expectedData?20 # TODO: Aren't those options may be just desugared to data/expectedData?
14 regenerateOnOwnerAdded = mkOption {21 regenerateOnOwnerAdded = mkOption {
15 type = bool;22 type = bool;
16 description = ''23 description = ''
17 Is this secret owner-dependent, and needs to be regenerated on ownership set change, or it may be just reencrypted.24 Is this secret owner-dependent, and needs to be regenerated on ownership set change, or it may be just reencrypted.
18 25
19 You want to have this option set to true, when this secret contains some reference to its owners, i.e x509 SANs.26 You want to have this option set to true, when this secret contains some reference to its owners, i.e x509 SANs.
20 '';27 '';
21 };28 };
22 regenerateOnOwnerRemoved = mkOption {29 regenerateOnOwnerRemoved = mkOption {
23 default = config.regenerateOnOwnerAdded;30 default = config.regenerateOnOwnerAdded;
24 type = bool;31 type = bool;
25 description = ''32 description = ''
26 Should this secret be removed on owner removal, or it may be just reencrypted33 Should this secret be removed on owner removal, or it may be just reencrypted
27 34
28 Most probably its value should be equal to regenerateOnOwnerAdded, override only if you know what are you doing.35 Most probably its value should be equal to regenerateOnOwnerAdded, override only if you know what are you doing.
29 Contrary to regenerateOnOwnerAdded, you may want to set this option to false, when host permissions are revoked36 Contrary to regenerateOnOwnerAdded, you may want to set this option to false, when host permissions are revoked
30 in some other way than by this secret ownership, I.e by firewall/etc.37 in some other way than by this secret ownership, I.e by firewall/etc.
31 '';38 '';
32 };39 };
33 generator = mkOption {40 generator = mkOption {
34 type = nullOr unspecified;41 type = nullOr unspecified;
121 hosts = hostsToAttrs (host: {128 hosts = hostsToAttrs (host: {
122 modules =129 modules = let
123 let
124 cleanupSecret = (secretName: v: {130 cleanupSecret = secretName: v: {
125 inherit (v) public secret;131 inherit (v) public secret;
126 shared = true;132 shared = true;
127 });133 };
128 in134 in [
129 [
130 {135 {
134 }142 }
135 ];143 ];
136 });144 });
145 # TODO: Should this attribute be moved to `nixpkgs.overlays`?
146 overlays = [
147 (final: prev: let
148 lib = final.lib;
149 in {
150 mkPassword = {size ? 32}:
151 final.mkSecretGenerator ''
152 ${final.coreutils}/bin/tr -dc 'A-Za-z0-9!?%=' < /dev/random \
153 | ${final.coreutils}/bin/head -c ${toString size} \
154 | encrypt > $out/secret
155 '';
156 mkRsa = {size ? 4096}:
157 final.mkSecretGenerator ''
158 ${final.openssl}/bin/openssl genrsa -out rsa_private.key ${toString size}
159 ${final.openssl}/bin/openssl rsa -in rsa_private.key -pubout -out rsa_public.key
160
161 sudo cat rsa_private.key | encrypt > $out/secret
162 sudo cat rsa_public.key > $out/public
163 '';
164 # TODO: Move to fleet
165 # TODO: Merge both generators to one with consistent options syntax?
166 # Impure generator is built on local machine, then built closure is copied to remote machine,
167 # and then it is ran in inpure context, so that this generator may access HSMs and other things.
168 mkImpureSecretGenerator = generatorText: machine:
169 (prev.writeShellScript "impureGenerator.sh" ''
170 #!/bin/sh
171 set -eu
172
173 # TODO: Provide encryption function as script passed to `callPackage generator {encrypt = ...;}`
174 function encrypt() {
175 eval ${final.rage}/bin/rage $rageArgs
176 }
177
178 created_at=$(date -u +"%Y-%m-%dT%H:%M:%S.%NZ")
179 echo -n $created_at > $out/created_at
180
181 ${generatorText}
182
183 echo -n SUCCESS > $out/marker
184 '')
185 .overrideAttrs (old: {
186 passthru = {
187 generatorKind = "impure";
188 impureOn = machine;
189 };
190 });
191 # TODO: Implement consistent naming
192 # Pure secret generator is supposed to be run entirely by nix, using `__impure` derivation type...
193 # But for now, it is ran the same way as `impureSecretGenerator`, but on the local machine.
194 mkSecretGenerator = generatorText:
195 (prev.writeShellScript "generator.sh" ''
196 #!/bin/sh
197 set -eu
198 # TODO: User should create output directory by themselves.
199 cd $out
200
201 # TODO: Provide encryption function as script passed to `callPackage generator {encrypt = ...;}`
202 function encrypt() {
203 eval ${final.rage}/bin/rage $rageArgs
204 }
205
206 created_at=$(date -u +"%Y-%m-%dT%H:%M:%S.%NZ")
207 echo -n $created_at > $out/created_at
208
209 ${generatorText}
210
211 echo -n SUCCESS > $out/marker
212 '')
213 .overrideAttrs (old: {
214 passthru = {
215 generatorKind = "pure";
216 };
217 # TODO: make nix daemon build secret, not just the script.
218 # __impure = true;
219 });
220 })
221 ];
137 };222 };
138}223}
139224