ReferenceTest.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. //
  2. // ReferenceTest.cs - NUnit Test Cases for Reference
  3. //
  4. // Author:
  5. // Sebastien Pouliot ([email protected])
  6. //
  7. // (C) 2002 Motus Technologies Inc. (http://www.motus.com)
  8. //
  9. using NUnit.Framework;
  10. using System;
  11. using System.Security.Cryptography;
  12. using System.Security.Cryptography.Xml;
  13. using System.Xml;
  14. namespace MonoTests.System.Security.Cryptography.Xml {
  15. public class ReferenceTest : TestCase {
  16. public ReferenceTest () : base ("System.Security.Cryptography.Xml.Reference testsuite") {}
  17. public ReferenceTest (string name) : base (name) {}
  18. private Reference reference;
  19. protected override void SetUp ()
  20. {
  21. reference = new Reference ();
  22. }
  23. protected override void TearDown () {}
  24. public static ITest Suite {
  25. get {
  26. return new TestSuite (typeof (ReferenceTest));
  27. }
  28. }
  29. public void TestProperties ()
  30. {
  31. AssertNull ("Uri (null)", reference.Uri);
  32. AssertNotNull ("TransformChain", reference.TransformChain);
  33. AssertEquals ("ToString()", "System.Security.Cryptography.Xml.Reference", reference.ToString ());
  34. // test uri constructor
  35. string uri = "uri";
  36. reference = new Reference (uri);
  37. AssertEquals ("DigestMethod", "http://www.w3.org/2000/09/xmldsig#sha1", reference.DigestMethod);
  38. AssertNull ("DigestValue", reference.DigestValue);
  39. AssertNull ("Id", reference.Id);
  40. AssertNull ("Type", reference.Type);
  41. AssertEquals ("Uri", uri, reference.Uri);
  42. }
  43. public void TestLoadNoTransform ()
  44. {
  45. 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>";
  46. XmlDocument doc = new XmlDocument ();
  47. doc.LoadXml (value);
  48. reference.LoadXml (doc.DocumentElement);
  49. AssertEquals ("Load-Xml", value, (reference.GetXml().OuterXml));
  50. AssertEquals ("Load-URI", "#MyObjectId", reference.Uri);
  51. byte[] hash = { 0xFD, 0x5B, 0xEA, 0xEA, 0xC5, 0xC4, 0x55, 0xBB, 0x59, 0x0B, 0xC1, 0xB0, 0x36, 0xD2, 0xD0, 0x9C, 0x63, 0xB2, 0xFD, 0x52 };
  52. AllTests.AssertEquals("Load-Digest", hash, reference.DigestValue);
  53. AssertEquals ("Load-#Transform", 0, reference.TransformChain.Count);
  54. }
  55. public void TestLoadBase64Transform ()
  56. {
  57. 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>";
  58. XmlDocument doc = new XmlDocument ();
  59. doc.LoadXml (value);
  60. reference.LoadXml (doc.DocumentElement);
  61. AssertEquals ("Load-Base64", value, (reference.GetXml().OuterXml));
  62. AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
  63. }
  64. public void TestLoadC14NTransform ()
  65. {
  66. 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>";
  67. XmlDocument doc = new XmlDocument ();
  68. doc.LoadXml (value);
  69. reference.LoadXml (doc.DocumentElement);
  70. AssertEquals ("Load-C14N", value, (reference.GetXml().OuterXml));
  71. AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
  72. }
  73. public void TestLoadC14NWithCommentsTransforms ()
  74. {
  75. 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>";
  76. XmlDocument doc = new XmlDocument ();
  77. doc.LoadXml (value);
  78. reference.LoadXml (doc.DocumentElement);
  79. AssertEquals ("Load-C14NWithComments", value, (reference.GetXml().OuterXml));
  80. AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
  81. }
  82. public void TestLoadEnvelopedSignatureTransforms ()
  83. {
  84. 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>";
  85. XmlDocument doc = new XmlDocument ();
  86. doc.LoadXml (value);
  87. reference.LoadXml (doc.DocumentElement);
  88. AssertEquals ("Load-Enveloped", value, (reference.GetXml().OuterXml));
  89. AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
  90. }
  91. public void TestLoadXPathTransforms ()
  92. {
  93. 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>";
  94. XmlDocument doc = new XmlDocument ();
  95. doc.LoadXml (value);
  96. reference.LoadXml (doc.DocumentElement);
  97. AssertEquals ("Load-XPath", value, (reference.GetXml().OuterXml));
  98. AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
  99. }
  100. public void TestLoadXsltTransforms ()
  101. {
  102. 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>";
  103. XmlDocument doc = new XmlDocument ();
  104. doc.LoadXml (value);
  105. try {
  106. reference.LoadXml (doc.DocumentElement);
  107. }
  108. catch (Exception e) {
  109. Fail (e.ToString ());
  110. }
  111. AssertEquals ("Load-Xslt", value, (reference.GetXml().OuterXml));
  112. AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count);
  113. }
  114. public void TestLoadAllTransforms ()
  115. {
  116. 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>";
  117. XmlDocument doc = new XmlDocument ();
  118. doc.LoadXml (value);
  119. reference.LoadXml (doc.DocumentElement);
  120. AssertEquals ("Load-Xml", value, (reference.GetXml().OuterXml));
  121. AssertEquals ("Load-#Transform", 6, reference.TransformChain.Count);
  122. }
  123. public void TestAllTransform ()
  124. {
  125. // adding an empty hash value
  126. byte[] hash = new byte [20];
  127. reference.DigestValue = hash;
  128. XmlElement xel = reference.GetXml ();
  129. // this is the minimal Reference (DisestValue)!
  130. AssertNotNull ("GetXml", xel);
  131. reference.AddTransform (new XmlDsigBase64Transform ());
  132. reference.AddTransform (new XmlDsigC14NTransform ());
  133. reference.AddTransform (new XmlDsigC14NWithCommentsTransform ());
  134. reference.AddTransform (new XmlDsigEnvelopedSignatureTransform ());
  135. reference.AddTransform (new XmlDsigXPathTransform ());
  136. reference.AddTransform (new XmlDsigXsltTransform ());
  137. 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>";
  138. AssertEquals("Get-Xml", value, (reference.GetXml().OuterXml));
  139. // however this value cannot be loaded as it's missing some transform (xslt) parameters
  140. // can we add them again ?
  141. reference.AddTransform (new XmlDsigBase64Transform ());
  142. reference.AddTransform (new XmlDsigC14NTransform ());
  143. reference.AddTransform (new XmlDsigC14NWithCommentsTransform ());
  144. reference.AddTransform (new XmlDsigEnvelopedSignatureTransform ());
  145. reference.AddTransform (new XmlDsigXPathTransform ());
  146. reference.AddTransform (new XmlDsigXsltTransform ());
  147. // seems so ;-)
  148. AssertEquals ("# Transforms", 12, reference.TransformChain.Count);
  149. }
  150. public void TestNull ()
  151. {
  152. // null DigestMethod -> "" DigestMethod !!!
  153. reference.DigestMethod = null;
  154. AssertNull ("DigestMethod null", reference.DigestMethod);
  155. }
  156. public void TestBadness ()
  157. {
  158. Reference reference = new Reference ();
  159. reference.Uri = "#MyObjectId";
  160. // not enough info
  161. try {
  162. XmlElement bad = reference.GetXml ();
  163. Fail ("Expected NullReferenceException but got none");
  164. }
  165. catch (NullReferenceException) {
  166. // this is expected
  167. }
  168. catch (Exception e) {
  169. Fail ("Expected NullReferenceException but got: " + e.ToString ());
  170. }
  171. // bad hash - there's no validation!
  172. reference.DigestMethod = "http://www.w3.org/2000/09/xmldsig#mono";
  173. }
  174. }
  175. }