5.2.6 Sign (Firma)
5.2.6 Sign (Firma)
Gli ingressi della procedura di firma sono la chiave privata, una stringa di 57 ottetti, un flag F che vale 0 per Ed448 e 1 per Ed448ph, un contesto C di al più 255 ottetti, e un messaggio M di dimensione arbitraria.
-
Applicare SHAKE256(x, 114) alla chiave privata di 57 ottetti. Sia h il digest risultante. Costruire lo scalare segreto s dalla prima metà del digest e la chiave pubblica A corrispondente, come descritto nella sezione precedente. Sia prefix la seconda metà del digest di hash, h[57],...,h[113].
-
Calcolare SHAKE256(dom4(F, C) || prefix || PH(M), 114), dove M è il messaggio da firmare, F è 1 per Ed448ph e 0 per Ed448, e C è il contesto da usare. Interpretare il digest di 114 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 tale punto.
-
Calcolare SHAKE256(dom4(F, C) || R || A || PH(M), 114) e interpretare il digest di 114 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 (57 ottetti) e della codifica little-endian di S (57 ottetti; i dieci bit più significativi degli ottetti finali sono sempre zero).