2 // ReferenceTest.cs - NUnit Test Cases for Reference
5 // Sebastien Pouliot (spouliot@motus.com)
7 // (C) 2002 Motus Technologies Inc. (http://www.motus.com)
10 using NUnit.Framework;
12 using System.Security.Cryptography;
13 using System.Security.Cryptography.Xml;
16 namespace MonoTests.System.Security.Cryptography.Xml {
18 public class ReferenceTest : TestCase {
20 public ReferenceTest () : base ("System.Security.Cryptography.Xml.Reference testsuite") {}
21 public ReferenceTest (string name) : base (name) {}
23 private Reference reference;
25 protected override void SetUp ()
27 reference = new Reference ();
30 protected override void TearDown () {}
32 public static ITest Suite {
34 return new TestSuite (typeof (ReferenceTest));
38 public void TestProperties ()
40 AssertNull ("Uri (null)", reference.Uri);
41 AssertNotNull ("TransformChain", reference.TransformChain);
42 AssertEquals ("ToString()", "System.Security.Cryptography.Xml.Reference", reference.ToString ());
43 // test uri constructor
45 reference = new Reference (uri);
46 AssertEquals ("DigestMethod", "http://www.w3.org/2000/09/xmldsig#sha1", reference.DigestMethod);
47 AssertNull ("DigestValue", reference.DigestValue);
48 AssertNull ("Id", reference.Id);
49 AssertNull ("Type", reference.Type);
50 AssertEquals ("Uri", uri, reference.Uri);
53 public void TestLoadNoTransform ()
55 string value = "<Reference URI=\"#MyObjectId\" xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\" /><DigestValue>/Vvq6sXEVbtZC8GwNtLQnGOy/VI=</DigestValue></Reference>";
56 XmlDocument doc = new XmlDocument ();
58 reference.LoadXml (doc.DocumentElement);
59 AssertEquals ("Load-Xml", value, (reference.GetXml().OuterXml));
60 AssertEquals ("Load-URI", "#MyObjectId", reference.Uri);
61 byte[] hash = { 0xFD, 0x5B, 0xEA, 0xEA, 0xC5, 0xC4, 0x55, 0xBB, 0x59, 0x0B, 0xC1, 0xB0, 0x36, 0xD2, 0xD0, 0x9C, 0x63, 0xB2, 0xFD, 0x52 };
62 AllTests.AssertEquals("Load-Digest", hash, reference.DigestValue);
63 AssertEquals ("Load-#Transform", 0, reference.TransformChain.Count);
66 public void TestLoadBase64Transform ()
68 string value = "<Reference xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#base64\" /></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\" /><DigestValue>AAAAAAAAAAAAAAAAAAAAAAAAAAA=</DigestValue></Reference>";
69 XmlDocument doc = new XmlDocument ();
71 reference.LoadXml (doc.DocumentElement);
72 AssertEquals ("Load-Base64", value, (reference.GetXml().OuterXml));
73 AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
76 public void TestLoadC14NTransform ()
78 string value = "<Reference xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><Transforms><Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\" /></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\" /><DigestValue>AAAAAAAAAAAAAAAAAAAAAAAAAAA=</DigestValue></Reference>";
79 XmlDocument doc = new XmlDocument ();
81 reference.LoadXml (doc.DocumentElement);
82 AssertEquals ("Load-C14N", value, (reference.GetXml().OuterXml));
83 AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
86 public void TestLoadC14NWithCommentsTransforms ()
88 string value = "<Reference xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><Transforms><Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments\" /></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\" /><DigestValue>AAAAAAAAAAAAAAAAAAAAAAAAAAA=</DigestValue></Reference>";
89 XmlDocument doc = new XmlDocument ();
91 reference.LoadXml (doc.DocumentElement);
92 AssertEquals ("Load-C14NWithComments", value, (reference.GetXml().OuterXml));
93 AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
96 public void TestLoadEnvelopedSignatureTransforms ()
98 string value = "<Reference xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\" /></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\" /><DigestValue>AAAAAAAAAAAAAAAAAAAAAAAAAAA=</DigestValue></Reference>";
99 XmlDocument doc = new XmlDocument ();
101 reference.LoadXml (doc.DocumentElement);
102 AssertEquals ("Load-Enveloped", value, (reference.GetXml().OuterXml));
103 AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
106 public void TestLoadXPathTransforms ()
108 string value = "<Reference xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><Transforms><Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\"><XPath></XPath></Transform></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\" /><DigestValue>AAAAAAAAAAAAAAAAAAAAAAAAAAA=</DigestValue></Reference>";
109 XmlDocument doc = new XmlDocument ();
111 reference.LoadXml (doc.DocumentElement);
112 AssertEquals ("Load-XPath", value, (reference.GetXml().OuterXml));
113 AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
116 public void TestLoadXsltTransforms ()
118 string value = "<Reference xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><Transforms><Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\" /></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\" /><DigestValue>AAAAAAAAAAAAAAAAAAAAAAAAAAA=</DigestValue></Reference>";
119 XmlDocument doc = new XmlDocument ();
122 reference.LoadXml (doc.DocumentElement);
124 catch (Exception e) {
125 Fail (e.ToString ());
127 AssertEquals ("Load-Xslt", value, (reference.GetXml().OuterXml));
128 AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
131 public void TestLoadAllTransforms ()
133 string value = "<Reference xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#base64\" /><Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\" /><Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments\" /><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\" /><Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\"><XPath></XPath></Transform><Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\" /></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\" /><DigestValue>AAAAAAAAAAAAAAAAAAAAAAAAAAA=</DigestValue></Reference>";
134 XmlDocument doc = new XmlDocument ();
136 reference.LoadXml (doc.DocumentElement);
137 AssertEquals ("Load-Xml", value, (reference.GetXml().OuterXml));
138 AssertEquals ("Load-#Transform", 6, reference.TransformChain.Count);
141 public void TestAllTransform ()
143 // adding an empty hash value
144 byte[] hash = new byte [20];
145 reference.DigestValue = hash;
146 XmlElement xel = reference.GetXml ();
147 // this is the minimal Reference (DisestValue)!
148 AssertNotNull ("GetXml", xel);
150 reference.AddTransform (new XmlDsigBase64Transform ());
151 reference.AddTransform (new XmlDsigC14NTransform ());
152 reference.AddTransform (new XmlDsigC14NWithCommentsTransform ());
153 reference.AddTransform (new XmlDsigEnvelopedSignatureTransform ());
154 reference.AddTransform (new XmlDsigXPathTransform ());
155 reference.AddTransform (new XmlDsigXsltTransform ());
157 string value = "<Reference xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#base64\" /><Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\" /><Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments\" /><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\" /><Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\"><XPath></XPath></Transform><Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xslt-19991116\" /></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\" /><DigestValue>AAAAAAAAAAAAAAAAAAAAAAAAAAA=</DigestValue></Reference>";
158 AssertEquals("Get-Xml", value, (reference.GetXml().OuterXml));
159 // however this value cannot be loaded as it's missing some transform (xslt) parameters
161 // can we add them again ?
162 reference.AddTransform (new XmlDsigBase64Transform ());
163 reference.AddTransform (new XmlDsigC14NTransform ());
164 reference.AddTransform (new XmlDsigC14NWithCommentsTransform ());
165 reference.AddTransform (new XmlDsigEnvelopedSignatureTransform ());
166 reference.AddTransform (new XmlDsigXPathTransform ());
167 reference.AddTransform (new XmlDsigXsltTransform ());
170 AssertEquals ("# Transforms", 12, reference.TransformChain.Count);
173 public void TestNull ()
175 // null DigestMethod -> "" DigestMethod !!!
176 reference.DigestMethod = null;
177 AssertNull ("DigestMethod null", reference.DigestMethod);
180 public void TestBadness ()
182 Reference reference = new Reference ();
183 reference.Uri = "#MyObjectId";
186 XmlElement bad = reference.GetXml ();
187 Fail ("Expected NullReferenceException but got none");
189 catch (NullReferenceException) {
192 catch (Exception e) {
193 Fail ("Expected NullReferenceException but got: " + e.ToString ());
195 // bad hash - there's no validation!
196 reference.DigestMethod = "http://www.w3.org/2000/09/xmldsig#mono";