public void ShouldInteropWithEncryptedXml(KeyWrapProviderTestData data) { var crypto = CreateCryptoProviderFactory(); var wrapped = null as string; if (data.Wrap && data.Unwrap) { var provider = crypto.CreateKeyWrapProvider(data.SecurityKey, data.Algorithm); Assert.NotNull(provider); wrapped = Convert.ToBase64String(provider.WrapKey(Convert.FromBase64String(data.PlainText))); } if (data.Unwrap) { var provider = crypto.CreateKeyWrapProviderForUnwrap(data.SecurityKey, data.Algorithm); Assert.NotNull(provider); var unwrapped = Convert.ToBase64String(provider.UnwrapKey(Convert.FromBase64String(data.Wrapped))); Assert.Equal(data.PlainText, unwrapped); if (wrapped != null) { var rsa = null as RSA; if (data.SecurityKey is X509SecurityKey x509SecurityKey) { rsa = x509SecurityKey.Certificate.GetRSAPrivateKey(); } if (data.SecurityKey is RsaSecurityKey rsaSecurityKey) { rsa = rsaSecurityKey.Rsa ?? RSA.Create(rsaSecurityKey.Parameters); } var unwrapped2 = Convert.ToBase64String(EncryptedXml.DecryptKey(Convert.FromBase64String(wrapped), rsa, true)); Assert.Equal(data.PlainText, unwrapped2); } } }
public void ShouldGetKeyWrapProvider(KeyWrapProviderTestData data) { var crypto = CreateCryptoProviderFactory(); var wrapped = null as string; if (data.Wrap) { var provider = crypto.CreateKeyWrapProvider(data.SecurityKey, data.Algorithm); Assert.NotNull(provider); wrapped = Convert.ToBase64String(provider.WrapKey(Convert.FromBase64String(data.PlainText))); } if (data.Unwrap) { var provider = crypto.CreateKeyWrapProviderForUnwrap(data.SecurityKey, data.Algorithm); Assert.NotNull(provider); var unwrapped = Convert.ToBase64String(provider.UnwrapKey(Convert.FromBase64String(data.Wrapped))); Assert.Equal(data.PlainText, unwrapped); if (wrapped != null) { var unwrapped2 = Convert.ToBase64String(provider.UnwrapKey(Convert.FromBase64String(wrapped))); Assert.Equal(data.PlainText, unwrapped2); } } }