public static void Main(String[] args)
    {
        //calculate caninicalized xml

        var         t   = new XmlDsigEnvelopedSignatureTransform(false);
        XmlDocument doc = new XmlDocument();

        //doc.PreserveWhitespace = true;
        doc.Load(@"c:\temp\x.xml");
        t.LoadInput(doc);


        FieldInfo field = t.GetType().GetField("_signaturePosition",
                                               BindingFlags.NonPublic |
                                               BindingFlags.Instance);


        field.SetValue(t, 1);

        var res = (XmlDocument)t.GetOutput();
        var s   = res.OuterXml;

        var c14 = new XmlDsigC14NTransform();

        c14.LoadInput(res);
        var mem = (MemoryStream)c14.GetOutput();

        var sha = new SHA256Managed();

        var byte1   = c14.GetDigestedOutput(new SHA256Managed());
        var digest1 = Convert.ToBase64String(byte1);
        var byte2   = sha.ComputeHash(mem.ToArray());
        var digest2 = Convert.ToBase64String(byte2);


        var s1      = System.Text.Encoding.UTF8.GetString(mem.ToArray());
        var byte3   = sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(s1));
        var digest3 = Convert.ToBase64String(byte3);

        //return;



        //validate signature

        CryptoConfig.AddAlgorithm(typeof(RSAPKCS1SHA256SignatureDescription), "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");
        XmlDocument xmlDoc = new XmlDocument();

        xmlDoc.Load(@"c:\temp\x.xml");
        XmlNode          node    = xmlDoc.DocumentElement;
        X509Certificate2 cert    = new X509Certificate2(File.ReadAllBytes(@"c:\temp\x.cer"));
        bool             isValid = ValidateXml(xmlDoc, cert);
        //return;


        //calc hash
        var sha1 = new SHA256Managed();
        var b1   = sha1.ComputeHash(System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(@"c:\temp\x_no_sig.xml")));
        var b64  = Convert.ToBase64String(b1);
    }
    public static void Main(String[] args)
    {
        //calculate caninicalized xml

        var t = new XmlDsigEnvelopedSignatureTransform(false);
        XmlDocument doc = new XmlDocument();
        //doc.PreserveWhitespace = true;
        doc.Load(@"c:\temp\x.xml");
        t.LoadInput(doc);

        FieldInfo field = t.GetType().GetField("_signaturePosition",
                         BindingFlags.NonPublic |
                         BindingFlags.Instance);

        field.SetValue(t, 1);

        var res = (XmlDocument)t.GetOutput();
        var s = res.OuterXml;

        var c14 = new XmlDsigC14NTransform();
        c14.LoadInput(res);
        var mem = (MemoryStream)c14.GetOutput();

        var sha = new SHA256Managed();

        var byte1 = c14.GetDigestedOutput(new SHA256Managed());
        var digest1 = Convert.ToBase64String(byte1);
        var byte2 = sha.ComputeHash(mem.ToArray());
        var digest2 = Convert.ToBase64String(byte2);

        var s1 = System.Text.Encoding.UTF8.GetString(mem.ToArray());
        var byte3 = sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(s1));
        var digest3 = Convert.ToBase64String(byte3);

        //return;

        //validate signature

        CryptoConfig.AddAlgorithm(typeof(RSAPKCS1SHA256SignatureDescription), "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(@"c:\temp\x.xml");
        XmlNode node = xmlDoc.DocumentElement;
        X509Certificate2 cert = new X509Certificate2(File.ReadAllBytes(@"c:\temp\x.cer"));
        bool isValid = ValidateXml(xmlDoc, cert);
        //return;

        //calc hash
        var sha1 = new SHA256Managed();
        var b1 = sha1.ComputeHash(System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(@"c:\temp\x_no_sig.xml")));
        var b64 = Convert.ToBase64String(b1);
    }
Exemplo n.º 3
0
        //-------------------------------------------------------------------------------------------------------------------------//
        //
        //-------------------------------------------------------------------------------------------------------------------------//

        /// <summary>
        ///
        /// </summary>
        /// <param name="source_xml"></param>
        /// <returns></returns>
        public MemoryStream EnvelopedTransformToStream(Stream source_xml)
        {
            MemoryStream _result = new MemoryStream();

            XmlDsigEnvelopedSignatureTransform _envTransform = new XmlDsigEnvelopedSignatureTransform(true);

            {
                _envTransform.Algorithm = SignedXml.XmlDsigEnvelopedSignatureTransformUrl;

                Type[] _validInTypes = _envTransform.InputTypes;

                for (int i = 0; i < _validInTypes.Length; i++)
                {
                    if (_validInTypes[i] == typeof(System.IO.Stream))
                    {
                        _envTransform.LoadInput(source_xml);
                        break;
                    }
                }

                Type[] _validOutTypes = _envTransform.OutputTypes;

                for (int i = 0; i < _validOutTypes.Length; i++)
                {
                    if (_validOutTypes[i] == typeof(XmlDocument))
                    {
                        Type streamType = typeof(XmlDocument);

                        XmlDocument _doc = (XmlDocument)_envTransform.GetOutput(streamType);
                        _result = new MemoryStream(Encoding.UTF8.GetBytes(_doc.OuterXml));

                        break;
                    }
                }
            }

            return(_result);
        }
Exemplo n.º 4
0
    // Encrypt the text in the specified XmlDocument.
    private static void ShowTransformProperties(XmlDocument xmlDoc)
    {
        //<Snippet1>
        XmlDsigEnvelopedSignatureTransform xmlTransform =
            new XmlDsigEnvelopedSignatureTransform();

        //</Snippet1>

        // Ensure the transform is using the proper algorithm.
        //<Snippet4>
        xmlTransform.Algorithm =
            SignedXml.XmlDsigEnvelopedSignatureTransformUrl;
        //</Snippet4>

        // Retrieve the XML representation of the current transform.
        //<Snippet10>
        XmlElement xmlInTransform = xmlTransform.GetXml();

        //</Snippet10>

        Console.WriteLine("\nXml representation of the current transform: ");
        Console.WriteLine(xmlInTransform.OuterXml);

        // Retrieve the valid input types for the current transform.
        //<Snippet5>
        Type[] validInTypes = xmlTransform.InputTypes;
        //</Snippet5>

        // Verify the xmlTransform can accept the XMLDocument as an
        // input type.
        for (int i = 0; i < validInTypes.Length; i++)
        {
            if (validInTypes[i] == xmlDoc.GetType())
            {
                // Load the document into the transfrom.
                //<Snippet12>
                xmlTransform.LoadInput(xmlDoc);
                //</Snippet12>

                //<Snippet3>
                bool IncludeComments = true;
                // This transform is created for demonstration purposes.
                XmlDsigEnvelopedSignatureTransform secondTransform =
                    new XmlDsigEnvelopedSignatureTransform(IncludeComments);
                //</Snippet3>

                //<Snippet13>
                string classDescription = secondTransform.ToString();
                //</Snippet13>

                // This call does not perform as expected.
                //<Snippet11>
                // An enveloped signature has no inner XML elements
                secondTransform.LoadInnerXml(xmlDoc.SelectNodes("//."));
                //</Snippet11>

                break;
            }
        }

        //<Snippet6>
        Type[] validOutTypes = xmlTransform.OutputTypes;
        //</Snippet6>

        for (int i = validOutTypes.Length - 1; i >= 0; i--)
        {
            if (validOutTypes[i] == typeof(System.Xml.XmlDocument))
            {
                try
                {
                    //<Snippet9>
                    Type        xmlDocumentType   = typeof(System.Xml.XmlDocument);
                    XmlDocument xmlDocumentOutput = (XmlDocument)
                                                    xmlTransform.GetOutput(xmlDocumentType);
                    //</Snippet9>

                    // Display to the console the Xml before and after
                    // encryption.
                    Console.WriteLine("Result of the GetOutput method call" +
                                      " from the current transform: " +
                                      xmlDocumentOutput.OuterXml);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Unexpected exception caught: " +
                                      ex.ToString());
                }

                break;
            }
            else if (validOutTypes[i] == typeof(System.Xml.XmlNodeList))
            {
                try
                {
                    Type        xmlNodeListType = typeof(System.Xml.XmlNodeList);
                    XmlNodeList xmlNodes        = (XmlNodeList)
                                                  xmlTransform.GetOutput(xmlNodeListType);

                    // Display to the console the Xml before and after
                    // encryption.
                    Console.WriteLine("Encoding the following message: " +
                                      xmlDoc.InnerText);

                    Console.WriteLine("Nodes of the XmlNodeList retrieved " +
                                      "from GetOutput:");
                    for (int j = 0; j < xmlNodes.Count; j++)
                    {
                        Console.WriteLine("Node " + j +
                                          " has the following name: " +
                                          xmlNodes.Item(j).Name +
                                          " and the following InnerXml: " +
                                          xmlNodes.Item(j).InnerXml);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Unexpected exception caught: " +
                                      ex.ToString());
                }

                break;
            }
            else
            {
                //<Snippet8>
                object outputObject = xmlTransform.GetOutput();
                //</Snippet8>
            }
        }
    }