verify method

bool verify(
  1. Uint8List vk,
  2. Uint8List message,
  3. Uint8List signature
)

Verify signature over message against the verification key vk.

Implementation

bool verify(Uint8List vk, Uint8List message, Uint8List signature) {
  final n = param.n;
  if ((8 * vk.length) % n != 0) {
    throw ArgumentError('Invalid verification key for Falcon-$n');
  }
  final h = deserializePoly(vk, n);
  final salt = signature.sublist(headLen, headLen + saltLen);
  final encS = signature.sublist(headLen + saltLen);
  final s1 = decompress(encS, param.sigBytelen - headLen - saltLen, n);
  if (s1 == null) return false;

  // Recover s0 = hashed - s1*h and normalize into (-q/2, q/2].
  final hashed = hashToPoint(message, salt);
  final s1q = [for (final e in s1) e % falconQ];
  final s0q = subZq(hashed, mulZq(s1q, h));
  const half = falconQ >> 1;
  final s0 = [for (final e in s0q) (e + half) % falconQ - half];

  // Accept iff (s0, s1) is short enough.
  final norm = FalconUtils.sqnorm([s0, s1]);
  return norm <= param.sigBound;
}