public override string ToString()

in wwauth/Google.Solutions.WWAuth/Data/Saml2/AuthenticationRequest.cs [117:176]


        public override string ToString()
        {
            using (var output = new MemoryStream())
            {
                using (var zip = new DeflateStream(output, CompressionMode.Compress))
                using (var streamWriter = new StreamWriter(zip, new UTF8Encoding(false)))
                using (var writer = XmlWriter.Create(streamWriter))
                {
                    var xml = ToDocument();

                    if (this.SigningCertificate != null)
                    {
                        var signedXml = new SignedXml(xml.DocumentElement)
                        {
                            SigningKey = this.SigningCertificate.GetRSAPrivateKey()
                        };

                        signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256";
                        signedXml.SignedInfo.CanonicalizationMethod = "http://www.w3.org/2001/10/xml-exc-c14n#";

                        //
                        // Sign entire document using "SAML style" transforms.
                        //
                        var reference = new Reference()
                        {
                            Uri = string.Empty
                        };
                        reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
                        reference.AddTransform(new XmlDsigExcC14NTransform());
                        signedXml.AddReference(reference);

                        //
                        // Embed certificate.
                        //
                        var keyInfo = new KeyInfo();
                        keyInfo.AddClause(new KeyInfoX509Data(this.SigningCertificate));
                        signedXml.KeyInfo = keyInfo;

                        //
                        // Add signature after the Issuer element.
                        //
                        signedXml.ComputeSignature();

                        var issuer = xml.DocumentElement
                            .ChildNodes
                            .Cast<XmlNode>()
                            .OfType<XmlElement>()
                            .First(e => e.Name == "Issuer");

                        xml.DocumentElement.InsertAfter(
                            signedXml.GetXml(),
                            issuer);
                    }

                    xml.WriteTo(writer);
                }

                return Convert.ToBase64String(output.ToArray());
            }
        }