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.
-
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].
-
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. -
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.
-
Calcolare
SHA512(dom2(F, C) || R || A || PH(M)), e interpretare il digest di 64 ottetti come intero little-endian k. -
Calcolare S = (r + k * s) mod L. Per efficienza, ridurre di nuovo prima k modulo L.
-
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).