diff --git a/src/System.Security.Cryptography.Xml/src/System.Security.Cryptography.Xml.csproj b/src/System.Security.Cryptography.Xml/src/System.Security.Cryptography.Xml.csproj index b44485bbe7a1..d17abed40b77 100644 --- a/src/System.Security.Cryptography.Xml/src/System.Security.Cryptography.Xml.csproj +++ b/src/System.Security.Cryptography.Xml/src/System.Security.Cryptography.Xml.csproj @@ -34,6 +34,7 @@ + diff --git a/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/CryptoHelpers.cs b/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/CryptoHelpers.cs index c53df46b88e1..9e54fe59ac26 100644 --- a/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/CryptoHelpers.cs +++ b/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/CryptoHelpers.cs @@ -53,8 +53,7 @@ public static object CreateFromName(string name) throw new NotImplementedException(name); //return new System.Security.Cryptography.HMACRIPEMD160(); case "http://www.w3.org/2000/09/xmldsig#dsa-sha1": - throw new NotImplementedException(name); - //return new DSASignatureDescription(); + return new DSASignatureDescription(); case "System.Security.Cryptography.DSASignatureDescription": throw new NotImplementedException(name); //return new DSASignatureDescription(); diff --git a/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/DSASignatureDescription.cs b/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/DSASignatureDescription.cs new file mode 100644 index 000000000000..8e90939cec71 --- /dev/null +++ b/src/System.Security.Cryptography.Xml/src/System/Security/Cryptography/Xml/DSASignatureDescription.cs @@ -0,0 +1,47 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace System.Security.Cryptography.Xml +{ + internal class DSASignatureDescription : SignatureDescription + { + const string HashAlgorithm = "SHA1"; + + public DSASignatureDescription() + { + KeyAlgorithm = typeof(System.Security.Cryptography.DSA).AssemblyQualifiedName; + FormatterAlgorithm = typeof(System.Security.Cryptography.DSASignatureFormatter).AssemblyQualifiedName; + DeformatterAlgorithm = typeof(System.Security.Cryptography.DSASignatureDeformatter).AssemblyQualifiedName; + DigestAlgorithm = "SHA1"; + } + + public sealed override AsymmetricSignatureDeformatter CreateDeformatter(AsymmetricAlgorithm key) + { + var item = (AsymmetricSignatureDeformatter)CryptoHelpers.CreateFromName(DeformatterAlgorithm); + item.SetKey(key); + item.SetHashAlgorithm(HashAlgorithm); + return item; + } + + public sealed override AsymmetricSignatureFormatter CreateFormatter(AsymmetricAlgorithm key) + { + var item = (AsymmetricSignatureFormatter)CryptoHelpers.CreateFromName(FormatterAlgorithm); + item.SetKey(key); + item.SetHashAlgorithm(HashAlgorithm); + return item; + } + + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA5350", Justification = "SHA1 needed for compat.")] + public sealed override HashAlgorithm CreateDigest() + { + return SHA1.Create(); + } + } +} diff --git a/src/System.Security.Cryptography.Xml/tests/DSAKeyValueTest.cs b/src/System.Security.Cryptography.Xml/tests/DSAKeyValueTest.cs index aa528c6ed0be..dc939859b3cb 100644 --- a/src/System.Security.Cryptography.Xml/tests/DSAKeyValueTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/DSAKeyValueTest.cs @@ -88,7 +88,7 @@ public void GetXml_SameDsa() } } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16779")] public void LoadXml() { const string pValue = "oDZlcdJA1Kf6UeNEIZqm4KDqA6zpX7CmEtAGWi9pgnBhWOUDVEfhswfsvTLR5BCbKfE6KoHvt5Hh8D1RcAko//iZkLZ+gds9y/5Oxape8tu3TUi1BnNPWu8ieXjMtdnpyudKFsCymssJked1rBeRePG23HTVwOV1DpopjRkjBEU="; @@ -110,6 +110,7 @@ public void LoadXml() Assert.Equal(Convert.ToBase64String(parameters.Q), qValue); Assert.Equal(Convert.ToBase64String(parameters.G), gValue); Assert.Equal(Convert.ToBase64String(parameters.Y), yValue); + Assert.NotNull(parameters.Seed); Assert.Equal(Convert.ToBase64String(parameters.Seed), seedValue); Assert.Equal(BitConverter.GetBytes(parameters.Counter)[0], Convert.FromBase64String(pgenCounterValue)[0]); } diff --git a/src/System.Security.Cryptography.Xml/tests/EncryptedXmlTest.cs b/src/System.Security.Cryptography.Xml/tests/EncryptedXmlTest.cs index 3019f2068ebb..f496c0e6b55c 100644 --- a/src/System.Security.Cryptography.Xml/tests/EncryptedXmlTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/EncryptedXmlTest.cs @@ -89,7 +89,7 @@ public void Sample2() } } - [Fact(Skip = "TODO: fix me")] + [Fact] public void Sample3() { AssertDecryption1("System.Security.Cryptography.Xml.Tests.EncryptedXmlSample3.xml"); @@ -224,7 +224,7 @@ public void GetDecryptionIV_EncryptedDataNull() Assert.Throws(() => ex.GetDecryptionIV(null, EncryptedXml.XmlEncAES128Url)); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void GetDecryptionIV_StringNull() { // Added EncryptionMethod and CipherData to avoid a CryptographicException diff --git a/src/System.Security.Cryptography.Xml/tests/KeyInfoTest.cs b/src/System.Security.Cryptography.Xml/tests/KeyInfoTest.cs index c6f867d28fb1..451c25e59498 100644 --- a/src/System.Security.Cryptography.Xml/tests/KeyInfoTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/KeyInfoTest.cs @@ -195,7 +195,7 @@ public void Complex() } } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16779")] public void ImportKeyNode() { string value = "Mono::

rjxsMU368YOCTQejWkiuO9e/vUVwkLtq1jKiU3TtJ53hBJqjFRuTa228vZe+BH2su9RPn/vYFWfQDv6zgBYe3eNdu4Afw+Ny0FatX6dl3E77Ra6Tsd3MmLXBiGSQ1mMNd5G2XQGpbt9zsGlUaexXekeMLxIufgfZLwYp67M+2WM=

tf0K9rMyvUrU4cIkwbCrDRhQAJk=S8Z+1pGCed00w6DtVcqZLKjfqlCJ7JsugEFIgSy/Vxtu9YGCMclV4ijGEbPo/jU8YOSMuD7E9M7UaopMRcmKQjoKZzoJjkgVFP48Ohxl1f08lERnButsxanx3+OstFwUGQ8XNaGg3KrIoZt1FUnfxN3RHHTvVhjzNSHxMGULGaU=LnrxxRGLYeV2XLtK3SYz8RQHlHFZYrtznDZyMotuRfO5uC5YODhSFyLXvb1qB3WeGtF4h3Eo4KzHgMgfN2ZMlffxFRhJgTtH3ctbL8lfQoDkjeiPPnYGhspdJxr0tyZmiy0gkjJG3vwHYrLnvZWx9Wm/unqiOlGBPNuxJ+hOeP8=9RhE5TycDtdEIXxS3HfxFyXYgpy81zY5lVjwD6E9JP37MWEi80BlX6ab1YPm6xYSEoqReMPP9RgGiW6DuACpgI7+8vgCr4i/7VhzModJAA56PwvTu6UMt9xxKU/fT672v8ucREkMWoc7lEeyHxW3N4RHWVgqDQKuGg7iJTUTiCs=Asw=
"; diff --git a/src/System.Security.Cryptography.Xml/tests/KeyInfoX509DataTest.cs b/src/System.Security.Cryptography.Xml/tests/KeyInfoX509DataTest.cs index 1faca476974b..c90490113f9c 100644 --- a/src/System.Security.Cryptography.Xml/tests/KeyInfoX509DataTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/KeyInfoX509DataTest.cs @@ -182,7 +182,7 @@ public void AddSubjectKeyId_String_Null() Assert.Throws< NullReferenceException>(() => data1.AddSubjectKeyId((string)null)); } - [Fact(Skip = "TODO: fix me")] + [Fact] public void AddSubjectKeyId_String_BadHexData() { KeyInfoX509Data data = new KeyInfoX509Data(); diff --git a/src/System.Security.Cryptography.Xml/tests/SignedInfoTest.cs b/src/System.Security.Cryptography.Xml/tests/SignedInfoTest.cs index e9224f736906..f2d64dab4066 100644 --- a/src/System.Security.Cryptography.Xml/tests/SignedInfoTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/SignedInfoTest.cs @@ -138,7 +138,7 @@ public void GetXmlWithoutSetProperty() Assert.Equal(result, el.OuterXml); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void GetXmlWithSetProperty() { XmlDocument doc = new XmlDocument(); diff --git a/src/System.Security.Cryptography.Xml/tests/SignedXmlTest.cs b/src/System.Security.Cryptography.Xml/tests/SignedXmlTest.cs index 27e4c978285d..aa2b46efd7e3 100644 --- a/src/System.Security.Cryptography.Xml/tests/SignedXmlTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/SignedXmlTest.cs @@ -164,7 +164,7 @@ public void SignatureMethodMismatch() Assert.Throws(() => signedXml.ComputeSignature()); } - [Fact(Skip = "TODO: fix me")] + [Fact] public void AsymmetricRSASignature() { SignedXml signedXml = MSDNSample(); @@ -188,7 +188,7 @@ public void AsymmetricRSASignature() Assert.Null(signedXml.SigningKeyName); Assert.Equal(SignedXml.XmlDsigRSASHA1Url, signedXml.SignatureMethod); - Assert.Equal(128, signedXml.SignatureValue.Length); + Assert.Equal(key.KeySize / 8, signedXml.SignatureValue.Length); Assert.Null(signedXml.SigningKeyName); // Get the XML representation of the signature. @@ -284,7 +284,7 @@ public void AsymmetricRSAMixedCaseAttributesVerifyWindows() Assert.True(v1.CheckSignature()); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16691")] public void AsymmetricDSASignature() { SignedXml signedXml = MSDNSample(); @@ -357,19 +357,6 @@ public void SymmetricHMACSHA1Signature() Assert.True(vrfy.CheckSignature(hmac), "HMACSHA1-Compute/Verify"); } - [Fact(Skip = "TODO: fix me")] - public void SymmetricMACTripleDESSignature() - { - SignedXml signedXml = MSDNSample(); - // Compute the signature. - byte[] secretkey = Encoding.Default.GetBytes("password"); - using (HMAC hmac = HMACSHA256.Create()) - { - hmac.Key = secretkey; - Assert.Throws(() => signedXml.ComputeSignature(hmac)); - } - } - // Using empty constructor // LAMESPEC: The two other constructors don't seems to apply in verifying signatures [Fact] @@ -396,7 +383,7 @@ public void AsymmetricRSAVerify() // Using empty constructor // LAMESPEC: The two other constructors don't seems to apply in verifying signatures - [Fact(Skip = "TODO: fix me")] + [Fact] public void AsymmetricDSAVerify() { string value = "/Vvq6sXEVbtZC8GwNtLQnGOy/VI=BYz/qRGjGsN1yMFPxWa3awUZm1y4I/IxOQroMxkOteRGgk1HIwhRYw==

iglVaZ+LsSL8Y0aDXmFMBwva3xHqIypr3l/LtqBH9ziV2Sh1M4JVasAiKqytWIWt/s/Uk8Ckf2tO2Ww1vsNi1NL+Kg9T7FE52sn380/rF0miwGkZeidzm74OWhykb3J+wCTXaIwOzAWI1yN7FoeoN7wzF12jjlSXAXeqPMlViqk=

u4sowiJMHilNRojtdmIuQY2YnB8=SdnN7d+wn1n+HH4Hr8MIryIRYgcXdbZ5TH7jAnuWc1koqRc1AZfcYAZ6RDf+orx6Lzn055FTFiN+1NHQfGUtXJCWW0zz0FVV1NJux7WRj8vGTldjJ5ef0oCenkpwDjcIxWsZgVobve4GPoyN1sAc1scnkJB59oupibklmF4y72A=XejzS8Z51yfl0zbYnxSYYbHqreSLjNCoGPB/KjM1TOyV5sMjz0StKtGrFWryTWc7EgvFY7kUth4e04VKf9HbK8z/FifHTXj8+Tszbjzw8GfInnBwLN+vJgbpnjtypmiI5Bm2nLiRbfkdAHP+OrKtr/EauM9GQfYuaxm3/Vj8B84=vGwGg9wqwwWP9xsoPoXu6kHArJtadiNKe9azBiUx5Ob883gd5wlKfEcGuKkBmBySGbgwxyOsIBovd9Kk48hF01ymfQzAAuHR0EdJECSsTsTTKVTLQNBU32O+PRbLYpv4E8kt6rNL83JLJCBYsqzn8J6fd2gtEyq6YOqiUSHgPE8=sQ==
This is some text
"; @@ -565,7 +552,7 @@ public void ComputeSignatureMissingReferencedObject() Assert.Throws(() => signedXml.ComputeSignature()); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void DataReferenceToNonDataObject() { XmlDocument doc = new XmlDocument(); @@ -638,7 +625,7 @@ string SignWithHMACSHA1(string input, byte[] key, Transform transform) return sw.ToString(); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void GetIdElement_Null() { SignedXml sign = new SignedXml(); @@ -646,7 +633,7 @@ public void GetIdElement_Null() Assert.Null(sign.GetIdElement(new XmlDocument(), null)); } - [Fact(Skip = "TODO: fix me")] + [Fact] public void DigestValue_CRLF() { XmlDocument doc = CreateSomeXml("\r\n"); @@ -658,8 +645,12 @@ public void DigestValue_CRLF() s.Position = 0; - HashAlgorithm hash = HashAlgorithm.Create("System.Security.Cryptography.SHA1CryptoServiceProvider"); - byte[] digest = hash.ComputeHash(s); + byte[] digest; + using (HashAlgorithm hash = SHA1.Create()) + { + digest = hash.ComputeHash(s); + } + Assert.Equal("IKbfdK2/DMfXyezCf5QggVCXfk8=", Convert.ToBase64String(digest)); X509Certificate2 cert = new X509Certificate2(_pkcs12, "mono"); @@ -699,7 +690,7 @@ public void DigestValue_CRLF() + "", signedXml.SignedInfo.GetXml().OuterXml); } - [Fact(Skip = "TODO: fix me")] + [Fact] public void DigestValue_LF() { XmlDocument doc = CreateSomeXml("\n"); @@ -711,8 +702,12 @@ public void DigestValue_LF() s.Position = 0; - HashAlgorithm hash = HashAlgorithm.Create("System.Security.Cryptography.SHA1CryptoServiceProvider"); - byte[] digest = hash.ComputeHash(s); + byte[] digest; + using (HashAlgorithm hash = SHA1.Create()) + { + digest = hash.ComputeHash(s); + } + Assert.Equal("e3dsi1xK8FAx1vsug7J203JbEAU=", Convert.ToBase64String(digest)); X509Certificate2 cert = new X509Certificate2(_pkcs12, "mono"); @@ -1360,7 +1355,7 @@ private void HmacMustBeMultipleOfEightBits(int bits) sign.CheckSignature(new HMACSHA1(Encoding.ASCII.GetBytes("secret"))); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void HmacMustBeMultipleOfEightBits() { for (int i = 1; i < 160; i++) @@ -1373,7 +1368,7 @@ public void HmacMustBeMultipleOfEightBits() } } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void VerifyHMAC_ZeroLength() { string xml = @" @@ -1401,7 +1396,7 @@ public void VerifyHMAC_ZeroLength() CheckErratum(sign, new HMACSHA1(Encoding.ASCII.GetBytes("secret")), "4"); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void VerifyHMAC_SmallerThanMinimumLength() { // 72 is a multiple of 8 but smaller than the minimum of 80 bits @@ -1410,7 +1405,7 @@ public void VerifyHMAC_SmallerThanMinimumLength() CheckErratum(sign, new HMACSHA1(Encoding.ASCII.GetBytes("secret")), "72"); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void VerifyHMAC_MinimumLength() { // 80 bits is the minimum (and the half-size of HMACSHA1) @@ -1419,7 +1414,7 @@ public void VerifyHMAC_MinimumLength() Assert.True(sign.CheckSignature(new HMACSHA1(Encoding.ASCII.GetBytes("secret")))); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void VerifyHMAC_SmallerHalfLength() { // 80bits is smaller than the half-size of HMACSHA256 @@ -1428,7 +1423,7 @@ public void VerifyHMAC_SmallerHalfLength() CheckErratum(sign, new HMACSHA256(Encoding.ASCII.GetBytes("secret")), "80"); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void VerifyHMAC_HalfLength() { // 128 is the half-size of HMACSHA256 @@ -1445,7 +1440,7 @@ public void VerifyHMAC_FullLength() Assert.True(sign.CheckSignature(new HMACSHA1(Encoding.ASCII.GetBytes("secret")))); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void VerifyHMAC_HMACOutputLength_Signature_Mismatch() { string xml = @" @@ -1469,7 +1464,7 @@ public void VerifyHMAC_HMACOutputLength_Signature_Mismatch() Assert.Throws(() => sign.CheckSignature(new HMACSHA1(Encoding.ASCII.GetBytes("no clue")))); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] public void VerifyHMAC_HMACOutputLength_Invalid() { string xml = @" diff --git a/src/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj b/src/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj index 3de190a9a7bb..d2a1ead69baa 100644 --- a/src/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj +++ b/src/System.Security.Cryptography.Xml/tests/System.Security.Cryptography.Xml.Tests.csproj @@ -43,9 +43,6 @@ - - - @@ -57,4 +54,4 @@ - + \ No newline at end of file diff --git a/src/System.Security.Cryptography.Xml/tests/TestHelpers.cs b/src/System.Security.Cryptography.Xml/tests/TestHelpers.cs index 0abffb415d63..11e04e72e725 100644 --- a/src/System.Security.Cryptography.Xml/tests/TestHelpers.cs +++ b/src/System.Security.Cryptography.Xml/tests/TestHelpers.cs @@ -2,41 +2,129 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System; using System.IO; +using System.Text; +using System.Xml; +using System.Xml.Resolvers; namespace System.Security.Cryptography.Xml.Tests { internal static class TestHelpers { - public static TempFile CreateTestDtdFile(string testName) + /// + /// Convert a to a using the given . + /// + /// + /// The to read from. This cannot be null. + /// + /// + /// The to use. This cannot be null. + /// + /// + /// The stream as a string. + /// + /// + /// No argument can be null. + /// + public static string StreamToString(Stream stream, Encoding encoding) { - if (testName == null) - throw new ArgumentNullException(nameof(testName)); + if (stream == null) + { + throw new ArgumentNullException(nameof(stream)); + } + if (encoding == null) + { + throw new ArgumentNullException(nameof(encoding)); + } - var file = new TempFile( - Path.Combine(Directory.GetCurrentDirectory(), testName + ".dtd") - ); - - File.WriteAllText(file.Path, ""); - - return file; + using (StreamReader streamReader = new StreamReader(stream, encoding)) + { + return streamReader.ReadToEnd(); + } } - public static TempFile CreateTestTextFile(string testName, string content) + /// + /// Perform + /// + /// + /// The XML to transform. This cannot be null, empty or whitespace. + /// + /// + /// The to perform on + /// . This cannot be null. + /// + /// + /// An optional to use when serializing or + /// deserializing . This should match the + /// encoding specified in . If omitted or + /// null, is used. + /// + /// + /// An optional to use. If omitted or null, + /// no resolver is used. + /// + /// + /// The transformed . + /// + /// + /// cannot be null. + /// + /// + /// cannot be null, empty or whitespace. + /// + /// + /// is not valid XML. + /// + public static string ExecuteTransform(string inputXml, Transform transform, Encoding encoding = null, XmlResolver resolver = null) { - if (testName == null) - throw new ArgumentNullException(nameof(testName)); + if (string.IsNullOrWhiteSpace(inputXml)) + { + throw new ArgumentException("Cannot be null, empty or whitespace", nameof(inputXml)); + } + if (transform == null) + { + throw new ArgumentNullException(nameof(Transform)); + } - if (content == null) - throw new ArgumentNullException(nameof(content)); + XmlDocument doc = new XmlDocument(); + doc.XmlResolver = resolver; + doc.PreserveWhitespace = true; + doc.LoadXml(inputXml); - var file = new TempFile( - Path.Combine(Directory.GetCurrentDirectory(), testName + ".txt") - ); + Encoding actualEncoding = encoding ?? Encoding.UTF8; + byte[] data = actualEncoding.GetBytes(inputXml); + using (Stream stream = new MemoryStream(data)) + using (XmlReader reader = XmlReader.Create(stream, new XmlReaderSettings { ValidationType = ValidationType.None, DtdProcessing = DtdProcessing.Parse, XmlResolver = resolver })) + { + doc.Load(reader); + transform.LoadInput(doc); + return StreamToString((Stream)transform.GetOutput(), actualEncoding); + } + } - File.WriteAllText(file.Path, content); + /// + /// Convert to a full URI for referencing + /// in an . + /// + /// + /// The file name. This cannot be null, empty or whitespace. + /// + /// + /// The created . + /// + /// + /// cannot be null, empty or whitespace. + /// + public static Uri ToUri(string fileName) + { + if (string.IsNullOrWhiteSpace(fileName)) + { + throw new ArgumentException("Cannot be null, empty or whitespace", nameof(fileName)); + } - return file; + string path = Path.Combine(Directory.GetCurrentDirectory(), fileName); + return new Uri("file://" + (path[0] == '/' ? path : '/' + path)); } } } diff --git a/src/System.Security.Cryptography.Xml/tests/XmlDsigC14NTransformTest.cs b/src/System.Security.Cryptography.Xml/tests/XmlDsigC14NTransformTest.cs index 52e2489c97de..5277ceb49cd5 100644 --- a/src/System.Security.Cryptography.Xml/tests/XmlDsigC14NTransformTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/XmlDsigC14NTransformTest.cs @@ -15,6 +15,7 @@ using System.IO; using System.Text; using System.Xml; +using System.Xml.Resolvers; using Xunit; namespace System.Security.Cryptography.Xml.Tests @@ -24,15 +25,6 @@ namespace System.Security.Cryptography.Xml.Tests // difficult to test properly. This class "open it up" :-) public class UnprotectedXmlDsigC14NTransform : XmlDsigC14NTransform { - public UnprotectedXmlDsigC14NTransform() - { - } - - public UnprotectedXmlDsigC14NTransform(bool includeComments) - : base(includeComments) - { - } - public XmlNodeList UnprotectedGetInnerXml() { return base.GetInnerXml(); @@ -41,85 +33,39 @@ public XmlNodeList UnprotectedGetInnerXml() public class XmlDsigC14NTransformTest { - - protected UnprotectedXmlDsigC14NTransform transform; - - public XmlDsigC14NTransformTest() - { - transform = new UnprotectedXmlDsigC14NTransform(); - } - - [Fact] // ctor () - public void Constructor1() + [Fact] + public void Constructor_Empty() { + XmlDsigC14NTransform transform = new XmlDsigC14NTransform(); Assert.Equal("http://www.w3.org/TR/2001/REC-xml-c14n-20010315", transform.Algorithm); CheckProperties(transform); } - [Fact] // ctor (Boolean) - public void Constructor2() + [Theory] + [InlineData(true, "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments")] + [InlineData(false, "http://www.w3.org/TR/2001/REC-xml-c14n-20010315")] + public void Constructor_Bool(bool includeComments, string expectedAlgorithm) { - transform = new UnprotectedXmlDsigC14NTransform(true); - Assert.Equal("http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments", transform.Algorithm); - CheckProperties(transform); - - transform = new UnprotectedXmlDsigC14NTransform(false); - Assert.Equal("http://www.w3.org/TR/2001/REC-xml-c14n-20010315", transform.Algorithm); + XmlDsigC14NTransform transform = new XmlDsigC14NTransform(includeComments); + Assert.Equal(expectedAlgorithm, transform.Algorithm); CheckProperties(transform); } - void CheckProperties(XmlDsigC14NTransform transform) + public void CheckProperties(XmlDsigC14NTransform transform) { - Type[] input = transform.InputTypes; - Assert.True((input.Length == 3), "Input #"); - // check presence of every supported input types - bool istream = false; - bool ixmldoc = false; - bool ixmlnl = false; - foreach (Type t in input) - { - if (t.ToString() == "System.IO.Stream") - istream = true; - if (t.ToString() == "System.Xml.XmlDocument") - ixmldoc = true; - if (t.ToString() == "System.Xml.XmlNodeList") - ixmlnl = true; - } - Assert.True(istream, "Input Stream"); - Assert.True(ixmldoc, "Input XmlDocument"); - Assert.True(ixmlnl, "Input XmlNodeList"); - - Type[] output = transform.OutputTypes; - Assert.True((output.Length == 1), "Output #"); - // check presence of every supported output types - bool ostream = false; - foreach (Type t in output) - { - if (t.ToString() == "System.IO.Stream") - ostream = true; - } - Assert.True(ostream, "Output Stream"); + Assert.Null(transform.Context); + Assert.Equal(new[] { typeof(Stream), typeof(XmlDocument), typeof(XmlNodeList) }, transform.InputTypes); + Assert.Equal(new[] { typeof(Stream) }, transform.OutputTypes); } [Fact] public void GetInnerXml() { + UnprotectedXmlDsigC14NTransform transform = new UnprotectedXmlDsigC14NTransform(); XmlNodeList xnl = transform.UnprotectedGetInnerXml(); Assert.Null(xnl); } - private string Stream2String(Stream s) - { - StringBuilder sb = new StringBuilder(); - int b = s.ReadByte(); - while (b != -1) - { - sb.Append(Convert.ToChar(b)); - b = s.ReadByte(); - } - return sb.ToString(); - } - static string xml = " \r\n text & "; // GOOD for Stream input static string c14xml2 = " \n text & "; @@ -139,55 +85,60 @@ private XmlDocument GetDoc() [Fact] public void LoadInputAsXmlDocument() { + XmlDsigC14NTransform transform = new XmlDsigC14NTransform(); XmlDocument doc = GetDoc(); transform.LoadInput(doc); Stream s = (Stream)transform.GetOutput(); - string output = Stream2String(s); + string output = TestHelpers.StreamToString(s, Encoding.UTF8); Assert.Equal(c14xml3, output); } - [Fact(Skip = "TODO: fix me")] + [Fact] // see LoadInputAsXmlNodeList2 description public void LoadInputAsXmlNodeList() { + XmlDsigC14NTransform transform = new XmlDsigC14NTransform(); XmlDocument doc = GetDoc(); // Argument list just contains element Test. transform.LoadInput(doc.ChildNodes); Stream s = (Stream)transform.GetOutput(); - string output = Stream2String(s); - Assert.Equal("", output); + string output = TestHelpers.StreamToString(s, Encoding.UTF8); + Assert.Equal(@"", output); } - [Fact(Skip = "TODO: fix me")] + [Fact] // MS has a bug that those namespace declaration nodes in // the node-set are written to output. Related spec section is: // http://www.w3.org/TR/2001/REC-xml-c14n-20010315#ProcessingModel public void LoadInputAsXmlNodeList2() { + XmlDsigC14NTransform transform = new XmlDsigC14NTransform(); XmlDocument doc = GetDoc(); transform.LoadInput(doc.SelectNodes("//*")); Stream s = (Stream)transform.GetOutput(); - string output = Stream2String(s); - string expected = @""; + string output = TestHelpers.StreamToString(s, Encoding.UTF8); + string expected = @""; Assert.Equal(expected, output); } [Fact] public void LoadInputAsStream() { + XmlDsigC14NTransform transform = new XmlDsigC14NTransform(); MemoryStream ms = new MemoryStream(); byte[] x = Encoding.ASCII.GetBytes(xml); ms.Write(x, 0, x.Length); ms.Position = 0; transform.LoadInput(ms); Stream s = (Stream)transform.GetOutput(); - string output = Stream2String(s); + string output = TestHelpers.StreamToString(s, Encoding.UTF8); Assert.Equal(c14xml2, output); } [Fact] public void LoadInputWithUnsupportedType() { + XmlDsigC14NTransform transform = new XmlDsigC14NTransform(); byte[] bad = { 0xBA, 0xD }; Assert.Throws(() => transform.LoadInput(bad)); } @@ -195,6 +146,7 @@ public void LoadInputWithUnsupportedType() [Fact] public void UnsupportedOutput() { + XmlDsigC14NTransform transform = new XmlDsigC14NTransform(); XmlDocument doc = new XmlDocument(); Assert.Throws(() => transform.GetOutput(doc.GetType())); } @@ -202,72 +154,36 @@ public void UnsupportedOutput() [Fact] public void C14NSpecExample1() { - using (TestHelpers.CreateTestDtdFile(GetType().Name + "." + nameof(C14NSpecExample1))) - { - string res = ExecuteXmlDSigC14NTransform(C14NSpecExample1Input); - Assert.Equal(C14NSpecExample1Output, res); - } + XmlPreloadedResolver resolver = new XmlPreloadedResolver(); + resolver.Add(new Uri("doc.xsl", UriKind.Relative), ""); + string result = TestHelpers.ExecuteTransform(C14NSpecExample1Input, new XmlDsigC14NTransform()); + Assert.Equal(C14NSpecExample1Output, result); } - [Fact] - public void C14NSpecExample2() - { - string res = ExecuteXmlDSigC14NTransform(C14NSpecExample2Input); - Assert.Equal(C14NSpecExample2Output, res); - } - - [Fact] - public void C14NSpecExample3() + [Theory] + [InlineData(C14NSpecExample2Input, C14NSpecExample2Output)] + [InlineData(C14NSpecExample3Input, C14NSpecExample3Output)] + [InlineData(C14NSpecExample4Input, C14NSpecExample4Output)] + public void C14NSpecExample(string input, string expectedOutput) { - string res = ExecuteXmlDSigC14NTransform(C14NSpecExample3Input); - Assert.Equal(C14NSpecExample3Output, res); + string result = TestHelpers.ExecuteTransform(input, new XmlDsigC14NTransform()); + Assert.Equal(expectedOutput, result); } [Fact] - // [Ignore ("This test should be fine, but it does not pass under MS.NET")] - public void C14NSpecExample4() - { - string res = ExecuteXmlDSigC14NTransform(C14NSpecExample4Input); - Assert.Equal(C14NSpecExample4Output, res); - } - - [Fact(Skip = "TODO: fix me")] public void C14NSpecExample5() { - string testName = GetType().Name + "." + nameof(C14NSpecExample5); - using (TestHelpers.CreateTestTextFile(testName, "world")) - { - string res = ExecuteXmlDSigC14NTransform(C14NSpecExample5Input(testName)); - Assert.Equal(C14NSpecExample5Output, res); - } + XmlPreloadedResolver resolver = new XmlPreloadedResolver(); + resolver.Add(TestHelpers.ToUri("doc.txt"), "world"); + string result = TestHelpers.ExecuteTransform(C14NSpecExample5Input, new XmlDsigC14NTransform(), Encoding.UTF8, resolver); + Assert.Equal(C14NSpecExample5Output, result); } [Fact] public void C14NSpecExample6() { - string res = ExecuteXmlDSigC14NTransform(C14NSpecExample6Input); - Assert.Equal(C14NSpecExample6Output, res); - } - - private string ExecuteXmlDSigC14NTransform(string InputXml) - { - XmlDocument doc = new XmlDocument(); - doc.PreserveWhitespace = true; - doc.LoadXml(InputXml); - - // Testing default attribute support with - // vreader.ValidationType = ValidationType.None. - // - UTF8Encoding utf8 = new UTF8Encoding(); - byte[] data = utf8.GetBytes(InputXml.ToString()); - Stream stream = new MemoryStream(data); - using (XmlReader reader = XmlReader.Create(stream, new XmlReaderSettings { ValidationType = ValidationType.None, DtdProcessing = DtdProcessing.Parse })) - { - doc.Load(reader); - - transform.LoadInput(doc); - return Stream2String((Stream)transform.GetOutput()); - } + string result = TestHelpers.ExecuteTransform(C14NSpecExample6Input, new XmlDsigC14NTransform(), Encoding.GetEncoding("ISO-8859-1")); + Assert.Equal(C14NSpecExample6Output, result); } // @@ -283,7 +199,6 @@ private string ExecuteXmlDSigC14NTransform(string InputXml) "\n" + "\n" + - // "\n" + "\n" + "Hello, world!\n" + "\n" + @@ -300,7 +215,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml) // Example 2 from C14N spec - Whitespace in Document Content: // http://www.w3.org/TR/xml-c14n#Example-WhitespaceInContent // - static string C14NSpecExample2Input = + const string C14NSpecExample2Input = "\n" + " \n" + " A B \n" + @@ -312,7 +227,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml) " C\n" + " \n" + "\n"; - static string C14NSpecExample2Output = + const string C14NSpecExample2Output = "\n" + " \n" + " A B \n" + @@ -329,7 +244,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml) // Example 3 from C14N spec - Start and End Tags: // http://www.w3.org/TR/xml-c14n#Example-SETags // - static string C14NSpecExample3Input = + const string C14NSpecExample3Input = "]>\n" + "\n" + " \n" + @@ -348,7 +263,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml) " \n" + " \n" + "\n"; - static string C14NSpecExample3Output = + const string C14NSpecExample3Output = "\n" + " \n" + " \n" + @@ -376,7 +291,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml) // should be normalized by XML parser. Currently Mono // does not support this (see comment after this example // in the spec). - static string C14NSpecExample4Input = + const string C14NSpecExample4Input = "]>\n" + "\n" + " First line Second line\n" + @@ -386,7 +301,7 @@ private string ExecuteXmlDSigC14NTransform(string InputXml) " \n" + // " \n" + "\n"; - static string C14NSpecExample4Output = + const string C14NSpecExample4Output = "\n" + " First line \n" + "Second line\n" + @@ -401,11 +316,11 @@ private string ExecuteXmlDSigC14NTransform(string InputXml) // Example 5 from C14N spec - Entity References: // http://www.w3.org/TR/xml-c14n#Example-Entities // - static string C14NSpecExample5Input(string worldName) => + static string C14NSpecExample5Input => "\n" + "\n" + - $"\n" + + $"\n" + "\n" + "\n" + "]>\n" + @@ -447,17 +362,18 @@ public void SimpleNamespacePrefixes() [Fact] public void OrdinalSortForAttributes() { + XmlDsigC14NTransform transform = new XmlDsigC14NTransform(); XmlDocument doc = new XmlDocument(); string xml = ""; doc.LoadXml(xml); transform.LoadInput(doc); Stream s = (Stream)transform.GetOutput(); - string output = Stream2String(s); + string output = TestHelpers.StreamToString(s, Encoding.UTF8); Assert.Equal(xml, output); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16780")] public void PrefixlessNamespaceOutput() { XmlDocument doc = new XmlDocument(); @@ -471,7 +387,7 @@ public void PrefixlessNamespaceOutput() Assert.Equal("urn:foo", doc.DocumentElement.GetAttribute("xmlns")); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16798")] public void PropagatedNamespaces() { XmlDocument doc = new XmlDocument(); @@ -481,12 +397,15 @@ public void PropagatedNamespaces() XmlDsigExcC14NTransform t = new XmlDsigExcC14NTransform(); t.LoadInput(doc); t.PropagatedNamespaces.Add("f", "urn:foo"); - t.PropagatedNamespaces.Add("f", "urn:foo"); - t.PropagatedNamespaces.Add("f", "urn:foo"); t.PropagatedNamespaces.Add("b", "urn:bar"); - Stream s = t.GetOutput() as Stream; - Assert.Equal(new StreamReader(s, Encoding.UTF8).ReadToEnd(), ""); - Assert.Equal("urn:foo", doc.DocumentElement.GetAttribute("xmlns:f")); + using (Stream s = t.GetOutput() as Stream) + using (StreamReader streamReader = new StreamReader(s, Encoding.UTF8)) + { + string result = streamReader.ReadToEnd(); + Assert.Equal(result, + ""); + Assert.Equal("urn:foo", doc.DocumentElement.NamespaceURI); + } } [Fact] diff --git a/src/System.Security.Cryptography.Xml/tests/XmlDsigC14NWithCommentsTransformTest.cs b/src/System.Security.Cryptography.Xml/tests/XmlDsigC14NWithCommentsTransformTest.cs index bc3be94dae9b..f0b0257ae6f2 100644 --- a/src/System.Security.Cryptography.Xml/tests/XmlDsigC14NWithCommentsTransformTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/XmlDsigC14NWithCommentsTransformTest.cs @@ -14,6 +14,7 @@ using System.IO; using System.Text; using System.Xml; +using System.Xml.Resolvers; using Xunit; namespace System.Security.Cryptography.Xml.Tests @@ -70,23 +71,10 @@ public void GetOutput_UnsupportedType(Type type) [Fact] public void C14NSpecExample1() { - string testName = GetType().Name + "." + nameof(C14NSpecExample1); - using (TestHelpers.CreateTestDtdFile(testName)) - { - string res = ExecuteXmlDSigC14NTransform(C14NSpecExample1Input(testName), Encoding.UTF8, new XmlUrlResolver()); - Assert.Equal(C14NSpecExample1Output, res); - } - } - - [Fact] - public void C14NSpecExample1_WithoutResolver() - { - string testName = GetType().Name + "." + nameof(C14NSpecExample1_WithoutResolver); - using (TestHelpers.CreateTestDtdFile(testName)) - { - string res = ExecuteXmlDSigC14NTransform(C14NSpecExample1Input(testName)); - Assert.Equal(C14NSpecExample1Output, res); - } + XmlPreloadedResolver resolver = new XmlPreloadedResolver(); + resolver.Add(TestHelpers.ToUri("world.dtd"), ""); + string res = TestHelpers.ExecuteTransform(C14NSpecExample1Input, new XmlDsigC14NWithCommentsTransform(), Encoding.UTF8, resolver); + Assert.Equal(C14NSpecExample1Output, res); } [Theory] @@ -101,13 +89,12 @@ public void C14NSpecExample(string input, string expectedOutput) [Fact] public void C14NSpecExample5() { - string testName = GetType().Name + "." + nameof(C14NSpecExample5); - using (TestHelpers.CreateTestTextFile(testName, "world")) - { - string result = ExecuteXmlDSigC14NTransform(C14NSpecExample5Input(testName), Encoding.UTF8, new XmlUrlResolver()); - string expectedResult = C14NSpecExample5Output(testName); - Assert.Equal(expectedResult, result); - } + XmlPreloadedResolver resolver = new XmlPreloadedResolver(); + resolver.Add(TestHelpers.ToUri("doc.txt"), "world"); + string input = C14NSpecExample5Input; + string result = ExecuteXmlDSigC14NTransform(input, Encoding.UTF8, resolver); + string expectedResult = C14NSpecExample5Output; + Assert.Equal(expectedResult, result); } [Fact] @@ -132,15 +119,7 @@ private string ExecuteXmlDSigC14NTransform(string inputXml, Encoding encoding = doc.Load(reader); XmlDsigC14NWithCommentsTransform transform = new XmlDsigC14NWithCommentsTransform(); transform.LoadInput(doc); - return Stream2String((Stream) transform.GetOutput(), actualEncoding); - } - } - - private string Stream2String(Stream stream, Encoding encoding) - { - using (StreamReader streamReader = new StreamReader(stream, encoding)) - { - return streamReader.ReadToEnd(); + return TestHelpers.StreamToString((Stream) transform.GetOutput(), actualEncoding); } } @@ -148,13 +127,13 @@ private string Stream2String(Stream stream, Encoding encoding) // Example 1 from C14N spec - PIs, Comments, and Outside of Document Element: // http://www.w3.org/TR/xml-c14n#Example-OutsideDoc // - static string C14NSpecExample1Input(string testName) => + static string C14NSpecExample1Input => "\n" + "\n" + "\n" + "\n" + - $"\n" + + "\n" + "\n" + "Hello, world!\n" + "\n" + @@ -274,11 +253,11 @@ static string C14NSpecExample1Input(string testName) => // Example 5 from C14N spec - Entity References: // http://www.w3.org/TR/xml-c14n#Example-Entities // - static string C14NSpecExample5Input(string worldName) => + static string C14NSpecExample5Input => "\n" + "\n" + - $"\n" + + $"\n" + "\n" + "\n" + "]>\n" + @@ -286,12 +265,12 @@ static string C14NSpecExample5Input(string worldName) => " &ent1;, &ent2;!\n" + "\n" + "\n" + - $"\n"; - static string C14NSpecExample5Output(string worldName) => + $"\n"; + static string C14NSpecExample5Output => "\n" + " Hello, world!\n" + "\n" + - $""; + $""; // // Example 6 from C14N spec - UTF-8 Encoding: diff --git a/src/System.Security.Cryptography.Xml/tests/XmlDsigExcC14NTransformTest.cs b/src/System.Security.Cryptography.Xml/tests/XmlDsigExcC14NTransformTest.cs index 68a423af1e4f..c803d6c390e4 100644 --- a/src/System.Security.Cryptography.Xml/tests/XmlDsigExcC14NTransformTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/XmlDsigExcC14NTransformTest.cs @@ -19,6 +19,7 @@ using System.IO; using System.Text; using System.Xml; +using System.Xml.Resolvers; using Xunit; namespace System.Security.Cryptography.Xml.Tests @@ -236,7 +237,7 @@ public void LoadInputAsXmlDocument() Assert.Equal(c14xml3, output); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] // see LoadInputAsXmlNodeList2 description public void LoadInputAsXmlNodeList() { @@ -248,7 +249,7 @@ public void LoadInputAsXmlNodeList() Assert.Equal("", output); } - [Fact(Skip = "TODO: fix me")] + [Fact(Skip = "https://github.com/dotnet/corefx/issues/16685")] // MS has a bug that those namespace declaration nodes in // the node-set are written to output. Related spec section is: // http://www.w3.org/TR/2001/REC-xml-c14n-20010315#ProcessingModel @@ -275,11 +276,11 @@ public void LoadInputAsStream() Assert.Equal(c14xml2, output); } - [Fact(Skip = "TODO: fix me")] + [Fact] public void LoadInputWithUnsupportedType() { byte[] bad = { 0xBA, 0xD }; - transform.LoadInput(bad); + Assert.Throws(() => transform.LoadInput(bad)); } [Fact] @@ -292,12 +293,10 @@ public void UnsupportedOutput() [Fact] public void ExcC14NSpecExample1() { - string testName = GetType().Name + "." + nameof(ExcC14NSpecExample1); - using (TestHelpers.CreateTestDtdFile(testName)) - { - string res = ExecuteXmlDSigExcC14NTransform(ExcC14NSpecExample1Input); - Assert.Equal(ExcC14NSpecExample1Output, res); - } + XmlPreloadedResolver resolver = new XmlPreloadedResolver(); + resolver.Add(TestHelpers.ToUri("doc.dtd"), ""); + string res = ExecuteXmlDSigExcC14NTransform(ExcC14NSpecExample1Input); + Assert.Equal(ExcC14NSpecExample1Output, res); } [Fact] @@ -322,15 +321,14 @@ public void ExcC14NSpecExample4() Assert.Equal(ExcC14NSpecExample4Output, res); } - [Fact(Skip = "TODO: fix me")] + [Fact] public void ExcC14NSpecExample5() { - string testName = GetType().Name + "." + nameof(ExcC14NSpecExample5); - using (TestHelpers.CreateTestTextFile(testName, "world")) - { - string res = ExecuteXmlDSigExcC14NTransform(ExcC14NSpecExample5Input(testName)); - Assert.Equal(ExcC14NSpecExample5Output, res); - } + XmlPreloadedResolver resolver = new XmlPreloadedResolver(); + resolver.Add(TestHelpers.ToUri("doc.txt"), "world"); + string input = ExcC14NSpecExample5Input; + string res = ExecuteXmlDSigExcC14NTransform(input, resolver); + Assert.Equal(ExcC14NSpecExample5Output, res); } [Fact] @@ -340,9 +338,10 @@ public void ExcC14NSpecExample6() Assert.Equal(ExcC14NSpecExample6Output, res); } - private string ExecuteXmlDSigExcC14NTransform(string InputXml) + private string ExecuteXmlDSigExcC14NTransform(string InputXml, XmlResolver resolver = null) { XmlDocument doc = new XmlDocument(); + doc.XmlResolver = resolver; doc.PreserveWhitespace = true; doc.LoadXml(InputXml); @@ -352,7 +351,13 @@ private string ExecuteXmlDSigExcC14NTransform(string InputXml) UTF8Encoding utf8 = new UTF8Encoding(); byte[] data = utf8.GetBytes(InputXml.ToString()); Stream stream = new MemoryStream(data); - using (XmlReader reader = XmlReader.Create(stream, new XmlReaderSettings {ValidationType = ValidationType.None, DtdProcessing = DtdProcessing.Parse })) + var settings = new XmlReaderSettings + { + ValidationType = ValidationType.None, + DtdProcessing = DtdProcessing.Parse, + XmlResolver = resolver + }; + using (XmlReader reader = XmlReader.Create(stream, settings)) { doc.Load(reader); transform.LoadInput(doc); @@ -373,7 +378,7 @@ private string ExecuteXmlDSigExcC14NTransform(string InputXml) "\n" + "\n" + - // "\n" + + "\n" + "\n" + "Hello, world!\n" + "\n" + @@ -491,11 +496,11 @@ private string ExecuteXmlDSigExcC14NTransform(string InputXml) // Example 5 from ExcC14N spec - Entity References: // http://www.w3.org/TR/xml-c14n#Example-Entities // - static string ExcC14NSpecExample5Input(string worldName) => + static string ExcC14NSpecExample5Input => "\n" + "\n" + - $"\n" + + $"\n" + "\n" + "\n" + "]>\n" + @@ -503,7 +508,7 @@ static string ExcC14NSpecExample5Input(string worldName) => " &ent1;, &ent2;!\n" + "\n" + "\n" + - $"\n"; + $"\n"; static string ExcC14NSpecExample5Output = "\n" + " Hello, world!\n" + diff --git a/src/System.Security.Cryptography.Xml/tests/XmlDsigExcC14NWithCommentsTransformTest.cs b/src/System.Security.Cryptography.Xml/tests/XmlDsigExcC14NWithCommentsTransformTest.cs index 5b6b13296296..5454d6fcd920 100644 --- a/src/System.Security.Cryptography.Xml/tests/XmlDsigExcC14NWithCommentsTransformTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/XmlDsigExcC14NWithCommentsTransformTest.cs @@ -99,7 +99,7 @@ void CheckProperties(XmlDsigExcC14NWithCommentsTransform transform) Assert.Equal(typeof(Stream), output[0]); } - [Fact(Skip = "TODO: fix me")] + [Fact] public void InputTypes() { Type[] input = transform.InputTypes; @@ -107,7 +107,7 @@ public void InputTypes() input[1] = null; input[2] = null; // property does not return a clone - Assert.All(transform.InputTypes, Assert.NotNull); + Assert.All(transform.InputTypes, Assert.Null); // it's not a static array transform = new UnprotectedXmlDsigExcC14NWithCommentsTransform(); diff --git a/src/System.Security.Cryptography.Xml/tests/XmlDsigXsltTransformTest.cs b/src/System.Security.Cryptography.Xml/tests/XmlDsigXsltTransformTest.cs index 806f21364563..702f3d6e78ae 100644 --- a/src/System.Security.Cryptography.Xml/tests/XmlDsigXsltTransformTest.cs +++ b/src/System.Security.Cryptography.Xml/tests/XmlDsigXsltTransformTest.cs @@ -169,7 +169,7 @@ public void InvalidXslt() } } - [Fact(Skip = "TODO: fix me")] + [Fact] public void OnlyInner() { string test = ""; @@ -182,8 +182,7 @@ public void OnlyInner() doc.LoadXml(test); transform.LoadInnerXml(doc.ChildNodes); - Stream s = (Stream)transform.GetOutput(); - Assert.Throws(() => Stream2Array(s)); + Assert.Throws(() => transform.GetOutput()); } private XmlDocument GetXslDoc()