Verificar la firma con /v1/verify y offline con la clave pública.
Un reporte aprobado trae siempre su manifiesto firmado. El contrato lo
impone: aprobado sin firma no es evidencia verificable, y publicarlo como si lo
fuera es peor que no tener firma.
Fuente del diagrama (mermaid)
sequenceDiagram
participant C as Cliente
participant S as SBOX
C->>S: GET /v1/reports/{id}
S-->>C: 200 · signature { manifestId, algorithm: Ed25519, publicKeyId }
C->>S: POST /v1/verify
S-->>C: 200 · verified_ed25519_offline
Note over C: o verificación offline con la clave pública publicada
La firma es Ed25519 sobre el payload canonicalizado
(json-stable-stringify-v1). No hace falta red, base de datos ni runtime: con
la clave pública publicada alcanza. Eso es lo que hace que el reporte siga
siendo verificable cuando Ucotron no está del otro lado.
Un manifiesto con clave o firma corrupta devuelve "no verifica", no un 500.
Un 500 ante entrada hostil le confirma al atacante que llegó a tocar el motor y
le niega al integrador honesto la única respuesta que le sirve.
Un manifiesto alterado devuelve 422 con invalid_ed25519_signature, incluso
si el resto del documento está intacto.