Commit 96738111 authored by Corey Richardson's avatar Corey Richardson

Add signature verification to CI

parent 5bd2e6f7
verify_signatures:
image: ubuntu:16.10
script:
- apt update
- apt install --assume-yes python-pexpect gnupg2 git
- git clone --depth=1 https://gitlab.com/robigalia/meta meta
- gpg2 --list-keys # to force it to create GNUPGHOME instead of racing in the pipe below
- gpg2 --export --no-default-keyring --keyring ./meta/.gnupg/pubring.kbx | gpg2 --import
- gpg2 --list-keys --fingerprint --fingerprint --verbose
- ./meta/verify-signatures.py HEAD ./meta/.mailmap
# dirmngr.conf - Options for Dirmngr
# Written in 2015 by The GnuPG Project <https://gnupg.org>
#
# To the extent possible under law, the authors have dedicated all
# copyright and related and neighboring rights to this file to the
# public domain worldwide. This file is distributed without any
# warranty. You should have received a copy of the CC0 Public Domain
# Dedication along with this file. If not, see
# <http://creativecommons.org/publicdomain/zero/1.0/>.
#
#
# Unless you specify which option file to use (with the command line
# option "--options filename"), the file ~/.gnupg/dirmngr.conf is used
# by dirmngr. The file can contain any long options which are valid
# for Dirmngr. If the first non white space character of a line is a
# '#', the line is ignored. Empty lines are also ignored. See the
# dirmngr man page or the manual for a list of options.
#
# --keyserver URI
#
# GPG can send and receive keys to and from a keyserver. These
# servers can be HKP, Email, or LDAP (if GnuPG is built with LDAP
# support).
#
# Example HKP keyservers:
# hkp://keys.gnupg.net
#
# Example HKP keyserver using a Tor OnionBalance service
# hkp://jirk5u4osbsr34t5.onion
#
# Example HKPS keyservers (see --hkp-cacert below):
# hkps://hkps.pool.sks-keyservers.net
#
# Example LDAP keyservers:
# ldap://pgp.surfnet.nl:11370
#
# Regular URL syntax applies, and you can set an alternate port
# through the usual method:
# hkp://keyserver.example.net:22742
#
# Most users just set the name and type of their preferred keyserver.
# Note that most servers (with the notable exception of
# ldap://keyserver.pgp.com) synchronize changes with each other. Note
# also that a single server name may actually point to multiple
# servers via DNS round-robin. hkp://keys.gnupg.net is an example of
# such a "server", which spreads the load over a number of physical
# servers.
#
# If exactly two keyservers are configured and only one is a Tor hidden
# service, Dirmngr selects the keyserver to use depending on whether
# Tor is locally running or not (on a per session base).
keyserver hkp://jirk5u4osbsr34t5.onion
keyserver hkp://keys.gnupg.net
# --hkp-cacert FILENAME
#
# For the "hkps" scheme (keyserver access over TLS), Dirmngr needs to
# know the root certificates for verification of the TLS certificates
# used for the connection. Enter the full name of a file with the
# root certificates here. If that file is in PEM format a ".pem"
# suffix is expected. This option may be given multiple times to add
# more root certificates. Tilde expansion is supported.
#hkp-cacert /path/to/CA/sks-keyservers.netCA.pem
# Options for GnuPG
# Copyright 1998-2003, 2010 Free Software Foundation, Inc.
# Copyright 1998-2003, 2010 Werner Koch
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This file is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Unless you specify which option file to use (with the command line
# option "--options filename"), GnuPG uses the file ~/.gnupg/gpg.conf
# by default.
#
# An options file can contain any long options which are available in
# GnuPG. If the first non white space character of a line is a '#',
# this line is ignored. Empty lines are also ignored.
#
# See the gpg man page for a list of options.
# If you have more than 1 secret key in your keyring, you may want to
# uncomment the following option and set your preferred keyid.
#default-key 621CC013
# If you do not pass a recipient to gpg, it will ask for one. Using
# this option you can encrypt to a default key. Key validation will
# not be done in this case. The second form uses the default key as
# default recipient.
#default-recipient some-user-id
#default-recipient-self
# Group names may be defined like this:
# group mynames = paige 0x12345678 joe patti
#
# Any time "mynames" is a recipient (-r or --recipient), it will be
# expanded to the names "paige", "joe", and "patti", and the key ID
# "0x12345678". Note there is only one level of expansion - you
# cannot make an group that points to another group. Note also that
# if there are spaces in the recipient name, this will appear as two
# recipients. In these cases it is better to use the key ID.
#group mynames = paige 0x12345678 joe patti
# GnuPG can automatically locate and retrieve keys as needed using
# this option. This happens when encrypting to an email address (in
# the "user@@example.com" form) and there are no keys matching
# "user@example.com" in the local keyring. This option takes any
# number mechanisms which are tried in the given order. The default
# is "--auto-key-locate local" to search for keys only in the local
# key database. Uncomment the next line to locate a missing key using
# two DNS based mechanisms.
#auto-key-locate local,pka,dane
# Common options for keyserver functions:
# (Note that the --keyserver option has been moved to dirmngr.conf)
#
# include-disabled = when searching, include keys marked as "disabled"
# on the keyserver (not all keyservers support this).
#
# no-include-revoked = when searching, do not include keys marked as
# "revoked" on the keyserver.
#
# verbose = show more information as the keys are fetched.
# Can be used more than once to increase the amount
# of information shown.
#
# auto-key-retrieve = automatically fetch keys as needed from the keyserver
# when verifying signatures or when importing keys that
# have been revoked by a revocation key that is not
# present on the keyring.
#
# no-include-attributes = do not include attribute IDs (aka "photo IDs")
# when sending keys to the keyserver.
#keyserver-options auto-key-retrieve
# Uncomment this line to display photo user IDs in key listings and
# when a signature from a key with a photo is verified.
#show-photos
# Use this program to display photo user IDs
#
# %i is expanded to a temporary file that contains the photo.
# %I is the same as %i, but the file isn't deleted afterwards by GnuPG.
# %k is expanded to the key ID of the key.
# %K is expanded to the long OpenPGP key ID of the key.
# %t is expanded to the extension of the image (e.g. "jpg").
# %T is expanded to the MIME type of the image (e.g. "image/jpeg").
# %f is expanded to the fingerprint of the key.
# %% is %, of course.
#
# If %i or %I are not present, then the photo is supplied to the
# viewer on standard input. If your platform supports it, standard
# input is the best way to do this as it avoids the time and effort in
# generating and then cleaning up a secure temp file.
#
# The default program is "xloadimage -fork -quiet -title 'KeyID 0x%k' stdin"
# On Mac OS X and Windows, the default is to use your regular JPEG image
# viewer.
#
# Some other viewers:
# photo-viewer "qiv %i"
# photo-viewer "ee %i"
# photo-viewer "display -title 'KeyID 0x%k'"
#
# This one saves a copy of the photo ID in your home directory:
# photo-viewer "cat > ~/photoid-for-key-%k.%t"
#
# Use your MIME handler to view photos:
# photo-viewer "metamail -q -d -b -c %T -s 'KeyID 0x%k' -f GnuPG"
# Because some mailers change lines starting with "From " to ">From "
# it is good to handle such lines in a special way when creating
# cleartext signatures; all other PGP versions do it this way too.
# To enable full OpenPGP compliance you may want to use this option.
#no-escape-from-lines
# Uncomment the following option to get rid of the copyright notice
#no-greeting
......@@ -5,6 +5,9 @@
# Each line should have a comment with a space-separated list of PGP key
# fingerprints. We will reject any commits where the name and email does not
# match something in the mailmap with the corresponding key-id.
#
# If you can, run './update-keyring.py .mailmap' before sending your merge
# request, and commit the changes to .gnupg. It makes our CI happier :)
Corey Richardson <corey@octayn.net> # 560D0EF021CB41B7E1E34880F284F7A19456AE7C
Alex Elsayed <eternaleye@gmail.com> # 6870C23F56D94D5C55255CBC131FF4882F055ECC
# List of commit IDs which are accepted as not being signed.
# (this list should never grow; I accidentally used GitLab to accept a merge
# request once)
# List of commit IDs which are accepted as not being signed. (this list
# should never grow)
# I accidentally used GitLab to accept a merge request once
dc052458fa908bdfc6f4cf0065462f6c78cff8a0
# Grissess didn't sign his commit and I didn't notice
a69b3e8d559778e549c4ff910713a6d5c64aab06
#!/usr/bin/env python
import subprocess
import sys
import os
import itertools
# vague approximation of correct. solution: review changes to mailmap
mailmap = sys.argv[1]
os.environ['GNUPGHOME'] = os.path.relpath('.gnupg', os.path.dirname(mailmap))
key_lines = [
l.split(b' # ')[-1]
for l in open(mailmap)
if b' # ' in l]
valid_keys = []
for line in key_lines:
valid_keys.extend(map(str.strip, line.split(' ')))
for key in valid_keys:
print("Fetching key {}".format(key))
subprocess.call(['gpg2', '--keyserver', 'pool.sks-keyservers.net', '--recv-keys', key])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment