borealis-1b / signing /verify.sh
versae's picture
Squash Borealis release history
191258e
#!/bin/bash
#
# Verify the integrity and authenticity of this model release.
#
# Usage: bash signing/verify.sh
#
# This script verifies:
# 1. The signing certificate is issued by a trusted CA
# 2. The SHA256SUMS manifest was signed by Nasjonalbiblioteket
# 3. All file checksums match the manifest
#
set -euo pipefail
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
pass() { echo -e "${GREEN}[PASS]${NC} $*"; }
fail() { echo -e "${RED}[FAIL]${NC} $*" >&2; }
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
MODEL_DIR="$(dirname "$SCRIPT_DIR")"
SIGNING_DIR="$SCRIPT_DIR"
cd "$MODEL_DIR"
errors=0
# Check required files exist
for f in "$SIGNING_DIR/SHA256SUMS" "$SIGNING_DIR/SHA256SUMS.sig" \
"$SIGNING_DIR/cert.pem" "$SIGNING_DIR/ca-chain.pem"; do
if [[ ! -f "$f" ]]; then
fail "Missing file: $f"
errors=$((errors + 1))
fi
done
if [[ $errors -gt 0 ]]; then
echo ""
fail "Required signing files are missing. Cannot verify."
exit 1
fi
echo "=== Nasjonalbiblioteket Model Verification ==="
echo ""
# Show certificate info
echo "Certificate subject:"
openssl x509 -in "$SIGNING_DIR/cert.pem" -subject -noout 2>/dev/null | sed 's/^subject=/ /'
echo "Certificate issuer:"
openssl x509 -in "$SIGNING_DIR/cert.pem" -issuer -noout 2>/dev/null | sed 's/^issuer=/ /'
echo "Certificate fingerprint (SHA-256):"
openssl x509 -in "$SIGNING_DIR/cert.pem" -fingerprint -sha256 -noout 2>/dev/null | sed 's/^.*=/ /'
echo ""
# 1. Verify certificate chain
echo "--- Step 1: Verify certificate chain ---"
if openssl verify -CAfile "$SIGNING_DIR/ca-chain.pem" "$SIGNING_DIR/cert.pem" > /dev/null 2>&1; then
pass "Certificate chain is valid."
else
fail "Certificate chain verification failed!"
errors=$((errors + 1))
fi
# 2. Verify signature
echo "--- Step 2: Verify manifest signature ---"
PUBKEY=$(mktemp)
trap "rm -f '$PUBKEY'" EXIT
openssl x509 -in "$SIGNING_DIR/cert.pem" -pubkey -noout > "$PUBKEY" 2>/dev/null
if openssl dgst -sha256 -verify "$PUBKEY" \
-signature "$SIGNING_DIR/SHA256SUMS.sig" \
"$SIGNING_DIR/SHA256SUMS" > /dev/null 2>&1; then
pass "Manifest signature is valid."
else
fail "Manifest signature verification failed!"
errors=$((errors + 1))
fi
# 3. Verify file checksums
echo "--- Step 3: Verify file checksums ---"
if sha256sum -c "$SIGNING_DIR/SHA256SUMS" 2>/dev/null; then
pass "All file checksums match."
else
fail "One or more file checksums do not match!"
errors=$((errors + 1))
fi
# Summary
echo ""
if [[ $errors -eq 0 ]]; then
echo -e "${GREEN}✅ Verification successful. All files are authentic and unmodified.${NC}"
exit 0
else
echo -e "${RED}❌ Verification failed with $errors error(s).${NC}"
exit 1
fi