コード例 #1
0
        private static XmlElement GenerateContentReference(XmlDocument doc, XmlSignatureAppearance sap, String referenceId)
        {
            IXpathConstructor xpathConstructor = sap.GetXpathConstructor();

            XmlElement reference = doc.CreateElement("Reference", SecurityConstants.XMLDSIG_URI);

            reference.SetAttribute("URI", "");
            if (referenceId != null)
            {
                reference.SetAttribute("Id", referenceId);
            }

            XmlElement transforms = doc.CreateElement("Transforms", SecurityConstants.XMLDSIG_URI);

            XmlElement transform = doc.CreateElement("Transform", SecurityConstants.XMLDSIG_URI);

            transform.SetAttribute("Algorithm", SecurityConstants.XMLDSIG_URI_ENVELOPED);
            transforms.AppendChild(transform);

            byte[] md = null;
            if (xpathConstructor != null && xpathConstructor.GetXpathExpression().Length > 0)
            {
                XmlNodeList nodelist = doc.SelectNodes(xpathConstructor.GetXpathExpression(),
                                                       xpathConstructor.GetNamespaceManager());
                if (nodelist.Count == 1 && nodelist[0].NodeType == XmlNodeType.Element)
                {
                    XmlElement xpathSelect = (XmlElement)nodelist[0].CloneNode(true);
                    NormalizeNamespaces(nodelist[0].CreateNavigator(), xpathSelect.CreateNavigator());

                    XmlDocument digestDoc = new XmlDocument(doc.NameTable);
                    digestDoc.LoadXml(xpathSelect.OuterXml);

                    md = CalculateC14nDigest(digestDoc, new SHA1Managed());

                    transform = doc.CreateElement("Transform", SecurityConstants.XMLDSIG_URI);
                    transform.SetAttribute("Algorithm", SecurityConstants.XMLDSIG_URI_XPATH_FILTER2);

                    XmlElement xpath = doc.CreateElement("XPath", SecurityConstants.XMLDSIG_URI);
                    xpath.SetAttribute("xmlns", SecurityConstants.XMLDSIG_URI_XPATH_FILTER2);
                    xpath.SetAttribute("Filter", "intersect");

                    XmlNode xpathNode = doc.CreateTextNode(xpathConstructor.GetXpathExpression());

                    xpath.AppendChild(xpathNode);
                    transform.AppendChild(xpath);
                    transforms.AppendChild(transform);
                }
            }

            if (md == null)
            {
                md = CalculateC14nDigest(doc, new SHA1Managed());
            }

            reference.AppendChild(transforms);

            XmlElement digestMethod = doc.CreateElement("DigestMethod", SecurityConstants.XMLDSIG_URI);

            digestMethod.SetAttribute("Algorithm", SecurityConstants.XMLDSIG_URI_SHA1);
            reference.AppendChild(digestMethod);

            XmlElement digestValue = doc.CreateElement("DigestValue", SecurityConstants.XMLDSIG_URI);

            digestValue.AppendChild(doc.CreateTextNode(Convert.ToBase64String(md)));

            reference.AppendChild(digestValue);
            return(reference);
        }
コード例 #2
0
 virtual public void SetXpathConstructor(IXpathConstructor xpathConstructor) {
     this.xpathConstructor = xpathConstructor;
 }
コード例 #3
0
 virtual public void SetXpathConstructor(IXpathConstructor xpathConstructor)
 {
     this.xpathConstructor = xpathConstructor;
 }