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"); }
public override HashAlgorithm CreateHashAlgorithm(string algorithm) { if (CustomCryptoProvider != null && CustomCryptoProvider.IsSupportedAlgorithm(algorithm)) { return(CustomCryptoProvider.Create(algorithm) as HashAlgorithm); } return(HashAlgorithm); }
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); }
public override void ReleaseSignatureProvider(SignatureProvider signatureProvider) { ReleaseSignatureProviderCalled = true; if (CustomCryptoProvider != null) { CustomCryptoProvider.Release(signatureProvider); } else { signatureProvider.Dispose(); } }
public override void ReleaseHashAlgorithm(HashAlgorithm hashAlgorithm) { ReleaseAlgorithmCalled = true; if (CustomCryptoProvider != null) { CustomCryptoProvider.Release(hashAlgorithm); } else { hashAlgorithm.Dispose(); } }
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); }