Exemplo n.º 1
0
        private XmlElement CreateXadesObject(Org.BouncyCastle.X509.X509Certificate cert)
        {
            X509Name old = cert.SubjectDN;
            X509Name n   = new X509Name(old.GetOidList(), old.GetValueList());

            byte[]     data = n.GetDerEncoded();
            Sha1Digest hash = new Sha1Digest();

            hash.BlockUpdate(data, 0, data.Length);
            byte[] result = new byte[hash.GetDigestSize()];
            hash.DoFinal(result, 0);
            string sCertDigest = Convert.ToBase64String(result);

            string Issuer = cert.IssuerDN.ToString(true, X509Name.RFC2253Symbols);
            string Serial = cert.SerialNumber.LongValue.ToString();


            XmlElement   XmlObject = m_doc.CreateElement(ns_dsig_prefix, "Object", ns_dsig_uri);
            XmlAttribute Id        = m_doc.CreateAttribute("Id");

            Id.Value = "etsi-signed-1-1";
            XmlObject.Attributes.Append(Id);

            XmlElement QualifyingProperties = m_doc.CreateElement(ns_etsi_prefix, "QualifyingProperties", ns_etsi_uri);

            XmlObject.AppendChild(QualifyingProperties);
            XmlAttribute Target = m_doc.CreateAttribute("Target");

            Target.Value = "#signature-1-1";
            QualifyingProperties.Attributes.Append(Target);
            XmlAttribute nsxml = m_doc.CreateAttribute("xmlns:" + ns_etsi_prefix);

            nsxml.Value = ns_etsi_uri;
            QualifyingProperties.Attributes.Append(nsxml);

            XmlElement SignedProperties = m_doc.CreateElement(ns_etsi_prefix, "SignedProperties", ns_etsi_uri);

            QualifyingProperties.AppendChild(SignedProperties);

            XmlElement SignedSignatureProperties = m_doc.CreateElement(ns_etsi_prefix, "SignedSignatureProperties", ns_etsi_uri);

            SignedProperties.AppendChild(SignedSignatureProperties);

            XmlElement SigningTime = m_doc.CreateElement(ns_etsi_prefix, "SigningTime", ns_etsi_uri);

            SignedSignatureProperties.AppendChild(SigningTime);
            SigningTime.AppendChild(m_doc.CreateTextNode(DateTime.UtcNow.ToString("s") + "Z"));

            XmlElement SigningCertificate = m_doc.CreateElement(ns_etsi_prefix, "SigningCertificate", ns_etsi_uri);

            SignedSignatureProperties.AppendChild(SigningCertificate);
            XmlElement Cert = m_doc.CreateElement(ns_etsi_prefix, "Cert", ns_etsi_uri);

            SigningCertificate.AppendChild(Cert);

            XmlElement CertDigest = m_doc.CreateElement(ns_etsi_prefix, "CertDigest", ns_etsi_uri);

            Cert.AppendChild(CertDigest);
            XmlElement DigestMethod = m_doc.CreateElement(ns_etsi_prefix, "DigestMethod", ns_etsi_uri);

            CertDigest.AppendChild(DigestMethod);
            XmlAttribute Algorithm = m_doc.CreateAttribute("Algorithm");

            Algorithm.Value = "http://www.w3.org/2000/09/xmldsig#sha1";
            DigestMethod.Attributes.Append(Algorithm);
            XmlElement DigestValue = m_doc.CreateElement(ns_etsi_prefix, "DigestValue", ns_etsi_uri);

            CertDigest.AppendChild(DigestValue);
            DigestValue.AppendChild(m_doc.CreateTextNode(sCertDigest));


            XmlElement IssuerSerial = m_doc.CreateElement(ns_etsi_prefix, "IssuerSerial", ns_etsi_uri);

            Cert.AppendChild(IssuerSerial);
            XmlElement X509IssuerName = m_doc.CreateElement(ns_dsig_prefix, "X509IssuerName", ns_dsig_uri);

            IssuerSerial.AppendChild(X509IssuerName);
            X509IssuerName.AppendChild(m_doc.CreateTextNode(Issuer));
            XmlElement X509SerialNumber = m_doc.CreateElement(ns_dsig_prefix, "X509SerialNumber", ns_dsig_uri);

            IssuerSerial.AppendChild(X509SerialNumber);
            X509SerialNumber.AppendChild(m_doc.CreateTextNode(Serial));


            XmlElement SignaturePolicyIdentifier = m_doc.CreateElement(ns_etsi_prefix, "SignaturePolicyIdentifier", ns_etsi_uri);

            SignedSignatureProperties.AppendChild(SignaturePolicyIdentifier);
            XmlElement SignaturePolicyImplied = m_doc.CreateElement(ns_etsi_prefix, "SignaturePolicyImplied", ns_etsi_uri);

            SignaturePolicyIdentifier.AppendChild(SignaturePolicyImplied);

            XmlElement SignedDataObjectProperties = m_doc.CreateElement(ns_etsi_prefix, "SignedDataObjectProperties", ns_etsi_uri);

            SignedProperties.AppendChild(SignedDataObjectProperties);
            XmlElement DataObjectFormat = m_doc.CreateElement(ns_etsi_prefix, "DataObjectFormat", ns_etsi_uri);

            SignedDataObjectProperties.AppendChild(DataObjectFormat);
            XmlAttribute ObjectReference = m_doc.CreateAttribute("ObjectReference");

            ObjectReference.Value = "#reference-1-1";
            DataObjectFormat.Attributes.Append(ObjectReference);

            XmlElement MimeType = m_doc.CreateElement(ns_etsi_prefix, "MimeType", ns_etsi_uri);

            DataObjectFormat.AppendChild(MimeType);
            MimeType.AppendChild(m_doc.CreateTextNode("text/xml"));

            return(XmlObject);
        }