Passa al contenuto principale

5.1.6 Sign (Firma)

5.1.6 Sign (Firma)

Gli input della procedura di firma sono la chiave privata, una stringa di 32 ottetti, e un messaggio M di dimensione arbitraria. Per Ed25519ctx e Ed25519ph, c'è inoltre un contesto C di al massimo 255 ottetti e un flag F, 0 per Ed25519ctx e 1 per Ed25519ph.

  1. Applicare SHA-512 alla chiave privata, 32 ottetti. Sia h il digest risultante. Costruire lo scalare segreto s dalla prima metà del digest, e la chiave pubblica corrispondente A, come descritto nella sezione precedente. Sia prefix la seconda metà del digest di hash, h[32],...,h[63].

  2. Calcolare SHA-512(dom2(F, C) || prefix || PH(M)), dove M è il messaggio da firmare. Interpretare il digest di 64 ottetti come intero little-endian r.

  3. Calcolare il punto [r]B. Per efficienza, ridurre prima r modulo L, l'ordine del gruppo di B. Sia R la stringa che codifica questo punto.

  4. Calcolare SHA512(dom2(F, C) || R || A || PH(M)), e interpretare il digest di 64 ottetti come intero little-endian k.

  5. Calcolare S = (r + k * s) mod L. Per efficienza, ridurre di nuovo prima k modulo L.

  6. Formare la firma come concatenazione di R (32 ottetti) e la codifica little-endian di S (32 ottetti; i tre bit più significativi dell'ultimo ottetto sono sempre zero).