decode static method

List<int> decode(
  1. String input
)

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()}');
  }
}