ed25519Sign function
Signs message with the Ed25519 key derived from seed32.
Returns the 64-byte signature Renc(32) || S_le(32).
Implementation
Uint8List ed25519Sign(Uint8List seed32, Uint8List message) {
final expanded = _expandSeed(seed32);
final s = expanded.s;
final prefix = expanded.prefix;
final aEnc = edPointToBytes(edScalarMult(s, ed25519G));
// r = SHA-512(prefix || msg) reduced mod L.
final r = _hashToScalar(sha512(_concat([prefix, message])));
final rEnc = edPointToBytes(edScalarMult(r, ed25519G));
// k = SHA-512(Renc || A || msg) reduced mod L.
final k = _hashToScalar(sha512(_concat([rEnc, aEnc, message])));
final sScalar = (r + k * s) % ed25519L;
final sEnc = edBigIntToBytes(sScalar, 32);
return _concat([rEnc, sEnc]);
}