sign static method
Подписывает данные и создает 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,
);
}