public void CustomCryptoProvider()
        {
            var cryptoProviderFactoryDefault            = CryptoProviderFactory.Default;
            var cryptoProviderFactoryWithCustomProvider = new CustomCryptoProviderFactory();
            var customCryptoProvider = new CustomCryptoProvider
            {
                HashAlgorithm     = new CustomHashAlgorithm(),
                SignatureProvider = new CustomSignatureProvider(KeyingMaterial.RsaSecurityKey_2048, SecurityAlgorithms.RsaSha256),
                IsSupportedResult = true,
            };

            cryptoProviderFactoryWithCustomProvider.CustomCryptoProvider = customCryptoProvider;
            var cryptoProviderFactoryDefault2 = CryptoProviderFactory.Default;

            Assert.Null(cryptoProviderFactoryDefault.CustomCryptoProvider);
            Assert.Null(cryptoProviderFactoryDefault2.CustomCryptoProvider);
            Assert.NotNull(cryptoProviderFactoryWithCustomProvider.CustomCryptoProvider);

            cryptoProviderFactoryDefault.CreateForSigning(KeyingMaterial.RsaSecurityKey_2048, SecurityAlgorithms.RsaSha256);
            var customSignatureProvider = cryptoProviderFactoryWithCustomProvider.CreateForSigning(KeyingMaterial.RsaSecurityKey_2048, SecurityAlgorithms.RsaSha256) as CustomSignatureProvider;
            var customHashAlgorithm     = cryptoProviderFactoryWithCustomProvider.CreateHashAlgorithm(SecurityAlgorithms.Sha256) as CustomHashAlgorithm;

            cryptoProviderFactoryWithCustomProvider.ReleaseSignatureProvider(customSignatureProvider);
            cryptoProviderFactoryWithCustomProvider.ReleaseHashAlgorithm(customHashAlgorithm);

            Assert.NotNull(customSignatureProvider);
            Assert.NotNull(customHashAlgorithm);
            Assert.True(cryptoProviderFactoryWithCustomProvider.ReleaseSignatureProviderCalled, "cryptoProviderFactoryWithCustomProvider.ReleaseSignatureProviderCalled");
            Assert.True(cryptoProviderFactoryWithCustomProvider.ReleaseAlgorithmCalled, "cryptoProviderFactoryWithCustomProvider.ReleaseAlgorithmCalled");
            Assert.True(customCryptoProvider.IsSupportedAlgorithmCalled, "customCryptoProvider.IsSupportedAlgorithmCalled");
            Assert.True(customCryptoProvider.ReleaseCalled, "customCryptoProvider.ReleaseCalled");
            Assert.True(customCryptoProvider.CreateCalled, "customCryptoProvider.CreateCalled");
            Assert.True(customSignatureProvider.DisposeCalled, "customSignatureProvider.DisposeCalled");
            Assert.False(customHashAlgorithm.DisposeCalled, "customHashAlgorithm.DisposeCalled");
        }
Exemple #2
0
        public override HashAlgorithm CreateHashAlgorithm(string algorithm)
        {
            if (CustomCryptoProvider != null && CustomCryptoProvider.IsSupportedAlgorithm(algorithm))
            {
                return(CustomCryptoProvider.Create(algorithm) as HashAlgorithm);
            }

            return(HashAlgorithm);
        }
Exemple #3
0
        public override SignatureProvider CreateForVerifying(SecurityKey key, string algorithm)
        {
            CreateForVerifyingCalled = true;
            if (CustomCryptoProvider != null && CustomCryptoProvider.IsSupportedAlgorithm(algorithm, key))
            {
                return(CustomCryptoProvider.Create(algorithm, key) as SignatureProvider);
            }

            return(SignatureProvider);
        }
Exemple #4
0
 public override void ReleaseSignatureProvider(SignatureProvider signatureProvider)
 {
     ReleaseSignatureProviderCalled = true;
     if (CustomCryptoProvider != null)
     {
         CustomCryptoProvider.Release(signatureProvider);
     }
     else
     {
         signatureProvider.Dispose();
     }
 }
Exemple #5
0
 public override void ReleaseHashAlgorithm(HashAlgorithm hashAlgorithm)
 {
     ReleaseAlgorithmCalled = true;
     if (CustomCryptoProvider != null)
     {
         CustomCryptoProvider.Release(hashAlgorithm);
     }
     else
     {
         hashAlgorithm.Dispose();
     }
 }
Exemple #6
0
        public void GetSets()
        {
            TestUtilities.WriteHeader($"{this}.GetSets");
            var context = new CompareContext($"{this}.GetSets");

            CryptoProviderFactory cryptoProviderFactory = new CryptoProviderFactory();
            Type type = typeof(CryptoProviderFactory);

            PropertyInfo[] properties = type.GetProperties();
            if (properties.Length != 7)
            {
                Assert.True(false, "Number of public fields has changed from 7 to: " + properties.Length + ", adjust tests");
            }

            CustomCryptoProvider customCryptoProvider = new CustomCryptoProvider();
            GetSetContext        getSetContext        =
                new GetSetContext
            {
                PropertyNamesAndSetGetValue = new List <KeyValuePair <string, List <object> > >
                {
                    new KeyValuePair <string, List <object> >("SignatureProviderObjectPoolCacheSize", new List <object> {
                        CryptoProviderFactory.DefaultSignatureProviderObjectPoolCacheSize, 20, 10
                    }),
                    new KeyValuePair <string, List <object> >("CacheSignatureProviders", new List <object> {
                        CryptoProviderFactory.DefaultCacheSignatureProviders, false, true
                    }),
                    new KeyValuePair <string, List <object> >("CustomCryptoProvider", new List <object> {
                        (ICryptoProvider)null, customCryptoProvider, null
                    }),
                },
                Object = cryptoProviderFactory,
            };

            TestUtilities.GetSet(getSetContext);

            cryptoProviderFactory.SignatureProviderObjectPoolCacheSize = 42;
            cryptoProviderFactory.CacheSignatureProviders = false;
            cryptoProviderFactory.CustomCryptoProvider    = customCryptoProvider;
            CryptoProviderFactory clone = new CryptoProviderFactory(cryptoProviderFactory);

            IdentityComparer.CompareAllPublicProperties(clone, cryptoProviderFactory, context);

            try
            {
                cryptoProviderFactory.SignatureProviderObjectPoolCacheSize = 0;
                context.AddDiff("cryptoProviderFactory.SignatureProviderObjectPoolCacheSize = 0; - Succeeded");
            }
            catch
            {
            }

            try
            {
                cryptoProviderFactory.SignatureProviderObjectPoolCacheSize = -1;
                context.AddDiff("cryptoProviderFactory.SignatureProviderObjectPoolCacheSize = -1; - Succeeded");
            }
            catch
            {
            }

            context.Diffs.AddRange(getSetContext.Errors);
            TestUtilities.AssertFailIfErrors(context);
        }