build static method

Future<AuthenticateRequest> build(
  1. AuthenticatedRequested request,
  2. SetonixAccount account,
  3. Channel expectedChannel,
  4. String expectedServerId,
)

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,
  );
}