// // ReferenceTest.cs - NUnit Test Cases for Reference // // Author: // Sebastien Pouliot (spouliot@motus.com) // // (C) 2002 Motus Technologies Inc. (http://www.motus.com) // using NUnit.Framework; using System; using System.Security.Cryptography; using System.Security.Cryptography.Xml; using System.Xml; namespace MonoTests.System.Security.Cryptography.Xml { public class ReferenceTest : TestCase { public ReferenceTest () : base ("System.Security.Cryptography.Xml.Reference testsuite") {} public ReferenceTest (string name) : base (name) {} private Reference reference; protected override void SetUp () { reference = new Reference (); } protected override void TearDown () {} public static ITest Suite { get { return new TestSuite (typeof (ReferenceTest)); } } public void TestProperties () { AssertNull ("Uri (null)", reference.Uri); AssertNotNull ("TransformChain", reference.TransformChain); AssertEquals ("ToString()", "System.Security.Cryptography.Xml.Reference", reference.ToString ()); // test uri constructor string uri = "uri"; reference = new Reference (uri); AssertEquals ("DigestMethod", "http://www.w3.org/2000/09/xmldsig#sha1", reference.DigestMethod); AssertNull ("DigestValue", reference.DigestValue); AssertNull ("Id", reference.Id); AssertNull ("Type", reference.Type); AssertEquals ("Uri", uri, reference.Uri); } public void TestLoadNoTransform () { string value = "/Vvq6sXEVbtZC8GwNtLQnGOy/VI="; XmlDocument doc = new XmlDocument (); doc.LoadXml (value); reference.LoadXml (doc.DocumentElement); AssertEquals ("Load-Xml", value, (reference.GetXml().OuterXml)); AssertEquals ("Load-URI", "#MyObjectId", reference.Uri); byte[] hash = { 0xFD, 0x5B, 0xEA, 0xEA, 0xC5, 0xC4, 0x55, 0xBB, 0x59, 0x0B, 0xC1, 0xB0, 0x36, 0xD2, 0xD0, 0x9C, 0x63, 0xB2, 0xFD, 0x52 }; AllTests.AssertEquals("Load-Digest", hash, reference.DigestValue); AssertEquals ("Load-#Transform", 0, reference.TransformChain.Count); } public void TestLoadBase64Transform () { string value = "AAAAAAAAAAAAAAAAAAAAAAAAAAA="; XmlDocument doc = new XmlDocument (); doc.LoadXml (value); reference.LoadXml (doc.DocumentElement); AssertEquals ("Load-Base64", value, (reference.GetXml().OuterXml)); AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count); } public void TestLoadC14NTransform () { string value = "AAAAAAAAAAAAAAAAAAAAAAAAAAA="; XmlDocument doc = new XmlDocument (); doc.LoadXml (value); reference.LoadXml (doc.DocumentElement); AssertEquals ("Load-C14N", value, (reference.GetXml().OuterXml)); AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count); } public void TestLoadC14NWithCommentsTransforms () { string value = "AAAAAAAAAAAAAAAAAAAAAAAAAAA="; XmlDocument doc = new XmlDocument (); doc.LoadXml (value); reference.LoadXml (doc.DocumentElement); AssertEquals ("Load-C14NWithComments", value, (reference.GetXml().OuterXml)); AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count); } public void TestLoadEnvelopedSignatureTransforms () { string value = "AAAAAAAAAAAAAAAAAAAAAAAAAAA="; XmlDocument doc = new XmlDocument (); doc.LoadXml (value); reference.LoadXml (doc.DocumentElement); AssertEquals ("Load-Enveloped", value, (reference.GetXml().OuterXml)); AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count); } public void TestLoadXPathTransforms () { string value = "AAAAAAAAAAAAAAAAAAAAAAAAAAA="; XmlDocument doc = new XmlDocument (); doc.LoadXml (value); reference.LoadXml (doc.DocumentElement); AssertEquals ("Load-XPath", value, (reference.GetXml().OuterXml)); AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count); } public void TestLoadXsltTransforms () { string value = "AAAAAAAAAAAAAAAAAAAAAAAAAAA="; XmlDocument doc = new XmlDocument (); doc.LoadXml (value); try { reference.LoadXml (doc.DocumentElement); } catch (Exception e) { Fail (e.ToString ()); } AssertEquals ("Load-Xslt", value, (reference.GetXml().OuterXml)); AssertEquals ("Load-#Transform", 1, reference.TransformChain.Count); } public void TestLoadAllTransforms () { string value = "AAAAAAAAAAAAAAAAAAAAAAAAAAA="; XmlDocument doc = new XmlDocument (); doc.LoadXml (value); reference.LoadXml (doc.DocumentElement); AssertEquals ("Load-Xml", value, (reference.GetXml().OuterXml)); AssertEquals ("Load-#Transform", 6, reference.TransformChain.Count); } public void TestAllTransform () { // adding an empty hash value byte[] hash = new byte [20]; reference.DigestValue = hash; XmlElement xel = reference.GetXml (); // this is the minimal Reference (DisestValue)! AssertNotNull ("GetXml", xel); reference.AddTransform (new XmlDsigBase64Transform ()); reference.AddTransform (new XmlDsigC14NTransform ()); reference.AddTransform (new XmlDsigC14NWithCommentsTransform ()); reference.AddTransform (new XmlDsigEnvelopedSignatureTransform ()); reference.AddTransform (new XmlDsigXPathTransform ()); reference.AddTransform (new XmlDsigXsltTransform ()); string value = "AAAAAAAAAAAAAAAAAAAAAAAAAAA="; AssertEquals("Get-Xml", value, (reference.GetXml().OuterXml)); // however this value cannot be loaded as it's missing some transform (xslt) parameters // can we add them again ? reference.AddTransform (new XmlDsigBase64Transform ()); reference.AddTransform (new XmlDsigC14NTransform ()); reference.AddTransform (new XmlDsigC14NWithCommentsTransform ()); reference.AddTransform (new XmlDsigEnvelopedSignatureTransform ()); reference.AddTransform (new XmlDsigXPathTransform ()); reference.AddTransform (new XmlDsigXsltTransform ()); // seems so ;-) AssertEquals ("# Transforms", 12, reference.TransformChain.Count); } public void TestNull () { // null DigestMethod -> "" DigestMethod !!! reference.DigestMethod = null; AssertNull ("DigestMethod null", reference.DigestMethod); } public void TestBadness () { Reference reference = new Reference (); reference.Uri = "#MyObjectId"; // not enough info try { XmlElement bad = reference.GetXml (); Fail ("Expected NullReferenceException but got none"); } catch (NullReferenceException) { // this is expected } catch (Exception e) { Fail ("Expected NullReferenceException but got: " + e.ToString ()); } // bad hash - there's no validation! reference.DigestMethod = "http://www.w3.org/2000/09/xmldsig#mono"; } } }