예제 #1
0
        public static void ListAllCardholders()
        {
            Chilkat.Rest rest = new Chilkat.Rest();
            bool         success;
            //  URL: https://api.stripe.com/v1/balance
            bool bTls           = true;
            int  port           = 443;
            bool bAutoReconnect = true;

            success = rest.Connect("api.stripe.com", port, bTls, bAutoReconnect);
            if (success != true)
            {
                Log("ConnectFailReason: " + Convert.ToString(rest.ConnectFailReason));
                Log(rest.LastErrorText);
                return;
            }
            Chilkat.StringBuilder sbResponseBody = new Chilkat.StringBuilder();
            success = rest.FullRequestNoBodySb("GET", "/v1/issuing/cardholders", sbResponseBody);
            if (success != true)
            {
                Log(rest.LastErrorText);
                return;
            }
            Chilkat.JsonObject jsonResponse = new Chilkat.JsonObject();
            jsonResponse.LoadSb(sbResponseBody);
            var o        = jsonResponse.StringOf("object");
            var livemode = jsonResponse.BoolOf("livemode");
        }
예제 #2
0
        private byte[] EscapeText(byte[] encodableString)
        {
            Chilkat.StringBuilder sb = new Chilkat.StringBuilder();
            sb.Append(ByteArrayToString(encodableString));
            sb.Encode("json", "utf-8");

            byte[] escapedString = StringToByteArray(sb.GetAsString());
            return(escapedString);
        }
예제 #3
0
        public async Task Get_EndpointsReturnSuccessAndCorrectContentType(string url)
        {
            // Arrange
            AuthenticationManager authenticationManager = new AuthenticationManager();

            authenticationManager.client = _factory.CreateClient();
            File.WriteAllBytes("rsaCert.pfx", Startup.RsaCertPfxBytes);
            Chilkat.Pfx pfx = new Chilkat.Pfx();
            if (File.Exists("rsaCert.pfx"))
            {
                pfx.LoadPfxFile("rsaCert.pfx", "12345");
            }

            File.Delete("rsaCert.pfx");

            // Act
            //public key from certificate
            //Chilkat package is used to process X509 certificate 2 from pfx file to JWKS (Json Web Key Set) from which it is possible
            //to extract public key X5c. Key is then compared with the one pulled from mocked server.
            string alias    = "my_ecc_key1";
            string password = "******";

            Chilkat.JavaKeyStore  jks      = pfx.ToJavaKeyStore(alias, password);
            Chilkat.StringBuilder sbJwkSet = new Chilkat.StringBuilder();
            jks.ToJwkSet(password, sbJwkSet);
            Chilkat.JsonObject jwkSet = new Chilkat.JsonObject();
            jwkSet.LoadSb(sbJwkSet);
            jwkSet.EmitCompact = false;
            var               jwksCheck  = jwkSet.Emit();
            JsonWebKeySet     jwkscheck  = new JsonWebKeySet(jwksCheck);
            List <JsonWebKey> keyList2   = new List <JsonWebKey>(jwkscheck.Keys);
            string            publicKey2 = keyList2[0].X5c[0];

            //response from server
            System.Net.Http.HttpResponseMessage response = await authenticationManager.client.GetAsync(url);

            //public key from endpoint
            string publicKey = authenticationManager.GetPublicKey(url);

            // Assert
            response.EnsureSuccessStatusCode(); // Status Code 200-299
            Assert.Equal(publicKey2, publicKey);
            authenticationManager.client.Dispose();
            _factory.Dispose();
        }
예제 #4
0
        static public ArrayList GetGenericClassNameList()
        {
            Chilkat.StringTable st = new Chilkat.StringTable();
            if (m_classListText == null)
            {
                m_classListText = AppData.GetAppData("appData/apiManager/classList.txt");
                if (m_classListText == null)
                {
                    return(null);
                }
            }
            Chilkat.StringBuilder sb = new Chilkat.StringBuilder();
            sb.Append(m_classListText);

            if (!st.AppendFromSb(sb))
            {
                return(null);
            }

            ArrayList alist = new ArrayList();

            int n = st.Count;
            int i;

            for (i = 0; i < n; i++)
            {
                string cname = st.StringAt(i);
                if (string.IsNullOrWhiteSpace(cname))
                {
                    continue;
                }
                alist.Add(cname);
            }

            return(alist);
        }
예제 #5
0
        // URLs to help understand this topic:
        // https://developers.google.com/identity/protocols/OAuth2InstalledApp
        //
        private bool oauth2_google(string scope)
        {
            // Generates state and PKCE values.
            string state         = m_prng.GenRandom(32, base64Url);
            string code_verifier = m_prng.GenRandom(32, base64Url);

            Chilkat.Crypt2 crypt = new Chilkat.Crypt2();
            crypt.EncodingMode  = base64Url;
            crypt.HashAlgorithm = "SHA256";
            string       code_challenge        = crypt.HashStringENC(code_verifier);
            const string code_challenge_method = "S256";

            //Create a Chilkat socket for listening.  Begin listening asynchronously.
            Chilkat.Socket listenSocket = new Chilkat.Socket();
            int            backlog      = 5;
            int            listenPort   = 0;

            // Passing a listenPort = 0 causes BindAndListen to find a random unused port.
            // The chosen port will be available via the ListenPort property.
            if (!listenSocket.BindAndListen(listenPort, backlog))
            {
                fgAppendToErrorLog(listenSocket.LastErrorText);
                popupError("Failed to BindAndListen");
                return(false);
            }

            // Get the chosen listen port
            // This ListenPort property is available starting in Chilkat v9.5.0.59
            listenPort = listenSocket.ListenPort;

            // Creates a redirect URI using an available port on the loopback address.
            string redirect_uri = "http://127.0.0.1:" + listenPort.ToString() + "/";

            //Wait a max of 5 minutes.  The OnTaskCompleted event is called when an incoming connection
            //arrives, or when the listen failed.
            listenSocket.OnTaskCompleted += listenSocket_OnTaskCompleted;
            Chilkat.Task task = listenSocket.AcceptNextConnectionAsync(5 * 60000);
            if (task == null)
            {
                MessageBox.Show("Failed to start socket accept...");
                return(false);
            }

            // Add some information that will be needed by the TaskCompleted event..
            Chilkat.JsonObject taskData = new Chilkat.JsonObject();
            taskData.AppendString("code_verifier", code_verifier);
            taskData.AppendString("redirect_uri", redirect_uri);
            task.UserData = taskData.Emit();

            // Start the task.
            task.Run();

            // Creates the OAuth 2.0 authorization request.
            Chilkat.StringBuilder sbAuthRequest = new Chilkat.StringBuilder();
            sbAuthRequest.Append(authorizationEndpoint);
            sbAuthRequest.Append("?response_type=code&scope=");
            sbAuthRequest.Append(m_encoder.EncodeString(scope, "utf-8", "url"));
            sbAuthRequest.Append("&redirect_uri=");
            sbAuthRequest.Append(m_encoder.EncodeString(redirect_uri, "utf-8", "url"));
            sbAuthRequest.Append("&client_id=");
            sbAuthRequest.Append(googleAppClientId);
            sbAuthRequest.Append("&state=");
            sbAuthRequest.Append(state);
            sbAuthRequest.Append("&code_challenge=");
            sbAuthRequest.Append(code_challenge);
            sbAuthRequest.Append("&code_challenge_method=");
            sbAuthRequest.Append(code_challenge_method);

            // Here is a shorter way of building the URL in C#
            //string authorizationRequest = string.Format("{0}?response_type=code&scope={6}&redirect_uri={1}&client_id={2}&state={3}&code_challenge={4}&code_challenge_method={5}",
            //    authorizationEndpoint,  // 0
            //    System.Uri.EscapeDataString(redirect_uri), // 1
            //    googleAppClientId, // 2
            //    state, // 3
            //    code_challenge, // 4
            //    code_challenge_method, // 5
            //    System.Uri.EscapeDataString(scope)); // 6

            // Get authorization from Google account owner...
            webBrowser1.Navigate(sbAuthRequest.GetAsString());

            return(true);
        }
예제 #6
0
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            //var userId = "user";

            //GoogleOAuthBroker.UserId = userId;

            //GoogleOAuthBroker.clientId = clientId;
            //GoogleOAuthBroker.clientKey = clientSecret;
            ////GoogleOAuthBroker.callbackUrl = "urn:ietf:wg:oauth:2.0:oob";

            var tokenResponse = GoogleOAuthBroker.SavedGoogleAccessToken;

            if (true || tokenResponse == null)
            {
                tokenResponse = await GoogleOAuthBroker.InvokeGoogleSignIn();

                //var accessToken = new GoogleAccessToken(json);
            }

            var secrets = new ClientSecrets()
            {
                ClientId     = GoogleOAuthBroker.ClientId,
                ClientSecret = GoogleOAuthBroker.ClientKey
            };


            // 2018-10-1 取得
            // "access_token":"ya29.GlspBjPp5fg4L5_ardcFTvo0-mEhny0_U9AWp5r2MP0r2E02clwwz-hE_g6M5NQkiEhSgOLG69v6bQOR6BD6WFzTzhgDaxYtBRjc-ObQc_yUnG0D-qFecG0_G7jG","expires_in":3600,"refresh_token":"1/zT7RqFnZQJC7UWU_eIeyRSEAYPpNsvIegikelpVtPWYVsKnao087EK4jQ_tzJ0FC"
            //var token = new TokenResponse { RefreshToken = "4/AAAgYL1AbCENklz6-mtufDjdty62SY8-i-ySYJsPTjHrJ4bIp9oLbPM" };

            var token = new TokenResponse {
                AccessToken      = tokenResponse.access_token,
                ExpiresInSeconds = tokenResponse.expires_in,
                RefreshToken     = tokenResponse.refresh_token
            };

            var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
                                                     new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = secrets
            }),
                                                 GoogleOAuthBroker.UserId,
                                                 token
                                                 );


            var service = new DriveService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credentials,
                ApplicationName       = ApplicationName
            });

            // Define parameters of request.
            FilesResource.ListRequest listRequest = service.Files.List();
            listRequest.Spaces   = "appDataFolder";
            listRequest.PageSize = 1000; // range : [1 - 1000]
            // https://developers.google.com/drive/api/v3/migration#fields
            listRequest.Fields = "nextPageToken, files(id, name)";
            // Search for Parameters : https://developers.google.com/drive/api/v3/search-parameters
            //listRequest.Q = "'appDataFolder' in parents";

            // List files.
            IList <Google.Apis.Drive.v3.Data.File> files = listRequest.Execute()
                                                           .Files;

            Debug.WriteLine("Files:");
            if (files != null && files.Count > 0)
            {
                foreach (var file in files)
                {
                    Debug.WriteLine("{0} ({1})", file.Name, file.Id);
                }
            }
            else
            {
                Debug.WriteLine("No files found.");
            }

            return;

            //if (IsUserAdministrator() == false)
            //{
            //    await new MessageDialog("程式不具有管理員權限,無法進行此操作!").ShowAsync();

            //    return;
            //}

            // PDFArchiveApp 2
            var oauth2 = new Chilkat.OAuth2();

            //  For Google OAuth2, set the listen port equal to the port used
            //  in the Authorized Redirect URL for the Client ID.
            //  For example, in this case the Authorized Redirect URL would be http://localhost:55568/
            //  Your app should choose a port not likely not used by any other application.
            oauth2.ListenPort = 55568;

            oauth2.AuthorizationEndpoint = "https://accounts.google.com/o/oauth2/v2/auth";
            oauth2.TokenEndpoint         = "https://www.googleapis.com/oauth2/v4/token";

            //  Replace these with actual values.
            oauth2.ClientId     = "338523250911-mc628v5pbmdkcos31okktdtgofara1bp.apps.googleusercontent.com";
            oauth2.ClientSecret = "F9I5-OTwr7FsQS6leZYHc8rG";

            oauth2.CodeChallenge       = true;
            oauth2.CodeChallengeMethod = "S256";

            //  This is the scope for Google Drive.
            //  See https://developers.google.com/identity/protocols/googlescopes
            oauth2.Scope = "https://www.googleapis.com/auth/drive";

            //  Begin the OAuth2 three-legged flow.  This returns a URL that should be loaded in a browser.
            string url = oauth2.StartAuth();

            if (oauth2.LastMethodSuccess != true)
            {
                Debug.WriteLine(oauth2.LastErrorText);
                return;
            }

            //  At this point, your application should load the URL in a browser.
            //  For example,
            //  in C#:  System.Diagnostics.Process.Start(url);
            //  in Java: Desktop.getDesktop().browse(new URI(url));
            //  in VBScript: Set wsh=WScript.CreateObject("WScript.Shell")
            //               wsh.Run url
            //  The Google account owner would interactively accept or deny the authorization request.

            //  Add the code to load the url in a web browser here...
            //  Add the code to load the url in a web browser here...
            //  Add the code to load the url in a web browser here...

            //  Now wait for the authorization.
            //  We'll wait for a max of 30 seconds.
            int numMsWaited = 0;

            while ((numMsWaited < 30000) && (oauth2.AuthFlowState < 3))
            {
                oauth2.SleepMs(100);
                numMsWaited = numMsWaited + 100;
            }

            //  If there was no response from the browser within 30 seconds, then
            //  the AuthFlowState will be equal to 1 or 2.
            //  1: Waiting for Redirect. The OAuth2 background thread is waiting to receive the redirect HTTP request from the browser.
            //  2: Waiting for Final Response. The OAuth2 background thread is waiting for the final access token response.
            //  In that case, cancel the background task started in the call to StartAuth.
            if (oauth2.AuthFlowState < 3)
            {
                oauth2.Cancel();
                Debug.WriteLine("No response from the browser!");
                return;
            }

            //  Check the AuthFlowState to see if authorization was granted, denied, or if some error occurred
            //  The possible AuthFlowState values are:
            //  3: Completed with Success. The OAuth2 flow has completed, the background thread exited, and the successful JSON response is available in AccessTokenResponse property.
            //  4: Completed with Access Denied. The OAuth2 flow has completed, the background thread exited, and the error JSON is available in AccessTokenResponse property.
            //  5: Failed Prior to Completion. The OAuth2 flow failed to complete, the background thread exited, and the error information is available in the FailureInfo property.
            if (oauth2.AuthFlowState == 5)
            {
                Debug.WriteLine("OAuth2 failed to complete.");
                Debug.WriteLine(oauth2.FailureInfo);
                return;
            }

            if (oauth2.AuthFlowState == 4)
            {
                Debug.WriteLine("OAuth2 authorization was denied.");
                Debug.WriteLine(oauth2.AccessTokenResponse);
                return;
            }

            if (oauth2.AuthFlowState != 3)
            {
                Debug.WriteLine("Unexpected AuthFlowState:" + Convert.ToString(oauth2.AuthFlowState));
                return;
            }

            //  Save the full JSON access token response to a file.
            Chilkat.StringBuilder sbJson = new Chilkat.StringBuilder();
            sbJson.Append(oauth2.AccessTokenResponse);
            sbJson.WriteFile("qa_data/tokens/googleDrive.json", "utf-8", false);

            //  The saved JSON response looks like this:

            //      {
            //       "access_token": "ya39.Ci-XA_C5bGgRDC3UaD-h0_NeL-DVIQnI2gHtBBBHkZzrwlARkwX6R3O0PCDEzRlfaQ",
            //       "token_type": "Bearer",
            //       "expires_in": 3600,
            //       "refresh_token": "1/r_2c_7jddspcdfesrrfKqfXtqo08D6Q-gUU0DsdfVMsx0c"
            //      }
            //
            Debug.WriteLine("OAuth2 authorization granted!");
            Debug.WriteLine("Access Token = " + oauth2.AccessToken);
        }
예제 #7
0
        private void bgWorker_spider_DoWork(object sender, DoWorkEventArgs eSpidere)
        {
            if (AbdalControler.unauthorized_process == true)
            {
                MessageBox.Show("This domain is unauthorized !");
                Application.Exit();
            }
            else
            {
                Chilkat.Spider spider = new Chilkat.Spider();
                spider.Initialize(targetUrlTextBox.Text);
                //  Add the 1st URL:
                spider.AddUnspidered(targetUrlTextBox.Text + "/");

                //  Begin crawling the site by calling CrawlNext repeatedly.
                int i;
                int maxSpiderLink = Convert.ToInt32(CrawlerLimitationValue.Value);
                spiderProgressBar.Maximum = maxSpiderLink;

                for (i = 1; i <= maxSpiderLink; i++)
                {
                    if (stop_spider)
                    {
                        break;
                    }
                    bool success;
                    success = spider.CrawlNext();
                    if (success == true)
                    {
                        Chilkat.StringBuilder url_encode = new Chilkat.StringBuilder();
                        string crawl_Last_url            = spider.LastUrl;

                        //decode url
                        bool success_url_encode = url_encode.Append(crawl_Last_url);

                        url_encode.Decode("url", "utf-8");
                        string crawl_Last_url_decoded = url_encode.GetAsString();

                        //  The HTML is available in the LastHtml property
                        //Add AttackLog in Result Box
                        ExtractRichTextBox.AppendText(crawl_Last_url_decoded + Environment.NewLine);
                        ExtractRichTextBox.SelectionStart = ExtractRichTextBox.Text.Length;
                        ExtractRichTextBox.ScrollToCaret();

                        // add progress value
                        spiderProgressBar.Value2 = i;

                        crawled_links_text.Text = Convert.ToString(i);
                    }
                    else
                    {
                        //  Did we get an error or are there no more URLs to crawl?
                        if (spider.NumUnspidered == 0)
                        {
                            this.radDesktopAlert1.CaptionText = "Abdal Web Traffic Generator";
                            this.radDesktopAlert1.ContentText = "No more URLs to spider";
                            this.radDesktopAlert1.Show();
                        }
                        else
                        {
                            this.radDesktopAlert1.CaptionText = "Abdal Web Traffic Generator";
                            this.radDesktopAlert1.ContentText = spider.LastErrorText;
                            this.radDesktopAlert1.Show();
                        }
                    }

                    //  Sleep 1 second before spidering the next URL.
                    spider.SleepMs(1000);
                }
            }
        }
예제 #8
0
        public static void Sign()
        {
            //  This example requires the Chilkat API to have been previously unlocked.
            //  See Global Unlock Sample for sample code.

            //  The SOAP XML to be signed in this example contains the following:

            //  <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
            //  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
            //      <SOAP-ENV:Header>
            //          <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1"></wsse:Security>
            //      </SOAP-ENV:Header>
            //      <SOAP-ENV:Body xmlns:SOAP-SEC="http://schemas.xmlsoap.org/soap/security/2000-12" SOAP-SEC:id="Body">
            //          <z:FooBar xmlns:z="http://example.com" />
            //      </SOAP-ENV:Body>
            //  </SOAP-ENV:Envelope>
            //

            //  The above XML is available at https://www.chilkatsoft.com/exampleData/soapToSign.xml
            //  Fetch the XML and then sign it..

            string url = "https://www.chilkatsoft.com/exampleData/soapToSign.xml";

            Chilkat.Http          http      = new Chilkat.Http();
            Chilkat.StringBuilder sbSoapXml = new Chilkat.StringBuilder();
            bool success = http.QuickGetSb(url, sbSoapXml); //Not Working

            if (success != true)
            {
                Debug.WriteLine(http.LastErrorText);
                return;
            }

            //  Load a PFX file containing the certificate + private key.
            Chilkat.Cert cert = new Chilkat.Cert();
            success = cert.LoadPfxFile("E:\\XML\\keystore-demo\\certificate-sha256.pfx", "1234567890");
            if (success != true)
            {
                Debug.WriteLine(cert.LastErrorText);
                return;
            }

            //  Get the RSA private key for signing...
            Chilkat.PrivateKey rsaKey = cert.ExportPrivateKey();
            if (cert.LastMethodSuccess != true)
            {
                Debug.WriteLine(cert.LastErrorText);
                return;
            }

            //  To create the XML digital signature (i.e. embed the signature within
            //  the SOAP XML), we specify what is desired, and then call the method to
            //  create the XML signature.
            //
            //  For example, the application must provide the following:
            //      - Where to put the signature.
            //      - What to sign.
            //      - The algorithms to be used.
            //      - The key to be used for signing.
            //

            Chilkat.XmlDSigGen xmlSigGen = new Chilkat.XmlDSigGen();

            //  In this example, we're going to put the signature within the wsse:Security element.
            //  To specify the location, set the SigLocation property to the XML path to this element,
            //  using vertical bar characters to separate tags.
            xmlSigGen.SigLocation = "SOAP-ENV:Envelope|SOAP-ENV:Header|wsse:Security";

            //  An XML digital signature contains one or more references.  These are references to the parts
            //  of the XML document to be signed (a same document reference), or can be external references.
            //  This example will add a single same-document reference.  We'll add a reference to the XML fragment
            //  at SOAP-ENV:Body, which is indicated by providing the value of the "ID" attribute (where "ID" is case
            //  insensitive).  For each same-document reference, we must also indicate the hash algorithm and XML canonicalization
            //  algorithm to be used.  For this example we'll choose SHA-256 and Exclusive XML Canonicalization.
            xmlSigGen.AddSameDocRef("Body", "sha256", "EXCL_C14N", "", "");

            //  Let's provide the RSA key to be used for signing:
            xmlSigGen.SetPrivateKey(rsaKey);

            //  We're leaving the following properties at their default values:
            //
            //     - SigNamespacePrefix (default is "ds")
            //     - SigningAlg (for RSA keys. The default is PKCS1-v1_5, can be changed to RSASSA-PSS.)
            //     - SignedInfoCanonAlg  (default is EXCL_C14N)
            //     - SignedInfoDigestMethod (default is sha256)
            //     - KeyInfoType (default is "KeyValue", where the RSA public key is included in the Signature)

            //  Note: Each Reference has it's own specified algorithms for XML canonicalization and hashing,
            //  and the actual signature part (the SignedInfo) has it's own algorithms for the same.
            //  They may or may not be the same.  In this example, we use Exclusive XML Canonicalization and SHA-256 throughout.

            //  Finally, we're going to set one property that's optional, but commonly used.
            //  It's the SignedInfoPrefixList.  In this case, we're using Exclusive Canonicalization, and the signature
            //  will be placed in a location within the XML document where namespace prefixes are used in the ancestors.
            //  Specifically, the "wsse" and "SOAP-ENV" namespace prefixes are used.
            xmlSigGen.SignedInfoPrefixList = "wsse SOAP-ENV";

            //  OK, everything's specified, so let's create the XML digital signature:
            //  This in-place signs the XML.  If successful, sbSoapXml will contain the
            //  XML with the digital signature at the specified location.
            success = xmlSigGen.CreateXmlDSigSb(sbSoapXml);
            if (success != true)
            {
                Debug.WriteLine(xmlSigGen.LastErrorText);
                return;
            }

            //  Examine the signed SOAP XML:
            Debug.WriteLine(sbSoapXml.GetAsString());

            //  This is the signed SOAP XML.
            //  Chilkat emits the Signature in compact form on a single line.  Whitespace in XML signatures
            //  matters.  Chilkat's opinion is that writing the Signature without whitespace minimizes the chance
            //  for problems with whatever software might be verifying the signature.

            //  <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
            //  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
            //      <SOAP-ENV:Header>
            //          <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1"><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="wsse SOAP-ENV"/></ds:CanonicalizationMethod><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><ds:Reference URI="#Body"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>OwgHPZNfDkXnZsjpfzXqAcT3RV3HzmTsEy2bP44FJ0M=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>C+7FWngUpJ33Q1yq8uuscjCyPN2IO4cJhpMv03Jrrht1V+4gvJQLIBk6HHjo1uPQyfYj6zji3pg+fOyGUptp17CsRvjCzSpP35vB2lEzHeS8dcY8XfrEtTP/0FNn75LmhhkOPy0wjWkgDVbgzhXpEk9az8r8fQVTM3vrcmXT+WdMWJXKBRFt6PLAhsFt0scOFTWAkLGyCwygzimDKX2nT63TOit9BigtIx7fPRuMkbybMKCGGABq2DiEbvrPOiN3SUYpyMNR9KehRAGN+OWnESaDC6DhOvbKR88XHkM+GeaRe9PWdrRHrwGfp3qgolKjR/wFRSa1YGSBKAhDJFBcdg==</ds:SignatureValue><ds:KeyInfo><ds:KeyValue><ds:RSAKeyValue><ds:Modulus>sXeRhM55P13FbpNcXAMR3olbw2Wa6keZIHu5YTZYUBTlYWId+pNiwUz3zFIEo+0IfYR0H27ybIycQO+1IIzJofUFNMAL3tZps2OKPlsjuCPls6kXpXhv/gvhux8LrCtp4PcKWqJ6QVOZKChc7WAx40qFWzHi57ueqRTv3x0kESqGg/VjsqyTEvb55psJO2RsfhLT7+YVh3hImRM3RDaJdkTkPuOxeFyT6N7VXD09329sLuS3QkUbE9zEKDnz9X3d8dEQdJhSI9ba5fxl8R7fu8pB67ElfzFml96X1jLFtzy1pzOT5Fc4ROcaqlYckVzdBq9sxezm6MYmDBjNAcibRw==</ds:Modulus><ds:Exponent>AQAB</ds:Exponent></ds:RSAKeyValue></ds:KeyValue></ds:KeyInfo></ds:Signature></wsse:Security>
            //      </SOAP-ENV:Header>
            //      <SOAP-ENV:Body xmlns:SOAP-SEC="http://schemas.xmlsoap.org/soap/security/2000-12" SOAP-SEC:id="Body">
            //          <z:FooBar xmlns:z="http://example.com" />
            //      </SOAP-ENV:Body>
            //  </SOAP-ENV:Envelope>

            //  Here's the signature part formatted for easier reading.
            //  (Adding whitespace to the SignedInfo breaks the signature, so you wouldn't want to do this..)

            //      <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            //          <ds:SignedInfo>
            //              <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
            //                  <InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="wsse SOAP-ENV" />
            //              </ds:CanonicalizationMethod>
            //              <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
            //              <ds:Reference URI="#Body">
            //                  <ds:Transforms>
            //                      <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
            //                  </ds:Transforms>
            //                  <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
            //                  <ds:DigestValue>OwgHPZNfDkXnZsjpfzXqAcT3RV3HzmTsEy2bP44FJ0M=</ds:DigestValue>
            //              </ds:Reference>
            //          </ds:SignedInfo>
            //          <ds:SignatureValue>C+7FWngUp....BKAhDJFBcdg==</ds:SignatureValue>
            //          <ds:KeyInfo>
            //              <ds:KeyValue>
            //                  <ds:RSAKeyValue>
            //                      <ds:Modulus>sXeRhM55P13FbpNcXAMR....MYmDBjNAcibRw==</ds:Modulus>
            //                      <ds:Exponent>AQAB</ds:Exponent>
            //                  </ds:RSAKeyValue>
            //              </ds:KeyValue>
            //          </ds:KeyInfo>
            //      </ds:Signature>
        }