From e3b38edc50c4092481e718934c34dc5afacd262e Mon Sep 17 00:00:00 2001 From: jurraca Date: Tue, 19 May 2026 13:21:05 +0000 Subject: [PATCH 1/6] copy builder-keys from asmap/asmap.sigs --- builder-keys/Hodlinator.gpg | 14 ++ builder-keys/fjahr.gpg | 52 +++++++ builder-keys/jurraca.gpg | 52 +++++++ builder-keys/luisschwab.gpg | 110 +++++++++++++ builder-keys/sedited.gpg | 297 ++++++++++++++++++++++++++++++++++++ builder-keys/sr-gi.gpg | 10 ++ 6 files changed, 535 insertions(+) create mode 100644 builder-keys/Hodlinator.gpg create mode 100644 builder-keys/fjahr.gpg create mode 100644 builder-keys/jurraca.gpg create mode 100644 builder-keys/luisschwab.gpg create mode 100644 builder-keys/sedited.gpg create mode 100644 builder-keys/sr-gi.gpg diff --git a/builder-keys/Hodlinator.gpg b/builder-keys/Hodlinator.gpg new file mode 100644 index 0000000000..c7d8ea3a58 --- /dev/null +++ b/builder-keys/Hodlinator.gpg @@ -0,0 +1,14 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEabBuERYJKwYBBAHaRw8BAQdASV/Oy6YRQ5a54HAtQDZ/7LVTldevtQkFz4Je +Uiz4wvG0OkhvZGxpbmF0b3IgPDE3MjQ0NTAzNCtob2RsaW5hdG9yQHVzZXJzLm5v +cmVwbHkuZ2l0aHViLmNvbT6IlAQTFgoAPBYhBEsgTUrkYCohQkjBqj3OcHaHLD8d +BQJpsG4RAhsDBQkJZgGABAsJCAcEFQoJCAUWAgMBAAIeAQIXgAAKCRA9znB2hyw/ +HcllAQDC+QUvuMU5Zx/5h9pSjuRsO3+qG/J/UfssxrBYEeUCFwEAv7RePLWhu+dY +n0WeCR7Au+FloJfnjKJuIRl+3zYsfQC4OARpsG4REgorBgEEAZdVAQUBAQdA5sbe +J6WGJMsKGfSG6gbEnfwDv9kCZl4GyxqDedv8ekUDAQgHiH4EGBYKACYWIQRLIE1K +5GAqIUJIwao9znB2hyw/HQUCabBuEQIbDAUJCWYBgAAKCRA9znB2hyw/HSeRAQCl +t22hEZTz6Om7HO6MS0xGczdhYhX14FjNaWOsz4qw+QD/S4RqrBByEctQlSI7DqVF +xsB/o83LMVtY6Wzti0VniwM= +=LOQ2 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/builder-keys/fjahr.gpg b/builder-keys/fjahr.gpg new file mode 100644 index 0000000000..ec3c7edcf3 --- /dev/null +++ b/builder-keys/fjahr.gpg @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: GPGTools - https://gpgtools.org + +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 +=R0Wc +-----END PGP PUBLIC KEY BLOCK----- diff --git a/builder-keys/jurraca.gpg b/builder-keys/jurraca.gpg new file mode 100644 index 0000000000..b415b7537d --- /dev/null +++ b/builder-keys/jurraca.gpg @@ -0,0 +1,52 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +PUdlllNoTvY= +=M0E+ +-----END PGP PUBLIC KEY BLOCK----- diff --git a/builder-keys/luisschwab.gpg b/builder-keys/luisschwab.gpg new file mode 100644 index 0000000000..3a06c32889 --- /dev/null +++ b/builder-keys/luisschwab.gpg @@ -0,0 +1,110 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=KdfH +-----END PGP PUBLIC KEY BLOCK----- + diff --git a/builder-keys/sedited.gpg b/builder-keys/sedited.gpg new file mode 100644 index 0000000000..319b3b9399 --- /dev/null +++ b/builder-keys/sedited.gpg @@ -0,0 +1,297 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 ++mbCrmcePpQx +=VBfa +-----END PGP PUBLIC KEY BLOCK----- diff --git a/builder-keys/sr-gi.gpg b/builder-keys/sr-gi.gpg new file mode 100644 index 0000000000..93614e837f --- /dev/null +++ b/builder-keys/sr-gi.gpg @@ -0,0 +1,10 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEYadQQBYJKwYBBAHaRw8BAQdAzTFNGLHoMYsTmuaLj20QUoGr5sLNsyAm3p2n +xB3QWdy0MFNlcmdpIERlbGdhZG8gU2VndXJhIDxzZXJnaS5kZWxnYWRvLnNAZ21h +aWwuY29tPoiUBBMWCgA8FiEEweyBO7F54+rt2yFuNd23EmzLdhgFAmGnUEACGwMF +CwkIBwIDIgIBBhUKCQgLAgQWAgMBAh4HAheAAAoJEDXdtxJsy3YYn/QBAIhPdigg +PKkCuFuP7l+pCZZtkWRtrg31//jWHCjgHlWBAQCbKCkpEJptahiRQmYbd596I2TW +Dj4CD1cltgP26OahDQ== +=9vP0 +-----END PGP PUBLIC KEY BLOCK----- From 799175ff91c10f10f8cc8dacb37d657b849e5fa5 Mon Sep 17 00:00:00 2001 From: jurraca Date: Tue, 19 May 2026 13:22:13 +0000 Subject: [PATCH 2/6] copy attestations from asmap/asmap.sigs --- .../2026/1772726400/Hodlinator/SHA256SUMS | 3 +++ .../2026/1772726400/Hodlinator/SHA256SUMS.asc | 8 ++++++++ attestations/2026/1772726400/fjahr/SHA256SUMS | 3 +++ .../2026/1772726400/fjahr/SHA256SUMS.asc | 18 ++++++++++++++++++ .../2026/1772726400/jurraca/SHA256SUMS | 3 +++ .../2026/1772726400/jurraca/SHA256SUMS.asc | 17 +++++++++++++++++ .../2026/1772726400/luisschwab/SHA256SUMS | 3 +++ .../2026/1772726400/luisschwab/SHA256SUMS.asc | 16 ++++++++++++++++ .../2026/1772726400/sedited/SHA256SUMS | 3 +++ .../2026/1772726400/sedited/SHA256SUMS.asc | 17 +++++++++++++++++ attestations/2026/1772726400/sr-gi/SHA256SUMS | 3 +++ .../2026/1772726400/sr-gi/SHA256SUMS.asc | 7 +++++++ 12 files changed, 101 insertions(+) create mode 100644 attestations/2026/1772726400/Hodlinator/SHA256SUMS create mode 100644 attestations/2026/1772726400/Hodlinator/SHA256SUMS.asc create mode 100644 attestations/2026/1772726400/fjahr/SHA256SUMS create mode 100644 attestations/2026/1772726400/fjahr/SHA256SUMS.asc create mode 100644 attestations/2026/1772726400/jurraca/SHA256SUMS create mode 100644 attestations/2026/1772726400/jurraca/SHA256SUMS.asc create mode 100644 attestations/2026/1772726400/luisschwab/SHA256SUMS create mode 100644 attestations/2026/1772726400/luisschwab/SHA256SUMS.asc create mode 100644 attestations/2026/1772726400/sedited/SHA256SUMS create mode 100644 attestations/2026/1772726400/sedited/SHA256SUMS.asc create mode 100644 attestations/2026/1772726400/sr-gi/SHA256SUMS create mode 100644 attestations/2026/1772726400/sr-gi/SHA256SUMS.asc diff --git a/attestations/2026/1772726400/Hodlinator/SHA256SUMS b/attestations/2026/1772726400/Hodlinator/SHA256SUMS new file mode 100644 index 0000000000..00d3d5b36b --- /dev/null +++ b/attestations/2026/1772726400/Hodlinator/SHA256SUMS @@ -0,0 +1,3 @@ +af74f9775423ee28195451e336295570970b286b8d8b652388c151a4dabad85b final_result.txt +478d61986c59365cf86cd244485bbbe76a9ca0c630864717286dd19949879074 1772726400_asmap.dat +1c20ea2dee306af0a3ab4eaefaabe1e4c23a1c4256e60639e7ba48b2bbe56f24 1772726400_asmap_unfilled.dat diff --git a/attestations/2026/1772726400/Hodlinator/SHA256SUMS.asc b/attestations/2026/1772726400/Hodlinator/SHA256SUMS.asc new file mode 100644 index 0000000000..2a6b50b01c --- /dev/null +++ b/attestations/2026/1772726400/Hodlinator/SHA256SUMS.asc @@ -0,0 +1,8 @@ +-----BEGIN PGP SIGNATURE----- + +iKQEABYIAEwWIQRLIE1K5GAqIUJIwao9znB2hyw/HQUCabByRS4cMTcyNDQ1MDM0 +K2hvZGxpbmF0b3JAdXNlcnMubm9yZXBseS5naXRodWIuY29tAAoJED3OcHaHLD8d +FjMA/RMVmjCXXh7BXFD3ASDlWUI9l7Y3R1hkWd/bqgOYNO68AP0UKaK7l61/qs+e +UFblT3SGnDdXVc7ryOitOmY31M4+DQ== +=lv7B +-----END PGP SIGNATURE----- diff --git a/attestations/2026/1772726400/fjahr/SHA256SUMS b/attestations/2026/1772726400/fjahr/SHA256SUMS new file mode 100644 index 0000000000..00d3d5b36b --- /dev/null +++ b/attestations/2026/1772726400/fjahr/SHA256SUMS @@ -0,0 +1,3 @@ +af74f9775423ee28195451e336295570970b286b8d8b652388c151a4dabad85b final_result.txt +478d61986c59365cf86cd244485bbbe76a9ca0c630864717286dd19949879074 1772726400_asmap.dat +1c20ea2dee306af0a3ab4eaefaabe1e4c23a1c4256e60639e7ba48b2bbe56f24 1772726400_asmap_unfilled.dat diff --git a/attestations/2026/1772726400/fjahr/SHA256SUMS.asc b/attestations/2026/1772726400/fjahr/SHA256SUMS.asc new file mode 100644 index 0000000000..50cc7766b1 --- /dev/null +++ b/attestations/2026/1772726400/fjahr/SHA256SUMS.asc @@ -0,0 +1,18 @@ +-----BEGIN PGP SIGNATURE----- +Comment: GPGTools - https://gpgtools.org + +iQJJBAABCAAzFiEEtFq20ghhrCHSdrgm8T0enYkHmM0FAmmvT00VHGZqYWhyQHBy +b3Rvbm1haWwuY29tAAoJEPE9Hp2JB5jNgjIP/jhbUgrYbIW3oODw998xEjjcRqZs +iBCOpfsfiSUkKg0RZgWUW5XrV+r0G/QYEV4jiI8xbyISulPxhbCrqpHQYzm5KZR7 +v0pW7pic+Tz0PmeIZbtRGO4/1FIBBc0z4a3m8MFFucCAmW/pLvfh3t4jcpPnknP8 +TOKe1/G/h0bk96Nhn+ep3QHsJfU++rlK5kdRyeUXnjfdbMmDNtuXSZjwN6XRi1kK +m1ROQ43Hl7xCO0JiznFx4bzaa2dLQQay1jCyNaJbG/IIUzThoPAKw1pddtxUxENF +Sc2SIB3s/I9nhloHTasux+221OxE6vAwfXlSKsFE2VcKlY4GopxXShLd81PPrgsP +V7Dhtvs32gkF+m2TEYbOn5yNDYtXVMG10wXV8PeHWaPblFRHJhRogfNWCfC6jEm2 +LIUGayzZj3SuzXHeMqtA6uXxG7LX2FrdWvMMbU3Pi48L5X0x7vrD1/REPlmCsTDo +RntnCKNGdZsG+wBR8QUrd0Gs2xeSQm6sWs8Ia99OkFBzaLJvAYT4UGpBDSD+Se6M +yeCGaAwLeF9L+XhFwrt/oyZkDFctx8somHbHhf88S/bqxgTEGgvGlfvNYcYFEH1T +o86RNiM+7cqw2e48OgQzG8IUVzsU132f5xZogu6DFm+Co3H0TKV69wd3m4BZ0CJd +eB9tjA7n3MhdPauk +=vark +-----END PGP SIGNATURE----- diff --git a/attestations/2026/1772726400/jurraca/SHA256SUMS b/attestations/2026/1772726400/jurraca/SHA256SUMS new file mode 100644 index 0000000000..00d3d5b36b --- /dev/null +++ b/attestations/2026/1772726400/jurraca/SHA256SUMS @@ -0,0 +1,3 @@ +af74f9775423ee28195451e336295570970b286b8d8b652388c151a4dabad85b final_result.txt +478d61986c59365cf86cd244485bbbe76a9ca0c630864717286dd19949879074 1772726400_asmap.dat +1c20ea2dee306af0a3ab4eaefaabe1e4c23a1c4256e60639e7ba48b2bbe56f24 1772726400_asmap_unfilled.dat diff --git a/attestations/2026/1772726400/jurraca/SHA256SUMS.asc b/attestations/2026/1772726400/jurraca/SHA256SUMS.asc new file mode 100644 index 0000000000..eb8151f42c --- /dev/null +++ b/attestations/2026/1772726400/jurraca/SHA256SUMS.asc @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- + +iQJCBAABCAAsFiEEcSZmNlu/50/SP+KEWZo70h2SLzoFAmmt1x8OHGp1bGllbnVA +cG0ubWUACgkQWZo70h2SLzq/gA//f4mO29JJwIF3JQihYRMZfTSlgCb6ERGAacHM +svGahN4p8Fr//9nNaCXZVqBZnsS4Y4xuWY3V59x5iQETB5ZV2VlzGkHdpLMWOSJC +dbA+SfR/9WUKvC28/f84DXmFmQumuF6v/sg5Zy165BzKLF6kGVDWMLGRgZ3n8Dn4 +Txg0NWWK+GhxzzKnVo10PtLy7b/MZe8ETByxS07yn4BHuDvEc4/zkLy+0sMqgPyn +n+EV6ORUbHPWRh6SETNsaA8nYaJb1bvEHImPFN09nTliky7H2iI8UD1q9zhHs7or +QW8QXItfS1ocK0GjGb/fLgj470C47T58ulj437ZyuwedEXRLf1dlk/yrLCYDu1wT +YMJ9Oa6ipwRYMNKBpV838tMKXJyYBvd3RFmT0+yNpOcitDPzLmddJr6nMIjGMwfl +37i0T5K8Oc9RM5Ep55cONh34yboNwfGzay0Dhhl/NQTAbyduU+nscwf3GUpY8c+v +mqZQ3WeToOac/pqzvwHZeV4j3+Olj+SeSQ8xIoGMKXWs5kDVLsBiVFzBWwjI/niz +pqy6grxvx7CySjpWTaYw7ygdFcYdw40I2k1SMpQKSNLuWUH2FvEpXKmpuOW42wNI +KiSdChEyTCDRngA2FCzn14hP4LPLSG+3yA3hMGPeJQVhVJQwub00DgYernglpoNg +ZQf9HTg= +=Hi6B +-----END PGP SIGNATURE----- diff --git a/attestations/2026/1772726400/luisschwab/SHA256SUMS b/attestations/2026/1772726400/luisschwab/SHA256SUMS new file mode 100644 index 0000000000..00d3d5b36b --- /dev/null +++ b/attestations/2026/1772726400/luisschwab/SHA256SUMS @@ -0,0 +1,3 @@ +af74f9775423ee28195451e336295570970b286b8d8b652388c151a4dabad85b final_result.txt +478d61986c59365cf86cd244485bbbe76a9ca0c630864717286dd19949879074 1772726400_asmap.dat +1c20ea2dee306af0a3ab4eaefaabe1e4c23a1c4256e60639e7ba48b2bbe56f24 1772726400_asmap_unfilled.dat diff --git a/attestations/2026/1772726400/luisschwab/SHA256SUMS.asc b/attestations/2026/1772726400/luisschwab/SHA256SUMS.asc new file mode 100644 index 0000000000..f9aecdb38e --- /dev/null +++ b/attestations/2026/1772726400/luisschwab/SHA256SUMS.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEbjL42/VleYA2umq3FEb715jQm1wFAmmwHUkACgkQFEb715jQ +m1zgmg/+LKjdttX+LexHj2hmfk9J1PFFv1Te8LKiCAuRqR317JOZjfZrrEZ7lNXY +3nGwfqvVu9zfiIhvmOkgiPD7Xt7YnHUresZXJhH3pkndUlln2rUNYbSs4XkrX+iI +pSVgOjiYIC/EMUayRkZzF5bQwmXqS043WLQDpSOg9TyPwVun9zqijjLtYUSGtRXf +/2icLMaj8ge4Sd4O2H9OGK/YrsN3EW3doKwW8jZUncPlRcVb463mAskORUsSzGhe +1rUjclXOHX1NT/ORGfZqSppJD90FeNo9A5BbwoA8PMxCrZgdKTZXafloXYxp8LLC +u+AGWMuwop587QYtiy4tIu0hoFGLgyHGqbkDKwDNw0ECSPdCnwPv17HND+HwW1zf +JGie4vQHq+sgPYHKansHCAD+NLaaCEjIpGqIZRDEwucNoy9wTMwU/Uf4REFM90h1 +4CA4zgrc7ZSwX+eRyXaFU04iVwOjwqZgYcURILdWVBHj6PzgdQr5Kv2YfpznlplM +6RmPZmyggZ66BVnrTjjr/Pu2QHX6T1O7tRRNu5GJFlm1b0ynMe5qTB2n1rWiPLL8 +8QOh5MEJX+8OEeWGmyIj/G28mbRSyDamXAnK4kRo6UozCf3IrggtksEj/OtRrBcS +htngXxicrkXhDTYDyJ2M/lPrasWzBByjK/p7YdjM+R0AerfFSRE= +=8Rdr +-----END PGP SIGNATURE----- diff --git a/attestations/2026/1772726400/sedited/SHA256SUMS b/attestations/2026/1772726400/sedited/SHA256SUMS new file mode 100644 index 0000000000..00d3d5b36b --- /dev/null +++ b/attestations/2026/1772726400/sedited/SHA256SUMS @@ -0,0 +1,3 @@ +af74f9775423ee28195451e336295570970b286b8d8b652388c151a4dabad85b final_result.txt +478d61986c59365cf86cd244485bbbe76a9ca0c630864717286dd19949879074 1772726400_asmap.dat +1c20ea2dee306af0a3ab4eaefaabe1e4c23a1c4256e60639e7ba48b2bbe56f24 1772726400_asmap_unfilled.dat diff --git a/attestations/2026/1772726400/sedited/SHA256SUMS.asc b/attestations/2026/1772726400/sedited/SHA256SUMS.asc new file mode 100644 index 0000000000..9d4c58082e --- /dev/null +++ b/attestations/2026/1772726400/sedited/SHA256SUMS.asc @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- + +iQJHBAABCAAxFiEE8s/Eq9C5nYN+67fQm3m0VpHbQXMFAmmwil8THHNlYi5rdW5n +QGdtYWlsLmNvbQAKCRCbebRWkdtBc0fZD/9HprWd6DMkzaCnxrJs13iZLMIyhWa7 +h85Y67R8rZZDgeEPPTjay+z2w2vFlP7gSJhsP80j7vtUlr3vg1orgeyvLX4NciFU +kpG+sUZmZqMv+diFuNWku2euM/rBz2jq0WwfM3++lHgG4j5Y9LUU9AU0L8O4s5sI +Gl+GRmzkdL0P0G5CjjOgWQpnV7ZFGcIlN6jJZBv92sYU8ZpAqT8zdJe5WOxT4sF4 +Gtfb4+WaleDhJ9Kd4/lwy9kKzFJxFLAeYgh3ooARr7th0RTrADOIbl4AF1LwrSxC +kxVjhkXa1KMDF41IdXRX1Ml6XaglVfThtGrMojb5kt78vtZScrVdCrxQM7gSw20j +oFQfvT9pP3qiaE7QE/CuI2U0xE44vBScAQtOtPYOWxOGXcTXUZC/WWb4kUXg6jeP +4GQXvJ57klPrlgUqsRxdu6jajDd1drVNICiQ8bEkp1LHx0LEcslYHgzMrZm25P2a +PZ2j+qILBL8D8wu7CUWVbT5er6pqqxsMDWL22bcjT2NVg/j/mksjWmzZ+Sr7yRdt +1AfeGwrmJI9YGvGUFi9zvvu4tzrNeUcHIV0r4p9aYHnwH8b9hzJobrK4gNn1y2ZV +JpZHxOzdR5wxzouXlRGMa3EBzt8nKUIuRdh6iBbsFkoSdIaa5KrjMVUjRPeftlmS +8aOIfbe0VXUE4Q== +=DxQi +-----END PGP SIGNATURE----- diff --git a/attestations/2026/1772726400/sr-gi/SHA256SUMS b/attestations/2026/1772726400/sr-gi/SHA256SUMS new file mode 100644 index 0000000000..00d3d5b36b --- /dev/null +++ b/attestations/2026/1772726400/sr-gi/SHA256SUMS @@ -0,0 +1,3 @@ +af74f9775423ee28195451e336295570970b286b8d8b652388c151a4dabad85b final_result.txt +478d61986c59365cf86cd244485bbbe76a9ca0c630864717286dd19949879074 1772726400_asmap.dat +1c20ea2dee306af0a3ab4eaefaabe1e4c23a1c4256e60639e7ba48b2bbe56f24 1772726400_asmap_unfilled.dat diff --git a/attestations/2026/1772726400/sr-gi/SHA256SUMS.asc b/attestations/2026/1772726400/sr-gi/SHA256SUMS.asc new file mode 100644 index 0000000000..3921984b01 --- /dev/null +++ b/attestations/2026/1772726400/sr-gi/SHA256SUMS.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHUEABYIAB0WIQTB7IE7sXnj6u3bIW413bcSbMt2GAUCabAtsQAKCRA13bcSbMt2 +GOFjAQDk6QJZskpczSuJso11+7pTT3fleQtCtQYyvu0LNXgFDQD/Vssj26zUorbU +YBlbcPX1PlTZ45uP75kTS3m5OBwY3wU= +=8poJ +-----END PGP SIGNATURE----- From 9aac8d145eaf470e33ecb38e2861483a44f05537 Mon Sep 17 00:00:00 2001 From: jurraca Date: Tue, 19 May 2026 13:59:57 +0000 Subject: [PATCH 3/6] copy asmap attestation and verification scripts --- asmap-attest | 234 +++++++++++++++++++++++++++++++++++++++++++++++++++ asmap-verify | 219 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 453 insertions(+) create mode 100755 asmap-attest create mode 100755 asmap-verify diff --git a/asmap-attest b/asmap-attest new file mode 100755 index 0000000000..4dc4dd4207 --- /dev/null +++ b/asmap-attest @@ -0,0 +1,234 @@ +#!/usr/bin/env bash +export LC_ALL=C +set -e -o pipefail + +################ +# Required non-builtin commands should be invocable +################ + +check_tools() { + for cmd in "$@"; do + if ! command -v "$cmd" > /dev/null 2>&1; then + echo "ERR: This script requires that '$cmd' is installed and available in your \$PATH" + exit 1 + fi + done +} + +check_tools cat env basename mkdir sha256sum mktemp diff + +GPG=${GPG:-gpg} + +if [ -z "$NO_SIGN" ]; then + # shellcheck disable=SC2206 + GPG_ARRAY=($GPG) + check_tools "${GPG_ARRAY[0]}" +fi + +################ +# Usage +################ + +cmd_usage() { +cat < \\ + ASMAP_TXT= \\ + ENCODED_FILLED= \\ + ENCODED_UNFILLED= \\ + EPOCH= \\ + [ NO_SIGN=1 ] \\ + ./asmap-attest + +Example: + + env SIGNER=satoshi \\ + ASMAP_TXT=/home/user/kartograf/out/1772726379/final_result.txt \\ + ENCODED_FILLED=/home/user/kartograf/out/1772726379/filled.dat \\ + ENCODED_UNFILLED=/home/user/kartograf/out/1772726379/unfilled.dat \\ + EPOCH=1772726379 \\ + ./asmap-attest + + Outputs: + \$PWD/1772726379/satoshi/SHA256SUMS (attestation) + \$PWD/1772726379/satoshi/SHA256SUMS.asc (signature) + +Example w/o signing, just creating SHA256SUMS: + + env SIGNER=satoshi \\ + ASMAP_TXT=/home/user/kartograf/out/1772726379/final_result.txt \\ + ENCODED_FILLED=/home/user/kartograf/out/1772726379/filled.dat \\ + ENCODED_UNFILLED=/home/user/kartograf/out/1772726379/unfilled.dat \\ + EPOCH=1772726379 \\ + NO_SIGN=1 \\ + ./asmap-attest + +Environment variables: + + SIGNER GPG key name used for signing + ASMAP_TXT Path to the asmap text file (e.g. final_result.txt) + ENCODED_FILLED Path to the filled encoded binary (.dat) + ENCODED_UNFILLED Path to the unfilled encoded binary (.dat) + EPOCH Unix timestamp used as the output folder name + NO_SIGN If set and non-empty, skip GPG signing + GPG Override the gpg binary (default: gpg) + +EOF +} + +################ +# Required env vars should be non-empty +################ + +if [ -z "$SIGNER" ] || [ -z "$ASMAP_TXT" ] || [ -z "$ENCODED_FILLED" ] || [ -z "$ENCODED_UNFILLED" ] || [ -z "$EPOCH" ]; then + cmd_usage + exit 1 +fi + +################ +# Input files should exist and be readable +################ + +for var_name in ASMAP_TXT ENCODED_FILLED ENCODED_UNFILLED; do + file_path="${!var_name}" + if [ ! -f "$file_path" ]; then +cat << EOF +ERR: The specified ${var_name} does not exist or is not a regular file: + + '$file_path' + +EOF + exit 1 + fi + if [ ! -r "$file_path" ]; then +cat << EOF +ERR: The specified ${var_name} is not readable: + + '$file_path' + +EOF + exit 1 + fi +done + +################ +# The SIGNER should have a corresponding .gpg key in builder-keys/ +################ + +signer_key="builder-keys/${SIGNER}.gpg" +if [ ! -f "$signer_key" ]; then +cat << EOF +ERR: No builder key found for signer '${SIGNER}': + + '$signer_key' + +Hint: The SIGNER name must match a .gpg file under builder-keys/ in the + asmap.sigs repository (without the .gpg extension). Available signers: + +EOF + if [ -d "builder-keys" ]; then + for f in "builder-keys"/*.gpg; do + if [ -f "$f" ]; then + key_name="$(basename "$f" .gpg)" + echo " ${key_name}" + fi + done + else + echo " (builder-keys directory not found)" + fi + echo "" + exit 1 +fi + +################ +# The GPG key should be usable +################ + +if [ -z "$NO_SIGN" ] && ! ${GPG} --dry-run --list-secret-keys "${SIGNER}" >/dev/null 2>&1; then + echo "ERR: GPG can't seem to find any secret key named '${SIGNER}'" + exit 1 +fi + +################ +# Set up output directory +################ + +signer_dir="${PWD}/${EPOCH}/${SIGNER}" +mkdir -p "$signer_dir" + +############## +## Attest ## +############## + +txt_basename="$(basename "$ASMAP_TXT")" +filled_basename="$(basename "$ENCODED_FILLED")" +unfilled_basename="$(basename "$ENCODED_UNFILLED")" + +txt_hash="$(sha256sum "$ASMAP_TXT" | cut -d' ' -f1)" +filled_hash="$(sha256sum "$ENCODED_FILLED" | cut -d' ' -f1)" +unfilled_hash="$(sha256sum "$ENCODED_UNFILLED" | cut -d' ' -f1)" + +sha256sums_file="$signer_dir/SHA256SUMS" + +temp_sha256sums="$(mktemp)" +cat > "$temp_sha256sums" </dev/null 2>&1; then + echo "A SHA256SUMS file already exists for signer '${SIGNER}' and epoch '${EPOCH}' and is up-to-date." + rm -f "$temp_sha256sums" + else + diff -u "$sha256sums_file" "$temp_sha256sums" || true + cat << EOF +-- + +ERR: A SHA256SUMS file already exists for signer '${SIGNER}' and epoch '${EPOCH}' and attests + differently. See the diff above for details. + +Hint: You may wish to remove the existing attestation and its signature by + invoking: + + rm '${sha256sums_file}'{,.asc} + + Then try running this script again. + +EOF + rm -f "$temp_sha256sums" + exit 1 + fi +else + mv "$temp_sha256sums" "$sha256sums_file" + echo "SHA256SUMS written to '$sha256sums_file'" +fi +echo "" + +############## +## Sign ## +############## + +if [ -z "$NO_SIGN" ]; then + if [ ! -e "$sha256sums_file".asc ]; then + ${GPG} --detach-sign \ + --digest-algo sha256 \ + --local-user "$SIGNER" \ + --armor \ + --output "$sha256sums_file".asc "$sha256sums_file" + else + echo "Signature '${sha256sums_file}.asc' already exists." + fi +else + echo "Not signing SHA256SUMS as \$NO_SIGN is set" +fi + +echo "" +echo "Done. Results for epoch '${EPOCH}', signer '${SIGNER}':" +echo " ${sha256sums_file} (attestation)" +if [ -z "$NO_SIGN" ] && [ -e "$sha256sums_file".asc ]; then + echo " ${sha256sums_file}.asc (signature)" +fi + diff --git a/asmap-verify b/asmap-verify new file mode 100755 index 0000000000..e7177d39a7 --- /dev/null +++ b/asmap-verify @@ -0,0 +1,219 @@ +#!/usr/bin/env bash +export LC_ALL=C +set -e -o pipefail + +################ +# Required non-builtin commands should be invocable +################ + +check_tools() { + for cmd in "$@"; do + if ! command -v "$cmd" > /dev/null 2>&1; then + echo "ERR: This script requires that '$cmd' is installed and available in your \$PATH" + exit 1 + fi + done +} + +check_tools cat diff gpg basename + +################ +# Usage +################ + +cmd_usage() { +cat < ] \\ + [ EPOCH= ] \\ + [ SIGNER= ] \\ + ./contrib/asmap/asmap-verify + +Example verifying all epochs: + + env ./asmap-verify + +Example verifying a specific epoch: + + env EPOCH=1772726379 \\ + ./asmap-verify + +Example using a specific sigs repo and signer's attestation as the compare base: + + env ASMAP_SIGS_REPO=/home/user/asmap.sigs \\ + SIGNER=satoshi \\ + ./asmap-verify + +Environment variables: + + ASMAP_SIGS_REPO (optional) Path to the asmap.sigs repository clone + EPOCH (optional) Only verify this epoch; default: verify all epochs + SIGNER (optional) Use this signer's SHA256SUMS as the compare base; + default: use the first one found + +EOF +} + +################ +# Assume current repo if empty +################ + +if [ -z "$ASMAP_SIGS_REPO" ]; then + ASMAP_SIGS_REPO="$PWD" +fi + +################ +# ASMAP_SIGS_REPO should exist as a directory +################ + +if [ ! -d "$ASMAP_SIGS_REPO" ]; then +cat << EOF +ERR: The specified ASMAP_SIGS_REPO is not an existent directory: + + '$ASMAP_SIGS_REPO' + +Hint: Please clone the asmap.sigs repository and point to it with the + ASMAP_SIGS_REPO environment variable. + +EOF +cmd_usage +exit 1 +fi + +builder_keys_dir="$ASMAP_SIGS_REPO/builder-keys" + +############## +## Verify ## +############## + +# Usage: verify +verify() { + local compare_base="$1" + local current_manifest="$2" + local signer_name + signer_name="$(basename "$(dirname "$current_manifest")")" + + if ! gpg --quiet --batch \ + --verify "${current_manifest}.asc" "$current_manifest" 1>&2; then + echo "ERR: Failed to verify GPG signature for signer '${signer_name}'" + echo " Manifest: '${current_manifest}'" + echo " Signature: '${current_manifest}.asc'" + echo "" + echo "Hint: Either the signature is invalid or the public key is not in" + echo " your GPG keyring. You can import it with:" + echo " gpg --import '${builder_keys_dir}/${signer_name}.gpg'" + echo "" + failure=1 + elif ! diff --report-identical "$compare_base" "$current_manifest" 1>&2; then + echo "ERR: The SHA256SUMS attestation differs from the compare base:" + echo " base: '${compare_base}'" + echo " current: '${current_manifest}'" + echo "" + failure=1 + else + echo "Verified: '${current_manifest}'" + echo "" + fi +} + +# Determine which epoch(s) to verify +if [ -n "$EPOCH" ]; then + epoch_dirs=( "$ASMAP_SIGS_REPO/$EPOCH" ) + if [ ! -d "${epoch_dirs[0]}" ]; then + echo "ERR: No epoch directory found for EPOCH='${EPOCH}':" + echo " '${epoch_dirs[0]}'" + echo "" + exit 1 + fi +else + shopt -s nullglob + epoch_dirs=( "$ASMAP_SIGS_REPO"/*/ ) + shopt -u nullglob + # Exclude builder-keys and any other non-epoch dirs (not purely numeric) + filtered_epoch_dirs=() + for d in "${epoch_dirs[@]}"; do + dir_name="$(basename "$d")" + if [[ "$dir_name" =~ ^[0-9]+$ ]]; then + filtered_epoch_dirs+=("$d") + fi + done + epoch_dirs=("${filtered_epoch_dirs[@]}") +fi + +if (( ${#epoch_dirs[@]} == 0 )); then + echo "ERR: No epoch directories found in '${ASMAP_SIGS_REPO}'" + echo "" + echo "Hint: Expected directories named with Unix timestamps, e.g.:" + echo " '${ASMAP_SIGS_REPO}/1772726379/'" + echo "" + exit 1 +fi + +total_verified=0 +failure="" + +for epoch_dir in "${epoch_dirs[@]}"; do + epoch_name="$(basename "$epoch_dir")" + echo "====================" + echo "Epoch: ${epoch_name}" + echo "====================" + echo "" + + shopt -s nullglob + all_manifests=( "${epoch_dir%/}"/*/SHA256SUMS ) + shopt -u nullglob + + if (( ${#all_manifests[@]} == 0 )); then + echo "WARN: No SHA256SUMS files found in epoch '${epoch_name}', skipping." + echo "" + continue + fi + + # Pick compare base + compare_base="${all_manifests[0]}" + if [ -n "$SIGNER" ]; then + signer_manifest="${epoch_dir%/}/${SIGNER}/SHA256SUMS" + if [ -f "$signer_manifest" ]; then + echo "Using ${SIGNER}'s attestation as the compare base" + compare_base="$signer_manifest" + else + echo "Unable to find ${SIGNER}'s attestation for epoch '${epoch_name}', using the first one found" + fi + fi + + for current_manifest in "${all_manifests[@]}"; do + if [ ! -e "${current_manifest}.asc" ]; then + signer_name="$(basename "$(dirname "$current_manifest")")" + echo "WARN: No signature file found for signer '${signer_name}' in epoch '${epoch_name}'" + echo " Expected: '${current_manifest}.asc'" + echo "" + failure=1 + continue + fi + verify "$compare_base" "$current_manifest" + total_verified=$(( total_verified + 1 )) + done + + echo "DONE: Checked ${#all_manifests[@]} attestation(s) for epoch '${epoch_name}'" + echo "" +done + +echo "====================" +echo "" + +if (( total_verified == 0 )); then + echo "ERR: No attestations could be verified." + echo "" + exit 1 +fi + +if [ -n "$failure" ]; then + echo "FAIL: One or more verifications failed. See above for details." + echo "" + exit 1 +fi + +echo "OK: All ${total_verified} attestation(s) verified successfully." +echo "" + From f12030a904decf44b0c460e6588b5e4d877d7173 Mon Sep 17 00:00:00 2001 From: jurraca Date: Tue, 19 May 2026 15:07:59 +0000 Subject: [PATCH 4/6] adapt scripts to this repo format the attestations folder is nested under each year, so we update the script paths to handle that. add a helper function to identify the year from the unix epoch. rename env vars to not mention old repo --- asmap-attest | 34 ++++++++++++++++++++---- asmap-verify | 75 +++++++++++++++++++++++++++++----------------------- 2 files changed, 71 insertions(+), 38 deletions(-) diff --git a/asmap-attest b/asmap-attest index 4dc4dd4207..1fd681b2fb 100755 --- a/asmap-attest +++ b/asmap-attest @@ -15,7 +15,7 @@ check_tools() { done } -check_tools cat env basename mkdir sha256sum mktemp diff +check_tools cat env basename mkdir sha256sum mktemp diff date GPG=${GPG:-gpg} @@ -51,8 +51,8 @@ Example: ./asmap-attest Outputs: - \$PWD/1772726379/satoshi/SHA256SUMS (attestation) - \$PWD/1772726379/satoshi/SHA256SUMS.asc (signature) + \$PWD/2026/attestations/1772726379/satoshi/SHA256SUMS (attestation) + \$PWD/2026/attestations/1772726379/satoshi/SHA256SUMS.asc (signature) Example w/o signing, just creating SHA256SUMS: @@ -70,7 +70,7 @@ Environment variables: ASMAP_TXT Path to the asmap text file (e.g. final_result.txt) ENCODED_FILLED Path to the filled encoded binary (.dat) ENCODED_UNFILLED Path to the unfilled encoded binary (.dat) - EPOCH Unix timestamp used as the output folder name + EPOCH Unix timestamp to identify the run NO_SIGN If set and non-empty, skip GPG signing GPG Override the gpg binary (default: gpg) @@ -150,11 +150,35 @@ if [ -z "$NO_SIGN" ] && ! ${GPG} --dry-run --list-secret-keys "${SIGNER}" >/dev/ exit 1 fi +################ +# Helper: derive year from unix epoch +################ + +year_from_epoch() { + local epoch="$1" + if date -d "@${epoch}" +%Y >/dev/null 2>&1; then + # GNU date + date -d "@${epoch}" +%Y + elif date -r "${epoch}" +%Y >/dev/null 2>&1; then + # BSD / macOS date + date -r "${epoch}" +%Y + else + echo "ERR: Cannot determine year from epoch='${epoch}'. Is 'date' available?" >&2 + exit 1 + fi +} + +################ +# Derive year from EPOCH +################ + +YEAR="$(year_from_epoch "$EPOCH")" + ################ # Set up output directory ################ -signer_dir="${PWD}/${EPOCH}/${SIGNER}" +signer_dir="${PWD}/attestations/${YEAR}/${EPOCH}/${SIGNER}" mkdir -p "$signer_dir" ############## diff --git a/asmap-verify b/asmap-verify index e7177d39a7..7d6aedcba8 100755 --- a/asmap-verify +++ b/asmap-verify @@ -2,6 +2,24 @@ export LC_ALL=C set -e -o pipefail +################ +# Helper: derive year from unix epoch +################ + +year_from_epoch() { + local epoch="$1" + if date -d "@${epoch}" +%Y >/dev/null 2>&1; then + # GNU date + date -d "@${epoch}" +%Y + elif date -r "${epoch}" +%Y >/dev/null 2>&1; then + # BSD / macOS date + date -r "${epoch}" +%Y + else + echo "ERR: Cannot determine year from epoch='${epoch}'. Is 'date' available?" >&2 + exit 1 + fi +} + ################ # Required non-builtin commands should be invocable ################ @@ -15,7 +33,7 @@ check_tools() { done } -check_tools cat diff gpg basename +check_tools cat diff gpg basename date ################ # Usage @@ -25,10 +43,10 @@ cmd_usage() { cat < ] \\ - [ EPOCH= ] \\ - [ SIGNER= ] \\ - ./contrib/asmap/asmap-verify + env [ ASMAP_DATA_REPO= ] \ + [ EPOCH= ] \ + [ SIGNER= ] \ + ./asmap-verify Example verifying all epochs: @@ -36,18 +54,18 @@ Example verifying all epochs: Example verifying a specific epoch: - env EPOCH=1772726379 \\ + env EPOCH=1772726379 \ ./asmap-verify Example using a specific sigs repo and signer's attestation as the compare base: - env ASMAP_SIGS_REPO=/home/user/asmap.sigs \\ - SIGNER=satoshi \\ + env ASMAP_DATA_REPO=/home/user/asmap-data \ + SIGNER=satoshi \ ./asmap-verify Environment variables: - ASMAP_SIGS_REPO (optional) Path to the asmap.sigs repository clone + ASMAP_DATA_REPO (optional) Path to the asmap-data repository clone EPOCH (optional) Only verify this epoch; default: verify all epochs SIGNER (optional) Use this signer's SHA256SUMS as the compare base; default: use the first one found @@ -56,32 +74,32 @@ EOF } ################ -# Assume current repo if empty +# Assume current repo if empty ################ -if [ -z "$ASMAP_SIGS_REPO" ]; then - ASMAP_SIGS_REPO="$PWD" +if [ -z "$ASMAP_DATA_REPO" ]; then + ASMAP_DATA_REPO="$PWD" fi ################ -# ASMAP_SIGS_REPO should exist as a directory +# ASMAP_DATA_REPO should exist as a directory ################ -if [ ! -d "$ASMAP_SIGS_REPO" ]; then +if [ ! -d "$ASMAP_DATA_REPO" ]; then cat << EOF -ERR: The specified ASMAP_SIGS_REPO is not an existent directory: +ERR: The specified ASMAP_DATA_REPO is not an existent directory: - '$ASMAP_SIGS_REPO' + '$ASMAP_DATA_REPO' Hint: Please clone the asmap.sigs repository and point to it with the - ASMAP_SIGS_REPO environment variable. + ASMAP_DATA_REPO environment variable. EOF cmd_usage exit 1 fi -builder_keys_dir="$ASMAP_SIGS_REPO/builder-keys" +builder_keys_dir="$ASMAP_DATA_REPO/builder-keys" ############## ## Verify ## @@ -119,7 +137,8 @@ verify() { # Determine which epoch(s) to verify if [ -n "$EPOCH" ]; then - epoch_dirs=( "$ASMAP_SIGS_REPO/$EPOCH" ) + YEAR="$(year_from_epoch "$EPOCH")" + epoch_dirs=( "$ASMAP_DATA_REPO/attestations/${YEAR}/${EPOCH}" ) if [ ! -d "${epoch_dirs[0]}" ]; then echo "ERR: No epoch directory found for EPOCH='${EPOCH}':" echo " '${epoch_dirs[0]}'" @@ -128,24 +147,15 @@ if [ -n "$EPOCH" ]; then fi else shopt -s nullglob - epoch_dirs=( "$ASMAP_SIGS_REPO"/*/ ) + epoch_dirs=( "$ASMAP_DATA_REPO"/attestations/*/*/ ) shopt -u nullglob - # Exclude builder-keys and any other non-epoch dirs (not purely numeric) - filtered_epoch_dirs=() - for d in "${epoch_dirs[@]}"; do - dir_name="$(basename "$d")" - if [[ "$dir_name" =~ ^[0-9]+$ ]]; then - filtered_epoch_dirs+=("$d") - fi - done - epoch_dirs=("${filtered_epoch_dirs[@]}") fi if (( ${#epoch_dirs[@]} == 0 )); then - echo "ERR: No epoch directories found in '${ASMAP_SIGS_REPO}'" + echo "ERR: No epoch directories found in '${ASMAP_DATA_REPO}'" echo "" - echo "Hint: Expected directories named with Unix timestamps, e.g.:" - echo " '${ASMAP_SIGS_REPO}/1772726379/'" + echo "Hint: Expected attestation directories of the form:" + echo " '${ASMAP_DATA_REPO}/attestations///'" echo "" exit 1 fi @@ -216,4 +226,3 @@ fi echo "OK: All ${total_verified} attestation(s) verified successfully." echo "" - From 5a80d796f0ba47e0861cb816d554b9c860e5083f Mon Sep 17 00:00:00 2001 From: jurraca Date: Wed, 27 May 2026 15:21:36 +0000 Subject: [PATCH 5/6] remove no-sign example in help text --- asmap-attest | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/asmap-attest b/asmap-attest index 1fd681b2fb..cda709558a 100755 --- a/asmap-attest +++ b/asmap-attest @@ -54,16 +54,6 @@ Example: \$PWD/2026/attestations/1772726379/satoshi/SHA256SUMS (attestation) \$PWD/2026/attestations/1772726379/satoshi/SHA256SUMS.asc (signature) -Example w/o signing, just creating SHA256SUMS: - - env SIGNER=satoshi \\ - ASMAP_TXT=/home/user/kartograf/out/1772726379/final_result.txt \\ - ENCODED_FILLED=/home/user/kartograf/out/1772726379/filled.dat \\ - ENCODED_UNFILLED=/home/user/kartograf/out/1772726379/unfilled.dat \\ - EPOCH=1772726379 \\ - NO_SIGN=1 \\ - ./asmap-attest - Environment variables: SIGNER GPG key name used for signing From d7a7e0828cb3231cffb3d214170ed23e05181bfe Mon Sep 17 00:00:00 2001 From: jurraca Date: Wed, 27 May 2026 15:34:17 +0000 Subject: [PATCH 6/6] add documentation to README: copied from asmap.sigs with some small edits --- README.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/README.md b/README.md index d3fc5ed748..8524d09d4a 100644 --- a/README.md +++ b/README.md @@ -11,3 +11,54 @@ The files are organized by year. The `latest_asmap.dat` at the root of the proje ## Tools for analysis of maps Users can further verify the integrity of the data with some of the [analysis commands](https://github.com/bitcoin/bitcoin/blob/master/contrib/asmap/README.md) available in `contrib/asmap/asmap-tool.py` (part of Bitcoin Core). There is also a ASMap health check log printed every 24 hours by Bitcoin Core nodes. + +## Attestations + +ASmap files can be attested to via PGP. In this repo: +- `attestations///`: each ASmap from a collaborative run is run at a specific epoch (Unix timestamp), which serves to identify a given run. + - `SHA256SUMS`: hashes of the `final_result.txt`, filled and unfilled encoded ASmap + - `SHA256SUMS.asc`: detached PGP signature over the `SHA256SUMS` file +- `builder-keys/.gpg`: signer keys + +The attestation file should contain three lines, the first for the final result, the second for the filled ASmap and the third for the unfilled ASmap, for example (assuming `EPOCH=1700000000000`): +``` +cc199d5de04add6b5c2d95a72610c8a1a7b1f41fe01bd2b4c6db17795856aa31 final_result.txt +1146cbba8719cf3988d377df579667f68f97d2376d67755beb1e38194e196cfc 1700000000000_asmap_filled.dat +1c20ea2dee306af0a3ab4eaefaabe1e4c23a1c4256e60639e7ba48b2bbe56f24 1700000000000_asmap_unfilled.dat +``` + +### Script Usage + +#### Attesting + +To attest to an ASmap, you must have: +- the result file `final_result.txt` containing the ASmap in text format +- encoded the file via [`asmap-tool.py`](https://github.com/bitcoin/bitcoin/tree/master/contrib/asmap) as both filled and unfilled versions +- the Unix timestamp associated with the ASmap run +- a PGP key added to the `builder-keys` dir in this repo + +Attesting to an ASmap output: +```bash +env SIGNER=\ + ASMAP_TXT=\ + ENCODED_FILLED=\ + ENCODED_UNFILLED=\ + EPOCH=\ + ./asmap-attest +``` + +This will add a `SHA256SUMS` file and a `SHA256SUMS.asc` file under the `/` folder. + +#### Verifying + +Verifying attestations in this repo: +```bash +./asmap-verify +``` +or, for a specific epoch, +```bash +env EPOCH=177000000 \ + ./asmap-verify +``` + +This will print out verifications for the relevant attestations in the `attestations` dir.