feat: add other mail domains, autogenerate argon hashes

This commit is contained in:
oddlama 2024-07-31 19:54:49 +02:00
parent a128dd5f40
commit 76163bad98
No known key found for this signature in database
GPG key ID: 14EFE510775FE39A
51 changed files with 284 additions and 51 deletions

View file

@ -42,6 +42,22 @@
|| die "Failure while aggregating basic auth hashes"
'');
age.generators.argon2id = {
pkgs,
lib,
decrypt,
deps,
...
}: let
dep = builtins.head deps;
in ''
echo " -> Deriving argon2id hash from "${lib.escapeShellArg dep.host}":"${lib.escapeShellArg dep.name}"" >&2
${decrypt} ${lib.escapeShellArg dep.file} \
| tr -d '\n' \
| ${pkgs.libargon2}/bin/argon2 "$(${pkgs.openssl}/bin/openssl rand -base64 16)" -id \
|| die "Failure while generating argon2id hash"
'';
# Just before switching, remove the agenix directory if it exists.
# This can happen when a secret is used in the initrd because it will
# then be copied to the initramfs under the same path. This materializes

View file

@ -4,26 +4,47 @@
lib,
...
}: let
mailDomains = globals.domains.mail;
primaryDomain = mailDomains.primary;
primaryDomain = globals.mail.primary;
idmailDomain = "alias.${primaryDomain}";
in {
# Not needed, we store stuff in stalwart's directory
#environment.persistence."/persist".directories = [
# {
# directory = "/var/lib/idmail";
# user = "idmail";
# group = "idmail";
# mode = "0700";
# }
#];
age.secrets.idmail-admin-hash = {
rekeyFile = ./secrets/idmail-admin-hash.age;
mkRandomSecret = {
generator.script = "alnum";
mode = "000";
};
mkArgon2id = secret: {
generator.dependencies = [config.age.secrets.${secret}];
generator.script = "argon2id";
mode = "440";
group = "stalwart-mail";
};
shortHash = x: lib.substring 0 16 (builtins.hashString "sha256" "${globals.salt}:${x}");
in {
environment.persistence."/persist".directories = [
{
directory = "/var/lib/idmail";
user = "idmail";
group = "idmail";
mode = "0700";
}
];
age.secrets = lib.mergeAttrsList (
[
{
idmail-user-pw_admin = mkRandomSecret;
idmail-user-hash_admin = mkArgon2id "idmail-user-pw_admin";
}
]
++ lib.forEach (lib.attrNames globals.mail.domains) (
domain: {
"idmail-mailbox-pw_catch-all@${shortHash domain}" = mkRandomSecret;
"idmail-mailbox-hash_catch-all@${shortHash domain}" = mkArgon2id "idmail-mailbox-pw_catch-all@${shortHash domain}";
}
)
);
globals.services.idmail.domain = idmailDomain;
globals.monitoring.http.idmail = {
url = "https://${idmailDomain}";
@ -31,6 +52,11 @@ in {
network = "internet";
};
#systemd.tmpfiles.settings."50-idmail"."${dataDir}".d = {
# user = "idmail";
# mode = "0750";
#};
services.idmail = {
enable = true;
user = "stalwart-mail";
@ -39,12 +65,20 @@ in {
enable = true;
users.admin = {
admin = true;
password_hash = "%{file:${config.age.secrets.idmail-admin-hash.path}}%";
password_hash = "%{file:${config.age.secrets.idmail-user-hash_admin.path}}%";
};
domains = lib.genAttrs mailDomains.all (_: {
domains = lib.flip lib.mapAttrs globals.mail.domains (domain: domainCfg: {
owner = "admin";
public = true;
catch_all = "catch-all@${domain}";
inherit (domainCfg) public;
});
mailboxes = lib.flip lib.mapAttrs' globals.mail.domains (
domain: _domainCfg:
lib.nameValuePair "catch-all@${domain}" {
password_hash = "%{file:${config.age.secrets."idmail-mailbox-hash_catch-all@${shortHash domain}".path}}%";
owner = "admin";
}
);
};
};
systemd.services.idmail.serviceConfig.RestartSec = "60"; # Retry every minute

View file

@ -7,8 +7,8 @@
icfg = config.repo.secrets.local.networking.interfaces.wan;
in {
networking.hostId = config.repo.secrets.local.networking.hostId;
networking.domain = globals.domains.mail.primary;
networking.hosts."127.0.0.1" = ["mail.${globals.domains.mail.primary}"];
networking.domain = globals.mail.primary;
networking.hosts."127.0.0.1" = ["mail.${globals.mail.primary}"];
globals.monitoring.ping.envoy = {
hostv4 = lib.net.cidr.ip icfg.hostCidrv4;

View file

@ -1,11 +0,0 @@
age-encryption.org/v1
-> X25519 t0FJIrbn5q7oX4+1tHvjDnWDCiD6NMkNw7Aq2MfSXw4
W6aq9jnVOH9W+pjsrSCZG1BJXSNojhiUrTgzANFpM9w
-> piv-p256 xqSe8Q A3qjOwYgwBFDf0beUSyw3nHhkO9ZhsJzGHBh4BTw7+tS
ffyaSOMoOHiIXfXvCJY/apYkEc7wZgkhOGTNT9O7oJ0
-> n[k#S-grease /{ w79 (TV$':-8 4E
hxVz/9v74X2gEt9y0yvKMClVgId3mAl5PVisyL0r8WUn4extTHoh8qj2fSFl++54
c0aRZZ5Y+Pdqu/7FyignIhV4WbUtverMWhWdRAhGsXqFm/8ejLqPfELQ54w
--- rTgyJNg/7gotGoTSMt5jDxSFE0tM8CP+azNlDTRjCow
LiÀºÝ“kþÃñ.?�N@1 �l·H΢æÐ�m°@8N�^òU•u• Ô
¦Ïƒ/íò¬ØÇ³§FIHÍÂk+*è+;#3ÒvÖx×~¯3¢Ú‚VZ߯‡ïî¿oó£Ñ’ZC|ñßÂÕ›T*ˆÛ‡“^-ªÑ .71Ñé€cÐ÷+g¬±‘†»Å�

View file

@ -5,8 +5,7 @@
pkgs,
...
}: let
mailDomains = globals.domains.mail;
primaryDomain = mailDomains.primary;
primaryDomain = globals.mail.primary;
stalwartDomain = "mail.${primaryDomain}";
dataDir = "/var/lib/stalwart-mail";
in {
@ -19,8 +18,14 @@ in {
}
];
age.secrets.stalwart-admin-pw = {
generator.script = "alnum";
mode = "000";
};
age.secrets.stalwart-admin-hash = {
rekeyFile = ./secrets/stalwart-admin-hash.age;
generator.dependencies = [config.age.secrets.stalwart-admin-pw];
generator.script = "argon2id";
mode = "440";
group = "stalwart-mail";
};

View file

@ -108,6 +108,11 @@ in {
}));
};
salt = mkOption {
type = types.str;
description = "A salt value to use for hashes. Not secret, but also not public so you sneaky little buggers can't brute force my mail domains.";
};
services = mkOption {
type = types.attrsOf (types.submodule {
options = {
@ -214,6 +219,26 @@ in {
};
};
mail = {
domains = mkOption {
default = {};
description = "All domains on which we receive mail.";
type = types.attrsOf (types.submodule {
options = {
public = mkOption {
type = types.bool;
description = "Whether the domain should be available for use by any user";
};
};
});
};
primary = mkOption {
type = types.str;
description = "The primary mail domain.";
};
};
domains = {
me = mkOption {
type = types.str;
@ -224,16 +249,6 @@ in {
type = types.str;
description = "My personal domain.";
};
mail.all = mkOption {
type = types.listOf types.str;
description = "All domains to configure on the mail server.";
};
mail.primary = mkOption {
type = types.str;
description = "The primary mail domain.";
};
};
macs = mkOption {

View file

@ -34,10 +34,12 @@
hetzner
kanidm
macs
mail
monitoring
myuser
net
root
salt
services
;
};

View file

@ -0,0 +1,9 @@
age-encryption.org/v1
-> X25519 Fmh3QK1rauE4Yy1F9uvzGtMumQfTHPsZpB/mFHyTik4
uQZQ9AeMHIDYKOdSNJDY8yyr+vmFvfJYLe0F7bhPDIs
-> piv-p256 xqSe8Q Ap39opLW1MU2pC+UmNliHT/p9+Ktlh+Er0SBz481KE94
iy1JR54/vixGF4KgHXq19vKKNlTUEtf7soKdG8jOnwE
-> Qb{iiDl-grease e/(Ds5o{
qixGDiCAz/9W5rqKL8H0rjTGknJ0
--- Xb6CEtGUamg7Rlt3gImrGyHgnztP0C6ZvOVtS1pUddM
r«§Kf»³:ÿªÜhTØ6­¦^lóÉmî/¢šryÙÒ�:!k¯ª/Ó$)ákdBææ¦ÕQ�ÚŒÕdO�c’+¤ÞüsCZØw§nP´Ä%4ƈ–Ö…"²».öÎŽ]ó}î–€ØY-˜Y`9 M3„JQzþ¢o`n¼÷¸•‰ÃÚ³e«¸‰ØÄ¶©û�骙Zh}àç›óøbE. D`]Zûˆ¤5ÁÂ2:5æL¶ŒÇêÿ"`Â?¶±®âf&RIÞð&eŽ~85ÙúóÄçéj]¥§”¥ì7ñ ÚuõÞ®r®fvÐXHKIÆŸ ¼d¦rÛp>—À#hÞŸñáÆä{ŠGýé——EÇHðî±ÕzgƪVSù< pCå�¬…‚ê÷6ÊwM.wG»£:­C<

View file

@ -0,0 +1,9 @@
age-encryption.org/v1
-> X25519 hwiSO2uHMPYqzcHJe+fJNZQthIheNV+z8QzNRR19f30
gJ2hYbFPvENqg2UtwgdCFKRlNB7pksSipl61IYD6NlI
-> piv-p256 xqSe8Q AxLma+4Ap7aFLCZb6gt/VdbL78lMwp7zw9Y9E2yyi80A
GvLv0n/kqC6xksv+nn1AEuwtGqd+vT5ivwo1yvMg+h4
-> XJ0-grease
Njn6lpWsxPRwkFg9asSo986W1Cd0Lhj4VpGbXyBkg2TgdxLPZKN580tgk3e6jwc
--- mFCHJ/g5E3KqSoGdYMA4+6NnbaHYMoTmWnO+AeQuRwY
oŸiÀêˆ)$æ7ô§µXÜzÙrÝÇ© õÕ?£E !œc#u½=C-/]Ÿ{RXþÀëºàRĆ@ÍÇ.ÕMµžÊC`àÔí¹qH™ Dú@

View file

@ -0,0 +1,10 @@
age-encryption.org/v1
-> X25519 Ied4Rc6fx3Wrkq4DAEjr3KTqnrR3VgzZ3uHZsbTUr3w
1kMMehvutM7wCedlVYg7Sys2Q7aEYxRO8Ajqp4bYXIQ
-> piv-p256 xqSe8Q Ah9bkx79XWlb/zW/gVRtTmOcsOcTCaU027jz/vxBjp74
fi8FQ+rQILsnlxTC1/MoagAL7D4lqyR0QYaefAi9m3s
-> KW5K]-grease [K{/LCm5 s2
TcDYJHaundRXKi8+K50c8FY/fIv2m28daA
--- Km5TCqqCFoiI0CmtBwTFNOjKtJ7tXKZfzTJocBIeH9Y
rÇrWé¨
bzàäcÉ'/kàw±Šô�d le×Ö[ašl˜7¨ÉO�§g“§AZÔù%çꣅC¢­’tzjÚÄɼîhú-ädG’

View file

@ -0,0 +1,10 @@
age-encryption.org/v1
-> X25519 TbcDtTD07pJ/Hxs+1wWcvk+fB5oPYAD9wklnyAcEJ08
Q+YwFN8oKy3I18z4/pLEnsvA/yfnYun+Bz4M1WEV+hY
-> piv-p256 xqSe8Q AuLtBYkwIATPvcb3Se1yR7BL2qgeigjLtl5+rF+pPFVV
CmE6/5sj+Fie3hZqIWI7vtw+FQeVIh4q1xDkIAlGaV4
-> }PFmeQ-grease N=(Zr
M/UiKZLS9K6xgn9mfMXC/akO7cWtbWDoG68GF7LDOT3khbvuG+Ol7+Mw8r321P7v
fLrjgfqCug
--- 3GiwrF82wC51ln1ZoPr8heBKPG3smcTHrpn3QwuP1SA
Óív¶Mê¾â£ê®ŽvŒ$iò’Ô‹È÷;(ÿ¥‘L»‹‰›Ä9¹Ï¸s…-1¢²[Bq×§5÷뚥Ì8>KbálÉ(šŸ¸ç(   1þäH˜

View file

@ -0,0 +1,10 @@
age-encryption.org/v1
-> X25519 lAFGflmWdJh9wzYqQF75W9A7yWnJpatVTSYL+UnShmc
5G176dn4/b0hBFMNxged8HQTJc6/i/kiWG9U2We3Z3I
-> piv-p256 xqSe8Q ArchEEGFmxin8qORVYBYG76Ta11kuVWQoEwA3VnF6+ev
/KSenFW6R0mzA8rdYX10O0QlE/pJj1P9+R3oLULuev0
-> Wm:Yith-grease bk`Ui9y M9L
hZ1ei31xfhAZisW6DXlo5+4919PYx5QtDTgL0IbHbnWXYr+NSls7KPyE
--- NChUIl35wGl5r/FYvovD8x+RWuVilpqsm5xqvOr/FH8
÷aR…Q9Æhæä× où+Mãé%3šÝ•Ï�}Ë|) 
¦¢3ÉK†œÇõw'Dá5:‘÷¢�€+6%ûÍœ³måÁÂUØÕ±Ã õ�m4¶F

View file

@ -0,0 +1,10 @@
age-encryption.org/v1
-> X25519 jwLw0ZQDE0oPK1pfI+SE6pPHFmXTjBBR9bKGlwpRxg4
9cvfMwxS/e0xRIUA4/bzFhBT/qu4yStCWs3NKnr7n5o
-> piv-p256 xqSe8Q Aklmj780XFjRXB6hP5HICrYvnqpHxI4V3XKBoCVGV2i0
LJ1Ugx1hTOo/0USFYGM4KGv54qyi/6V7wDv1czFCT4E
-> gC-grease
--- 2J6EqVCz9ZYUkyEGMbUraHE+SknGrsanAFBeFivNmJ8
Bgz‰yU mt Hǫ̃ðnÛ*í¤çZ¯Uw (%$Ï4Ö—gT:Cž­câ&â
ÉD)Ýþ¬3¬ÜÂÃ%.¥ŽÀ/¸ÅСh3í=Îóè³~ß²

View file

@ -0,0 +1,11 @@
age-encryption.org/v1
-> X25519 tHxG6fGgWTc55QntSpCGlHlLmoybQBm5uySO0JDFlFs
keCZTsYnm9PpxLFbqT318W9O26MQPrLgSoIO2ZZBkts
-> piv-p256 xqSe8Q Aho/0opoUZGV/WfRsZ1q/EWhW5yjB4EP94DrKaDGcjBg
WLdqd0YwFDLTYGSMeMww0Mgqw3MZBqh2rdJJSo9jifs
-> (F7y+-grease PHIp60-
5krq5aozR08UQTSWVpeiYV6imrnMw2yeeY3lhUpAG5UPdIWVwWxvut22cAr0f4/T
fs/OB6IYy7wBhzfd1Ba/hXZNxwHwM6ohBpU
--- sikO0jRf7KcPPuQz6Fs4EQRozL8++s/F9pXQGw+qKRA
&‡m™m*êÉ8ɘUOÕ
Ùòìw7ßz68O S¨tê®®@ͨÁ_EÃÁ� Ô[ꜾÄM6Ü9BãXGà} µ?ÊüÞ#À¹¨Per

View file

@ -0,0 +1,10 @@
age-encryption.org/v1
-> X25519 LvYxfujP+6Q6NC/2ebtVnnRphiM3oEUGMmDBEuHCHFw
/ew4mPbRht3v+yhWPT5HdlQGnELJZWPhSoUIW1z0z1I
-> piv-p256 xqSe8Q Amu9UjGXIFylvwWA7hJCNd90zy171sjawkLV330vte26
33kHGMIyuxGnUpF5Q9Ap5/rTC5ooe95tNA0Z/hWnlYU
-> f8_>qB")-grease
Vh2DLuANNDIq9O7gddvYRKcgMmg1vqcsjxkUFO4Xaf15yoZQJbvybeiVbRP99umV
VfClhMnMeeTVwmRYutgpS2+yuw
--- cfE8lNGxFWSd/UnoNOrdrGV3U90/7e1ZZpGtrUgrhto
5#Ć5ľĆGfĘNĎŁ0Żŕdj˘,Ąůy *sąŁĆŠľ;]Ű ZS”5&32Ĩqq‚ÁĘkĺöIfĄ'B¤’rJť€ČJu7 {v:'H

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,10 @@
age-encryption.org/v1
-> X25519 6sJBGxU146bj34dJ29XjGY5n2XzeYG2Coy8fuQ/nmnQ
GoaSv5YXPFTOoeiRc9vLZOEd+ON1KM4IhF5pdFMRz68
-> piv-p256 xqSe8Q A/JZvoPMzIUCiMT9I8qFwBWCmnNgcs/z91HGIYjDu6cP
JPyH+tRo+wwlsDV1MERLVqzwQ5kNGO/KT/d4860hwvU
-> W-grease BB
ZWThAsUDG5jjhan+twfPawEUbiKRdA8bhIP0R2i/0P9Xz7QgaMTPWsmPRar2sqzi
i9/W4G9Z/X4/K62idlQBs+7cXJL2QosAHA
--- 5B0vPvtgG66dZ524vBpMkKhG3QlkrIRi+G3V6kFM524
ƒ±hí8¦†ÇI%¦”)fÉ;_«FóbÞAbJ=D¼öÊ%�ŸgE«¨�€üă…Ü,Ê.ϰöùœx¢ÏÔ*OÖ„Û H²PëWÆØ_¡Þæ=

Binary file not shown.

View file

@ -0,0 +1,9 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w OkYHAta0AExLlkMIAHvjY+DKkvhMPvQ75eI57PbQgWo
Y9bzTu2PQOMUNPf5374N4UyTQzPSnOs516jbKFacsvw
-> &-grease
yM59yW9IXM7h4kU81cj2P61jg5Rr2uk4FnS9dGlSVhOmYMADIy2mgt9huk2/CICB
WBFmMlsq
--- mqzSNgjR/BjsBU8pa9NKgmEFaVagLsTe5SE6ZehxC3s
™°þ—Ø|�Ë2cjGH> h}Û Öîc¹GÈÎÅÚ³‹X¡‰õƺâ*øØ
]µÏÖXéI¶ì¾øbb-ÃÑ_ýn¨\¤ÉØ”S€t\X¼¦OÛ

View file

@ -0,0 +1,8 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w 8lcufW1HozxdF54nm+LXLLjJDUskQRyb/8HCxOOM6lc
eJHF9oPqt4tHAYxymcPclZzXY94FmW06SxGIxO2X43U
-> {-grease kn6_3P Dqd!
P3/hh9OYfA
--- Z67nmrfzCH0yLCbCXTQlwoN+MkFNoj744bah/j6nG+o
ö\FÌAoÓèÝÈT© ÓÞŸ_L¶LÛb‚í’&=²®vO
æèÙsÌy,à¡î@9àé6tþɵª%–vÄ4L«KCt�ÔÉ«f P

View file

@ -0,0 +1,8 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w CZ//VhaWYODA2wjXJOQ/+KUEVBUK/wEUHcgWwAokHDs
3xrPcXRvnyZc0EXnwQ0BdEXlhIUKIlcnD05IMBmEGGg
-> O>P`waLd-grease Svn~RD c&N3jclb R=! y=IbV#Ix
FPMA/wSTJiTd1P76HlC7Br4yVj77356/MH2lZVkJpeh/KFSl3X20Ap6iL528TGXb
CQ
--- /VZfZw9RFXnpXzTAna7XINY8onqDPgFNwQqlT/Py2Sg
òs‘||O”¹.˜©í0`]ù¥×5qnœk™ÑŠ0àQÃÜÒN6´¨Ï]Oáß+˜,ÏZ÷2e{ÏŠMóþµËu3{¶«Q½¡1o¬u|–&òÚðmXªþ†l@á8®fŽÁû #>&Û4œ¡Æ :MR�ÓÖ=O1È?¡Á£ŒË ¥I”˜Jº˜>‡µ–´½tÕû*õ?Ý´»ô™ Æ”sð=1]ò¦ds^få‘üÿÝ{¬iH3Ù¹¿©„ƒû—¤’N¢sy¯"x!€PäÞÓ�JÕ¸–»ä¹*tG»k6„¤�==ˆZ£âJ´Iízd×Â+؃síé àTÇ1†¾é�âû’¿,Òd$ýs�u‘|Ö�P‚ɽçúR[R×®q3™·Þѳ°/ÍïÁŠä8=4�

View file

@ -0,0 +1,8 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w HoQnsVVkcyaZFasO5JXGHHxMBIoOSxupWY0tNreVeys
Wjz8Ns9/tue5JxMhq2MBC2iMhgLktIv2jTeQ5vEDo3Y
-> D-:-grease _CE!K o4V x<\ YYr>ZN9K
BiZxrEOLoSFc2HmOmOKnqK7Vj7KxsJkKOak41Z8AX4HZjQ+eT74dVX10SuejC5ZF
DTGKAM8eGljUOwvbU7aghGuFI78yKqn0ncsieNAwFb4
--- Wo9h1/P17v0i5Hb9K100Wpn7dtUNTW2M2rjNAb5RXbs
³½¤[‰“¤RÈD‘û¾+xAO3AÆ¥£â%ÂtáDÿ, ­¹‚��Ê™Û{vBBSÀ•Žž<©Þf04*v !­H‘+{¢¹)UBƒ×L

View file

@ -1,8 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w go7St2w4V+OeN5VgddWbw0WHuMJrZFNAE6ybU9tAbmI
sGjDHvZO56PPiIB0CvCuR1tyk2UzObeZk4IRoi+hvWA
-> wxzPB1{z-grease {^`is<&c [D`g<
Gurn/IfyXKKbuyKJNnlHfxwSOBKyqj3SlW3cxqcw6CwoL9Gc0UXeWlOgEHPzas9L
v2un
--- dmrjPRsNFeNkTPWOD1MbORG3X2AuOBp1lbFIS64kPyg
8¢² (èüyýZ\{j~ãZɨn dÖHÊò´UØÆ±þw 3?nÿ ÅnQº÷ÌóP>P8J0 ¨Ã"Œ_ÉÒÜcìHt§•üßp¨Nh�=8%ËHÌE¬uÍHÅrÓ.Q+u�ìÈp4\oÎTÆóêN[ŒnXô!ŒtÚ;z­�«ù

View file

@ -0,0 +1,9 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w 9xHKoTsXryIPchQHpj0TCkrjYzJL73X9E4PatTkpcQ4
uznzwCWVlaSkd3TsgeUE7jIqPGEYtrorBAP6Q2ep4zY
-> x-grease KQn7
vP56IKkmO+GVptk+iworBsPIpT7AqnMISw8yHHhCNR2Ihy77KCjBscM
--- fEohwNhvtx1ArxQ7L5qnFjF9UE/0SaLRGnXB2rjuW1A
»™U•î ÑSãœ&©EÒujÔ×n‘n¹íã÷Ü
DBï¯çeËÖE^ãV+igZ¾/7µ#õï ¨l“=Õú…BÿЭC2')÷Hq

View file

@ -0,0 +1,8 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w N9mUWEbdNtvw4jZskXt2ZGzBwXxNGIcAIgQWSNtu9zw
7iNU3zvlMWfa4iXY7BVqlCzRMaLlsC+0quWQwUYUozk
-> P9[M-grease
GpkRAuOj5FHe5xuzeZv6mh5PKUWMtyRqC1iVoitoE7REUB6rpJ8oXvBPo173s43G
9vHQhmkeU1jEe/i8W/8iClm37FlPoA6OVQSmybGRiFuNWcsBOWi9l3kYn/bX
--- mhVs9W8Q0piMYZ5JV55ayDpTC13cIdp+jfpD4cy1TK4
±ÊÞ�+‘ìN3ºvßÐi† Ì¾º¸DMf¨¨‘!%9Iâ]­éRú“ÝN%8\øšøª?ÌÀ¡Í½P–�ÿít$˜ˆ%7 úqú·Ä!ÑÙ

View file

@ -0,0 +1,8 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w S826+T9SqnIU4aCCCUdse0dfyoep8biPZpPcJd9XbxE
9hs1+nSJCo0Y6K+bPGt4Dg78WFVDwssNzrTw6o3GiJI
-> 7W\[-grease HSm n^&7 M*nP[ uDc
M2eA0EryPobxGD9Ekug7PhY/9Lkh9afVQMGxFQlamPkYKzdq1VZCA+e3r/+cQ5Q8
zPicDLWHBGB6ChELz61Bx6zwZrofiSa/cZcqeXTViUzfusY
--- fSUlFOyenk+vxDafcml8aJdVHY0MAOCU8J4Mj3Tr21o
\½Ô­VœÖ<Þ01 l4®ÝÎÿ÷$ruáûßí§¥óWº¹ëÞ úصCܹˆÊ¿u`Õ±/úHÃefëˆíK5V.Ë)Eº›u

View file

@ -0,0 +1,7 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w 0J9u3JGS+t6kiwgInZSh6LrbgteuGuYDMAYiIXsjiS0
eYhHL5ouC7oMuNQwhMXYYAK21tJ4aOgqnV6lveENneo
-> qXi1$-grease 2 o}0~mZv# N|"yDa
xJWfySLDpLi/yu14kUAB+3CWlb6jiweScOHJG23o
--- FrqyOGzxhzWInvDZes975yLYXR0s6Om/tdVPQqZsKCs
Æp:qŽ CÀÑBŠ$7Æö=ñõ­…~ÂDÑ2!+t˜wþØ€'ó(þ/à‡ø@ B�̞ǭÃüÅ^"Ѽl_À&I®;¸udú‹Éÿû]Æ

View file

@ -0,0 +1,10 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w Z9bxq/m67wt27YLFMGDc/mRCwpOYWoyleE1kq6ULF2w
TC9+IRTAIoZyK4Zf9c3WO29r7Ofzey5oMXib/LmQblQ
-> Gp"-grease hzbGw mS [pe
LKBfjRckJwOjFNHjltM/O+16s+K/tzItw4I3+JOCPQZ1eA
--- ygl3F9EOdj2RhG5GADVUbguGvWIPxvRTJsWHnT2hbys
¤”·ú6Àþ¨Ùãëgà :²2{ƒü3RA*ú�Š›¡¶R0©a‹”\U@> ÌD?€‚¼d`;ÚX®äà±cGïïç—âgŸ/“{º€=æ~cx]ønïš3xºW�t”‰jñ£Çy {ÁÙŸó6[÷•öÚ‰pÒ¯»I/7X¦~ÿñ]͵Gr J§‹sÆÄd_ øSä|FÌÜÿàs˜%XU†y!
ª•ŒæÍ�Ä<®³‡@!£jÄ’K14ÐÓO6Ât] #7ªÃD´Ÿ%Fs#cðH¦ã1~Š,N¤[Š+A'-y²ýCÑŽñΈÅHW!©˜hMÁ·éŽ cÏ45‰ªLBâÕ&"‹æL…ï
ç¹Î-0º}£sþî`!Íûà€¯Ùff
Dm×û?

View file

@ -0,0 +1,8 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w EJmmMDqhjpdje5w2XhXrTEmf7bM+z7nSOWBkdaDF41w
QTTc70EUolP/ED6dzSbmMlkGUH0tufl1nDw89Naamsg
-> kh!x-grease V \ZB/O j*.b6m'
elk7wq0IFo0Wz03+g4Lh
--- P6ertGMfxGfckpYEcjd996vcGoRKAinM+k1dV/ExcOc
趣8ィWッヘノY; 「フ_�賴ムノ_�Vク:�" 朷ワ社椚ゥ~�ァ広�舗ユxoa恷對
YFキ�?]・+賄涜

View file

@ -0,0 +1,8 @@
age-encryption.org/v1
-> ssh-ed25519 rz300w SQoLq+Es6/NvmUCwNaPSMloLPpQ9GKbu6UES2VP03VU
Dzn8KF4fDL+NnIO3iOSiC/K0w4RGxau00v0oLbpDLOE
-> Whx!)}-grease
CQXmmH5hUagWqNhk
--- hUTqCDD4arRwuHf3O1BAbiUxqopLpib1gJRkxqh37RA
>»ÃÁ+!‘ÜjÞÀdúÕøë¹HómÙž¨eÞ=³qI¤Ž£S¬×G@i>´¨ë½¥ËÆ «,
ÔEFOýغ'žog•³Ñ”-ÍÈ1FVʸ