SignDerived(d, label, message): /* Key expansion */ dh := SHA-512(d) /* EdDSA clamping */ a := dh[0..31] a[0] := a[0] & 248 a[31] := a[31] & 127 a[31] := a[31] | 64 /* Calculate zkey corresponding to d */ zkey := a * G /* Calculate blinding factor */ PRK_h := HKDF-Extract("key-derivation", zkey) h := HKDF-Expand(PRK_h, label || "gns", 512 / 8) /* Ensure that h == h mod L */ h := h mod L d' := (h * a) mod L nonce := SHA-256(dh[32..63] || h) r := SHA-512(nonce || message) R := r * G S := r + SHA-512(R || zkey' || message) * d' mod L return (R,S)