convert method
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);
}