Beispiel #1
0
        protected void VerifyXml(string payload)
        {
            var xmlDoc = new XmlDocument {
                PreserveWhitespace = true
            };

            xmlDoc.LoadXml(payload);
            var sigDoc = new CustomSignedXml(xmlDoc)
            {
                Namespaces                = Namespaces,
                SignatureKey              = Config.Bank.AuthKeys.PublicKey,
                SignaturePadding          = RSASignaturePadding.Pkcs1,
                CanonicalizationAlgorithm = SignedXml.XmlDsigC14NTransformUrl,
                SignatureAlgorithm        = s_signatureAlg,
                DigestAlgorithm           = s_digestAlg,
                ReferenceUri              = CustomSignedXml.DefaultReferenceUri
            };

            if (sigDoc.VerifySignature())
            {
                s_logger.LogDebug($"Authentication OK for {OrderType} response");
                return;
            }

            s_logger.LogError($"Authentication erroneous for {OrderType} response");
            throw new DeserializationException($"Authentication erroneous for {OrderType} response",
                                               payload);
        }
Beispiel #2
0
        protected XmlDocument AuthenticateXml(XmlDocument doc, string referenceUri,
                                              IDictionary <string, string> cnm)
        {
            using (new MethodLogger(s_logger))
            {
                doc.PreserveWhitespace = true;
                var sigDoc = new CustomSignedXml(doc)
                {
                    SignatureKey              = Config.User.AuthKeys.PrivateKey,
                    SignaturePadding          = RSASignaturePadding.Pkcs1,
                    CanonicalizationAlgorithm = SignedXml.XmlDsigC14NTransformUrl,
                    SignatureAlgorithm        = s_signatureAlg,
                    DigestAlgorithm           = s_digestAlg,
                    ReferenceUri              = referenceUri ?? CustomSignedXml.DefaultReferenceUri
                };

                var nm = new XmlNamespaceManager(doc.NameTable);
                nm.AddNamespace(Namespaces.EbicsPrefix, Namespaces.Ebics);
                if (cnm != null && cnm.Count > 0)
                {
                    foreach (var kv in cnm)
                    {
                        nm.AddNamespace(kv.Key, kv.Value);
                    }
                }

                sigDoc.NamespaceManager = nm;

                sigDoc.ComputeSignature();

                var xmlDigitalSignature = sigDoc.GetXml();
                var headerNode          = doc.SelectSingleNode($"//{Namespaces.EbicsPrefix}:{XmlNames.AuthSignature}", nm);
                foreach (XmlNode child in xmlDigitalSignature.ChildNodes)
                {
                    headerNode.AppendChild(headerNode.OwnerDocument.ImportNode(child, true));
                }

                return(doc);
            }
        }