StrongNameUtility.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / xsp / System / Web / Configuration / StrongNameUtility.cs / 1 / StrongNameUtility.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Web.Configuration { 
 
    using System.Diagnostics;
    using System.IO; 
    using System.Runtime.InteropServices;
    using System.Security.Permissions;

    internal class StrongNameUtility { 

        // Help class shouldn't be instantiated. 
        private StrongNameUtility() { 
        }
 
        ///     Free the buffer allocated by strong name functions
        /// 
        /// address of memory to free
        [DllImport("mscoree.dll")] 
        internal extern static void StrongNameFreeBuffer(IntPtr pbMemory);
 
        ///  
        ///     Return the last error
        ///  
        /// error information for the last strong name call
        [DllImport("mscoree.dll")]
        internal extern static int StrongNameErrorInfo();
 
        /// 
        ///     Generate a new key pair for strong name use 
        ///  
        /// desired key container name
        /// flags 
        /// [out] generated public / private key blob
        /// [out] size of the generated blob
        /// true if the key was generated, false if there was an error
        [DllImport("mscoree.dll")] 
        internal extern static bool StrongNameKeyGen([MarshalAs(UnmanagedType.LPWStr)]string wszKeyContainer,
                uint dwFlags, [Out]out IntPtr ppbKeyBlob, [Out]out long pcbKeyBlob); 
 
        internal static bool GenerateStrongNameFile(string filename) {
            // variables that hold the unmanaged key 
            IntPtr keyBlob = IntPtr.Zero;
            long generatedSize = 0;

            // create the key 
            bool createdKey = StrongNameKeyGen(null,
                0 /*No flags. 1 is to save the key in the key container */, 
                out keyBlob, out generatedSize); 

            // if there was a problem, translate it and report it 
            if (!createdKey || keyBlob == IntPtr.Zero) {
                throw Marshal.GetExceptionForHR(StrongNameErrorInfo());
            }
 
            try {
                Debug.Assert(keyBlob != IntPtr.Zero); 
 
                // make sure the key size makes sense
                Debug.Assert(generatedSize > 0 && generatedSize <= Int32.MaxValue); 
                if (generatedSize <= 0 || generatedSize > Int32.MaxValue) {
                    throw new InvalidOperationException(SR.GetString(SR.Browser_InvalidStrongNameKey));
                }
 
                // get the key into managed memory
                byte[] key = new byte[generatedSize]; 
                Marshal.Copy(keyBlob, key, 0, (int)generatedSize); 

                // write the key to the specified file 
                using (FileStream snkStream = new FileStream(filename, FileMode.Create, FileAccess.Write)) {
                    using (BinaryWriter snkWriter = new BinaryWriter(snkStream)) {
                        snkWriter.Write(key);
                    } 
                }
            } 
            finally { 
                // release the unmanaged memory the key resides in
                if (keyBlob != IntPtr.Zero) { 
                    StrongNameFreeBuffer(keyBlob);
                }
            }
 
            return true;
        } 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Web.Configuration { 
 
    using System.Diagnostics;
    using System.IO; 
    using System.Runtime.InteropServices;
    using System.Security.Permissions;

    internal class StrongNameUtility { 

        // Help class shouldn't be instantiated. 
        private StrongNameUtility() { 
        }
 
        ///     Free the buffer allocated by strong name functions
        /// 
        /// address of memory to free
        [DllImport("mscoree.dll")] 
        internal extern static void StrongNameFreeBuffer(IntPtr pbMemory);
 
        ///  
        ///     Return the last error
        ///  
        /// error information for the last strong name call
        [DllImport("mscoree.dll")]
        internal extern static int StrongNameErrorInfo();
 
        /// 
        ///     Generate a new key pair for strong name use 
        ///  
        /// desired key container name
        /// flags 
        /// [out] generated public / private key blob
        /// [out] size of the generated blob
        /// true if the key was generated, false if there was an error
        [DllImport("mscoree.dll")] 
        internal extern static bool StrongNameKeyGen([MarshalAs(UnmanagedType.LPWStr)]string wszKeyContainer,
                uint dwFlags, [Out]out IntPtr ppbKeyBlob, [Out]out long pcbKeyBlob); 
 
        internal static bool GenerateStrongNameFile(string filename) {
            // variables that hold the unmanaged key 
            IntPtr keyBlob = IntPtr.Zero;
            long generatedSize = 0;

            // create the key 
            bool createdKey = StrongNameKeyGen(null,
                0 /*No flags. 1 is to save the key in the key container */, 
                out keyBlob, out generatedSize); 

            // if there was a problem, translate it and report it 
            if (!createdKey || keyBlob == IntPtr.Zero) {
                throw Marshal.GetExceptionForHR(StrongNameErrorInfo());
            }
 
            try {
                Debug.Assert(keyBlob != IntPtr.Zero); 
 
                // make sure the key size makes sense
                Debug.Assert(generatedSize > 0 && generatedSize <= Int32.MaxValue); 
                if (generatedSize <= 0 || generatedSize > Int32.MaxValue) {
                    throw new InvalidOperationException(SR.GetString(SR.Browser_InvalidStrongNameKey));
                }
 
                // get the key into managed memory
                byte[] key = new byte[generatedSize]; 
                Marshal.Copy(keyBlob, key, 0, (int)generatedSize); 

                // write the key to the specified file 
                using (FileStream snkStream = new FileStream(filename, FileMode.Create, FileAccess.Write)) {
                    using (BinaryWriter snkWriter = new BinaryWriter(snkStream)) {
                        snkWriter.Write(key);
                    } 
                }
            } 
            finally { 
                // release the unmanaged memory the key resides in
                if (keyBlob != IntPtr.Zero) { 
                    StrongNameFreeBuffer(keyBlob);
                }
            }
 
            return true;
        } 
    } 
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK