sign method
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';
}