private Func <SymmetricAlgorithm> GetSymmetricBlockCipherAlgorithmFactory(ManagedAuthenticatedEncryptorConfiguration configuration)
        {
            // basic argument checking
            if (configuration.EncryptionAlgorithmType == null)
            {
                throw Error.Common_PropertyCannotBeNullOrEmpty(nameof(configuration.EncryptionAlgorithmType));
            }
            typeof(SymmetricAlgorithm).AssertIsAssignableFrom(configuration.EncryptionAlgorithmType);
            if (configuration.EncryptionAlgorithmKeySize < 0)
            {
                throw Error.Common_PropertyMustBeNonNegative(nameof(configuration.EncryptionAlgorithmKeySize));
            }

            _logger.UsingManagedSymmetricAlgorithm(configuration.EncryptionAlgorithmType.FullName !);

            if (configuration.EncryptionAlgorithmType == typeof(Aes))
            {
                Func <Aes>?factory = null;
                if (OSVersionUtil.IsWindows())
                {
                    // If we're on desktop CLR and running on Windows, use the FIPS-compliant implementation.
                    factory = () => new AesCryptoServiceProvider();
                }

                return(factory ?? Aes.Create);
            }
            else
            {
                return(AlgorithmActivator.CreateFactory <SymmetricAlgorithm>(configuration.EncryptionAlgorithmType));
            }
        }
        private Func <KeyedHashAlgorithm> GetKeyedHashAlgorithmFactory(ILogger logger)
        {
            // basic argument checking
            if (ValidationAlgorithmType == null)
            {
                throw Error.Common_PropertyCannotBeNullOrEmpty(nameof(ValidationAlgorithmType));
            }

            if (logger.IsVerboseLevelEnabled())
            {
                logger.LogVerboseF($"Using managed keyed hash algorithm '{ValidationAlgorithmType.FullName}'.");
            }

            if (ValidationAlgorithmType == typeof(HMACSHA256))
            {
                return(() => new HMACSHA256());
            }
            else if (ValidationAlgorithmType == typeof(HMACSHA512))
            {
                return(() => new HMACSHA512());
            }
            else
            {
                return(AlgorithmActivator.CreateFactory <KeyedHashAlgorithm>(ValidationAlgorithmType));
            }
        }
        private Func <SymmetricAlgorithm> GetSymmetricBlockCipherAlgorithmFactory(ILogger logger)
        {
            // basic argument checking
            if (EncryptionAlgorithmType == null)
            {
                throw Error.Common_PropertyCannotBeNullOrEmpty(nameof(EncryptionAlgorithmType));
            }
            typeof(SymmetricAlgorithm).AssertIsAssignableFrom(EncryptionAlgorithmType);
            if (EncryptionAlgorithmKeySize < 0)
            {
                throw Error.Common_PropertyMustBeNonNegative(nameof(EncryptionAlgorithmKeySize));
            }

            if (logger.IsVerboseLevelEnabled())
            {
                logger.LogVerboseF($"Using managed symmetric algorithm '{EncryptionAlgorithmType.FullName}'.");
            }

            if (EncryptionAlgorithmType == typeof(Aes))
            {
                Func <Aes> factory = null;
#if !DOTNET5_4
                if (OSVersionUtil.IsWindows())
                {
                    // If we're on desktop CLR and running on Windows, use the FIPS-compliant implementation.
                    factory = () => new AesCryptoServiceProvider();
                }
#endif
                return(factory ?? Aes.Create);
            }
            else
            {
                return(AlgorithmActivator.CreateFactory <SymmetricAlgorithm>(EncryptionAlgorithmType));
            }
        }
 private static Func <RSA> GetAsymmetricBlockCipherAlgorithmFactory(RsaEncryptorConfiguration configuration)
 {
     // basic argument checking
     if (configuration.EncryptionAlgorithmType == typeof(RSA))
     {
         return(RSA.Create);
     }
     else
     {
         return(AlgorithmActivator.CreateFactory <RSA>(configuration.EncryptionAlgorithmType));
     }
 }
    private Func <KeyedHashAlgorithm> GetKeyedHashAlgorithmFactory(ManagedAuthenticatedEncryptorConfiguration configuration)
    {
        // basic argument checking
        if (configuration.ValidationAlgorithmType == null)
        {
            throw Error.Common_PropertyCannotBeNullOrEmpty(nameof(configuration.ValidationAlgorithmType));
        }

        _logger.UsingManagedKeyedHashAlgorithm(configuration.ValidationAlgorithmType.FullName !);
        if (configuration.ValidationAlgorithmType == typeof(HMACSHA256))
        {
            return(() => new HMACSHA256());
        }
        else if (configuration.ValidationAlgorithmType == typeof(HMACSHA512))
        {
            return(() => new HMACSHA512());
        }
        else
        {
            return(AlgorithmActivator.CreateFactory <KeyedHashAlgorithm>(configuration.ValidationAlgorithmType));
        }
    }
예제 #6
0
        private Func <KeyedHashAlgorithm> GetKeyedHashAlgorithmFactory(ILogger logger)
        {
            // basic argument checking
            if (ValidationAlgorithmType == null)
            {
                throw Error.Common_PropertyCannotBeNullOrEmpty(nameof(ValidationAlgorithmType));
            }

            logger?.UsingManagedKeyedHashAlgorithm(ValidationAlgorithmType.FullName);
            if (ValidationAlgorithmType == typeof(HMACSHA256))
            {
                return(() => new HMACSHA256());
            }
            else if (ValidationAlgorithmType == typeof(HMACSHA512))
            {
                return(() => new HMACSHA512());
            }
            else
            {
                return(AlgorithmActivator.CreateFactory <KeyedHashAlgorithm>(ValidationAlgorithmType));
            }
        }
    private Func <SymmetricAlgorithm> GetSymmetricBlockCipherAlgorithmFactory(ManagedAuthenticatedEncryptorConfiguration configuration)
    {
        // basic argument checking
        if (configuration.EncryptionAlgorithmType == null)
        {
            throw Error.Common_PropertyCannotBeNullOrEmpty(nameof(configuration.EncryptionAlgorithmType));
        }
        typeof(SymmetricAlgorithm).AssertIsAssignableFrom(configuration.EncryptionAlgorithmType);
        if (configuration.EncryptionAlgorithmKeySize < 0)
        {
            throw Error.Common_PropertyMustBeNonNegative(nameof(configuration.EncryptionAlgorithmKeySize));
        }

        _logger.UsingManagedSymmetricAlgorithm(configuration.EncryptionAlgorithmType.FullName !);

        if (configuration.EncryptionAlgorithmType == typeof(Aes))
        {
            return(Aes.Create);
        }
        else
        {
            return(AlgorithmActivator.CreateFactory <SymmetricAlgorithm>(configuration.EncryptionAlgorithmType));
        }
    }