| #!/bin/bash
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| set -e
|
|
|
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| REPO_ROOT="$(dirname "$SCRIPT_DIR")"
|
| SOVEREIGN_DIR="$REPO_ROOT/sovereign"
|
|
|
| echo "========================================"
|
| echo "PAX-CODER CLONE INTEGRITY VERIFICATION"
|
| echo "========================================"
|
| echo ""
|
| echo "Verifying this clone matches official release."
|
| echo "(Integrity verification only; see ADR-0001)"
|
| echo ""
|
|
|
|
|
| if [ ! -f "$SOVEREIGN_DIR/release.json" ]; then
|
| echo "ERROR: sovereign/release.json not found"
|
| exit 1
|
| fi
|
|
|
| echo "[1] Reading release metadata..."
|
|
|
|
|
| RELEASE_FILE="$SOVEREIGN_DIR/release.json"
|
| cat "$RELEASE_FILE" | tr '{' '\n' | tr ',' '\n' | tr '}' '\n' > /tmp/release_$$.txt
|
|
|
|
|
| REPO=$(grep '"repository"' "$RELEASE_FILE" | head -1 | cut -d'"' -f4)
|
| VERSION=$(grep '"release_version"' "$RELEASE_FILE" | head -1 | cut -d'"' -f4)
|
| GIT_COMMIT=$(grep '"git_commit"' "$RELEASE_FILE" | head -1 | cut -d'"' -f4)
|
| NODE_ID=$(grep '"node_id"' "$RELEASE_FILE" | head -1 | cut -d'"' -f4)
|
| MANIFEST_SHA256=$(grep '"manifest_sha256"' "$RELEASE_FILE" | head -1 | cut -d'"' -f4)
|
| RELEASE_TIMESTAMP=$(grep '"release_timestamp_utc"' "$RELEASE_FILE" | head -1 | cut -d'"' -f4)
|
|
|
| rm -f /tmp/release_$$.txt
|
|
|
| echo " Repository: $REPO"
|
| echo " Version: $VERSION"
|
| echo " Timestamp: $RELEASE_TIMESTAMP"
|
| echo " β Metadata read"
|
| echo ""
|
|
|
|
|
| echo "[2] Verifying git commit..."
|
| CURRENT_COMMIT=$(cd "$REPO_ROOT" && git rev-parse HEAD 2>/dev/null || echo "")
|
|
|
| if [ -z "$CURRENT_COMMIT" ]; then
|
| echo " β Not a git repository"
|
| exit 2
|
| fi
|
|
|
| if [ "$CURRENT_COMMIT" != "$GIT_COMMIT" ]; then
|
| echo " β Commit mismatch"
|
| echo " Expected: $GIT_COMMIT"
|
| echo " Actual: $CURRENT_COMMIT"
|
| exit 1
|
| fi
|
|
|
| echo " β Commit matches release"
|
| echo ""
|
|
|
|
|
| echo "[3] Checking manifest file..."
|
| MANIFEST_FILE="$SOVEREIGN_DIR/manifest.json"
|
|
|
| if [ ! -f "$MANIFEST_FILE" ]; then
|
| echo " β Manifest not found (OK for external releases)"
|
| else
|
| echo " β Manifest exists"
|
| fi
|
| echo ""
|
|
|
|
|
| echo "[4] Verifying manifest hash..."
|
|
|
| if [ -f "$MANIFEST_FILE" ]; then
|
| COMPUTED=$(sha256sum "$MANIFEST_FILE" | cut -d' ' -f1)
|
|
|
| if [ "$COMPUTED" != "$MANIFEST_SHA256" ]; then
|
| echo " β Hash mismatch"
|
| echo " Expected: $MANIFEST_SHA256"
|
| echo " Computed: $COMPUTED"
|
| exit 1
|
| fi
|
|
|
| echo " β Manifest hash valid"
|
| else
|
| echo " β Manifest unavailable (skipping verification)"
|
| fi
|
| echo ""
|
|
|
|
|
| echo "========================================"
|
| echo "STATUS: INTEGRITY_VERIFIED"
|
| echo "========================================"
|
| echo ""
|
| echo "Release Information:"
|
| echo " Repository: $REPO"
|
| echo " Version: $VERSION"
|
| echo " Commit: $GIT_COMMIT"
|
| echo " Node ID: $NODE_ID"
|
| echo " Timestamp: $RELEASE_TIMESTAMP"
|
| echo ""
|
| echo "Verification:"
|
| echo " β Commit matches official release"
|
| echo " β Manifest hash verified"
|
| echo ""
|
| echo "What this means:"
|
| echo " β This clone matches the official release"
|
| echo ""
|
| echo "What this does NOT mean:"
|
| echo " β You are authorized for protected operations"
|
| echo " β Local modifications are prevented"
|
| echo ""
|
| echo "For authorization, see: docs/adr/0002-authorization-boundary.md"
|
| echo ""
|
|
|