signJWT function

Future<String> signJWT({
  1. required String sub,
  2. required String aud,
  3. required int ttl,
  4. required RelayAuthKeyPair keyPair,
  5. int? iat,
})

Implementation

Future<String> signJWT({
  required String sub,
  required String aud,
  required int ttl,
  required RelayAuthKeyPair keyPair,
  int? iat,
}) async {
  iat ??= (DateTime.now().millisecondsSinceEpoch ~/ 1000);
  final header = IridiumJWTHeader(alg: JWT_IRIDIUM_ALG, typ: JWT_IRIDIUM_TYP);
  final iss = encodeIss(Uint8List.fromList(hex.decode(keyPair.publicKey)));
  final exp = iat + ttl;
  final payload =
      IridiumJWTPayload(iss: iss, sub: sub, aud: aud, iat: iat, exp: exp);
  final data = encodeData(IridiumJWTData(header: header, payload: payload));

  // const type = KeyPairType.ed25519;
  // final privateKeyBytes = hex.decode(keyPair.privateKey);
  // final publicKeyBytes = hex.decode(keyPair.publicKey);
  // final publicKey = SimplePublicKey(publicKeyBytes, type: type);
  // final simpleKeyPair =
  //     SimpleKeyPairData(privateKeyBytes, publicKey: publicKey, type: type);
  final signature =
      ed.sign(ed.PrivateKey(hex.decode(keyPair.privateKey)), data);
  return encodeJWT(IridiumJWTSigned(
    header: header,
    payload: payload,
    signature: signature,
  ));
}