4
using System.Security.Cryptography;
5
using System.Security.Cryptography.Xml;
6
using System.Security.Cryptography.X509Certificates;
11
public class MonoBench : XMLBench {
14
RSACryptoServiceProvider rsa;
15
TripleDESCryptoServiceProvider des;
18
EncryptedData encData;
21
override public void InitXML_Security() {
22
des = new TripleDESCryptoServiceProvider();
26
X509Certificate2 x509 = new X509Certificate2("../ssl/test.crt");
27
rsa = (RSACryptoServiceProvider)x509.PublicKey.Key;
28
Have not found to load separate PEM encoded private key, to do later
32
// Automatically generates key, could by exchanged, using FromXmlString
33
rsa = new RSACryptoServiceProvider();
34
// false/true selects if privat key should be exported as well
35
//Console.WriteLine(rsa.ToXmlString(false));
38
KeyInfoName keyinfo = new KeyInfoName();
39
keyinfo.Value = "session";
41
symkey = new EncryptedKey();
42
symkey.CipherData = new CipherData(EncryptedXml.EncryptKey(des.Key, rsa, false));
43
symkey.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncRSA15Url);
44
// symkey.KeyInfo = new KeyInfo();
45
symkey.KeyInfo.AddClause(keyinfo);
47
encData = new EncryptedData();
48
encData.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl);
49
encData.Type = EncryptedXml.XmlEncElementUrl;
50
encData.KeyInfo.AddClause(new KeyInfoEncryptedKey(symkey));
52
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
53
reference = new Reference("");
54
reference.AddTransform(env);
58
override public void ParseXML(Stream xml, int iters, int iter) {
59
XmlTextReader reader = new XmlTextReader(xml);
60
doc = new XmlDocument();
64
override public void SignXML(Stream xml, int iters, int iter) {
65
SignedXml signedXml = new SignedXml(doc);
66
signedXml.SigningKey = rsa;
67
signedXml.AddReference(reference);
68
signedXml.ComputeSignature();
70
doc.DocumentElement.AppendChild(signedXml.GetXml());
73
doc.DocumentElement.FirstChild.AppendChild(doc.CreateNode(XmlNodeType.Element, "", "a", ""));
74
doc.DocumentElement.AppendChild(doc.CreateNode(XmlNodeType.Element, "", "a", ""));
77
StringWriter mem = new StringWriter();
78
XmlTextWriter w = new XmlTextWriter(mem);
80
Console.WriteLine(mem);
85
override public void VerifyXML(Stream xml, int iters, int iter) {
86
SignedXml signedXml = new SignedXml(doc);
87
XmlNodeList nodeList = doc.GetElementsByTagName("Signature");
88
signedXml.LoadXml((XmlElement)nodeList[0]);
89
if (!signedXml.CheckSignature(rsa)) {
90
Console.WriteLine("Validation Failed");
94
override public void EncryptXML(Stream xml, int iters, int iter) {
96
Use default symmetric algorithm
97
xmlEnc.AddKeyNameMapping("session", rsa);
98
EncryptedData encData = xmlEnc.Encrypt(doc.DocumentElement, "session");
101
EncryptedXml xmlEnc = new EncryptedXml(doc);
102
encData.CipherData.CipherValue = xmlEnc.EncryptData(doc.DocumentElement, des, false);
103
EncryptedXml.ReplaceElement(doc.DocumentElement, encData, false);
107
StringWriter mem = new StringWriter();
108
XmlTextWriter w = new XmlTextWriter(mem);
110
Console.WriteLine(mem);
115
override public void DecryptXML(Stream xml, int iters, int iter) {
116
EncryptedXml xmlEnc = new EncryptedXml(doc);
117
xmlEnc.AddKeyNameMapping("session", rsa);
118
xmlEnc.DecryptDocument();
122
StringWriter mem = new StringWriter();
123
XmlTextWriter w = new XmlTextWriter(mem);
125
Console.WriteLine(mem);
133
public static void Main(string[] args) {
134
XMLBench bench = new MonoBench();