CngProvider.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / System / Security / Cryptography / CngProvider.cs / 1305376 / CngProvider.cs

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

using System; 
using System.Diagnostics.CodeAnalysis; 
using System.Diagnostics.Contracts;
 
namespace System.Security.Cryptography {
    /// 
    ///     Utility class to strongly type providers used with CNG. Since all CNG APIs which require a
    ///     provider name take the name as a string, we use this string wrapper class to specifically mark 
    ///     which parameters are expected to be providers.  We also provide a list of well known provider
    ///     names, which helps Intellisense users find a set of good providernames to use. 
    ///  
    [Serializable]
    [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] 
    public sealed class CngProvider : IEquatable {
        private static CngProvider s_msSmartCardKsp;
        private static CngProvider s_msSoftwareKsp;
 
        private string m_provider;
 
        public CngProvider(string provider) { 
            Contract.Ensures(!String.IsNullOrEmpty(m_provider));
 
            if (provider == null) {
                throw new ArgumentNullException("provider");
            }
            if (provider.Length == 0) { 
                throw new ArgumentException(SR.GetString(SR.Cryptography_InvalidProviderName, provider), "provider");
            } 
 
            m_provider = provider;
        } 

        /// 
        ///     Name of the CNG provider
        ///  
        public string Provider {
            get { 
                Contract.Ensures(!String.IsNullOrEmpty(Contract.Result())); 
                return m_provider;
            } 
        }

        public static bool operator ==(CngProvider left, CngProvider right) {
            if (Object.ReferenceEquals(left, null)) { 
                return Object.ReferenceEquals(right, null);
            } 
 
            return left.Equals(right);
        } 

        [Pure]
        public static bool operator !=(CngProvider left, CngProvider right) {
            if (Object.ReferenceEquals(left, null)) { 
                return !Object.ReferenceEquals(right, null);
            } 
 
            return !left.Equals(right);
        } 

        public override bool Equals(object obj) {
            Contract.Assert(m_provider != null);
 
            return Equals(obj as CngProvider);
        } 
 
        public bool Equals(CngProvider other) {
            if (Object.ReferenceEquals(other, null)) { 
                return false;
            }

            return m_provider.Equals(other.Provider); 
        }
 
        public override int GetHashCode() { 
            Contract.Assert(m_provider != null);
            return m_provider.GetHashCode(); 
        }

        public override string ToString() {
            Contract.Assert(m_provider != null); 
            return m_provider.ToString();
        } 
 
        //
        // Well known NCrypt KSPs 
        //

        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "CardKey", Justification = "This is not 'Smart Cardkey', but 'Smart Card Key'")]
        [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "SmartCard", Justification = "Smart Card is two words in the ncrypt usage")] 
        public static CngProvider MicrosoftSmartCardKeyStorageProvider {
            get { 
                Contract.Ensures(Contract.Result() != null); 

                if (s_msSmartCardKsp == null) { 
                    s_msSmartCardKsp = new CngProvider("Microsoft Smart Card Key Storage Provider");        // MS_SMART_CARD_KEY_STORAGE_PROVIDER
                }

                return s_msSmartCardKsp; 
            }
        } 
 
        public static CngProvider MicrosoftSoftwareKeyStorageProvider {
            get { 
                Contract.Ensures(Contract.Result() != null);

                if (s_msSoftwareKsp == null) {
                    s_msSoftwareKsp = new CngProvider("Microsoft Software Key Storage Provider");           // MS_KEY_STORAGE_PROVIDER 
                }
 
                return s_msSoftwareKsp; 
            }
        } 
    }
}

// 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