/// <summary> /// Creates an instance of <see cref="AuthenticatedEncryptionProvider"/> for a specific <SecurityKey, Algorithm>. /// </summary> /// <param name="key">the <see cref="SecurityKey"/> to use.</param> /// <param name="algorithm">the algorithm to use.</param> /// <returns>an instance of <see cref="AuthenticatedEncryptionProvider"/></returns> /// <exception cref="ArgumentNullException">'key' is null.</exception> /// <exception cref="ArgumentNullException">'algorithm' is null or empty.</exception> /// <exception cref="ArgumentException">'key' is not a <see cref="SymmetricSecurityKey"/>.</exception> /// <exception cref="ArgumentException">'algorithm, key' pair is not supported.</exception> public virtual AuthenticatedEncryptionProvider CreateAuthenticatedEncryptionProvider(SecurityKey key, string algorithm) { if (key == null) { throw LogHelper.LogArgumentNullException(nameof(key)); } if (string.IsNullOrEmpty(algorithm)) { throw LogHelper.LogArgumentNullException(nameof(algorithm)); } if (CustomCryptoProvider != null && CustomCryptoProvider.IsSupportedAlgorithm(algorithm, key)) { var cryptoProvider = CustomCryptoProvider.Create(algorithm, key) as AuthenticatedEncryptionProvider; if (cryptoProvider == null) { throw LogHelper.LogExceptionMessage(new InvalidOperationException(LogHelper.FormatInvariant(LogMessages.IDX10646, algorithm, key, typeof(AuthenticatedEncryptionProvider)))); } return(cryptoProvider); } if (SupportedAlgorithms.IsSupportedAuthenticatedEncryptionAlgorithm(algorithm, key)) { return(new AuthenticatedEncryptionProvider(key, algorithm)); } throw LogHelper.LogExceptionMessage(new ArgumentException(LogHelper.FormatInvariant(LogMessages.IDX10652, algorithm), nameof(algorithm))); }
/// <summary> /// Checks if an 'key, algorithm' pair is supported /// </summary> /// <param name="key">the <see cref="SecurityKey"/></param> /// <param name="algorithm">the algorithm to check.</param> /// <returns>true if 'key, algorithm' pair is supported.</returns> protected virtual bool IsSupportedAlgorithm(SecurityKey key, string algorithm) { return(SupportedAlgorithms.IsSupportedAuthenticatedEncryptionAlgorithm(algorithm, key)); }