5.1.6 Sign (签名)
5.1.6 Sign (签名)
签名过程的输入为私钥 (32 个 octet 的串) 与任意长度的消息 M. 对于 Ed25519ctx 与 Ed25519ph, 另有至多 255 个 octet 的 context C 与标志 F, Ed25519ctx 时 F 为 0, Ed25519ph 时 F 为 1.
-
用 SHA-512 对 32 个 octet 的私钥做哈希. 令 h 表示所得 digest. 按上一节所述从 digest 的前一半构造 secret scalar s 及对应公钥 A. 令 prefix 表示哈希 digest 的后一半 h[32],...,h[63].
-
计算
SHA-512(dom2(F, C) || prefix || PH(M)), 其中 M 为待签名消息. 将 64 octet 的 digest 解释为小端整数 r. -
计算点 [r]B. 为效率起见, 先将 r 按 L (B 的群阶) 约化. 令串 R 为该点的 encoding.
-
计算
SHA512(dom2(F, C) || R || A || PH(M)), 将 64 octet 的 digest 解释为小端整数 k. -
计算 S = (r + k * s) mod L. 为效率起见, 先将 k 按 L 约化.
-
签名为 R (32 个 octet) 与 S 的小端编码 (32 个 octet; 最后一个 octet 的最高 3 位恒为 0) 的拼接.