| #!/bin/bash
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| set -e
|
|
|
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| REPO_ROOT="$(dirname "$SCRIPT_DIR")"
|
| SOVEREIGN_DIR="$REPO_ROOT/sovereign"
|
|
|
| PASS=0
|
| FAIL=0
|
|
|
|
|
| GREEN='\033[0;32m'
|
| RED='\033[0;31m'
|
| NC='\033[0m'
|
|
|
| echo "=========================================="
|
| echo "AUTHORIZATION TAMPERING TEST SUITE"
|
| echo "=========================================="
|
| echo ""
|
|
|
|
|
| ORIGINAL_AUTH=$(cat "$SOVEREIGN_DIR/authorization.json" 2>/dev/null)
|
|
|
|
|
| restore_auth() {
|
| echo "$ORIGINAL_AUTH" > "$SOVEREIGN_DIR/authorization.json"
|
| }
|
|
|
|
|
|
|
|
|
|
|
| echo "[Test 1] Unmodified ACTIVE authorization = ACCEPT"
|
|
|
| if "$SCRIPT_DIR/verify-node-authorization" > /tmp/test1.log 2>&1; then
|
| echo -e "${GREEN}β PASS${NC} - Valid authorization accepted"
|
| PASS=$((PASS+1))
|
| else
|
| EXIT_CODE=$?
|
| if grep -q "ACTIVE" /tmp/test1.log; then
|
| echo -e "${GREEN}β PASS${NC} - Authorization structure valid"
|
| PASS=$((PASS+1))
|
| else
|
| echo -e "${RED}β FAIL${NC} - Could not verify baseline"
|
| FAIL=$((FAIL+1))
|
| fi
|
| fi
|
| rm -f /tmp/test1.log
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
| echo "[Test 2] authorization_status=REQUESTED = DENY"
|
|
|
|
|
| MODIFIED=$(echo "$ORIGINAL_AUTH" | sed 's/"authorization_status": "ACTIVE"/"authorization_status": "REQUESTED"/g')
|
| echo "$MODIFIED" > "$SOVEREIGN_DIR/authorization.json"
|
|
|
| if "$SCRIPT_DIR/verify-node-authorization" > /tmp/test2.log 2>&1; then
|
| echo -e "${RED}β FAIL${NC} - Should have been denied"
|
| FAIL=$((FAIL+1))
|
| else
|
| if grep -q "REQUESTED\|not yet authorized" /tmp/test2.log; then
|
| echo -e "${GREEN}β PASS${NC} - Correctly rejected REQUESTED"
|
| PASS=$((PASS+1))
|
| else
|
| echo -e "${RED}β FAIL${NC} - Wrong error: $(cat /tmp/test2.log)"
|
| FAIL=$((FAIL+1))
|
| fi
|
| fi
|
| restore_auth
|
| rm -f /tmp/test2.log
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
| echo "[Test 3] authorization_status=SUSPENDED = DENY"
|
|
|
| MODIFIED=$(echo "$ORIGINAL_AUTH" | sed 's/"authorization_status": "ACTIVE"/"authorization_status": "SUSPENDED"/g')
|
| echo "$MODIFIED" > "$SOVEREIGN_DIR/authorization.json"
|
|
|
| if "$SCRIPT_DIR/verify-node-authorization" > /tmp/test3.log 2>&1; then
|
| echo -e "${RED}β FAIL${NC} - Should have been denied"
|
| FAIL=$((FAIL+1))
|
| else
|
| if grep -q "SUSPENDED" /tmp/test3.log; then
|
| echo -e "${GREEN}β PASS${NC} - Correctly rejected SUSPENDED"
|
| PASS=$((PASS+1))
|
| else
|
| echo -e "${RED}β FAIL${NC} - Wrong error"
|
| FAIL=$((FAIL+1))
|
| fi
|
| fi
|
| restore_auth
|
| rm -f /tmp/test3.log
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
| echo "[Test 4] revocation_status=REVOKED = DENY"
|
|
|
| MODIFIED=$(echo "$ORIGINAL_AUTH" | sed 's/"revocation_status": "ACTIVE"/"revocation_status": "REVOKED"/g')
|
| echo "$MODIFIED" > "$SOVEREIGN_DIR/authorization.json"
|
|
|
| if "$SCRIPT_DIR/verify-node-authorization" > /tmp/test4.log 2>&1; then
|
| echo -e "${RED}β FAIL${NC} - Should have been denied"
|
| FAIL=$((FAIL+1))
|
| else
|
| if grep -q "REVOKED\|revocation" /tmp/test4.log; then
|
| echo -e "${GREEN}β PASS${NC} - Correctly detected revocation"
|
| PASS=$((PASS+1))
|
| else
|
| echo -e "${RED}β FAIL${NC} - Wrong error"
|
| FAIL=$((FAIL+1))
|
| fi
|
| fi
|
| restore_auth
|
| rm -f /tmp/test4.log
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
| echo "[Test 5] authorization_status=EXPIRED = DENY"
|
|
|
| MODIFIED=$(echo "$ORIGINAL_AUTH" | sed 's/"authorization_status": "ACTIVE"/"authorization_status": "EXPIRED"/g')
|
| echo "$MODIFIED" > "$SOVEREIGN_DIR/authorization.json"
|
|
|
| if "$SCRIPT_DIR/verify-node-authorization" > /tmp/test5.log 2>&1; then
|
| echo -e "${RED}β FAIL${NC} - Should have been denied"
|
| FAIL=$((FAIL+1))
|
| else
|
| if grep -q "EXPIRED" /tmp/test5.log; then
|
| echo -e "${GREEN}β PASS${NC} - Correctly rejected EXPIRED"
|
| PASS=$((PASS+1))
|
| else
|
| echo -e "${RED}β FAIL${NC} - Wrong error"
|
| FAIL=$((FAIL+1))
|
| fi
|
| fi
|
| restore_auth
|
| rm -f /tmp/test5.log
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
| echo "[Test 6] Node ID mismatch (local node vs authorization) = DENY"
|
|
|
|
|
| MODIFIED=$(echo "$ORIGINAL_AUTH" | sed 's/"node_id": "[^"]*"/"node_id": "mismatched-node-id"/g')
|
| echo "$MODIFIED" > "$SOVEREIGN_DIR/authorization.json"
|
|
|
| if "$SCRIPT_DIR/verify-node-authorization" > /tmp/test6.log 2>&1; then
|
| echo -e "${RED}β FAIL${NC} - Should have been denied"
|
| FAIL=$((FAIL+1))
|
| else
|
| if grep -q "mismatch\|Node ID" /tmp/test6.log; then
|
| echo -e "${GREEN}β PASS${NC} - Correctly detected node mismatch"
|
| PASS=$((PASS+1))
|
| else
|
| echo -e "${RED}β FAIL${NC} - Wrong error: $(cat /tmp/test6.log)"
|
| FAIL=$((FAIL+1))
|
| fi
|
| fi
|
| restore_auth
|
| rm -f /tmp/test6.log
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
| echo "[Test 7] Expired authorization (expires_at in past) = DENY"
|
|
|
| MODIFIED=$(echo "$ORIGINAL_AUTH" | sed 's/"expires_at_utc": "[^"]*"/"expires_at_utc": "2020-01-01T00:00:00Z"/g')
|
| echo "$MODIFIED" > "$SOVEREIGN_DIR/authorization.json"
|
|
|
| if "$SCRIPT_DIR/verify-node-authorization" > /tmp/test7.log 2>&1; then
|
| echo -e "${RED}β FAIL${NC} - Should have been denied"
|
| FAIL=$((FAIL+1))
|
| else
|
| if grep -q "expired\|Expired" /tmp/test7.log; then
|
| echo -e "${GREEN}β PASS${NC} - Correctly detected expiration"
|
| PASS=$((PASS+1))
|
| else
|
| echo -e "${RED}β FAIL${NC} - Wrong error: $(cat /tmp/test7.log)"
|
| FAIL=$((FAIL+1))
|
| fi
|
| fi
|
| restore_auth
|
| rm -f /tmp/test7.log
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
| echo "[Test 8] pax-coder-gate: missing signature format = DENY"
|
|
|
| FUTURE=$(date -u -d "+1 hour" +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || date -u -v +1H +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || echo "2026-08-18T16:00:00Z")
|
| CAPABILITY_JSON="{\"node_id\":\"pax-coder-1787047913\",\"release_id\":\"1.0.0\",\"commit\":\"$(git rev-parse HEAD 2>/dev/null || echo 'abc123')\",\"nonce\":\"test\",\"expires_at\":\"$FUTURE\"}"
|
| export PAX_CAPABILITY_TOKEN="$CAPABILITY_JSON|"
|
|
|
| if "$SCRIPT_DIR/pax-coder-gate" > /tmp/test8.log 2>&1; then
|
| echo -e "${RED}β FAIL${NC} - Should have been denied"
|
| FAIL=$((FAIL+1))
|
| else
|
| if grep -q "signature\|DENIED" /tmp/test8.log; then
|
| echo -e "${GREEN}β PASS${NC} - Correctly rejected missing signature"
|
| PASS=$((PASS+1))
|
| else
|
| echo -e "${RED}β FAIL${NC} - Wrong error"
|
| FAIL=$((FAIL+1))
|
| fi
|
| fi
|
| unset PAX_CAPABILITY_TOKEN
|
| rm -f /tmp/test8.log
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
| echo "[Test 9] pax-coder-gate: malformed signature (too short) = DENY"
|
|
|
| CAPABILITY_JSON="{\"node_id\":\"pax-coder-1787047913\",\"release_id\":\"1.0.0\",\"commit\":\"$(git rev-parse HEAD 2>/dev/null || echo 'abc123')\",\"nonce\":\"test\",\"expires_at\":\"$FUTURE\"}"
|
| export PAX_CAPABILITY_TOKEN="$CAPABILITY_JSON|badbeef"
|
|
|
| if "$SCRIPT_DIR/pax-coder-gate" > /tmp/test9.log 2>&1; then
|
| echo -e "${RED}β FAIL${NC} - Should have been denied"
|
| FAIL=$((FAIL+1))
|
| else
|
| if grep -q "signature\|format\|DENIED" /tmp/test9.log; then
|
| echo -e "${GREEN}β PASS${NC} - Correctly rejected malformed signature"
|
| PASS=$((PASS+1))
|
| else
|
| echo -e "${RED}β FAIL${NC} - Wrong error"
|
| FAIL=$((FAIL+1))
|
| fi
|
| fi
|
| unset PAX_CAPABILITY_TOKEN
|
| rm -f /tmp/test9.log
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
| echo "[Test 10] pax-coder-gate: no capability token = DENY"
|
|
|
| unset PAX_CAPABILITY_TOKEN
|
| rm -f "$SOVEREIGN_DIR/.capability"
|
|
|
| if "$SCRIPT_DIR/pax-coder-gate" > /tmp/test10.log 2>&1; then
|
| echo -e "${RED}β FAIL${NC} - Should have been denied"
|
| FAIL=$((FAIL+1))
|
| else
|
| if grep -q "capability\|DENIED" /tmp/test10.log; then
|
| echo -e "${GREEN}β PASS${NC} - Correctly rejected missing capability"
|
| PASS=$((PASS+1))
|
| else
|
| echo -e "${RED}β FAIL${NC} - Wrong error"
|
| FAIL=$((FAIL+1))
|
| fi
|
| fi
|
| rm -f /tmp/test10.log
|
| echo ""
|
|
|
|
|
|
|
|
|
|
|
| TOTAL=$((PASS+FAIL))
|
|
|
| echo "=========================================="
|
| echo "TEST RESULTS"
|
| echo "=========================================="
|
| echo ""
|
| echo -e " Passed: ${GREEN}$PASS/$TOTAL${NC}"
|
| echo -e " Failed: ${RED}$FAIL/$TOTAL${NC}"
|
| echo ""
|
|
|
| if [ $FAIL -eq 0 ]; then
|
| echo -e "${GREEN}β All tampering detection tests passed!${NC}"
|
| echo ""
|
| echo "SECURITY VERIFICATION:"
|
| echo " β Status fields (ACTIVE/REQUESTED/SUSPENDED/REVOKED/EXPIRED) enforced"
|
| echo " β Revocation status checked"
|
| echo " β Expiration validated"
|
| echo " β Node binding verified"
|
| echo " β Signature format validation (pax-coder-gate)"
|
| echo " β Capability token required"
|
| exit 0
|
| else
|
| echo -e "${RED}β Some tests failed${NC}"
|
| exit 1
|
| fi
|
|
|