#!/usr/bin/env bash
# ============================================================================
#  Brimoza RELEASE SIGNING KEY — one-time setup (OWNER tool; NOT shipped).
#
#  Generates the offline RSA-4096 key pair that authenticates every release.
#    • PRIVATE key  -> stays ONLY on your machine, signs version.json in release.sh.
#                      NEVER copy it to the server, the repo, or the package.
#    • PUBLIC  key  -> embedded in the customer-side scripts (install.sh, update.sh,
#                      updater.py). An attacker who later compromises brimoza.com
#                      still cannot forge a release without the private key.
#
#  Run ONCE:
#      bash scripts/gen_release_key.sh
#  Then paste the printed PUBLIC key block where each script says
#  __PASTE_BRIMOZA_RELEASE_PUBLIC_KEY__  (3 places), commit, and release.sh
#  will sign from then on.
#
#  Override (env): BRIMOZA_RELEASE_KEY=/path/to/private.pem
# ============================================================================
set -euo pipefail

KEY="${BRIMOZA_RELEASE_KEY:-$HOME/.brimoza/release_private.pem}"
PUB_REF="$(cd "$(dirname "$0")/.." && pwd)/release_pubkey.pem"   # local reference (gitignored; source of truth is the embedded PEM in the scripts)

command -v openssl >/dev/null 2>&1 || { echo "❌ openssl gerekli."; exit 1; }

if [ -f "$KEY" ]; then
  echo "⚠ Özel anahtar ZATEN var: $KEY"
  echo "  Üzerine yazmak TÜM müşteri doğrulamasını bozar (eski public key'le imzalar uymaz)."
  echo "  Gerçekten döndürmek istiyorsan önce bu dosyayı elle sil, sonra tekrar çalıştır."
  exit 1
fi

umask 077
mkdir -p "$(dirname "$KEY")"
echo "==> RSA-4096 özel anahtar üretiliyor: $KEY"
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out "$KEY"
chmod 600 "$KEY"

echo "==> Public key çıkarılıyor: $PUB_REF"
openssl pkey -in "$KEY" -pubout -out "$PUB_REF"
chmod 644 "$PUB_REF"

FP="$(openssl pkey -in "$KEY" -pubout -outform DER 2>/dev/null | openssl dgst -sha256 | awk '{print $NF}')"

cat <<EOF

==================================================================
  ✅ Brimoza release imza anahtarı hazır.

  Özel anahtar (GİZLİ, yalnız bu makinede):  $KEY
  Public key (yerel referans; gitignore'da): $PUB_REF
  Public key SHA-256 fingerprint:            $FP

  SONRAKİ ADIM — aşağıdaki public key bloğunu şu 3 yerde
  '__PASTE_BRIMOZA_RELEASE_PUBLIC_KEY__' satırının yerine yapıştır:
    • site/install.sh
    • scripts/update.sh
    • coinbot/updater.py   (PEM'i tek satır yerine olduğu gibi koy)

  Sonra commit + push et. release.sh artık otomatik imzalar.
  Özel anahtarı ASLA sunucuya/repoya/pakete koyma. Yedeğini güvenli sakla
  (kaybedersen yeni anahtar üretip scriptleri güncellemen gerekir).
==================================================================

EOF
echo "----- BEGIN: yapıştırılacak public key -----"
cat "$PUB_REF"
echo "----- END -----"
