Exemple #1
0
        public void SymmetricKeyWrapEncryptionRoundtrip(Func <ICipherParameters> keyFactory, Func <ICipherParameters> innerKeyFactory)
        {
            const string exampleXmlRootElement = "example";
            const string exampleXml            = @"<?xml version=""1.0""?>
<example>
<test>some text node</test>
</example>";
            const string keyName = "mytestkey";

            ICipherParameters key             = keyFactory();
            XmlDocument       xmlDocToEncrypt = LoadXmlFromString(exampleXml);

            Encrypt(xmlDocToEncrypt, exampleXmlRootElement, "EncryptedElement1", key, keyName, innerKeyFactory);

            Console.WriteLine("----------------------------------------------------------------");
            Console.WriteLine("Algorithm: {0}", EncryptingAndDecryptingSymmetric.GetEncryptionMethodName(key, keyWrap: true));
            Console.WriteLine("Encrypted document:");
            Console.WriteLine();
            Console.WriteLine(xmlDocToEncrypt.OuterXml);
            Console.WriteLine();

            XmlDocument xmlDocToDecrypt = LoadXmlFromString(xmlDocToEncrypt.OuterXml);

            Decrypt(xmlDocToDecrypt, key, keyName);

            Console.WriteLine("Decrypted document:");
            Console.WriteLine();
            Console.WriteLine(xmlDocToDecrypt.OuterXml);
            Console.WriteLine();
        }
Exemple #2
0
 public void SymmetricKeyWrapEncryptionRoundtrip()
 {
     foreach (var factory in EncryptingAndDecryptingSymmetric.GetSymmetricAlgorithms(skipDes: true))
     {
         foreach (var innerFactory in EncryptingAndDecryptingSymmetric.GetSymmetricAlgorithms(skipDes: true))
         {
             SymmetricKeyWrapEncryptionRoundtrip(factory, innerFactory);
         }
     }
 }
Exemple #3
0
 public void SymmetricKeyWrapEncryptionRoundtrip()
 {
     // DES is not supported in keywrap scenario, there is no specification string for it either
     foreach (var factory in EncryptingAndDecryptingSymmetric.GetSymmetricAlgorithms(skipDes: true))
     {
         foreach (var innerFactory in EncryptingAndDecryptingSymmetric.GetSymmetricAlgorithms(skipDes: true))
         {
             SymmetricKeyWrapEncryptionRoundtrip(factory, innerFactory);
         }
     }
 }
        static void Main(string[] args)
        {
            Console.WriteLine("----------------------------------------------------------------");
            Console.WriteLine("Signature verification test");
            Console.WriteLine("----------------------------------------------------------------");
            var test1 = new SigningAndVerifying();

            test1.SignedXmlHasVerifiableSignature();

            Console.WriteLine("----------------------------------------------------------------");
            Console.WriteLine("Signature verification test with custom signature method");
            Console.WriteLine("----------------------------------------------------------------");
            var test2 = new SigningAndVerifyingWithCustomSignatureMethod();

            test2.SignedXmlHasVerifiableSignature();

            Console.WriteLine("----------------------------------------------------------------");
            Console.WriteLine("Signature verification test using x509 certificate");
            Console.WriteLine("----------------------------------------------------------------");
            var test3 = new SigningVerifyingX509Cert();

            test3.SignedXmlHasCertificateVerifiableSignature();

            Console.WriteLine("----------------------------------------------------------------");
            Console.WriteLine("Signature verification test using GOST algorithm");
            Console.WriteLine("----------------------------------------------------------------");
            var test3_1 = new SigningVerifyingGost();

            test3_1.SignedXmlHasCertificateVerifiableSignature();

            Console.WriteLine("----------------------------------------------------------------");
            Console.WriteLine("Encryption/decryption test using symmetric algorithms");
            Console.WriteLine("----------------------------------------------------------------");
            var test4 = new EncryptingAndDecryptingSymmetric();

            test4.SymmetricEncryptionRoundtrip();

            Console.WriteLine("----------------------------------------------------------------");
            Console.WriteLine("Encryption/decryption test using symmetric algorithms with key wrap");
            Console.WriteLine("----------------------------------------------------------------");
            var test5 = new EncryptingDecryptingSymmetricKeyWrap();

            test5.SymmetricKeyWrapEncryptionRoundtrip();

            Console.WriteLine("----------------------------------------------------------------");
            Console.WriteLine("Encryption/decryption test using RSA");
            Console.WriteLine("----------------------------------------------------------------");
            var test6 = new EncryptingAndDecryptingAsymmetric();

            test6.AsymmetricEncryptionRoundtrip();
        }
Exemple #5
0
        private static void Encrypt(XmlDocument doc, string elementName, string encryptionElementID, RsaKeyParameters rsaKey, string keyName, bool useOAEP)
        {
            var elementToEncrypt = (XmlElement)doc.GetElementsByTagName(elementName)[0];

            var sessionKeyData = EncryptingAndDecryptingSymmetric.GenerateBlock(256);
            var sessionKeyIV   = EncryptingAndDecryptingSymmetric.GenerateBlock(128);
            var sessionKey     = new ParametersWithIV(new KeyParameter(sessionKeyData), sessionKeyIV);

            // Encrypt the session key and add it to an EncryptedKey element.
            var encryptedKey = new EncryptedKey()
            {
                CipherData       = new CipherData(EncryptedXml.EncryptKey(sessionKeyData, rsaKey, useOAEP)),
                EncryptionMethod = new EncryptionMethod(useOAEP ? EncryptedXml.XmlEncRSAOAEPUrl : EncryptedXml.XmlEncRSA15Url)
            };

            // Specify which EncryptedData
            // uses this key. An XML document can have
            // multiple EncryptedData elements that use
            // different keys.
            encryptedKey.AddReference(new DataReference()
            {
                Uri = "#" + encryptionElementID
            });

            var encryptedData = new EncryptedData()
            {
                Type = EncryptedXml.XmlEncElementUrl,
                Id   = encryptionElementID,

                // Create an EncryptionMethod element so that the
                // receiver knows which algorithm to use for decryption.
                EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES256Url)
            };

            encryptedData.KeyInfo.AddClause(new KeyInfoEncryptedKey(encryptedKey));
            encryptedKey.KeyInfo.AddClause(new KeyInfoName()
            {
                Value = keyName
            });

            var encryptedXml = new EncryptedXml();

            encryptedData.CipherData.CipherValue = encryptedXml.EncryptData(elementToEncrypt, sessionKey, false);

            EncryptedXml.ReplaceElement(elementToEncrypt, encryptedData, false);
        }
Exemple #6
0
        private static void Encrypt(XmlDocument doc, string elementName, string encryptionElementID, ICipherParameters key, string keyName, Func <ICipherParameters> innerKeyFactory)
        {
            var elementToEncrypt = (XmlElement)doc.GetElementsByTagName(elementName)[0];

            ICipherParameters innerKey = innerKeyFactory();
            // Encrypt the key with another key
            var encryptedKey = new EncryptedKey()
            {
                CipherData       = new CipherData(EncryptedXml.EncryptKey(((KeyParameter)((ParametersWithIV)innerKey).Parameters).GetKey(), (KeyParameter)((ParametersWithIV)key).Parameters)),
                EncryptionMethod = new EncryptionMethod(EncryptingAndDecryptingSymmetric.GetEncryptionMethodName(key, keyWrap: true))
            };

            // Specify which EncryptedData
            // uses this key. An XML document can have
            // multiple EncryptedData elements that use
            // different keys.
            encryptedKey.AddReference(new DataReference()
            {
                Uri = "#" + encryptionElementID
            });

            var encryptedData = new EncryptedData()
            {
                Type = EncryptedXml.XmlEncElementUrl,
                Id   = encryptionElementID,

                // Create an EncryptionMethod element so that the
                // receiver knows which algorithm to use for decryption.
                EncryptionMethod = new EncryptionMethod(EncryptingAndDecryptingSymmetric.GetEncryptionMethodName(innerKey, keyWrap: false))
            };

            encryptedData.KeyInfo.AddClause(new KeyInfoEncryptedKey(encryptedKey));
            encryptedKey.KeyInfo.AddClause(new KeyInfoName()
            {
                Value = keyName
            });

            var encryptedXml = new EncryptedXml();

            encryptedData.CipherData.CipherValue = encryptedXml.EncryptData(elementToEncrypt, innerKey, false);

            EncryptedXml.ReplaceElement(elementToEncrypt, encryptedData, false);
        }
        private static void Encrypt(XmlDocument doc, string elementName, string encryptionElementID, RsaKeyParameters rsaKey, string keyName, bool useOAEP)
        {
            var elementToEncrypt = (XmlElement)doc.GetElementsByTagName(elementName)[0];

            var sessionKeyData = EncryptingAndDecryptingSymmetric.GenerateBlock(256);
            var sessionKeyIV   = EncryptingAndDecryptingSymmetric.GenerateBlock(128);
            var sessionKey     = new ParametersWithIV(new KeyParameter(sessionKeyData), sessionKeyIV);

            var encryptedKey = new EncryptedKey()
            {
                CipherData       = new CipherData(XmlEncryption.EncryptKey(sessionKeyData, rsaKey, useOAEP)),
                EncryptionMethod = new EncryptionMethod(useOAEP ? NS.XmlEncRSAOAEPUrl : NS.XmlEncRSA15Url)
            };

            encryptedKey.AddReference(new DataReference()
            {
                Uri = "#" + encryptionElementID
            });

            var encryptedData = new EncryptedData()
            {
                Type = XmlNameSpace.Url[NS.XmlEncElementUrl],
                Id   = encryptionElementID,

                EncryptionMethod = new EncryptionMethod(NS.XmlEncAES256Url)
            };

            encryptedData.KeyInfo.AddClause(new KeyInfoEncryptedKey(encryptedKey));
            encryptedKey.KeyInfo.AddClause(new KeyInfoName()
            {
                Value = keyName
            });

            var encryptedXml = new XmlEncryption();

            encryptedData.CipherData.CipherValue = encryptedXml.EncryptData(elementToEncrypt, sessionKey, false);

            XmlDecryption.ReplaceElement(elementToEncrypt, encryptedData, false);
        }
Exemple #8
0
        private static void Encrypt(XmlDocument doc, string elementName, string encryptionElementID, ICipherParameters key, string keyName, Func <ICipherParameters> innerKeyFactory)
        {
            var elementToEncrypt = (XmlElement)doc.GetElementsByTagName(elementName)[0];

            ICipherParameters innerKey = innerKeyFactory();
            var encryptedKey           = new EncryptedKey()
            {
                CipherData       = new CipherData(XmlEncryption.EncryptKey(((KeyParameter)((ParametersWithIV)innerKey).Parameters).GetKey(), (KeyParameter)((ParametersWithIV)key).Parameters)),
                EncryptionMethod = new EncryptionMethod(EncryptingAndDecryptingSymmetric.GetEncryptionMethodName(key, keyWrap: true))
            };

            encryptedKey.AddReference(new DataReference()
            {
                Uri = "#" + encryptionElementID
            });

            var encryptedData = new EncryptedData()
            {
                Type = XmlNameSpace.Url[NS.XmlEncElementUrl],
                Id   = encryptionElementID,

                EncryptionMethod = new EncryptionMethod(EncryptingAndDecryptingSymmetric.GetEncryptionMethodName(innerKey, keyWrap: false))
            };

            encryptedData.KeyInfo.AddClause(new KeyInfoEncryptedKey(encryptedKey));
            encryptedKey.KeyInfo.AddClause(new KeyInfoName()
            {
                Value = keyName
            });

            var encryptedXml = new XmlEncryption();

            encryptedData.CipherData.CipherValue = encryptedXml.EncryptData(elementToEncrypt, innerKey, false);

            XmlDecryption.ReplaceElement(elementToEncrypt, encryptedData, false);
        }