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
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,5 +6,5 @@
 nixlike = { path = "./crates/nixlike" }
 better-command = { path = "./crates/better-command" }
 bifrostlink = "0.1.0"
-uuid = { version = "1.3.3", features = ["v4"] }
-tokio = { version = "1.33.0", features = ["fs", "rt", "macros", "sync", "time", "rt-multi-thread"] }
+uuid = { version = "1.7.0", features = ["v4"] }
+tokio = { version = "1.36.0", features = ["fs", "rt", "macros", "sync", "time", "rt-multi-thread"] }
modifiedREADME.adocdiffbeforeafterboth
--- a/README.adoc
+++ b/README.adoc
@@ -11,3 +11,164 @@
 - Modules can configure multiple hosts at once (I.e for wireguard/kubernetes installation)
 - Secrets can be securely stored in Git (No one except target hosts can decrypt them), automatically regenerated, reencrypted, etc.
 - Automatic rollback on deployment failure, which will work, as long as system is passing initrd stage (So still be carefull with root filesystem mount)
+
+== Secret generator example
+
+TODO:: This section should into some kind of fleet documentation... But as there is none, it is just left here as-is.
+
+=== Quickly run securely setup gitlab
+
+[source,nix]
+----
+{config, ...}: {
+  secrets = let ownership = { owner = "gitlab"; group = "gitlab"; }; in {
+    gitlab-initial-root = {
+      generator = {mkPassword}: mkPassword {};
+    } // ownership;
+    gitlab-secret = {
+      generator = {mkPassword}: mkPassword {};
+    } // ownership;
+    gitlab-otp = {
+      generator = {mkPassword}: mkPassword {};
+    } // ownership;
+    gitlab-db = {
+      generator = {mkPassword}: mkPassword {};
+    } // ownership;
+    gitlab-jws = {
+      generator = {mkRsa}: mkRsa {};
+    } // ownership;
+  };
+  services.gitlab = let secrets = config.secrets; in {
+    enable = true;
+    initialRootPasswordFile = secrets.gitlab-initial-root.secretPath;
+    secrets = {
+      secretFile = secrets.gitlab-secret.secretPath;
+      otpFile = secrets.gitlab-otp.secretPath;
+      dbFile = secrets.gitlab-db.secretPath;
+      jwsFile = secrets.gitlab-jws.secretPath;
+    };
+  };
+}
+----
+
+=== Securely initialize kubernetes secrets
+
+In my homelab and clusters, I almost always have some sort of HSM, and to issue new kubernetes certs I directly connect to it.
+This 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.
+I want to build ansible-like script execution in fleet for this kind of tasks.
+
+[source,nix]
+----
+{...}: {
+  # First I define required secret generators:
+  nixpkgs.overlays = [
+    (final: prev: let
+      lib = final.lib;
+    in {
+      readKubernetesCa = {impureOn}:
+        final.mkImpureSecretGenerator ''
+          cd ~/ca
+
+          cert=kubernetes-intermediateCA.crt
+
+          expires_at=$(openssl x509 -in $cert -noout -enddate | cut -d= -f2 | xargs -I{} date -u -d {} +"%Y-%m-%dT%H:%M:%S.%NZ")
+          echo -n $expires_at > $out/expires_at
+
+          cat $cert > $out/public
+        ''
+        impureOn;
+      mkKubernetesCert = {
+        subj,
+        sans ? [],
+        impureOn,
+      }:
+        final.mkImpureSecretGenerator ''
+          cd ~/ca
+
+          params=$(sudo mktemp)
+          csr=$(sudo mktemp)
+          cert=$(sudo mktemp)
+          sudo openssl ecparam -genkey -name secp384r1 -out $params
+          sudo openssl req -new -key $params \
+            -subj "${lib.strings.concatStringsSep "" (lib.attrsets.mapAttrsToList (k: v: "/${k}=${v}") subj)}" \
+            ${lib.optionalString (sans != []) "-addext \"subjectAltName = ${lib.strings.concatStringsSep "," sans}\""} \
+            -out $csr
+          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
+
+          expires_at=$(sudo openssl x509 -in $cert -noout -enddate | cut -d= -f2 | xargs -I{} date -u -d {} +"%Y-%m-%dT%H:%M:%S.%NZ")
+          echo -n $expires_at > $out/expires_at
+
+          sudo cat $params | encrypt > $out/secret
+          sudo cat $cert > $out/public
+        ''
+        impureOn;
+    })
+  ];
+  # Those secret generators are impure, thus they are run in system environment.
+  # Probably there needs to be a dedicated user for that kind of tasks, but this is my current setup, don't judge.
+  # I write a couple of scripts for executing openssl with HSM.
+  environment.systemPackages = [
+    pkgs.openssl.bin
+    (pkgs.writeShellApplication {
+      name = "hsms";
+      text = ''
+        set -eu
+        export OPENSSL_CONF=${openssl-conf}
+        # Yay, using secrets to generate secrets!
+        HSM_PIN=$(cat ${config.secrets.hsm-pin.secretPath})
+        exec ${pkgs.openssl}/bin/openssl "$@" -keyform=engine -CAkeyform=engine -engine=pkcs11 -passin=pass:"$HSM_PIN"
+      '';
+    })
+    (pkgs.writeShellApplication {
+      name = "hsmt";
+      text = ''
+        set -eu
+        HSM_PIN=$(cat ${config.secrets.hsm-pin.secretPath})
+        exec ${pkgs.opensc}/bin/pkcs11-tool -l --pin="$HSM_PIN" "$@"
+      '';
+    })
+  ];
+  # And finally, I have secrets, which are shared between machines.
+  # Note that this example is somewhat wrong, as this goes not into the machine configuration, but to fleet configuration.
+  sharedSecrets = {
+    "ca.pem" = {
+      # This is just the public key, no need to regenerate it to change owner list
+      regenerateOnOwnerAdded = false;
+      # For secret regeneration/reencryption, we need to specify which machines SHOULD have it.
+      expectedOwners = ["controlplane-1" "controlplane-2" "worker-1" "worker-2"];
+      generator = {readKubernetesCa}:
+        readKubernetesCa {
+          impureOn = "[CENSORED]";
+        };
+    };
+    "kube-admin.pem" = {
+      regenerateOnOwnerAdded = false;
+      expectedOwners = ["cluster-admin"];
+      generator = {mkKubernetesCert}:
+        mkKubernetesCert {
+          subj = {
+            CN = "admin";
+            O = "system:masters";
+          };
+          impureOn = "[CENSORED]";
+        };
+    };
+    "kube-apiserver.pem" = {
+      # This secret depends on machine SANS, so if owner list has been changed, then we need to regenerate it.
+      # However, SANS dependency is in fact handled by secret seed, and secret is regenerated if the seed is changed...
+      #
+      # In this case regeneration is added as a half-assed security measure, as if apiserver is removed, we don't
+      # want for it to be able to pretend like it is a valid server.
+      #
+      # However, certificate revokation is complicated in my setup, and I can't show it here.
+      regenerateOnOwnerAdded = true;
+      expectedOwners = ["controlplane-1" "controlplane-2"];
+      generator = {mkKubernetesCert}:
+        mkKubernetesCert {
+          inherit sans;
+          subj.CN = "kubernetes";
+          impureOn = "[CENSORED]";
+        };
+    };
+}
+----
modifiedcmds/fleet/Cargo.tomldiffbeforeafterboth
--- a/cmds/fleet/Cargo.toml
+++ b/cmds/fleet/Cargo.toml
@@ -12,17 +12,17 @@
 anyhow = "1.0"
 serde = { version = "1.0", features = ["derive"] }
 serde_json = "1.0"
-time = { version = "0.3.30", features = ["serde"] }
-tempfile = "3.8"
-once_cell = "1.18.0"
-hostname = "0.3.1"
-age-core = "0.9.0"
-peg = "0.8.2"
-age = { version = "0.9.2", features = ["ssh", "armor"] }
-base64 = "0.21.5"
-chrono = { version = "0.4.31", features = ["serde"] }
-z85 = "3.0.5"
-clap = { version = "4.4.7", features = [
+time = { version = "0.3", features = ["serde"] }
+tempfile = "3.10"
+once_cell = "1.19"
+hostname = "0.3"
+age-core = "0.10"
+peg = "0.8"
+age = { version = "0.10", features = ["ssh", "armor"] }
+base64 = "0.21"
+chrono = { version = "0.4", features = ["serde"] }
+z85 = "3.0"
+clap = { version = "4.5", features = [
 	"derive",
 	"env",
 	"wrap_help",
@@ -30,18 +30,18 @@
 ] }
 tracing = "0.1"
 tracing-subscriber = { version = "0.3", features = ["fmt", "env-filter"] }
-tokio-util = { version = "0.7.10", features = ["codec"] }
-async-trait = "0.1.74"
-futures = "0.3.29"
-tracing-indicatif = "0.3.5"
-indicatif = "0.17.7"
-itertools = "0.11.0"
-shlex = "1.2.0"
-tabled = { version = "0.14.0", features = ["color"] }
-owo-colors = { version = "3.5.0", features = ["supports-color", "supports-colors"] }
+tokio-util = { version = "0.7", features = ["codec"] }
+async-trait = "0.1"
+futures = "0.3"
+tracing-indicatif = "0.3"
+indicatif = "0.17"
+itertools = "0.12"
+shlex = "1.3"
+tabled = { version = "0.15" }
+owo-colors = { version = "4.0", features = ["supports-color", "supports-colors"] }
 r2d2 = "0.8.10"
-abort-on-drop = "0.2.2"
-unindent = "0.2.3"
-regex = "1.10.2"
-openssh = "0.10.1"
-human-repr = "1.1.0"
+abort-on-drop = "0.2"
+unindent = "0.2"
+regex = "1.10"
+openssh = "0.10"
+human-repr = "1.1"
modifiedcmds/fleet/src/cmds/secrets/mod.rsdiffbeforeafterboth
--- a/cmds/fleet/src/cmds/secrets/mod.rs
+++ b/cmds/fleet/src/cmds/secrets/mod.rs
@@ -1,5 +1,6 @@
 use crate::{
 	better_nix_eval::Field,
+	command::MyCommand,
 	fleetdata::{FleetSecret, FleetSharedSecret, SecretData},
 	host::Config,
 	nix_go, nix_go_json,
@@ -8,14 +9,16 @@
 use chrono::{DateTime, Utc};
 use clap::Parser;
 use owo_colors::OwoColorize;
-use serde::Deserialize;
+use serde::{de::DeserializeOwned, Deserialize};
 use std::{
 	collections::{BTreeSet, HashSet},
 	io::{self, Cursor, Read},
-	path::PathBuf,
+	path::{Path, PathBuf},
+	str::FromStr,
 };
 use tabled::{Table, Tabled};
-use tokio::fs::read_to_string;
+use tempfile::tempdir;
+use tokio::fs::{self, read_to_string};
 use tracing::{error, info, info_span, warn, Instrument};
 
 #[derive(Parser)]
@@ -67,6 +70,10 @@
 		#[clap(long)]
 		plaintext: bool,
 	},
+	ReadPublic {
+		name: String,
+		machine: String,
+	},
 	UpdateShared {
 		name: String,
 
@@ -151,8 +158,89 @@
 #[serde(rename_all = "camelCase")]
 enum GeneratorKind {
 	Impure,
+	Pure,
 }
 
+async fn generate_pure(
+	config: &Config,
+	_display_name: &str,
+	secret: Field,
+	default_generator: Field,
+	owners: &[String],
+) -> Result<FleetSecret> {
+	// TODO: pure secrets are supposed to be generated by nix daemon itself,
+	// inside of a sandbox... But we aren't here yet.
+	let config_field = &config.config_unchecked_field;
+	let generator = nix_go!(secret.generator);
+	let default_pkgs = &config.default_pkgs;
+
+	let call_package = nix_go!(default_pkgs.callPackage);
+
+	let generator = nix_go!(call_package(generator)(Obj {}));
+	let generator = generator.build().await?;
+	let generator = generator
+		.get("out")
+		.ok_or_else(|| anyhow!("missing generate out"))?;
+
+	let mut recipients = String::new();
+	for owner in owners {
+		let key = config.key(owner).await?;
+		recipients.push_str(&format!("-r \"{key}\" "));
+	}
+	recipients.push_str("-e");
+
+	let out = tempdir()?;
+
+	let mut gen = MyCommand::new(generator);
+	gen.env("rageArgs", recipients);
+	gen.env(
+		"out",
+		out.path().to_str().expect("sane tempdir should be utf-8"),
+	);
+	gen.run().await.context("impure generator")?;
+
+	{
+		let mut marker_path = out.path().to_owned();
+		marker_path.push("marker");
+		let marker = fs::read_to_string(&marker_path).await?;
+		ensure!(marker == "SUCCESS", "generation not succeeded");
+	}
+
+	let mut public_path = out.path().to_owned();
+	public_path.push("public");
+	let mut secret_path = out.path().to_owned();
+	secret_path.push("secret");
+	let public = fs::read_to_string(&public_path).await.ok();
+	let secret = fs::read(&secret_path).await.ok();
+	if let Some(secret) = &secret {
+		ensure!(
+			age::Decryptor::new(Cursor::new(&secret)).is_ok(),
+			"builder produced non-encrypted value as secret, this is highly insecure, and not allowed."
+		);
+	}
+
+	let mut created_at_path = out.path().to_owned();
+	created_at_path.push("created_at");
+	let mut expires_at_path = out.path().to_owned();
+	expires_at_path.push("expires_at");
+
+	async fn read_value<T: FromStr>(path: &Path) -> Result<T> {
+		dbg!(path);
+		let raw = fs::read(path).await?;
+		let raw = String::from_utf8(raw)?;
+		raw.parse().map_err(|_| anyhow!("fromStr failed"))
+	}
+
+	let created_at = read_value(&created_at_path).await?;
+	let expires_at = read_value(&expires_at_path).await.ok();
+
+	Ok(FleetSecret {
+		created_at,
+		expires_at,
+		public,
+		secret: secret.map(SecretData),
+	})
+}
 async fn generate_impure(
 	config: &Config,
 	_display_name: &str,
@@ -254,6 +342,9 @@
 		GeneratorKind::Impure => {
 			generate_impure(config, display_name, secret, default_generator, owners).await
 		}
+		GeneratorKind::Pure => {
+			generate_pure(config, display_name, secret, default_generator, owners).await
+		}
 	}
 }
 async fn generate_shared(
@@ -357,6 +448,8 @@
 				expires_at,
 				re_add,
 			} => {
+				// TODO: Forbid updating secrets with set expectedOwners (= not user-managed).
+
 				let exists = config.has_shared(&name);
 				if exists && !force && !re_add {
 					bail!("secret already defined");
@@ -456,6 +549,16 @@
 					println!("{}", z85::encode(&data));
 				}
 			}
+			Secret::ReadPublic {
+				name,
+				machine,
+			} => {
+				let secret = config.host_secret(&machine, &name)?;
+				let Some(public) = secret.public else {
+					bail!("no secret {name}");
+				};
+				print!("{public}");
+			}
 			Secret::UpdateShared {
 				name,
 				machines,
@@ -463,6 +566,8 @@
 				remove_machines,
 				prefer_identities,
 			} => {
+				// TODO: Forbid updating secrets with set expectedOwners (= not user-managed).
+
 				let secret = config.shared_secret(&name)?;
 				if secret.secret.secret.is_none() {
 					bail!("no secret");
modifiedcmds/fleet/src/main.rsdiffbeforeafterboth
--- a/cmds/fleet/src/main.rs
+++ b/cmds/fleet/src/main.rs
@@ -11,9 +11,8 @@
 
 mod fleetdata;
 
-use std::ffi::OsString;
-use std::process::exit;
 use std::time::Duration;
+use std::{ffi::OsString, process::ExitCode};
 
 use anyhow::{bail, Result};
 use clap::Parser;
@@ -62,6 +61,7 @@
 				path.push(entry.path());
 
 				let mut status = MyCommand::new("nix");
+				status.args(&config.nix_args);
 				status.arg("store").arg("prefetch-file").arg(path);
 				status.run_nix_string().instrument(span).await?;
 				Ok(())
@@ -118,7 +118,11 @@
 				return;
 			};
 			let pos = state.pos();
-			let _ = write!(writer, "{} / {}", pos.human_count_bare(), len.human_count_bare());
+			if pos > len {
+				let _ = write!(writer, "{}", pos.human_count_bare());
+			} else {
+				let _ = write!(writer, "{} / {}", pos.human_count_bare(), len.human_count_bare());
+			}
 		})
 		.with_key(
 			"color_start",
@@ -151,7 +155,7 @@
 			tracing_subscriber::fmt::layer()
 				.without_time()
 				.with_target(true)
-				.with_writer(indicatif_layer.get_stderr_writer())
+				.with_writer(indicatif_layer.get_stdout_writer())
 				.with_filter(filter), // .withou,
 		)
 		.with(indicatif_layer)
@@ -159,12 +163,15 @@
 }
 
 #[tokio::main]
-async fn main() {
+async fn main() -> ExitCode {
 	setup_logging();
 	if let Err(e) = main_real().await {
+		// If I remove this line, the next error!() line gets eaten.
+		info!("fixme: this line gets eaten by tracing-indicatif on levels info+");
 		error!("{e:#}");
-		exit(1);
+		return ExitCode::FAILURE;
 	}
+	ExitCode::SUCCESS
 }
 
 async fn main_real() -> Result<()> {
modifiedcmds/install-secrets/Cargo.tomldiffbeforeafterboth
--- a/cmds/install-secrets/Cargo.toml
+++ b/cmds/install-secrets/Cargo.toml
@@ -4,18 +4,18 @@
 edition = "2021"
 
 [dependencies]
-age = { version = "0.9.2", features = ["ssh"] }
-anyhow = "1.0.75"
-env_logger = "0.10.0"
-log = "0.4.20"
+age = { version = "0.10.0", features = ["ssh"] }
+anyhow = "1.0.79"
+tracing-subscriber = "0.3"
+tracing = "0.1"
 nix = {version = "0.27.1", features = ["user", "fs"]}
-serde = { version = "1.0.190", features = ["derive"] }
-serde_json = "1.0.107"
-clap = { version = "4.4.7", features = [
+serde = { version = "1.0.196", features = ["derive"] }
+serde_json = "1.0.113"
+clap = { version = "4.5.1", features = [
 	"derive",
 	"env",
 	"wrap_help",
 	"unicode",
 ] }
-tempfile = "3.8.1"
+tempfile = "3.10.0"
 z85 = "3.0.5"
modifiedcmds/install-secrets/src/main.rsdiffbeforeafterboth
--- a/cmds/install-secrets/src/main.rs
+++ b/cmds/install-secrets/src/main.rs
@@ -2,9 +2,8 @@
 use age::{Encryptor, Identity, Recipient};
 use anyhow::{anyhow, bail, Context, Result};
 use clap::Parser;
-use log::{error, info, warn};
 use nix::sys::stat::Mode;
-use nix::unistd::{User, Group, chown};
+use nix::unistd::{chown, Group, User};
 use serde::{Deserialize, Deserializer};
 use std::fmt::{self, Display};
 use std::fs::{self, File};
@@ -14,6 +13,9 @@
 use std::path::Path;
 use std::str::{from_utf8, FromStr};
 use std::{collections::HashMap, path::PathBuf};
+use tracing::{error, info, warn};
+use tracing_subscriber::filter::LevelFilter;
+use tracing_subscriber::EnvFilter;
 
 #[derive(Clone, Debug)]
 struct SecretWrapper(Vec<u8>);
@@ -228,8 +230,13 @@
 }
 
 fn main() -> anyhow::Result<()> {
-	env_logger::Builder::new()
-		.filter_level(log::LevelFilter::Info)
+	tracing_subscriber::fmt()
+		.with_env_filter(
+			EnvFilter::builder()
+				.with_default_directive(LevelFilter::INFO.into())
+				.from_env_lossy(),
+		)
+		.without_time()
 		.init();
 
 	let opts = Opts::parse();
modifiedcrates/better-command/Cargo.tomldiffbeforeafterboth
--- a/crates/better-command/Cargo.toml
+++ b/crates/better-command/Cargo.toml
@@ -3,12 +3,10 @@
 version = "0.1.0"
 edition = "2021"
 
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
 [dependencies]
-once_cell = "1.19.0"
-regex = "1.10.2"
-serde = { version = "1.0.193", features = ["derive"] }
-serde_json = "1.0.108"
-tracing = "0.1.40"
-tracing-indicatif = "0.3.6"
+once_cell = "1.19"
+regex = "1.10"
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+tracing = "0.1"
+tracing-indicatif = "0.3"
modifiedcrates/nixlike/Cargo.tomldiffbeforeafterboth
--- a/crates/nixlike/Cargo.toml
+++ b/crates/nixlike/Cargo.toml
@@ -7,8 +7,8 @@
 alejandra = {git = "https://github.com/kamadorueda/alejandra"}
 linked-hash-map = "0.5.6"
 peg = "0.8.2"
-serde = "1.0.190"
-thiserror = "1.0.50"
-serde_json = "1.0.107"
+serde = "1.0.196"
+thiserror = "1.0.57"
+serde_json = "1.0.113"
 ron = "0.8.1"
 serde-transcode = "1.1.1"
modifiedflake.lockdiffbeforeafterboth
--- a/flake.lock
+++ b/flake.lock
@@ -5,11 +5,11 @@
         "systems": "systems"
       },
       "locked": {
-        "lastModified": 1701680307,
-        "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
+        "lastModified": 1705309234,
+        "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
         "owner": "numtide",
         "repo": "flake-utils",
-        "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
+        "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
         "type": "github"
       },
       "original": {
@@ -23,11 +23,11 @@
         "systems": "systems_2"
       },
       "locked": {
-        "lastModified": 1681202837,
-        "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
+        "lastModified": 1705309234,
+        "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
         "owner": "numtide",
         "repo": "flake-utils",
-        "rev": "cfacdce06f30d2b68473a46042957675eebb3401",
+        "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
         "type": "github"
       },
       "original": {
@@ -38,11 +38,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1704409229,
-        "narHash": "sha256-Vc41cRJ3trOnocovLe0zZE35pK5Lfuo/zHk0xx3CNDY=",
+        "lastModified": 1708177587,
+        "narHash": "sha256-Tj/YV9kdC+I7V/kjrq3Bdl8z2VIHT5hiAG74s52vLgw=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "786f788914f2a6e94cedf361541894e972b8fd23",
+        "rev": "3c43b81701e73452df1c080b05770407da9e16d6",
         "type": "github"
       },
       "original": {
@@ -67,11 +67,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1704075545,
-        "narHash": "sha256-L3zgOuVKhPjKsVLc3yTm2YJ6+BATyZBury7wnhyc8QU=",
+        "lastModified": 1708135817,
+        "narHash": "sha256-EUMO/K3+Wgh0THOLoRXhxrh6G/pQ7BlJ8No+ciy1nKA=",
         "owner": "oxalica",
         "repo": "rust-overlay",
-        "rev": "a0df72e106322b67e9c6e591fe870380bd0da0d5",
+        "rev": "c77e68d33a84ce3f9e86905c0f2ef78d5defad28",
         "type": "github"
       },
       "original": {
modifiedflake.nixdiffbeforeafterboth
--- a/flake.nix
+++ b/flake.nix
@@ -29,7 +29,7 @@
         llvmPkgs = pkgs.buildPackages.llvmPackages_11;
         rust =
           (pkgs.rustChannelOf {
-            date = "2024-01-01";
+            date = "2024-02-10";
             channel = "nightly";
           })
           .default
@@ -38,12 +38,14 @@
         packages = (import ./pkgs) pkgs pkgs;
         devShell = (pkgs.mkShell.override {stdenv = llvmPkgs.stdenv;}) {
           nativeBuildInputs = with pkgs; [
+            alejandra
             rust
             lld
             cargo-edit
             cargo-udeps
             cargo-fuzz
             cargo-watch
+            cargo-outdated
 
             pkg-config
             openssl
modifiedmodules/fleet/secrets.nixdiffbeforeafterboth
--- a/modules/fleet/secrets.nix
+++ b/modules/fleet/secrets.nix
@@ -1,5 +1,11 @@
-{ lib, fleetLib, config, ... }: with lib; with fleetLib;
-let
+{
+  lib,
+  fleetLib,
+  config,
+  ...
+}:
+with lib;
+with fleetLib; let
   sharedSecret = with types; ({config, ...}: {
     options = {
       expectedOwners = mkOption {
@@ -9,13 +15,14 @@
 
           Secrets would be decrypted and stored to /run/secrets/$\{name} on owners
         '';
+        default = null;
       };
       # TODO: Aren't those options may be just desugared to data/expectedData?
       regenerateOnOwnerAdded = mkOption {
         type = bool;
         description = ''
           Is this secret owner-dependent, and needs to be regenerated on ownership set change, or it may be just reencrypted.
-          
+
           You want to have this option set to true, when this secret contains some reference to its owners, i.e x509 SANs.
         '';
       };
@@ -24,7 +31,7 @@
         type = bool;
         description = ''
           Should this secret be removed on owner removal, or it may be just reencrypted
-          
+
           Most probably its value should be equal to regenerateOnOwnerAdded, override only if you know what are you doing.
           Contrary to regenerateOnOwnerAdded, you may want to set this option to false, when host permissions are revoked
           in some other way than by this secret ownership, I.e by firewall/etc.
@@ -55,7 +62,7 @@
 
           Imported from fleet.nix
         '';
-        default = [ ];
+        default = [];
       };
       # TODO: Make secret generator generate arbitrary number of secret/public parts?
       # Make it generate a folder, where all files except suffixed by .enc are public, and the rest are secret?
@@ -96,43 +103,121 @@
       };
     };
   };
-in
-{
+in {
   options = with types; {
     sharedSecrets = mkOption {
       type = attrsOf (submodule sharedSecret);
-      default = { };
+      default = {};
       description = "Shared secrets";
     };
     hostSecrets = mkOption {
       type = attrsOf (attrsOf (submodule hostSecret));
-      default = { };
+      default = {};
       description = "Host secrets. Imported from fleet.nix";
       internal = true;
     };
   };
   config = {
-    assertions = mapAttrsToList
+    assertions =
+      mapAttrsToList
       (name: secret: {
         assertion = secret.expectedOwners == null || builtins.sort (a: b: a < b) secret.owners == builtins.sort (a: b: a < b) secret.expectedOwners;
         message = "Shared secret ${name} is expected to be encrypted for ${builtins.toJSON secret.expectedOwners}, but it is encrypted for ${builtins.toJSON secret.owners}. Run fleet secrets regenerate to fix";
       })
       config.sharedSecrets;
     hosts = hostsToAttrs (host: {
-      modules =
-        let
-          cleanupSecret = (secretName: v: {
-            inherit (v) public secret;
-            shared = true;
-          });
-        in
-        [
-          {
-            secrets = (mapAttrs cleanupSecret
+      modules = let
+        cleanupSecret = secretName: v: {
+          inherit (v) public secret;
+          shared = true;
+        };
+      in [
+        {
+          secrets =
+            (
+              mapAttrs cleanupSecret
               (filterAttrs (_: v: builtins.elem host v.owners) config.sharedSecrets)
-            ) // (mapAttrs cleanupSecret (config.hostSecrets.${host} or { }));
-          }
-        ];
+            )
+            // (mapAttrs cleanupSecret (config.hostSecrets.${host} or {}));
+        }
+      ];
     });
+    # TODO: Should this attribute be moved to `nixpkgs.overlays`?
+    overlays = [
+      (final: prev: let
+        lib = final.lib;
+      in {
+        mkPassword = {size ? 32}:
+          final.mkSecretGenerator ''
+            ${final.coreutils}/bin/tr -dc 'A-Za-z0-9!?%=' < /dev/random \
+              | ${final.coreutils}/bin/head -c ${toString size} \
+              | encrypt > $out/secret
+          '';
+        mkRsa = {size ? 4096}:
+          final.mkSecretGenerator ''
+            ${final.openssl}/bin/openssl genrsa -out rsa_private.key ${toString size}
+            ${final.openssl}/bin/openssl rsa -in rsa_private.key -pubout -out rsa_public.key
+
+            sudo cat rsa_private.key | encrypt > $out/secret
+            sudo cat rsa_public.key > $out/public
+          '';
+        # TODO: Move to fleet
+        # TODO: Merge both generators to one with consistent options syntax?
+        # Impure generator is built on local machine, then built closure is copied to remote machine,
+        # and then it is ran in inpure context, so that this generator may access HSMs and other things.
+        mkImpureSecretGenerator = generatorText: machine:
+          (prev.writeShellScript "impureGenerator.sh" ''
+            #!/bin/sh
+            set -eu
+
+            # TODO: Provide encryption function as script passed to `callPackage generator {encrypt = ...;}`
+            function encrypt() {
+              eval ${final.rage}/bin/rage $rageArgs
+            }
+
+            created_at=$(date -u +"%Y-%m-%dT%H:%M:%S.%NZ")
+            echo -n $created_at > $out/created_at
+
+            ${generatorText}
+
+            echo -n SUCCESS > $out/marker
+          '')
+          .overrideAttrs (old: {
+            passthru = {
+              generatorKind = "impure";
+              impureOn = machine;
+            };
+          });
+        # TODO: Implement consistent naming
+        # Pure secret generator is supposed to be run entirely by nix, using `__impure` derivation type...
+        # But for now, it is ran the same way as `impureSecretGenerator`, but on the local machine.
+        mkSecretGenerator = generatorText:
+          (prev.writeShellScript "generator.sh" ''
+            #!/bin/sh
+            set -eu
+            # TODO: User should create output directory by themselves.
+            cd $out
+
+            # TODO: Provide encryption function as script passed to `callPackage generator {encrypt = ...;}`
+            function encrypt() {
+              eval ${final.rage}/bin/rage $rageArgs
+            }
+
+            created_at=$(date -u +"%Y-%m-%dT%H:%M:%S.%NZ")
+            echo -n $created_at > $out/created_at
+
+            ${generatorText}
+
+            echo -n SUCCESS > $out/marker
+          '')
+          .overrideAttrs (old: {
+            passthru = {
+              generatorKind = "pure";
+            };
+            # TODO: make nix daemon build secret, not just the script.
+            # __impure = true;
+          });
+      })
+    ];
   };
 }