veil

Verifica un messaggio firmato

Controlla il testo esatto, la chiave che lo ha firmato e lo stato di quella chiave.

Una persona firma il testo dalla scheda Sign a message della propria scheda. Può copiare il blocco firma in un post, un annuncio o un’email. La tua app manda l’intero blocco a POST /v1/verify.

cURL
curl -fsS 'https://veil.rip/v1/verify' \
  --json @signed-message.json

Il file JSON contiene il campo block con il testo incollato. Puoi aggiungere at in secondi Unix. La modalità block non si combina con key, message, signature, platform o subject.

Leggi il verdetto#

Usa valid per il risultato complessivo. signatureOk controlla i byte della firma. keyState dice se la chiave poteva firmare al momento scelto. Una firma può continuare a corrispondere dopo la revoca della chiave, mentre valid è false per il momento attuale.

Quando passi at, usa un orario di pubblicazione da una fonte di cui ti fidi. Una data scritta da chi firma non prova quando il messaggio è stato pubblicato.

Controlla anche l’account#

La modalità firma esplicita accetta key, message e signature. Aggiungi insieme platform e subject per chiedere se quell’identità aveva l’account mittente al momento scelto. Per un bot, usa l’ID stabile dell’account sulla piattaforma.

Tieni il messaggio nel browser#

La pagina /verify legge un blocco firma dal frammento dell’URL o dal testo incollato e lo controlla localmente. I dati dopo # restano nel browser. Un link /v/ manda il messaggio al server per avere l’anteprima social. Anche la chiamata all’API di verifica manda il messaggio al server.

Usa il messaggio originale e signatureBytes dal firmatario. cardNumber è il numero permanente della scheda. Il link per il browser supporta entrambi gli algoritmi di firma. Usa quello con anteprima solo per Ed25519 e un messaggio di massimo 1500 byte UTF-8.

javascript
function base64url(bytes) {
  return btoa(String.fromCharCode(...bytes))
    .replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
}
const messageData = base64url(new TextEncoder().encode(message));
const signatureData = base64url(signatureBytes);
const browserLink = `https://veil.rip/verify#u=${cardNumber}&m=${messageData}&s=${signatureData}`;
const previewLink = `https://veil.rip/v/${cardNumber}/${signatureData}?m=${messageData}`;