Exemple #1
0
        internal static XmlDsigSignOperation From(XmlDsigSignParameters parameters)
        {
            switch (parameters.SignatureFormat)
            {
            case XmlDsigSignatureFormat.Enveloping:
                return(new XmlDsigEnvelopingSignOperation());

            case XmlDsigSignatureFormat.Enveloped:
                return(new XmlDsigEnvelopedSignOperation());

            case XmlDsigSignatureFormat.Detached:
                return(new XmlDsigDetachedSignOperation());
            }
            throw new Exception("There isn't a '" + parameters.SignatureFormat + "' signer implemented");
        }
Exemple #2
0
        private static void AddXAdESNodes(ExtendedSignedXml signedXml, XmlDsigSignParameters parameters)
        {
            var document = parameters.InputXml;
            var qualifyingPropertiesNode = AddQualifyingPropertiesNode(signedXml, document);
            var signedPropertiesNode     = AddSignedPropertiesNode(document, qualifyingPropertiesNode);

            CreateReferenceToSignedProperties(signedXml, signedPropertiesNode);
            var signedSignatureProperties = AddSignedSignaturePropertiesNode(document, signedPropertiesNode);

            AddSigningTimeNode(document, signedSignatureProperties);
            AddSigningCertificate(document, signedSignatureProperties, parameters);
            //AddSignaturePolicyIdentifier(document, signedSignatureProperties);
            var unsignedPropertiesNode = AddUnsignedPropertiesNode(document, qualifyingPropertiesNode);

            AddUnsignedSignaturePropertiesNode(document, unsignedPropertiesNode);
        }
Exemple #3
0
        private static void AddPropertyFromNameAndValue(string propertyName, string propertyValue, string propertyNameSpace,
                                                        ExtendedSignedXml signedXml, XmlDsigSignParameters signParameters)
        {
            var document = signParameters.InputXml;

            if (document == null)
            {
                throw new InvalidParameterException("Document cannot be null");
            }

            var propertyNode = string.IsNullOrEmpty(propertyNameSpace) ?
                               document.CreateElement(propertyName) : document.CreateElement(propertyName, propertyNameSpace);

            propertyNode.InnerText = propertyValue;
            AddProperty(document, signedXml, propertyNode);
        }
Exemple #4
0
        internal XmlDocument SignAndGetXml(XmlDsigSignParameters signParameters, Action <ExtendedSignedXml> signedXmlPostProcessing)
        {
            ValidateParameters(signParameters);

            var inputXml = signParameters.InputXml;

            if (inputXml == null)
            {
                inputXml = new XmlDocument();
                inputXml.Load(signParameters.InputPath);
                signParameters.InputXml = inputXml;
            }

            var signature   = GetSignature(inputXml, signParameters, signedXmlPostProcessing);
            var xmlDocument = BuildFinalSignedXmlDocument(inputXml, signature.GetXml());

            return(xmlDocument);
        }
Exemple #5
0
 private static void CreateNodesForProperties(ExtendedSignedXml signedXml, XmlDsigSignParameters signParameters)
 {
     if (signParameters.Properties != null && signParameters.Properties.Count > 0)
     {
         foreach (var xmlPropertyDescriptor in signParameters.Properties)
         {
             AddPropertyFromNameAndValue(xmlPropertyDescriptor.Name, xmlPropertyDescriptor.Value,
                                         xmlPropertyDescriptor.NameSpace,
                                         signedXml, signParameters);
         }
     }
     if (signParameters.PropertyBuilders != null && signParameters.PropertyBuilders.Count > 0)
     {
         foreach (var propertyBuilder in signParameters.PropertyBuilders)
         {
             AddProperty(signParameters.InputXml, signedXml, propertyBuilder(signParameters.InputXml));
         }
     }
 }
Exemple #6
0
 private static void ValidateParameters(XmlDsigSignParameters signParameters)
 {
     if (signParameters == null)
     {
         throw new InvalidParameterException("Parameters to sign cannot be null");
     }
     if (signParameters.SignatureCertificate == null)
     {
         throw new InvalidParameterException("Signer Certificate cannot be null");
     }
     if (signParameters.InputPath == null)
     {
         throw new InvalidParameterException("Document to sign cannot be null");
     }
     if (signParameters.OutputPath == null)
     {
         throw new InvalidParameterException("Path of signed file cannot be null");
     }
 }
Exemple #7
0
        private static void AddCertDigestNode(XmlDocument document, XmlElement certNode, XmlDsigSignParameters parameters)
        {
            var certDigestNode = XmlHelper.CreateNodeIn(document, "CertDigest", XadesNamespaceUrl, certNode);

            XmlHelper.CreateNodeWithTextIn(document, "DigestMethod", SignedXml.XmlDsigSHA1Url, SignedXml.XmlDsigNamespaceUrl, certDigestNode);
            var certificateData = parameters.SignatureCertificate.RawData;
            var digestValue     = CryptoHelper.GetBase64SHA1(certificateData);

            XmlHelper.CreateNodeWithTextIn(document, "DigestValue", digestValue, SignedXml.XmlDsigNamespaceUrl, certDigestNode);
        }
Exemple #8
0
        private static void AddSigningCertificate(XmlDocument document, XmlElement signedSignatureProperties, XmlDsigSignParameters parameters)
        {
            var signingCertificateNode = XmlHelper.CreateNodeIn(document, "SigningCertificate", XadesNamespaceUrl, signedSignatureProperties);
            var certNode = XmlHelper.CreateNodeIn(document, "Cert", XadesNamespaceUrl, signingCertificateNode);

            AddCertDigestNode(document, certNode, parameters);
            AddIssuerSerialNode(document, certNode, parameters);
        }
Exemple #9
0
        private static void AddIssuerSerialNode(XmlDocument document, XmlElement certNode, XmlDsigSignParameters parameters)
        {
            var issuerSerialNode = XmlHelper.CreateNodeIn(document, "IssuerSerial", XadesNamespaceUrl, certNode);

            XmlHelper.CreateNodeWithTextIn(document, "X509IssuerName", parameters.SignatureCertificate.Issuer,
                                           SignedXml.XmlDsigNamespaceUrl, issuerSerialNode);
            XmlHelper.CreateNodeWithTextIn(document, "X509SerialNumber", parameters.SignatureCertificate.SerialNumber,
                                           SignedXml.XmlDsigNamespaceUrl, issuerSerialNode);
        }
Exemple #10
0
 protected void SaveSignatureToFile(XmlDocument xml, XmlDsigSignParameters signParameters)
 {
     xml.Save(signParameters.OutputPath);
 }
Exemple #11
0
 internal XmlDocument SignAndGetXml(XmlDsigSignParameters signParameters)
 {
     return(SignAndGetXml(signParameters, null));
 }
Exemple #12
0
        internal void Sign(XmlDsigSignParameters signParameters, Action <ExtendedSignedXml> signedXmlPostProcessing)
        {
            var signedDocument = SignAndGetXml(signParameters, signedXmlPostProcessing);

            SaveSignatureToFile(signedDocument, signParameters);
        }
Exemple #13
0
        protected void IncludeSignatureCertificateIfNeeded(SignedXml signedXml, X509Certificate2 certificate, XmlDsigSignParameters signParameters)
        {
            signedXml.SigningKey = certificate.PrivateKey;

            if (!signParameters.IncludeCertificateInSignature)
            {
                return;
            }
            var certificateKeyInfo = new KeyInfo();

            certificateKeyInfo.AddClause(new KeyInfoX509Data(certificate));
            signedXml.KeyInfo = certificateKeyInfo;
        }
Exemple #14
0
 internal void Sign(XmlDsigSignParameters signParameters)
 {
     Sign(signParameters, null);
 }