Example #1
0
        private async Task <Message> ComputeResponseAsync(Message receivedMessage)
        {
            await Task.Delay(10);

            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                //xmlDoc.PreserveWhitespace = false;/////////////////////////////////Should do it in both sign and verify
                xmlDoc.LoadXml(receivedMessage.XmlText);

                X509Certificate2 cert      = XmlSign.GetX509Certificate2FromDongle(); //Load Certificate
                XmlDocument      signedDoc = XmlSign.GetSignedXMLDocument(xmlDoc, cert);
                if (signedDoc != null)
                {
                    receivedMessage.XmlText = signedDoc.OuterXml;
                    return(receivedMessage);
                }
                else
                {
                    receivedMessage.XmlText = "";
                    MessageBox.Show("File Tempered After Last Sign");
                    return(receivedMessage);
                }
            }
            catch (Exception ex)
            {
                receivedMessage.XmlText = ex.Message.ToString();
                return(receivedMessage);
            }
        }
        private static string GetXmlStringBeforeSigning(XmlDocument xmlDoc, out bool hasAnySignature)
        {
            hasAnySignature = XmlSign.CheckIfDocumentPreviouslySigned(xmlDoc);
            XmlDocument basicXml = XmlSign.GetRealXmlDocument(xmlDoc);

            return(basicXml.OuterXml);
        }
        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            XmlDocument tempXml = new XmlDocument();

            tempXml.LoadXml(receivedXmlText);
            certificateList = XmlSign.GetAllSign(tempXml);
            realDocument    = XmlSign.GetRealXmlDocument(tempXml);
            XmlDataProvider dataProvider = this.FindResource("xmlDataProvider") as XmlDataProvider;

#pragma warning disable CS8602 // Dereference of a possibly null reference.
            dataProvider.Document = realDocument;
#pragma warning restore CS8602 // Dereference of a possibly null reference.
            Signature.ItemsSource = certificateList;
        }
        internal static SignedXmlModel GetSignedXmlModel(string contentString)
        {
            SignedXmlModel signedXml = new SignedXmlModel();
            bool           hasAnySignature;
            XmlDocument    xmlDoc = new XmlDocument();

            try {
                xmlDoc.LoadXml(contentString);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                signedXml.success = false;
                signedXml.error   = "File is not a valid XML";
                return(signedXml);
            }
            try
            {
                signedXml.xml = GetXmlStringBeforeSigning(xmlDoc, out hasAnySignature);
                if (hasAnySignature)
                {
                    List <CertificateModel> certs = XmlSign.GetAllSign(xmlDoc);
                    if (certs == null)
                    {
                        signedXml.success    = false;
                        signedXml.error      = "File was modified";
                        signedXml.xml        = null;
                        signedXml.signatures = null;
                        return(signedXml);
                    }
                    signedXml.signatures = certs;
                }
                return(signedXml);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                signedXml.success    = false;
                signedXml.error      = "Unknown Exception, Please check log File of XML Verifire Service";
                signedXml.xml        = null;
                signedXml.signatures = null;
                return(signedXml);
            }
        }
        private void SignButtonClicked(object sender, RoutedEventArgs e)
        {
            //http://localhost:8080/file/download/831286aaff629434d9d4ddcbec679f8ecbe4afb0631c73e60d0968fbea2cccbea63aa8afb0a5bef528a3e2433c0d9994713da42fdadd62f5fab19d0365520e3cbig.xml
            String fileName = SelectedFileName.Text.Trim();

            XmlDocument xmlDoc = new XmlDocument();

            //xmlDoc.PreserveWhitespace = false;/////////////////////////////////Should do it in both sign and verify
            xmlDoc.Load(fileName);

            X509Certificate2 cert      = XmlSign.GetX509Certificate2FromDongle(); //Load Certificate
            XmlDocument      signedDoc = XmlSign.GetSignedXMLDocument(xmlDoc, cert);

            if (signedDoc != null)
            {
                signedDoc.Save(fileName + "_signed.xml");   //Sign a file
            }
            else
            {
                MessageBox.Show("File Tempered After Last Sign");
                return;
            }

            XmlDocument signedXmlDoc = new XmlDocument();

            //xmlDoc.PreserveWhitespace = false;/////////////////////////////////
            signedXmlDoc.Load(fileName + "_signed.xml");

            //Verify
            bool?ifSignVerified = XmlSign.VerifyAllSign(signedXmlDoc);

            if (ifSignVerified == true)
            {
                MessageBox.Show("Verified");
            }
            else if (ifSignVerified == false)
            {
                MessageBox.Show("Failed Verification");
            }
            else
            {
                MessageBox.Show("File Has No Sign");
            }
        }