#!/bin/bash # Sovereign Node Identity Generator # # Creates a node IDENTITY REQUEST (not an authorized credential). # This is PUBLIC — does not require authorization. # # The identity created here is: # - UNREGISTERED (no provision yet) # - UNAUTHRIZED (not provisioned by PAX-Coder authority) # # To become AUTHORIZED for protected execution, the node must: # 1. Request provisioning from the authority # 2. Receive a signed authorization capability # 3. Pass the capability to protected operations # # This script creates the identity. It does NOT auto-authorize. set -e SOVEREIGN_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(dirname "$SOVEREIGN_DIR")") NODE_ID="pax-coder-$(date +%s)" CREATED_AT=$(date -u +"%Y-%m-%dT%H:%M:%SZ") GIT_COMMIT=$(cd "$REPO_ROOT" && git rev-parse HEAD) echo "[*] Generating Sovereign Node Key for PAX-Coder" echo " Node ID: $NODE_ID" echo " Created: $CREATED_AT" echo " Git Commit: $GIT_COMMIT" # Step 1: Generate Ed25519 keypair (private key NOT committed) echo "[*] Generating Ed25519 keypair..." openssl genpkey -algorithm Ed25519 -out "$SOVEREIGN_DIR/.node_sk" 2>/dev/null openssl pkey -in "$SOVEREIGN_DIR/.node_sk" -pubout -out "$SOVEREIGN_DIR/node_pk.pem" 2>/dev/null # Extract public key in hex PUB_KEY_HEX=$(openssl pkey -in "$SOVEREIGN_DIR/node_pk.pem" -pubin -outform DER -out /tmp/pk.der 2>/dev/null && xxd -p /tmp/pk.der | tr -d '\n' && rm /tmp/pk.der) # Step 2: Create node.json manifest echo "[*] Creating node identity manifest..." cat > "$SOVEREIGN_DIR/node.json" < "$MANIFEST_FILE" <<'MANIFEST_EOF' { "files": [ MANIFEST_EOF git ls-tree -r HEAD | awk '{print $4}' | sort | while read file; do if [ -f "$file" ]; then FILE_HASH=$(sha256sum "$file" | cut -d' ' -f1) echo " \"$file\": \"$FILE_HASH\"," >> "$MANIFEST_FILE" fi done # Remove trailing comma and close JSON sed -i '$ s/,$//' "$MANIFEST_FILE" cat >> "$MANIFEST_FILE" <<'MANIFEST_EOF' ], "generated_at_utc": "GENERATED_AT_PLACEHOLDER", "git_commit": "GIT_COMMIT_PLACEHOLDER" } MANIFEST_EOF # Replace placeholders sed -i "s/GENERATED_AT_PLACEHOLDER/$CREATED_AT/g" "$MANIFEST_FILE" sed -i "s/GIT_COMMIT_PLACEHOLDER/$GIT_COMMIT/g" "$MANIFEST_FILE" # Compute manifest hash REPO_COMMITMENT=$(sha256sum "$MANIFEST_FILE" | cut -d' ' -f1) echo " Repository Commitment: $REPO_COMMITMENT" # Step 4: Create prior-art timestamp record echo "[*] Creating prior-art timestamp record..." cat > "$SOVEREIGN_DIR/prior_art.json" < "$SOVEREIGN_DIR/verification.json" <