sign static method

Future<Payload> sign(
  1. Package package, {
  2. required SimpleKeyPair keyPair,
  3. List<int>? implicit,
})

Подписывает данные и создает PASETO v4.public токен

Implementation

static Future<Payload> sign(
  Package package, {
  required SimpleKeyPair keyPair,
  List<int>? implicit,
}) async {
  // Получаем секретный ключ
  final secretKey = await keyPair.extract();
  final secretKeyBytes = secretKey.bytes;

  // Проверяем длину секретного ключа
  if (secretKeyBytes.length != 32) {
    throw ArgumentError('Invalid private key length: expected 32 bytes');
  }

  // Важно: для v4 используем пустой массив, если implicit не задан
  final implicitBytes = implicit ?? [];

  // Формируем PAE для подписи в точности согласно спецификации PASETO
  final headerString = "v4.public.";
  final headerBytes = Uint8List.fromList(utf8.encode(headerString));

  // Собираем компоненты PAE (Pre-Authentication Encoding)
  final preAuth = _preAuthenticationEncoding(
    headerBytes: headerBytes,
    message: package.content,
    footer: package.footer ?? [],
    implicit: implicitBytes,
  );

  // Используем Ed25519 из пакета cryptography
  final algorithm = Ed25519();

  // Подписываем данные
  final signature = await algorithm.sign(
    preAuth,
    keyPair: keyPair,
  );

  // Создаем payload
  return PayloadPublic(
    message: package.content,
    signature: signature.bytes,
  );
}