/xmlbench/trunk

To get this branch, use:
bzr branch http://darksoft.org/webbzr/xmlbench/trunk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System;
using System.IO;
using System.Xml;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Security.Cryptography.X509Certificates;

using XMLBench;

namespace XMLBench {
 public class MonoBench : XMLBench {
  XmlDocument doc;

  RSACryptoServiceProvider rsa;
  TripleDESCryptoServiceProvider des;

  EncryptedKey symkey;
  EncryptedData encData;
  Reference reference;
  
  override public void InitXML_Security() {
    des =  new TripleDESCryptoServiceProvider();

/*
    
    X509Certificate2 x509 = new X509Certificate2("../ssl/test.crt");
    rsa = (RSACryptoServiceProvider)x509.PublicKey.Key;
    Have not found to load separate PEM encoded private key, to do later
    using openssl.cs
*/
    
        // Automatically generates key, could by exchanged, using FromXmlString
    rsa = new RSACryptoServiceProvider();
	// false/true selects if privat key should be exported as well
    //Console.WriteLine(rsa.ToXmlString(false));
    

    KeyInfoName keyinfo = new KeyInfoName();
    keyinfo.Value = "session";

    symkey = new EncryptedKey();
    symkey.CipherData = new CipherData(EncryptedXml.EncryptKey(des.Key, rsa, false));
    symkey.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncRSA15Url);
//  symkey.KeyInfo = new KeyInfo();
    symkey.KeyInfo.AddClause(keyinfo);

    encData = new EncryptedData();
    encData.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl);
    encData.Type = EncryptedXml.XmlEncElementUrl;
    encData.KeyInfo.AddClause(new KeyInfoEncryptedKey(symkey));

    XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
    reference = new Reference("");
    reference.AddTransform(env);

  }

  override public void ParseXML(Stream xml, int iters, int iter) {
    XmlTextReader reader = new XmlTextReader(xml);
    doc = new XmlDocument();
    doc.Load(reader);
  }

  override public void SignXML(Stream xml, int iters, int iter) {
    SignedXml signedXml = new SignedXml(doc);
    signedXml.SigningKey = rsa;
    signedXml.AddReference(reference);
    signedXml.ComputeSignature();
    
    doc.DocumentElement.AppendChild(signedXml.GetXml());

/*
    doc.DocumentElement.FirstChild.AppendChild(doc.CreateNode(XmlNodeType.Element, "", "a", ""));
    doc.DocumentElement.AppendChild(doc.CreateNode(XmlNodeType.Element, "", "a", ""));
    
    if (iter==0) {
	StringWriter mem = new StringWriter();
	XmlTextWriter w = new XmlTextWriter(mem);
    	doc.WriteTo(w);
	Console.WriteLine(mem);
    }
*/    
  }

  override public void VerifyXML(Stream xml, int iters, int iter) {
    SignedXml signedXml = new SignedXml(doc);
    XmlNodeList nodeList = doc.GetElementsByTagName("Signature");
    signedXml.LoadXml((XmlElement)nodeList[0]);
    if (!signedXml.CheckSignature(rsa)) {
	Console.WriteLine("Validation Failed");
    }
  }
    
  override public void EncryptXML(Stream xml, int iters, int iter) {
/*
	Use default symmetric algorithm
	xmlEnc.AddKeyNameMapping("session", rsa);
	EncryptedData encData = xmlEnc.Encrypt(doc.DocumentElement, "session");
*/

    EncryptedXml xmlEnc = new EncryptedXml(doc);
    encData.CipherData.CipherValue = xmlEnc.EncryptData(doc.DocumentElement, des, false);
    EncryptedXml.ReplaceElement(doc.DocumentElement, encData, false);

/*
    if (iter==0) {
	StringWriter mem = new StringWriter();
	XmlTextWriter w = new XmlTextWriter(mem);
    	doc.WriteTo(w);
	Console.WriteLine(mem);
    }
*/
  }

  override public void DecryptXML(Stream xml, int iters, int iter) {
    EncryptedXml xmlEnc = new EncryptedXml(doc);
    xmlEnc.AddKeyNameMapping("session", rsa);
    xmlEnc.DecryptDocument();

/*
    if (iter==0) {
	StringWriter mem = new StringWriter();
	XmlTextWriter w = new XmlTextWriter(mem);
    	doc.WriteTo(w);
	Console.WriteLine(mem);
    }
*/
  }
    
 }
 
 public class Mono {
    public static void Main(string[] args) {
	XMLBench bench = new MonoBench();
	bench.Bench(args);
    }
 }
}