93 lines
2.3 KiB
Bash
Executable file
93 lines
2.3 KiB
Bash
Executable file
#!/bin/bash
|
|
# Setup GPG key with all email identities
|
|
# Usage: gpg-setup
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# Configuration
|
|
PRIMARY_NAME="Ray Andrew Sinurat"
|
|
PRIMARY_EMAIL="raydreww@gmail.com"
|
|
|
|
# Additional UIDs to add (name|email)
|
|
ADDITIONAL_UIDS=(
|
|
"Ray Andrew Sinurat|rayandrew@uchicago.edu"
|
|
"Ray Andrew|raydreww@gmail.com"
|
|
"Ray Andrew|rayandrew@uchicago.edu"
|
|
"Ray A. O. Sinurat|raydreww@gmail.com"
|
|
"Ray A. O. Sinurat|rayandrew@uchicago.edu"
|
|
"Ray Andrew Obaja Sinurat|raydreww@gmail.com"
|
|
"Ray Andrew Obaja Sinurat|rayandrew@uchicago.edu"
|
|
)
|
|
|
|
# Check if key already exists
|
|
if gpg --list-secret-keys "$PRIMARY_EMAIL" &>/dev/null; then
|
|
echo "GPG key for $PRIMARY_EMAIL already exists."
|
|
echo ""
|
|
gpg --list-secret-keys --keyid-format LONG "$PRIMARY_EMAIL"
|
|
echo ""
|
|
read -p "Do you want to add missing UIDs to this key? [y/N] " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
exit 0
|
|
fi
|
|
else
|
|
echo "Creating new GPG key for $PRIMARY_NAME <$PRIMARY_EMAIL>"
|
|
echo ""
|
|
echo "You will be prompted for a passphrase."
|
|
echo ""
|
|
|
|
gpg --full-generate-key --batch <<EOF
|
|
Key-Type: RSA
|
|
Key-Length: 4096
|
|
Subkey-Type: RSA
|
|
Subkey-Length: 4096
|
|
Name-Real: $PRIMARY_NAME
|
|
Name-Email: $PRIMARY_EMAIL
|
|
Expire-Date: 2y
|
|
%ask-passphrase
|
|
%commit
|
|
EOF
|
|
|
|
echo ""
|
|
echo "Primary key created!"
|
|
fi
|
|
|
|
# Get key ID
|
|
KEY_ID=$(gpg --list-secret-keys --keyid-format LONG "$PRIMARY_EMAIL" 2>/dev/null | grep '^sec' | head -1 | sed 's/.*\/\([A-F0-9]*\) .*/\1/')
|
|
|
|
if [[ -z $KEY_ID ]]; then
|
|
echo "Error: Could not find key ID"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Key ID: $KEY_ID"
|
|
echo ""
|
|
echo "Adding additional UIDs..."
|
|
|
|
# Get existing UIDs
|
|
EXISTING_UIDS=$(gpg --list-keys "$KEY_ID" 2>/dev/null | grep '^uid' | sed 's/.*] //')
|
|
|
|
for uid in "${ADDITIONAL_UIDS[@]}"; do
|
|
NAME="${uid%|*}"
|
|
EMAIL="${uid#*|}"
|
|
UID_STRING="$NAME <$EMAIL>"
|
|
|
|
if echo "$EXISTING_UIDS" | grep -qF "$UID_STRING"; then
|
|
echo " [skip] $UID_STRING (already exists)"
|
|
else
|
|
echo " [add] $UID_STRING"
|
|
"$SCRIPT_DIR/gpg-add-uid" "$NAME" "$EMAIL" "$KEY_ID" 2>/dev/null || true
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "Done! Final key:"
|
|
echo ""
|
|
gpg --list-keys --keyid-format LONG "$KEY_ID"
|
|
|
|
echo ""
|
|
echo "Update your neomutt config with:"
|
|
echo " set pgp_sign_as = 0x$KEY_ID"
|