recoveryId method

int recoveryId(
  1. ECSignature signature,
  2. Uint8List messageHash,
  3. Uint8List publicKeyBytes
)

Implementation

int recoveryId(ECSignature signature, Uint8List messageHash, Uint8List publicKeyBytes, ) {
  final isCompressed = publicKeyBytes.length == 33;
  BigInt publicKey = decodeBigIntToUnsigned(publicKeyBytes);

  int recId = -1;
  for (int i = 0; i < 4; i++) {
    Uint8List? k =
        recoverFromSignature(i, signature, messageHash, isCompressed);
    if (k != null &&
        decodeBigIntToUnsigned(k.sublist(isCompressed ? 0 : 1)) == publicKey) {
      recId = i;
      break;
    }
  }

  if (recId == -1) {
    throw Exception(
      'Could not construct a recoverable key. Are your credentials valid?',
    );
  }

  return recId;
}