build static method
Implementation
static Future<AuthenticateRequest> build(
AuthenticatedRequested request,
SetonixAccount account,
Channel expectedChannel,
String expectedServerId,
) async {
final now = DateTime.now().toUtc();
if (request.version != kAuthenticationProtocolVersion ||
request.challenge.length != kAuthenticationChallengeLength ||
request.channel != expectedChannel ||
request.serverId != expectedServerId ||
request.serverId.isEmpty ||
request.serverId.length > 256 ||
request.issuedAt.isAfter(request.expiresAt) ||
!request.expiresAt.toUtc().isAfter(now)) {
throw const FormatException('Invalid authentication challenge.');
}
final keyPair = account.keyPair;
final signature = await _generator.sign(
buildAuthenticationTranscript(
version: request.version,
serverId: request.serverId,
channel: request.channel,
issuedAt: request.issuedAt,
expiresAt: request.expiresAt,
challenge: request.challenge,
),
keyPair: keyPair,
);
return AuthenticateRequest(
Uint8List.fromList(signature.bytes),
account.publicKey,
);
}