# Signature verification instructions

Sample seals use **Ed25519** over the canonical JSON payload (the seal object **without** the `signature` field).

## Public key (sample)

```
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAmHWfHPO0+PT4idQS48yXZcN/4vn4dsVIXlAnSlFZjCI=
-----END PUBLIC KEY-----
```

Key id: `echosforge-sample-ed25519-2026-07`  
SPKI (base64): `MCowBQYDK2VwAyEAmHWfHPO0+PT4idQS48yXZcN/4vn4dsVIXlAnSlFZjCI=`

## Steps (OpenSSL)

1. Extract payload: remove the `signature` object from `06-seal.json` and minify keys in the same order as issued (this sample uses the generator's `JSON.stringify` order).
2. Hash check: `payload_sha256` in the signature block must equal SHA-256 of the payload bytes.
3. Verify Ed25519 signature (`signature_b64`) against the public key.

## Steps (web)

Open [/verify](/verify), paste the seal JSON (or load the sample), and click **Verify seal**.  
The page performs the same digest + Ed25519 check in-browser using Web Crypto.

## Failing example

`04-failing-example-blocked.json` shows a **BLOCKED** verdict when the artifact digest does not match.  
Default policy is fail-closed: absence of a valid PASS seal means **do not deploy**.

## Important

This package is a **public sample**. Production customer seals use customer-scoped keys and are not published here.
