ed25519Sign function

Uint8List ed25519Sign(
  1. Uint8List seed32,
  2. Uint8List message
)

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]);
}