#!/bin/sh # Generate security.txt (RFC 9116), clearsigned with the [S] subkey # # Usage: ./scripts/security-txt.sh # # Expires is read from the key, so the January ceremony only re-runs this # after the key's expiry was extended set -eu # Internal [S] subkey; pinned with "!" below so `gpg` never picks another subkey SIGNING_KEY='D6D1989DF1F6B23FD776293DB46EDB4DFC26805D' REPO=$(cd "$(dirname "$0")/.." && pwd) OUT="$REPO/security.txt" # Notes: # - the 7th field of the pub line is the primary key's expiry in epoch seconds # - a subkey resolves to the primary key EPOCH=$(gpg --list-keys --with-colons "$SIGNING_KEY" \ | awk -F: '$1 == "pub" { print $7; exit }') if [ -z "$EPOCH" ]; then echo "Error: No expiry found for key $SIGNING_KEY" >&2 exit 1 fi EXPIRES=$(date -u -d "@$EPOCH" +%Y-%m-%dT%H:%M:%SZ) UNSIGNED=$(mktemp) trap 'rm -f "$UNSIGNED"' EXIT cat > "$UNSIGNED" <