decode static method
Decodes Base64Url input
string with or without padding
Implementation
static List<int> decode(String input) {
if (input.isEmpty) {
return [];
}
// Проверка на недопустимые символы в Base64Url для PASETO
// Допустимые символы: A-Z, a-z, 0-9, -, _
// PASETO не допускает символы паддинга '=' в токенах
final validPasetoRegex = RegExp(r'^[A-Za-z0-9\-_]+$');
if (!validPasetoRegex.hasMatch(input)) {
throw FormatException(
'Invalid PASETO Base64Url format: only A-Z, a-z, 0-9, -, _ characters are allowed');
}
// Преобразуем URL-safe символы в стандартные base64 символы
String normalized = input.replaceAll('-', '+').replaceAll('_', '/');
// Добавляем паддинг, если необходимо
final paddedInput = _addPadding(normalized);
try {
return base64.decode(paddedInput);
} catch (e) {
throw FormatException('Invalid Base64 format: ${e.toString()}');
}
}