convert method

  1. @override
Bech32 convert(
  1. String input, {
  2. int maxLength = Bech32Validations.maxInputLength,
  3. String encoding = 'bech32',
})
override

Converts input and returns the result of the conversion.

Implementation

@override
Bech32 convert(
  String input, {
  int maxLength = Bech32Validations.maxInputLength,
  String encoding = 'bech32',
}) {
  if (input.length > maxLength) throw TooLong(input.length);
  if (isMixedCase(input)) throw MixedCase(input);

  final separatorPosition = input.lastIndexOf(separator);
  if (hasInvalidSeparator(input) || isHrpTooShort(separatorPosition)) {
    throw InvalidSeparator(separatorPosition);
  }
  if (isChecksumTooShort(separatorPosition, input)) {
    throw TooShortChecksum();
  }

  input = input.toLowerCase();
  final hrp = input.substring(0, separatorPosition);
  if (hasOutOfRangeHrpCharacters(hrp)) {
    throw OutOfRangeHrpCharacters(hrp);
  }

  final encodedData = input.substring(separatorPosition + 1);
  final dataIncludingChecksum = encodedData
      .split('')
      .map((c) => charset.indexOf(c))
      .toList();
  if (hasOutOfBoundsChars(dataIncludingChecksum)) {
    throw OutOfBoundChars(encodedData);
  }

  final checksumStart =
      dataIncludingChecksum.length - Bech32Validations.checksumLength;
  final data = dataIncludingChecksum.sublist(0, checksumStart);
  final checksum = dataIncludingChecksum.sublist(checksumStart);
  if (isInvalidChecksum(hrp, data, checksum, encoding: encoding)) {
    throw InvalidChecksum();
  }

  return Bech32(hrp, data);
}