/// <summary> /// Initializes a new instance of the <see cref="AesCbcHmacDecryptor"/> class. /// </summary> /// <param name="keyBytes"></param> /// <param name="encryptionAlgorithm"></param> /// <param name="decryptor"></param> public AesCbcHmacDecryptor(ReadOnlySpan <byte> keyBytes, EncryptionAlgorithm encryptionAlgorithm, AesDecryptor decryptor) { if (encryptionAlgorithm is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.encryptionAlgorithm); } if (encryptionAlgorithm.Category != EncryptionType.AesHmac) { ThrowHelper.ThrowNotSupportedException_EncryptionAlgorithm(encryptionAlgorithm); } int keyLength = encryptionAlgorithm.RequiredKeySizeInBits >> 4; if (keyBytes.Length < keyLength) { ThrowHelper.ThrowArgumentOutOfRangeException_EncryptionKeyTooSmall(encryptionAlgorithm, encryptionAlgorithm.RequiredKeySizeInBits, keyBytes.Length >> 3); } _decryptor = decryptor; if (encryptionAlgorithm.SignatureAlgorithm is null) { ThrowHelper.ThrowNotSupportedException_SignatureAlgorithm(encryptionAlgorithm.SignatureAlgorithm); } _signer = new SymmetricSigner(keyBytes.Slice(0, keyLength), encryptionAlgorithm.SignatureAlgorithm); }
/// <summary> /// Initializes a new instance of the <see cref="AesCbcHmacDecryptor"/> class. /// </summary> /// <param name="key"></param> /// <param name="encryptionAlgorithm"></param> public AesCbcHmacDecryptor(SymmetricJwk key, EncryptionAlgorithm encryptionAlgorithm) { if (key is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.key); } if (encryptionAlgorithm is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.encryptionAlgorithm); } if (encryptionAlgorithm.Category != EncryptionType.AesHmac) { ThrowHelper.ThrowNotSupportedException_EncryptionAlgorithm(encryptionAlgorithm); } if (key.KeySizeInBits < encryptionAlgorithm.RequiredKeySizeInBits) { ThrowHelper.ThrowArgumentOutOfRangeException_EncryptionKeyTooSmall(key, encryptionAlgorithm, encryptionAlgorithm.RequiredKeySizeInBits, key.KeySizeInBits); } int keyLength = encryptionAlgorithm.RequiredKeySizeInBits >> 4; var keyBytes = key.K; var aesKey = keyBytes.Slice(keyLength); _decryptor = new AesCbcDecryptor(aesKey, encryptionAlgorithm); if (encryptionAlgorithm.SignatureAlgorithm is null) { ThrowHelper.ThrowNotSupportedException_SignatureAlgorithm(encryptionAlgorithm.SignatureAlgorithm); } _signer = new SymmetricSigner(keyBytes.Slice(0, keyLength), encryptionAlgorithm.SignatureAlgorithm); }