sign method

String sign({
  1. required List<int> key,
  2. JwtSupportedAlgorithm? alg,
})

Implementation

String sign({required List<int> key, JwtSupportedAlgorithm? alg}) {
  alg ??= header.alg;
  if (alg == null) {
    throw CryptoException("Unknow signing algorithm.");
  }
  final signingInput = serialize();

  final signInputBytes = signingInput.codeUnits;
  List<int>? signature;
  switch (alg) {
    case JwtSupportedAlgorithm.eddsa:
      final signer = Ed25519Signer.fromKeyBytes(
          key.sublist(0, Ed25519KeysConst.privKeyByteLen));
      signature = signer.sign(signInputBytes);
      break;
    case JwtSupportedAlgorithm.hs256:
      signature = HMAC.hmac(() => SHA256(), key, signInputBytes);
      break;
    case JwtSupportedAlgorithm.hs384:
      signature = HMAC.hmac(() => SHA384(), key, signInputBytes);
      break;
    case JwtSupportedAlgorithm.hs512:
      signature = HMAC.hmac(() => SHA512(), key, signInputBytes);
      break;
    case JwtSupportedAlgorithm.es256:
      final signer = Nist256p1Signer.fromKeyBytes(key);
      signature = signer.sign(SHA256.hash(signInputBytes));

      break;
    case JwtSupportedAlgorithm.es384:
      final signer = Nist256p1Signer.fromKeyBytes(key);
      signature = signer.sign(SHA384.hash(signInputBytes));
      break;
    case JwtSupportedAlgorithm.es512:
      final signer = Nist256p1Signer.fromKeyBytes(key);
      signature = signer.sign(SHA512.hash(signInputBytes));
      break;
    case JwtSupportedAlgorithm.es256k:
      final signer = Secp256k1Signer.fromKeyBytes(key);
      signature = signer.sign(SHA256.hash(signInputBytes));
      break;
  }
  final encodedSignature = StringUtils.decode(signature,
      b64NoPadding: true, type: StringEncoding.base64UrlSafe);
  return '$signingInput.$encodedSignature';
}