Skip to content

Commit b6e5334

Browse files
committed
Create verification script and github action
Create a script which verifies that a set of "locked down" files are not changed in commits that have not been signed. Create a github workflow that runs the script in the CI. The script accepts --whitelist <commit> and --import-gpg-keys arguments. The default settings are supposed to work on the build server without importing the gpg keys from the trusted_keys.pub file and running with a hardcoded whitelist commit. Make the CI workflow use these arguments as it is supposed to in .github. The public keys that can be imported are specified as files in the ci/keys/ directory. The files that are locked down are specified in the .github workflow as a single source of truth. This requires some complicated parsing in the verification script as well as a dependency from the verification script to the workflow YAML. These are not ideal design choices however the alternative is to not have a single source of truth for the locked down files as the github workflow can not depend on an external file.
1 parent 17f721c commit b6e5334

10 files changed

+749
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: Verify lockfile signatures
2+
on:
3+
pull_request:
4+
paths:
5+
- .github/workflows/verify-locked-down-signatures.yml
6+
- Cargo.lock
7+
- gui/package-lock.json
8+
- ci/keys/
9+
- ci/verify-locked-down-signatures.sh
10+
workflow_dispatch:
11+
jobs:
12+
verify-signatures:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- uses: actions/checkout@v3
16+
with:
17+
ref: ${{ github.event.pull_request.head.sha }}
18+
- name: Verify signatures
19+
run: |
20+
commits=${{ github.event.pull_request.commits }}
21+
if [[ -n "$commits" ]]; then
22+
# Prepare enough depth for diffs with master, currently hard-coded but should probably be
23+
# whatever branch is merged into
24+
git fetch --depth="$(( commits + 1 ))" origin ${{ github.head_ref }} master
25+
fi
26+
ci/verify-locked-down-signatures.sh --import-gpg-keys --whitelist origin/master

ci/keys/albin.pub

+120
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
3+
mQINBGFVXswBEADMjMXMGVAOlqG15MKMO/nuu4FEgVUpRFPrIi2InnLyy6IroG/A
4+
Ki++b6rNkBpOFGS5MpA9rvPCU/z33ZrjkXb3H0gOaRQqf/AMHiNA6prdMBoMVez8
5+
lvZ1JVNSH/3EMtLFtbm5P1B2/vBptEn15kvcJ21PVWh5GNBWYD/g9QgZtHtvfeG/
6+
mayRGcGmIqb2G0dDpVCGHvUrPA8A4G85n2QQhf2uSwYcfFT6VCacXgOtWnguKusi
7+
TdxSbwfqgCE1u1WxysZmhRBagcpAARZ8TRHxBHaYt2yJp3RMfGSXQ0qUSTr5HIO4
8+
FUWjWX5ZxX4ZkXKiq+s8wgCROsGRZfKIKsVex0/yNxNZiyXvq/Xz99KHmuuBda0X
9+
I6M/LeGaMMjP/oGR9iGo1ouQtzQU7cpJuUiAksf84yPkmksxozHRQwPPkTEPafLJ
10+
sxx3j79vpoYslunWYKGIRghZV4rCxIDTV5fztYFUpw0lyPSbp/w+A7ebeg3UbU4N
11+
Pclk6BdjG9Iq5yD6UALL/ZLsQ0fHpIB+WdfX8+P0ciCDO/7YBRquuMhuoTU7wz1i
12+
rk2hJLBBPCBtXW0p59fF5fDiA/c/ah3c+xJoKRaJmJPGH3yOax+ggl0++mnfSscp
13+
XMicUUce2Rid7R5l2k2AgR0x7YgGzH8qtC2ozIAruRIeORK06tBxCuKU3QARAQAB
14+
tBlBbGJpbiA8YWxiaW5AbXVsbHZhZC5uZXQ+iQJIBBMBCgAyAhsBAh4BAheAFiEE
15+
cK9oyqJCJqmcuvCmCdJ3Wm8nhW0FAmFVY7sCCwkCFQoFFgIDAQAACgkQCdJ3Wm8n
16+
hW27jhAAorDK3/DYuvL+HAzo7SvYgJGAESjV2YUf6uP+FJEhYL99ITPCf4nc2xJn
17+
IABbsp9rL8grYbcM8lghpOfeIcmScyTabD+MuYQTDPoRuVlE99+Dwnsmhair68u0
18+
eQBdWyt9wP7m8SClboKX7h1iM1OeK8jzozRw80isB56Xy3eY191CY7P8LQIAYRF9
19+
ug5CPBYjA1clET6yfP1j2/EJC+4349Uk+c5DUigt0iw5zxXw4vQdy2IFwVdYFYie
20+
B7eH86wVfW1tviBohO/aQj0Z1jGn5CRAX5tLatPD3wUJS+WXKPH1lFCpe6tiNPYy
21+
/q5Cn7rB6sb2KAEl9rRRfTcGWC3PEqFHtg44EC0aDdWNgT4iV/v09fHDh/F5dIg3
22+
rIUpxC9lhVMF9c/XP29fsopJ985/8B6fE52hOcgO1vTUfd3dh3rcjaLeOxhQb0az
23+
QVX2anmT2wVAahXzwQvyhz22eS0zrRpK65Zc0bYOn3rbE7uXBkBkxV1chiO8dMTV
24+
PrPC/Mpm9TBcKIqfW6FVcJnxm2ZRaiomNxX1Zhwy+ypKRgSx7xeK/Sj8v6j9BK9V
25+
fKPhJoXyVjQUmIGpiA897QfcHUFdu5+GsFTHy+XAABcM0qVgS3hD2PSgvrTnSBKk
26+
5+eme88Dzdmj7VRfQJaWD4eXRU85QOjOej7luq716RWyz5i7dAaJAjMEEAEIAB0W
27+
IQShGYcC/D4KCamuW3XVodTyZt6N3wUCYVcGIgAKCRDVodTyZt6N3++YEACPRoaJ
28+
J4tBBP1irYyNhviRe8ONYEwqgyH2NAQhCGwjjZw3dtpEnmdT7ED7epiMSG+pNXjC
29+
E+QVdGeellUZKLwRI8YzTkrLqRjx4bxs8fDcGe/dYI1vXYKFRhKDiNTK8Hx6Mr7H
30+
G4oM8fNJxUJdHqWf+JR2rBjJXGP+kjhskKcfZAqMKh0VegTO8tSOit43if5rLVf8
31+
mUkuDUAZiwRpQI0+CxD1uTHkMhmUeejyCjwaTxBWXiYgSU74bWUVKG7NumYXo25v
32+
toMcgzTZXVDXh96hpUMI811sHI6XVKKrwuB/g60G0QdOknxsWSVslj2Ex97b/WH9
33+
foGZJZJe/hxK2AGxGkNHkzLBGlz8YQi9YZQcZDGphlx3wccj616CR1xHtjmnXRna
34+
2OaF7XcGVJzDU1jICCDafe48+LU6Ctr7kwlfabLrIZ1DXuDySitMC3C8H5UgHyA5
35+
bT9tpHjGb/2EOfQfI55EuLCL4X0N/GW64XnltrHyESggYG3ajqR5wCpp947Thi/i
36+
Htj6/YLbyuc2/euJFMuliasOKl3JOnvL5M6uB6sVSHy9MC+lxrzG08W6VuYgYhVQ
37+
LXUVi2GdmRpfNroqEl9Aj310lM/YsE1T1Ry9mUrlVVI7ycwK4sz749SEUY33Clcl
38+
IRCwmM2jzy/IP2L/S3ZNLDYANRhMt2W8+h5io7kCDQRhVV+IARAAs2wYghfgpORf
39+
UNPD/6btg2cZRS0oiFmA++dZZZ6mLPx0RVt1Itc8B9hQuf6dSS1DBOa3zitmpMUY
40+
Nixvqghwoq111/2gOI0M90FSeLqslmaVTh/bFclDxg7rUX9FPITAMvMrlg97PpFv
41+
szH1R7YUlBfaTlvCJ6T5ICJitboWvzOmUoQQGK12jR8t8Bt0HCiFA5sHj2Q+LaSm
42+
thH37J0Af/CwoMfh3cltbCnTZ2oIbgQEEx9rvlSkDuJrN6Yt3r1KMCYUcLmDSIEg
43+
yws4/w/NoR9JPTGre8M8J9PeCYc/Nf2DFZd1J6ROnzneS6sjRrHYskz5VHluLD3e
44+
HWHX10bWlFXOJFS2A4F2PJ9o1sUeFuioNVWnYcFhzOHd76YQMXQ8+Cd0LRwZ9FCl
45+
W4zaD1cYSdJBvxKEReFygOuux/fTpXWRKScfZXJ6HxVZl6a86N/tYxrFShnNAUF3
46+
07rX+ffb0ylMnUS3+BMjJ2ZFkoroSpaybyGWNy98saCY5tTIKYXufoCrOWxl/rC/
47+
3OCIDib3y3HseeFB4RQjpVF6JlWWGmUXFWV79ilYKZz/iQW3RS+wQN/q/akxWXzu
48+
eVV1nH3UmGOVsxdqHTlVYIUMzz99nCyzjyMVNn3dgs3Fw41TedB+cQDCHz6Uldr4
49+
Tur5KyKdgB81BGCPsLy1WVE0KvMR7MMAEQEAAYkEbAQYAQoAIBYhBHCvaMqiQiap
50+
nLrwpgnSd1pvJ4VtBQJhVV+IAhsCAkAJEAnSd1pvJ4VtwXQgBBkBCgAdFiEEWLvd
51+
Vd70bvLf70Qx5QP/Vhx+KGMFAmFVX4gACgkQ5QP/Vhx+KGMZbw//e0F+/5N/iFo4
52+
zeNytmyexiqFVpEct42m4OYQjZWrsYe6XNwPdAwtVTqDAaU3XCXKOYYf2zugC7Xn
53+
pj63rEEspXdDnzOqpGteIwSymUl0E7kOFeUsH7DdF4tgHFctstwPUOzn/0rDpJIx
54+
7B47zPIrtoIYcl/mC4FK+prGh4vxwAOTD8m7HMF78q5UAICujXTd5Yw6lfKKvwmY
55+
nHlP57iZuSls1qOJ/py6b3fCiC5vXvMoGP+3Q92oj/jDn5l2PHFQ8PCpw5fx1uLU
56+
mwujDpq0bVwZSwF3xNvTofnRIKejSGPDWAdjKwOxbEr2W8w9d/YJSk1QhIPF+jc7
57+
xUp0Rdp9sMlawS2Evfb6jA3IULSsaLTGhI/Jyp8IJD38L9EnY1cFX/DEGwR2gDtW
58+
peW6Ll5Tv3vZiCR8g1WgAS9h5GD7ZH2kd/hi3KO66w64O5nOHSI7nTEhn/nJgTUr
59+
DBhKFkkah3+UOuUYWffV7dKEoUqgR8jRpjzIANb1uD7Vpg1hyxwWdG8T4TV2vydw
60+
2mRicpo7iiZXfZmxl4L0wwVSSuV6StIAu4lOczw4dBDi5DxQ6TTcLweA4UHygwq6
61+
61o7SlZWBc/8W3pwVBF6fa/jtqS3c0Kj46i/hQesagZ4ihGgSguNiat7NP2nBSsS
62+
WRZXzKGA0hQhegl/MUxKqpQ7HTZVxc7UpBAAjFF2bg2RgFo6gGoXCRJsuPPp0RoI
63+
sXnPa9sa/T5hbgy/rTqitgyaR0O++Lgc3sp4HnI5PopRo2vrbW0PNMptzQ5/mcCq
64+
AAXUV+CelL0wHtmrku8ZsQ4f/MQLeGbElREVCn4SrU6EjSN+ZCfuYLCm3zHXCHTM
65+
8mfbAQFqmURwvB8lI8o6HbOh5VEEhCcWs3z4oQY2CCsdRwHPZ01C34Y9hCHBnGPB
66+
XdnpUcuM8PvE31rH6Z1HbXSga9sx4dk6ahH6OmIi5ktUMvoHfFlVFqwYqZiJbDgz
67+
B3LXoWh/4/yl6cxUnbPV74WO5CXv/wQ3O3SKEEniqEWYcql+0jqtOWg8wNv9KkRv
68+
1UByhlP81H31SFOowRCTM4CyqVhEKqpM61mV/yBrBGltZ55A0gKXiC/BeJjcnCXF
69+
VmJ/nsmkLhG2rTUo31+SDqsLsVnHQZwMO3/7dJG71gOoUdV7Oxb2I9M5lawDzrHj
70+
NMHJCz9wpAMpZZFvADytk6XJOkqOd61/S/mYMtt+DVIAwxuxg4L6yH91z1MvNAhr
71+
Trgh1A9IGXJ8Do8Iawx3xDcbxnUShOoCqQ8DzJ1RADG3fvkFe9F6LAJE+yE59tT/
72+
L00ChX5vOraztG+J+SAkJSJtB8sz0VfCfVNMPQdFlb65iJyurRxirt5tebGfEiiU
73+
c7hGV7983aBeljK5Ag0EYVVfqwEQAOLqfhHZwe7WJdrojE9sxfiFbW7uUF/+PygB
74+
HlyiPLJEtScRHTTFIh5TbV7Lc7cj0w2gJY3jPXmVAhOEgBJ5ca98WAItpPyufwR9
75+
Q3gJuuDwORXlt8m5Rt77iJnZVCoGYIoejEDueJGaAYvTA5BMOJBYFojvdVDJyLJ0
76+
0YVD8sUPo7y5BNkzSpLJeKDVi0ysuM2OmdFBoMy01q+4bKRWmJ3vCh+GAUUugBrs
77+
izOtXSGijZmOwpyzauD5r751ji4ono1SsmQmeqXb3ipUfyxf5QJL2Ela1uPEwN8g
78+
DIOV0bfB17bgbRDJ6pDAXDB7fd2LdysmMi8614qAl2i8VSeAjU0pFhZAl5kKJCL5
79+
SlRqBJgMBpTJvAsPOSceM4XxKSWFIHhJhX0bhat3ydt5sdI2hI6mfRQYiJzgGyIG
80+
I3eh7YDOg4lTxQW/743ObRUc2MUK6Uojzm3VAxZ1sskdXgqzFpnC9ZhHGlpOmMIr
81+
+/5TAk9C7F3ny+/nFWAnTCJtMp7x0OUTQAa+KC6j0e20IRSwHC/dMhnZiI/ArsH6
82+
IpUR8qel7k3bXXeVD9/s+yKbVDY8eg4/2Sl4GJIwltk/QPOyA+g0Rr4zAklFXEKp
83+
BTou+maLIHT1cO8rCsj1LolISMsdgMRI9lXG8XnyNSvKttlxHPC4MxQYPq2E0wc3
84+
P5FrFZkZABEBAAGJAjYEGAEKACAWIQRwr2jKokImqZy68KYJ0ndabyeFbQUCYVVf
85+
qwIbDAAKCRAJ0ndabyeFbYWLD/41Ieql1CkJDemklIDz3nz1HxX9w3o6OJCdrzMq
86+
XvifEddiQIOK9uAxYAY4HQ2I9wO8jqzN+zVZZbjHYC1OmU5ANP3K+Ld3uoTzY6K+
87+
64KfiuHmQYHRmwubVUYzC8RxE8zaYalxlF/97NeQBVzDfw0HCEL/IzttDwTw5VyP
88+
0Z7GnnJO+O6/oQW3Bx4DPdY8eU66j2lXweZPhcG+grIDACzn8+4Fq0rl3bZjgY88
89+
rCaXy2c8Ymq70Yg9JoYHDf4bDTqVYx558c34JfNSb9SpcaQb+LFeHPTQr+mKM+/3
90+
rKzxuf9roN0qTa5DE6vYj5yKsQWeVw5vrLoEapwPA0QgHCBHvFaou4w5E3fcOeRo
91+
S6qyqME6Ei8/GBFp6QLzS11oFEsDsgIj8KTQ1iyVar9ZbxGSjCCGckH/ABp4aS+V
92+
dOnNpnRPxvhVJUXCRnSKiC7Fm5ozXEoyxW6Z+chLWzcOpikI6AvUzUl2ipqUzu7K
93+
UIEM3fLK+YIIC4qd22M2RdtlVNagY9wc28QdweypYn+7A5FbZPnUHzppPjPvnso8
94+
VuJ+F2U2lvAc0EjcJROceU/f5Y3lAuAeoSrlRVKgRBZP13tKxDlorT8N8W6ERkXO
95+
FPDuk7hY1RiaXBpDCACiiE6yvdVOaMJroWhasIJiTc7x5aR4HI1BZtpT+IVH8cMk
96+
KVkO77kCDQRhVV/CARAA6y+Vsh+MEJjM2FiTBaCeCpCowz7epa7gB9BbwA//PZgq
97+
aK6vOaUAUVvrbc8DcrDBxOiO01/0wEPX+ruTHg+SwZCHOZrN5ynkU3qtVPU99NDf
98+
7ZJn8vujC8iCPTKhp2b8fAgl887HcBXXhVlzqOxekvQ5XBRsfG91flbLrAfNBbul
99+
gk5a9SZWAkiLWmX/qvvwTD9ZImDu94sxXgMGAk096xj672YJQapsq714UNlolgdZ
100+
0oGu6jAHLx/wk3HBXy3CDRfUWiJFpEXlELPamMmGev7376BJprjtJWgTgNMf5jOw
101+
LF/paBV/IG77REzd5qlQE7/8ULrWEN9RwJk3jJLXN4xoNxj7itW9B6b8E0KiLcjt
102+
yglXWLh/KJkk+56A2rGvrz2A8O20feZFLZgLXAYi1YN7FTh/3kPzXpwA5i0BRyr1
103+
SMB3kcRgMiP1BbIoEeh+gh0tIA9fBtFeyrvkvmZ0JnwYOtZ4jboqhV/EZrcodv8f
104+
Thb8zer6SEb5CMpz9bp4xs2I07eJUpv7OB722TMhAM6QAMmVhA7dzMpnPJ/4Xvjj
105+
f5m9DGV1a0DoSQXSAo+8tbun53dGpACqZ/Dn+VY4cYJ8RK+Pqpj2ujHGAi0ao6VS
106+
6MkoJEvS+q1nuIBKo4khLuRUaGfDd1ZYLJkdOrYIJm/HIy3v54zYGBOBz4MboAMA
107+
EQEAAYkCNgQYAQoAIBYhBHCvaMqiQiapnLrwpgnSd1pvJ4VtBQJhVV/CAhsgAAoJ
108+
EAnSd1pvJ4VtZhAQAIL3ajXwnL0MGBiE7up6cAdNrnEK7u2iSa8wttLPF8eMrWfe
109+
GbHFe9bRws0r7HiHtyHxTzsLAIO37yN7/Lqm4wUNHbw0aRpsaObt+UfCaSQqFC07
110+
nGAfuAOZO/eZSh0xcHO+wSWkAqc9BZxVfa9Iw6qWk9cjjyf23b3lWhNTQ/1/iVd1
111+
SM6kRQB2ntWbrtSHw5FGPgzRSX+E2K+UzvSziF+0oU+R+267RKh1o9Iuws/EmGVb
112+
qUUcTPp4IfmxCsYR/JcuX52YABoTpbL+g98a8ztN512UsunaIeJVKBCEyvaciNH4
113+
oCD4/1aC3JvVAlnnogt0DpDp6K+00cQnWh/ObrXr2XXYiNNzCntKQ4Img5zeFf5R
114+
2Fb0F9VSbUMHrbRsrLKVAdU5v89UlOwGhpfTPc5UirS8fwiPOquI2bRQRhz7pezN
115+
MkElm5fEIBFjyyn1Uq9g0jym5fRsWCMv8Xb2FkujxnHeTQWYE1HgG3vPMkU9TShO
116+
XLiSG1/0V3/5wI/u2CeTURg4BpMEgdLDKygpR1qiXC9uCZee+NcKI+tylgus/JZD
117+
ToykxLY3PIgkksJeSozaxJz+Lz68okQHqyG9L6F+81enp5iQFw1g2KgfI1Y324zE
118+
Y/GTFqIUFeGS/kiIbHV2vJN+nxlU+1XOjWmWekzeSdNKUdI3aarpSBuS/CPf
119+
=rA/d
120+
-----END PGP PUBLIC KEY BLOCK-----

ci/keys/andrej.pub

+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
3+
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
111+
uZPnS4OQomvzMTo=
112+
=gMeY
113+
-----END PGP PUBLIC KEY BLOCK-----

ci/keys/david.pub

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
-----BEGIN PGP PUBLIC KEY BLOCK-----
2+
3+
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
62+
3LCH08vn/g==
63+
=Bcrw
64+
-----END PGP PUBLIC KEY BLOCK-----

0 commit comments

Comments
 (0)