signWithScalarAndPublic function

List<int> signWithScalarAndPublic(
  1. List<int> scalar,
  2. List<int> noncePrefix,
  3. List<int> public,
  4. List<int> message, {
  5. ED448_XOF xof = shake_256,
})

Implementation

List<int> signWithScalarAndPublic(List<int> scalar, List<int> noncePrefix,
    List<int> public, List<int> message,
    {ED448_XOF xof = shake_256}) {
  if (noncePrefix.length != 57) {
    throw FormatException("Bad size of nonce prefix");
  }
  if (public.length != 57) {
    throw FormatException("Bad public key length");
  }

  final a = _asLE(_clampedScalarBytes(scalar));
  final r = _xofModQ(xof, MARKER + [0] + [0] + noncePrefix + message, 114);
  final R = _pointMultiply(r, _G);
  final Rs = _pointCompress(R);
  final h = _xofModQ(xof, MARKER + [0] + [0] + Rs + public + message, 114);
  final s = (r + h * a) % q;

  return Uint8List.fromList(Rs + _toLE(s, 57));
}