コード例 #1
0
        public void Encrypt_X509_XmlNull()
        {
            var           certificate = TestHelpers.GetSampleX509Certificate();
            XmlEncryption exml        = new XmlEncryption();

            Assert.Throws <ArgumentNullException>(() => exml.Encrypt(null, certificate.Item1));
        }
コード例 #2
0
        public void DecryptData_CipherReference_InvalidUri()
        {
            XmlDocument doc = new XmlDocument();

            doc.PreserveWhitespace = true;
            string xml = "<root>  <child>sample</child>   </root>";

            doc.LoadXml(xml);

            var random  = new SecureRandom();
            var ivdata  = new byte[128 / 8];
            var keydata = new byte[256 / 8];

            random.NextBytes(ivdata);
            random.NextBytes(keydata);
            var param = new ParametersWithIV(new KeyParameter(keydata), ivdata);

            XmlEncryption exml  = new XmlEncryption();
            XmlDecryption dexml = new XmlDecryption();

            exml.AddKeyNameMapping("aes", param);
            EncryptedData ed = exml.Encrypt(doc.DocumentElement, "aes");

            ed.CipherData = new CipherData();
            ed.CipherData.CipherReference = new CipherReference("invaliduri");


            Action decrypt = () => dexml.DecryptData(ed, param);

            Assert.Throws <System.Security.Cryptography.CryptographicException>(decrypt);
        }
コード例 #3
0
        public void Encrypt_DecryptDocument_AES()
        {
            XmlDocument doc = new XmlDocument();

            doc.PreserveWhitespace = true;
            string xml = "<root>  <child>sample</child>   </root>";

            doc.LoadXml(xml);

            var aes     = CipherUtilities.GetCipher("AES/CBC/ZEROBYTEPADDING");
            var random  = new SecureRandom();
            var ivdata  = new byte[128 / 8];
            var keydata = new byte[256 / 8];

            random.NextBytes(ivdata);
            random.NextBytes(keydata);
            var param = new ParametersWithIV(new KeyParameter(keydata), ivdata);

            XmlEncryption exml = new XmlEncryption();

            exml.AddKeyNameMapping("aes", param);
            EncryptedData ed = exml.Encrypt(doc.DocumentElement, "aes");

            doc.LoadXml(ed.GetXml().OuterXml);
            XmlDecryption exmlDecryptor = new XmlDecryption(doc);

            exmlDecryptor.AddKeyNameMapping("aes", param);
            exmlDecryptor.DecryptDocument();

            Assert.Equal(xml, doc.OuterXml);
        }
コード例 #4
0
        public void Encrypt_KeyNameNull()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<root />");
            XmlEncryption exml    = new XmlEncryption();
            string        keyName = null;

            Assert.Throws <ArgumentNullException>(() => exml.Encrypt(doc.DocumentElement, keyName));
        }
コード例 #5
0
        public void Encrypt_X509_CertificateNull()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<root />");
            XmlEncryption   exml        = new XmlEncryption();
            X509Certificate certificate = null;

            Assert.Throws <ArgumentNullException>(() => exml.Encrypt(doc.DocumentElement, certificate));
        }
コード例 #6
0
        private void CheckEncryptionMethod(object algorithm, string uri)
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<root />");
            XmlEncryption exml = new XmlEncryption();

            exml.AddKeyNameMapping("key", algorithm);

            EncryptedData edata       = exml.Encrypt(doc.DocumentElement, "key");
            IEnumerator   keyInfoEnum = edata.KeyInfo.GetEnumerator();

            keyInfoEnum.MoveNext();
            KeyInfoEncryptedKey kiEncKey = keyInfoEnum.Current as KeyInfoEncryptedKey;

            Assert.NotNull(edata);
            Assert.Equal(uri, XmlNameSpace.Url[kiEncKey.GetEncryptedKey().EncryptionMethod.KeyAlgorithm]);
            Assert.NotNull(edata.CipherData.CipherValue);
        }
コード例 #7
0
        private XmlDocument GetTransformedOutput(XmlDocument doc, string nodeToEncrypt)
        {
            var aes     = CipherUtilities.GetCipher("AES/CBC/PKCS7");
            var random  = new SecureRandom();
            var keyData = new byte[aes.GetBlockSize()];
            var ivData  = new byte[aes.GetBlockSize()];

            random.NextBytes(ivData);
            random.NextBytes(keyData);
            var key = new ParametersWithIV(new KeyParameter(keyData), ivData);

            var encryptedXml = new XmlEncryption();

            encryptedXml.AddKeyNameMapping("aes", key);

            XmlElement    elementToEncrypt = (XmlElement)doc.DocumentElement.SelectSingleNode(nodeToEncrypt);
            EncryptedData encryptedData    = encryptedXml.Encrypt(elementToEncrypt, "aes");

            XmlDecryption.ReplaceElement(elementToEncrypt, encryptedData, false);

            XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(doc.NameTable);

            xmlNamespaceManager.AddNamespace("enc", XmlNameSpace.Url[NS.XmlEncNamespaceUrl]);
            XmlElement encryptedNode = (XmlElement)doc.DocumentElement.SelectSingleNode("//enc:EncryptedData", xmlNamespaceManager);

            encryptedNode.SetAttribute("ID", "#_0");

            transform.LoadInput(doc);

            var dencryptedXml = new XmlDecryption();

            dencryptedXml.AddKeyNameMapping("aes", key);

            transform.XmlDecryption = dencryptedXml;
            XmlDocument transformedDocument = (XmlDocument)transform.GetOutput();

            transform.XmlDecryption = null;

            return(transformedDocument);
        }
コード例 #8
0
        public void Encrypt_X509()
        {
            XmlDocument doc = new XmlDocument();

            doc.PreserveWhitespace = true;
            string xml = "<root>  <child>sample</child>   </root>";

            doc.LoadXml(xml);

            var           certificate = TestHelpers.GetSampleX509Certificate();
            XmlEncryption exml        = new XmlEncryption();
            EncryptedData ed          = exml.Encrypt(doc.DocumentElement, certificate.Item1);

            Assert.NotNull(ed);

            doc.LoadXml(ed.GetXml().OuterXml);
            XmlNamespaceManager nm = new XmlNamespaceManager(doc.NameTable);

            nm.AddNamespace("enc", XmlNameSpace.Url[NS.XmlEncNamespaceUrl]);

            Assert.NotNull(doc.SelectSingleNode("//enc:EncryptedKey", nm));
            Assert.DoesNotContain("sample", doc.OuterXml);
        }
コード例 #9
0
        public void PropagatedNamespaces_XmlDecryptionTransform(bool addPropagatedNamespace, string expectedResult)
        {
            XmlDocument baseDocument = new XmlDocument();

            baseDocument.LoadXml("<a><b><c xmlns=\"urn:foo\"/></b></a>");

            var aes     = CipherUtilities.GetCipher("AES/CBC/PKCS7");
            var random  = new SecureRandom();
            var keyData = new byte[aes.GetBlockSize()];
            var ivData  = new byte[aes.GetBlockSize()];

            random.NextBytes(ivData);
            random.NextBytes(keyData);
            var key = new ParametersWithIV(new KeyParameter(keyData), ivData);

            XmlEncryption encryptedXml = new XmlEncryption(baseDocument);
            XmlDecryption decryptedXml = new XmlDecryption(baseDocument);

            encryptedXml.AddKeyNameMapping("key", key);
            decryptedXml.AddKeyNameMapping("key", key);
            XmlElement    bElement      = (XmlElement)baseDocument.DocumentElement.SelectSingleNode("b");
            EncryptedData encryptedData = encryptedXml.Encrypt(bElement, "key");

            XmlDecryption.ReplaceElement(bElement, encryptedData, false);

            XmlDecryptionTransform decryptionTransform = new XmlDecryptionTransform();

            decryptionTransform.XmlDecryption = decryptedXml;
            decryptionTransform.LoadInput(baseDocument);
            if (addPropagatedNamespace)
            {
                decryptionTransform.PropagatedNamespaces.Add("f", "urn:foo");
            }
            XmlDocument decryptedDocument = (XmlDocument)decryptionTransform.GetOutput(typeof(XmlDocument));

            Assert.Equal(expectedResult, decryptedDocument.OuterXml);
        }
コード例 #10
0
        public static void DecryptWithCertificate_NotInStore()
        {
            const string SecretMessage = "Grilled cheese is tasty";

            XmlDocument document = new XmlDocument();

            document.LoadXml($"<data><secret>{SecretMessage}</secret></data>");
            XmlElement toEncrypt = (XmlElement)document.DocumentElement.FirstChild;

            var           cert             = TestHelpers.GetSampleX509Certificate();
            XmlEncryption encryptor        = new XmlEncryption(document);
            EncryptedData encryptedElement = encryptor.Encrypt(toEncrypt, cert.Item1);

            XmlDecryption.ReplaceElement(toEncrypt, encryptedElement, false);

            XmlDocument document2 = new XmlDocument();

            document2.LoadXml(document.OuterXml);

            XmlDecryption decryptor = new XmlDecryption(document2);

            Assert.Throws <System.Security.Cryptography.CryptographicException>(() => decryptor.DecryptDocument());
            Assert.DoesNotContain(SecretMessage, document2.OuterXml);
        }
コード例 #11
0
        public void Encrypt_MissingKey()
        {
            XmlDocument doc = new XmlDocument();

            doc.LoadXml("<root />");
            XmlEncryption exml = new XmlEncryption();

            Assert.Throws <System.Security.Cryptography.CryptographicException>(() => exml.Encrypt(doc.DocumentElement, "aes"));
        }
コード例 #12
0
        public void Encrypt_XmlNull()
        {
            XmlEncryption exml = new XmlEncryption();

            Assert.Throws <ArgumentNullException>(() => exml.Encrypt(null, "aes"));
        }