File: compmod\system\componentmodel\design\DesigntimeLicenseContextSerializer.cs
Project: ndp\fx\src\System.csproj (System)
//------------------------------------------------------------------------------
// <copyright file="DesigntimeLicenseContextSerializer.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------
 
namespace System.ComponentModel.Design {
    using System.Runtime.Remoting;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Runtime.Serialization;
    using System.Security;
    using System.Security.Permissions;
    using System.Collections;
    using System.ComponentModel;
    using System.Diagnostics;
    using System;
    using Microsoft.Win32;
    using System.IO;
    using System.Diagnostics.CodeAnalysis;
    
    /// <devdoc>
    ///    <para>
    ///       Provides support for design-time license context serialization.
    ///    </para>
    /// </devdoc>
    [HostProtection(SharedState = true)]
    [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.InheritanceDemand, Name = "FullTrust")]
    [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name="FullTrust")]
    public class DesigntimeLicenseContextSerializer {
 
        // not creatable...
        //
        private DesigntimeLicenseContextSerializer() {
        }
 
        /// <devdoc>
        ///    <para>
        ///       Serializes the licenses within the specified design-time license context
        ///       using the specified key and output stream.
        ///    </para>
        /// </devdoc>
        public static void Serialize(Stream o, string cryptoKey, DesigntimeLicenseContext context) {
            IFormatter formatter = new BinaryFormatter();
            formatter.Serialize(o, new object[] {cryptoKey, context.savedLicenseKeys});
        }
        
        [SuppressMessage("Microsoft.Security", "CA2107:ReviewDenyAndPermitOnlyUsage")] // Use of PermitOnly here is appropriate. This was a previous war-approved security bug fix.
        internal static void Deserialize(Stream o, string cryptoKey, RuntimeLicenseContext context) {
            IFormatter formatter = new BinaryFormatter();
 
            object obj = formatter.Deserialize(o);
 
            if (obj is object[]) {
                object[] value = (object[])obj;
                if (value[0] is string && (string)value[0] == cryptoKey) {
                    context.savedLicenseKeys = (Hashtable)value[1];
                }
            }
        }
    }
}