예제 #1
0
        /// <summary>
        /// Sets attributes and encoded base64 data, compressed if needed.
        /// </summary>
        /// <param name="xml">The Binary node to populate with attributes and a value.</param>
        /// <param name="rng">Not used.</param>
        /// <param name="parameters">Parameters for serialization.</param>
        public override void PopulateChildren(XElement xml, IRandomNumberGenerator rng, KdbxSerializationParameters parameters)
        {
            xml.Add(new XAttribute("ID", Id));

            byte[] data = BinaryData.GetClearData();
            if (ShouldCompress(parameters))
            {
                xml.Add(new XAttribute("Compressed", ToKeePassBool(true)));

                // Compress data if needed
                if (data.Length > 0)
                {
                    using (MemoryStream memStream = new MemoryStream())
                    {
                        using (Stream gzipStream = new GZipStream(memStream, CompressionMode.Compress))
                        {
                            gzipStream.Write(data, 0, data.Length);
                        }

                        memStream.Flush();
                        data = memStream.ToArray();
                    }
                }
            }

            string encoded = CryptographicBuffer.EncodeToBase64String(data.AsBuffer());

            xml.SetValue(encoded);
        }