Aller au contenu principal

5.1.6 Sign

5.1.6 Sign (Signature)

Les entrées de la procédure de signature sont la clé privée, une chaîne de 32 octets, et un message M de taille arbitraire. Pour Ed25519ctx et Ed25519ph, il y a en outre un contexte C d'au plus 255 octets et un drapeau F, 0 pour Ed25519ctx et 1 pour Ed25519ph.

  1. Hacher la clé privée, 32 octets, avec SHA-512. Soit h le digest résultant. Construire le scalaire secret s à partir de la première moitié du digest, et la clé publique correspondante A, comme décrit à la section précédente. Soit prefix la seconde moitié du digest de hachage, h[32],...,h[63].

  2. Calculer SHA-512(dom2(F, C) || prefix || PH(M)), où M est le message à signer. Interpréter le digest de 64 octets comme un entier little-endian r.

  3. Calculer le point [r]B. Pour l'efficacité, réduire d'abord r modulo L, l'ordre du groupe de B. Soit R la chaîne encodant ce point.

  4. Calculer SHA512(dom2(F, C) || R || A || PH(M)), et interpréter le digest de 64 octets comme un entier little-endian k.

  5. Calculer S = (r + k * s) mod L. Pour l'efficacité, réduire encore k modulo L d'abord.

  6. Former la signature comme la concaténation de R (32 octets) et de l'encodage little-endian de S (32 octets ; les trois bits les plus significatifs du dernier octet sont toujours zéro).