|
|
@@ -11,6 +11,7 @@
|
|
|
|
|
|
using System;
|
|
|
using System.Collections;
|
|
|
+using System.IO;
|
|
|
using System.Security.Cryptography;
|
|
|
using System.Security.Cryptography.X509Certificates;
|
|
|
using System.Security.Cryptography.Xml;
|
|
|
@@ -69,6 +70,66 @@ namespace MonoTests.System.Security.Cryptography.Xml
|
|
|
edata.LoadXml (doc.DocumentElement);
|
|
|
encxml.ReplaceData (doc.DocumentElement, encxml.DecryptData (edata, aes));
|
|
|
}
|
|
|
+
|
|
|
+ [Test]
|
|
|
+ public void RoundtripSample1 ()
|
|
|
+ {
|
|
|
+ StringWriter sw = new StringWriter ();
|
|
|
+
|
|
|
+ // Encryption
|
|
|
+ {
|
|
|
+ XmlDocument doc = new XmlDocument ();
|
|
|
+ doc.PreserveWhitespace = true;
|
|
|
+ doc.LoadXml ("<root> <child>sample</child> </root>");
|
|
|
+
|
|
|
+ XmlElement body = doc.DocumentElement;
|
|
|
+
|
|
|
+ RijndaelManaged aes = new RijndaelManaged ();
|
|
|
+ aes.Mode = CipherMode.CBC;
|
|
|
+ aes.KeySize = 256;
|
|
|
+ aes.IV = Convert.FromBase64String ("pBUM5P03rZ6AE4ZK5EyBrw==");
|
|
|
+ aes.Key = Convert.FromBase64String ("o/ilseZu+keLBBWGGPlUHweqxIPc4gzZEFWr2nBt640=");
|
|
|
+ aes.Padding = PaddingMode.Zeros;
|
|
|
+
|
|
|
+ EncryptedXml exml = new EncryptedXml ();
|
|
|
+ byte [] encrypted = exml.EncryptData (body, aes, false);
|
|
|
+ EncryptedData edata = new EncryptedData ();
|
|
|
+ edata.Type = EncryptedXml.XmlEncElementUrl;
|
|
|
+ edata.EncryptionMethod = new EncryptionMethod (EncryptedXml.XmlEncAES256Url);
|
|
|
+ EncryptedKey ekey = new EncryptedKey ();
|
|
|
+ // omit key encryption, here for testing
|
|
|
+ byte [] encKeyBytes = aes.Key;
|
|
|
+ ekey.CipherData = new CipherData (encKeyBytes);
|
|
|
+ ekey.EncryptionMethod = new EncryptionMethod (EncryptedXml.XmlEncRSA15Url);
|
|
|
+ DataReference dr = new DataReference ();
|
|
|
+ dr.Uri = "_0";
|
|
|
+ ekey.AddReference (dr);
|
|
|
+ edata.KeyInfo.AddClause (new KeyInfoEncryptedKey (ekey));
|
|
|
+ edata.KeyInfo = new KeyInfo ();
|
|
|
+ ekey.KeyInfo.AddClause (new RSAKeyValue (RSA.Create ()));
|
|
|
+ edata.CipherData.CipherValue = encrypted;
|
|
|
+ EncryptedXml.ReplaceElement (doc.DocumentElement, edata, false);
|
|
|
+ doc.Save (new XmlTextWriter (sw));
|
|
|
+ }
|
|
|
+
|
|
|
+ // Decryption
|
|
|
+ {
|
|
|
+ RijndaelManaged aes = new RijndaelManaged ();
|
|
|
+ aes.Mode = CipherMode.CBC;
|
|
|
+ aes.KeySize = 256;
|
|
|
+ aes.Key = Convert.FromBase64String (
|
|
|
+ "o/ilseZu+keLBBWGGPlUHweqxIPc4gzZEFWr2nBt640=");
|
|
|
+ aes.Padding = PaddingMode.Zeros;
|
|
|
+
|
|
|
+ XmlDocument doc = new XmlDocument ();
|
|
|
+ doc.PreserveWhitespace = true;
|
|
|
+ doc.LoadXml (sw.ToString ());
|
|
|
+ EncryptedXml encxml = new EncryptedXml (doc);
|
|
|
+ EncryptedData edata = new EncryptedData ();
|
|
|
+ edata.LoadXml (doc.DocumentElement);
|
|
|
+ encxml.ReplaceData (doc.DocumentElement, encxml.DecryptData (edata, aes));
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
#endif
|