private void ResolveAsymmetricAlgorithm(SecurityKey key, string algorithm, bool willCreateSignatures) { if (key == null) { throw LogHelper.LogArgumentNullException("key"); } if (string.IsNullOrWhiteSpace(algorithm)) { throw LogHelper.LogArgumentNullException("algorithm"); } _hashAlgorithm = GetHashAlgorithmString(algorithm); RsaAlgorithm rsaAlgorithm = Utility.ResolveRsaAlgorithm(key, algorithm, willCreateSignatures); if (rsaAlgorithm != null) { if (rsaAlgorithm.rsaCryptoServiceProvider != null) { _rsaCryptoServiceProvider = rsaAlgorithm.rsaCryptoServiceProvider; _disposeRsa = rsaAlgorithm.dispose; return; } else if (rsaAlgorithm.rsaCryptoServiceProviderProxy != null) { _rsaCryptoServiceProviderProxy = rsaAlgorithm.rsaCryptoServiceProviderProxy; _disposeRsa = rsaAlgorithm.dispose; return; } else { throw LogHelper.LogExceptionMessage(new ArgumentOutOfRangeException(nameof(key), String.Format(CultureInfo.InvariantCulture, LogMessages.IDX10641, key))); } } ECDsaAlgorithm ecdsaAlgorithm = Utility.ResolveECDsaAlgorithm(key, algorithm, willCreateSignatures); if (ecdsaAlgorithm != null && ecdsaAlgorithm.ecdsaCng != null) { _ecdsa = ecdsaAlgorithm.ecdsaCng; _ecdsa.HashAlgorithm = new CngAlgorithm(_hashAlgorithm); _disposeEcdsa = ecdsaAlgorithm.dispose; return; } throw LogHelper.LogExceptionMessage(new ArgumentOutOfRangeException(nameof(key), String.Format(CultureInfo.InvariantCulture, LogMessages.IDX10641, key))); }
internal static RsaAlgorithm ResolveRsaAlgorithm(SecurityKey key, string algorithm, bool requirePrivateKey) { if (key == null) { return(null); } var rsaAlgorithm = new RsaAlgorithm(); var rsaKey = key as RsaSecurityKey; if (rsaKey != null) { if (rsaKey.Rsa != null) { #if NETSTANDARD1_4 rsaAlgorithm.rsa = rsaKey.Rsa; #else rsaAlgorithm.rsaCryptoServiceProvider = rsaKey.Rsa as RSACryptoServiceProvider; #endif return(rsaAlgorithm); } else { #if NETSTANDARD1_4 rsaAlgorithm.rsa = RSA.Create(); rsaAlgorithm.rsa.ImportParameters(rsaKey.Parameters); rsaAlgorithm.dispose = true; #else rsaAlgorithm.rsaCryptoServiceProvider = new RSACryptoServiceProvider(); (rsaAlgorithm.rsaCryptoServiceProvider as RSA).ImportParameters(rsaKey.Parameters); rsaAlgorithm.dispose = true; #endif } return(rsaAlgorithm); } X509SecurityKey x509Key = key as X509SecurityKey; if (x509Key != null) { #if NETSTANDARD1_4 if (requirePrivateKey) { rsaAlgorithm.rsa = x509Key.PrivateKey as RSA; } else { rsaAlgorithm.rsa = x509Key.PublicKey as RSA; } #else if (requirePrivateKey) { rsaAlgorithm.rsaCryptoServiceProviderProxy = new RSACryptoServiceProviderProxy(x509Key.PrivateKey as RSACryptoServiceProvider); } else { rsaAlgorithm.rsaCryptoServiceProviderProxy = new RSACryptoServiceProviderProxy(x509Key.PublicKey as RSACryptoServiceProvider); } #endif return(rsaAlgorithm); } JsonWebKey webKey = key as JsonWebKey; if (webKey != null && webKey.Kty == JsonWebAlgorithmsKeyTypes.RSA) { #if NETSTANDARD1_4 RSAParameters parameters = webKey.CreateRsaParameters(); rsaAlgorithm.rsa = RSA.Create(); rsaAlgorithm.dispose = true; if (rsaAlgorithm.rsa != null) { rsaAlgorithm.rsa.ImportParameters(parameters); } #else RSAParameters parameters = webKey.CreateRsaParameters(); rsaAlgorithm.rsaCryptoServiceProvider = new RSACryptoServiceProvider(); (rsaAlgorithm.rsaCryptoServiceProvider as RSA).ImportParameters(parameters); #endif return(rsaAlgorithm); } return(null); }