Tooling for verification of PGP signed commits ---------------------------------------------- This is an incomplete work in progress, but currently includes a pre-push hook script (`pre-push-hook.sh`) for maintainers to ensure that their own commits are PGP signed (nearly always merge commits), as well as a Python 3 script to verify commits against a trusted keys list. Using verify-commits.py safely ------------------------------ Remember that you can't use an untrusted script to verify itself. This means that checking out code, then running `verify-commits.py` against `HEAD` is _not_ safe, because the version of `verify-commits.py` that you just ran could be backdoored. Instead, you need to use a trusted version of verify-commits prior to checkout to make sure you're checking out only code signed by trusted keys: ```sh git fetch origin && \ ./contrib/verify-commits/verify-commits.py origin/master && \ git checkout origin/master ``` Note that the above isn't a good UI/UX yet, and needs significant improvements to make it more convenient and reduce the chance of errors; pull-reqs improving this process would be much appreciated. Unless `--clean-merge 0` is specified, `verify-commits.py` will attempt to verify that each merge commit applies cleanly (with some exceptions). This requires using at least git v2.38.0. Configuration files ------------------- * `trusted-git-root`: This file should contain a single git commit hash which is the first unsigned git commit (hence it is the "root of trust"). * `trusted-sha512-root-commit`: This file should contain a single git commit hash which is the first commit without a SHA512 root commitment. * `trusted-keys`: This file should contain a \n-delimited list of all PGP fingerprints of authorized commit signers (primary, not subkeys). * `allow-revsig-commits`: This file should contain a \n-delimited list of git commit hashes. See next section for more info. Import trusted keys ------------------- In order to check the commit signatures, you must add the trusted PGP keys to your machine. [GnuPG](https://gnupg.org/) may be used to import the trusted keys by running the following command: ```sh gpg --keyserver hkps://keys.openpgp.org --recv-keys $(