public TimeStampProviderApiResult VerifyTimeStamp(string contentToVerify, string signature)
        {
            if (string.IsNullOrEmpty(contentToVerify))
            {
                throw new ArgumentNullException("contentToVerify");
            }
            if (string.IsNullOrEmpty(signature))
            {
                throw new ArgumentNullException("signature");
            }

            TimeStampProviderApiResult result = new TimeStampProviderApiResult { IsSuccess = false };

            string dataXml = string.Format(RequestTemplates.VerifyRequest, HashHelper.EncodeTo64(HashHelper.HashString(contentToVerify)), signature);

            string apiResponse = SendRequest(dataXml, TractisDssClientProperties.ApiVerifyUrl);

            if (!string.IsNullOrEmpty(apiResponse))
            {
                result.ApiResponse = new XmlDocument();
                result.ApiResponse.LoadXml(apiResponse);

                XmlNamespaceManager tractisDssNamespace = new XmlNamespaceManager(result.ApiResponse.NameTable);
                tractisDssNamespace.AddNamespace("dss", "urn:oasis:names:tc:dss:1.0:core:schema");
                tractisDssNamespace.AddNamespace("ds", "http://www.w3.org/2000/09/xmldsig#");

                result.IsSuccess = result.ApiResponse.SelectSingleNode("//dss:ResultMajor", tractisDssNamespace).InnerText.ToLower().Contains("success") &&
                    result.ApiResponse.SelectSingleNode("//dss:ResultMinor", tractisDssNamespace).InnerText.ToLower().Contains("onalldocuments");
                result.OriginalContent = contentToVerify;
            }
            return result;
        }
        public TimeStampProviderApiResult GenerateTimeStamp(string contentToStamp)
        {
            if (string.IsNullOrEmpty(contentToStamp))
            {
                throw new ArgumentNullException("contentToStamp");
            }

            TimeStampProviderApiResult result = new TimeStampProviderApiResult { IsSuccess = false };

            string dataXml = string.Format(RequestTemplates.StampRequest, HashHelper.EncodeTo64(contentToStamp));

            string apiResponse = SendRequest(dataXml, TractisDssClientProperties.ApiTimeStampUrl);

            if (!string.IsNullOrEmpty(apiResponse))
            {
                result.ApiResponse = new XmlDocument();
                result.ApiResponse.LoadXml(apiResponse);

                XmlNamespaceManager tractisDssNamespace = new XmlNamespaceManager(result.ApiResponse.NameTable);
                tractisDssNamespace.AddNamespace("dss", "urn:oasis:names:tc:dss:1.0:core:schema");
                tractisDssNamespace.AddNamespace("ds", "http://www.w3.org/2000/09/xmldsig#");
                tractisDssNamespace.AddNamespace("ns3", "urn:oasis:names:tc:dss:1.0:core:schema");

                result.IsSuccess =
                    result.ApiResponse.SelectSingleNode("//dss:ResultMajor", tractisDssNamespace).InnerText.ToLower().Contains("success");
                result.Signature = ExtractSignatureString(apiResponse);
                result.TimeStampDateTime = DateTime.Parse(result.ApiResponse.SelectSingleNode("//ns3:SignResponse/ns3:OptionalOutputs/ns3:SigningTimeInfo/ns3:SigningTime", tractisDssNamespace).InnerText);
                result.OriginalContent = contentToStamp;

                string certificateText = result.ApiResponse.SelectSingleNode("//ds:X509Certificate", tractisDssNamespace).InnerText;
                X509Certificate certificate = new X509Certificate(HashHelper.StrToByteArray(certificateText));
                result.TimeStampExpirationDateTime = DateTime.Parse(certificate.GetExpirationDateString());

            }

            return result;
        }