Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Security / Cryptography / X509Certificates / X509Certificate.cs / 1305376 / X509Certificate.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // X509Certificate.cs // namespace System.Security.Cryptography.X509Certificates { using Microsoft.Win32; using System; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Security; using System.Security.Permissions; using System.Security.Util; using System.Text; using System.Runtime.Versioning; using System.Globalization; using System.Diagnostics.Contracts; [System.Runtime.InteropServices.ComVisible(true)] public enum X509ContentType { Unknown = 0x00, Cert = 0x01 #if !FEATURE_CORECLR , SerializedCert = 0x02, #if !FEATURE_PAL Pfx = 0x03, Pkcs12 = Pfx, #endif // !FEATURE_PAL SerializedStore = 0x04, Pkcs7 = 0x05, Authenticode = 0x06 #endif // !FEATURE_CORECLR } // DefaultKeySet, UserKeySet and MachineKeySet are mutually exclusive [Serializable] [Flags] [System.Runtime.InteropServices.ComVisible(true)] public enum X509KeyStorageFlags { DefaultKeySet = 0x00 #if !FEATURE_CORECLR , UserKeySet = 0x01, MachineKeySet = 0x02, Exportable = 0x04, UserProtected = 0x08, PersistKeySet = 0x10 #endif // !FEATURE_CORECLR } [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public class X509Certificate : IDeserializationCallback, ISerializable { private const string m_format = "X509"; private string m_subjectName; private string m_issuerName; private byte[] m_serialNumber; private byte[] m_publicKeyParameters; private byte[] m_publicKeyValue; private string m_publicKeyOid; private byte[] m_rawData; private byte[] m_thumbprint; private DateTime m_notBefore; private DateTime m_notAfter; [System.Security.SecurityCritical /*auto-generated*/] private SafeCertContextHandle m_safeCertContext; // // public constructors // [System.Security.SecuritySafeCritical] // auto-generated private void Init() { m_safeCertContext = SafeCertContextHandle.InvalidHandle; } public X509Certificate () { Init(); } public X509Certificate (byte[] data):this() { if ((data != null) && (data.Length != 0)) LoadCertificateFromBlob(data, null, X509KeyStorageFlags.DefaultKeySet); } public X509Certificate (byte[] rawData, string password):this() { LoadCertificateFromBlob(rawData, password, X509KeyStorageFlags.DefaultKeySet); } #if FEATURE_X509_SECURESTRINGS public X509Certificate (byte[] rawData, SecureString password):this() { LoadCertificateFromBlob(rawData, password, X509KeyStorageFlags.DefaultKeySet); } #endif // FEATURE_X509_SECURESTRINGS public X509Certificate (byte[] rawData, string password, X509KeyStorageFlags keyStorageFlags):this() { LoadCertificateFromBlob(rawData, password, keyStorageFlags); } #if FEATURE_X509_SECURESTRINGS public X509Certificate (byte[] rawData, SecureString password, X509KeyStorageFlags keyStorageFlags):this() { LoadCertificateFromBlob(rawData, password, keyStorageFlags); } #endif // FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public X509Certificate (string fileName):this() { LoadCertificateFromFile(fileName, null, X509KeyStorageFlags.DefaultKeySet); } [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public X509Certificate (string fileName, string password):this() { LoadCertificateFromFile(fileName, password, X509KeyStorageFlags.DefaultKeySet); } #if FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public X509Certificate (string fileName, SecureString password):this() { LoadCertificateFromFile(fileName, password, X509KeyStorageFlags.DefaultKeySet); } #endif // FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public X509Certificate (string fileName, string password, X509KeyStorageFlags keyStorageFlags):this() { LoadCertificateFromFile(fileName, password, keyStorageFlags); } #if FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public X509Certificate (string fileName, SecureString password, X509KeyStorageFlags keyStorageFlags):this() { LoadCertificateFromFile(fileName, password, keyStorageFlags); } #endif // FEATURE_X509_SECURESTRINGS // Package protected constructor for creating a certificate from a PCCERT_CONTEXT [System.Security.SecurityCritical] // auto-generated_required [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] public X509Certificate (IntPtr handle):this() { if (handle == IntPtr.Zero) throw new ArgumentException(Environment.GetResourceString("Arg_InvalidHandle"), "handle"); Contract.EndContractBlock(); X509Utils._DuplicateCertContext(handle, ref m_safeCertContext); } [System.Security.SecuritySafeCritical] // auto-generated public X509Certificate (X509Certificate cert):this() { if (cert == null) throw new ArgumentNullException("cert"); Contract.EndContractBlock(); if (cert.m_safeCertContext.pCertContext != IntPtr.Zero) X509Utils._DuplicateCertContext(cert.m_safeCertContext.pCertContext, ref this.m_safeCertContext); // we need to keep the certificate context alive until we are done with duplicating the handle. GC.KeepAlive(cert.m_safeCertContext); } public X509Certificate (SerializationInfo info, StreamingContext context):this() { byte[] rawData = (byte[]) info.GetValue("RawData", typeof(byte[])); if (rawData != null) LoadCertificateFromBlob(rawData, null, X509KeyStorageFlags.DefaultKeySet); } [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public static X509Certificate CreateFromCertFile (string filename) { return new X509Certificate(filename); } [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public static X509Certificate CreateFromSignedFile (string filename) { return new X509Certificate(filename); } [System.Runtime.InteropServices.ComVisible(false)] public IntPtr Handle { [System.Security.SecurityCritical] // auto-generated_required [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] get { return m_safeCertContext.pCertContext; } } [System.Security.SecuritySafeCritical] // auto-generated [Obsolete("This method has been deprecated. Please use the Subject property instead. http://go.microsoft.com/fwlink/?linkid=14202")] public virtual string GetName() { ThrowIfContextInvalid(); return X509Utils._GetSubjectInfo(m_safeCertContext, X509Constants.CERT_NAME_RDN_TYPE, true); } [System.Security.SecuritySafeCritical] // auto-generated [Obsolete("This method has been deprecated. Please use the Issuer property instead. http://go.microsoft.com/fwlink/?linkid=14202")] public virtual string GetIssuerName() { ThrowIfContextInvalid(); return X509Utils._GetIssuerName(m_safeCertContext, true); } [System.Security.SecuritySafeCritical] // auto-generated public virtual byte[] GetSerialNumber() { ThrowIfContextInvalid(); if (m_serialNumber == null) m_serialNumber = X509Utils._GetSerialNumber(m_safeCertContext); return (byte[]) m_serialNumber.Clone(); } public virtual string GetSerialNumberString() { return SerialNumber; } [System.Security.SecuritySafeCritical] // auto-generated public virtual byte[] GetKeyAlgorithmParameters() { ThrowIfContextInvalid(); if (m_publicKeyParameters == null) m_publicKeyParameters = X509Utils._GetPublicKeyParameters(m_safeCertContext); return (byte[]) m_publicKeyParameters.Clone(); } [System.Security.SecuritySafeCritical] // auto-generated public virtual string GetKeyAlgorithmParametersString() { ThrowIfContextInvalid(); return Hex.EncodeHexString(GetKeyAlgorithmParameters()); } [System.Security.SecuritySafeCritical] // auto-generated public virtual string GetKeyAlgorithm() { ThrowIfContextInvalid(); if (m_publicKeyOid == null) m_publicKeyOid = X509Utils._GetPublicKeyOid(m_safeCertContext); return m_publicKeyOid; } [System.Security.SecuritySafeCritical] // auto-generated public virtual byte[] GetPublicKey() { ThrowIfContextInvalid(); if (m_publicKeyValue == null) m_publicKeyValue = X509Utils._GetPublicKeyValue(m_safeCertContext); return (byte[]) m_publicKeyValue.Clone(); } public virtual string GetPublicKeyString() { return Hex.EncodeHexString(GetPublicKey()); } [System.Security.SecuritySafeCritical] // auto-generated public virtual byte[] GetRawCertData() { return RawData; } public virtual string GetRawCertDataString() { return Hex.EncodeHexString(GetRawCertData()); } public virtual byte[] GetCertHash() { SetThumbprint(); return (byte[]) m_thumbprint.Clone(); } public virtual string GetCertHashString() { SetThumbprint(); return Hex.EncodeHexString(m_thumbprint); } public virtual string GetEffectiveDateString() { return NotBefore.ToString(); } public virtual string GetExpirationDateString() { return NotAfter.ToString(); } [System.Runtime.InteropServices.ComVisible(false)] public override bool Equals (Object obj) { if (!(obj is X509Certificate)) return false; X509Certificate other = (X509Certificate) obj; return this.Equals(other); } [System.Security.SecuritySafeCritical] // auto-generated public virtual bool Equals (X509Certificate other) { if (other == null) return false; if (m_safeCertContext.IsInvalid) return other.m_safeCertContext.IsInvalid; if (!this.Issuer.Equals(other.Issuer)) return false; if (!this.SerialNumber.Equals(other.SerialNumber)) return false; return true; } [System.Security.SecuritySafeCritical] // auto-generated public override int GetHashCode() { if (m_safeCertContext.IsInvalid) return 0; SetThumbprint(); int value = 0; for (int i = 0; i < m_thumbprint.Length && i < 4; ++i) { value = value << 8 | m_thumbprint[i]; } return value; } public override string ToString() { return ToString(false); } [System.Security.SecuritySafeCritical] // auto-generated public virtual string ToString (bool fVerbose) { if (fVerbose == false || m_safeCertContext.IsInvalid) return GetType().FullName; StringBuilder sb = new StringBuilder(); // Subject sb.Append("[Subject]" + Environment.NewLine + " "); sb.Append(this.Subject); // Issuer sb.Append(Environment.NewLine + Environment.NewLine + "[Issuer]" + Environment.NewLine + " "); sb.Append(this.Issuer); // Serial Number sb.Append(Environment.NewLine + Environment.NewLine + "[Serial Number]" + Environment.NewLine + " "); sb.Append(this.SerialNumber); // NotBefore sb.Append(Environment.NewLine + Environment.NewLine + "[Not Before]" + Environment.NewLine + " "); sb.Append(FormatDate(this.NotBefore)); // NotAfter sb.Append(Environment.NewLine + Environment.NewLine + "[Not After]" + Environment.NewLine + " "); sb.Append(FormatDate(this.NotAfter)); // Thumbprint sb.Append(Environment.NewLine + Environment.NewLine + "[Thumbprint]" + Environment.NewLine + " "); sb.Append(this.GetCertHashString()); sb.Append(Environment.NewLine); return sb.ToString(); } ////// Convert a date to a string. /// /// Some cultures, specifically using the Um-AlQura calendar cannot convert dates far into /// the future into strings. If the expiration date of an X.509 certificate is beyond the range /// of one of these these cases, we need to fall back to a calendar which can express the dates /// protected static string FormatDate(DateTime date) { CultureInfo culture = CultureInfo.CurrentCulture; if (!culture.DateTimeFormat.Calendar.IsValidDay(date.Year, date.Month, date.Day, 0)) { #if !FEATURE_ONLY_CORE_CALENDARS // The most common case of culture failing to work is in the Um-AlQuara calendar. In this case, // we can fall back to the Hijri calendar, otherwise fall back to the invariant culture. if (culture.DateTimeFormat.Calendar is UmAlQuraCalendar) { culture = culture.Clone() as CultureInfo; culture.DateTimeFormat.Calendar = new HijriCalendar(); } else #endif // !FEATURE_ONLY_CORE_CALENDARS { culture = CultureInfo.InvariantCulture; } } return date.ToString(culture); } public virtual string GetFormat() { return m_format; } public string Issuer { [System.Security.SecuritySafeCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_issuerName == null) m_issuerName = X509Utils._GetIssuerName(m_safeCertContext, false); return m_issuerName; } } public string Subject { [System.Security.SecuritySafeCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_subjectName == null) m_subjectName = X509Utils._GetSubjectInfo(m_safeCertContext, X509Constants.CERT_NAME_RDN_TYPE, false); return m_subjectName; } } [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(byte[] rawData) { Reset(); LoadCertificateFromBlob(rawData, null, X509KeyStorageFlags.DefaultKeySet); } [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(byte[] rawData, string password, X509KeyStorageFlags keyStorageFlags) { Reset(); LoadCertificateFromBlob(rawData, password, keyStorageFlags); } #if FEATURE_X509_SECURESTRINGS [System.Security.SecurityCritical] // auto-generated_required [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(byte[] rawData, SecureString password, X509KeyStorageFlags keyStorageFlags) { Reset(); LoadCertificateFromBlob(rawData, password, keyStorageFlags); } #endif // FEATURE_X509_SECURESTRINGS [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(string fileName) { Reset(); LoadCertificateFromFile(fileName, null, X509KeyStorageFlags.DefaultKeySet); } [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(string fileName, string password, X509KeyStorageFlags keyStorageFlags) { Reset(); LoadCertificateFromFile(fileName, password, keyStorageFlags); } #if FEATURE_X509_SECURESTRINGS [System.Security.SecurityCritical] // auto-generated_required [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(string fileName, SecureString password, X509KeyStorageFlags keyStorageFlags) { Reset(); LoadCertificateFromFile(fileName, password, keyStorageFlags); } #endif // FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated [System.Runtime.InteropServices.ComVisible(false)] public virtual byte[] Export(X509ContentType contentType) { return ExportHelper(contentType, null); } [System.Security.SecuritySafeCritical] // auto-generated [System.Runtime.InteropServices.ComVisible(false)] public virtual byte[] Export(X509ContentType contentType, string password) { return ExportHelper(contentType, password); } #if FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated public virtual byte[] Export(X509ContentType contentType, SecureString password) { return ExportHelper(contentType, password); } #endif // FEATURE_X509_SECURESTRINGS [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Reset () { m_subjectName = null; m_issuerName = null; m_serialNumber = null; m_publicKeyParameters = null; m_publicKeyValue = null; m_publicKeyOid = null; m_rawData = null; m_thumbprint = null; m_notBefore = DateTime.MinValue; m_notAfter = DateTime.MinValue; if (!m_safeCertContext.IsInvalid) { // Free the current certificate handle m_safeCertContext.Dispose(); m_safeCertContext = SafeCertContextHandle.InvalidHandle; } } #if FEATURE_SERIALIZATION ///[System.Security.SecurityCritical] // auto-generated_required void ISerializable.GetObjectData (SerializationInfo info, StreamingContext context) { if (m_safeCertContext.IsInvalid) info.AddValue("RawData", null); else info.AddValue("RawData", this.RawData); } /// void IDeserializationCallback.OnDeserialization(Object sender) {} #endif // // internal. // internal SafeCertContextHandle CertContext { [System.Security.SecurityCritical] // auto-generated get { return m_safeCertContext; } } // // private methods. // [System.Security.SecurityCritical] // auto-generated private void ThrowIfContextInvalid() { if (m_safeCertContext.IsInvalid) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidHandle"), "m_safeCertContext"); } private DateTime NotAfter { [System.Security.SecuritySafeCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_notAfter == DateTime.MinValue) { Win32Native.FILE_TIME fileTime = new Win32Native.FILE_TIME(); X509Utils._GetDateNotAfter(m_safeCertContext, ref fileTime); m_notAfter = DateTime.FromFileTime(fileTime.ToTicks()); } return m_notAfter; } } private DateTime NotBefore { [System.Security.SecuritySafeCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_notBefore == DateTime.MinValue) { Win32Native.FILE_TIME fileTime = new Win32Native.FILE_TIME(); X509Utils._GetDateNotBefore(m_safeCertContext, ref fileTime); m_notBefore = DateTime.FromFileTime(fileTime.ToTicks()); } return m_notBefore; } } private byte[] RawData { [System.Security.SecurityCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_rawData == null) m_rawData = X509Utils._GetCertRawData(m_safeCertContext); return (byte[]) m_rawData.Clone(); } } private string SerialNumber { [System.Security.SecuritySafeCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_serialNumber == null) m_serialNumber = X509Utils._GetSerialNumber(m_safeCertContext); return Hex.EncodeHexStringFromInt(m_serialNumber); } } [System.Security.SecuritySafeCritical] // auto-generated private void SetThumbprint () { ThrowIfContextInvalid(); if (m_thumbprint == null) m_thumbprint = X509Utils._GetThumbprint(m_safeCertContext); } [System.Security.SecurityCritical] // auto-generated private byte[] ExportHelper (X509ContentType contentType, object password) { switch(contentType) { case X509ContentType.Cert: break; #if FEATURE_CORECLR case (X509ContentType)0x02 /* X509ContentType.SerializedCert */: case (X509ContentType)0x03 /* X509ContentType.Pkcs12 */: throw new CryptographicException(Environment.GetResourceString("Cryptography_X509_InvalidContentType"), new NotSupportedException()); #else // FEATURE_CORECLR case X509ContentType.SerializedCert: break; #if !FEATURE_PAL case X509ContentType.Pkcs12: KeyContainerPermission kp = new KeyContainerPermission(KeyContainerPermissionFlags.Open | KeyContainerPermissionFlags.Export); kp.Demand(); break; #endif // !FEATURE_PAL #endif // FEATURE_CORECLR else default: throw new CryptographicException(Environment.GetResourceString("Cryptography_X509_InvalidContentType")); } #if !FEATURE_CORECLR IntPtr szPassword = IntPtr.Zero; byte[] encodedRawData = null; SafeCertStoreHandle safeCertStoreHandle = X509Utils.ExportCertToMemoryStore(this); RuntimeHelpers.PrepareConstrainedRegions(); try { szPassword = X509Utils.PasswordToHGlobalUni(password); encodedRawData = X509Utils._ExportCertificatesToBlob(safeCertStoreHandle, contentType, szPassword); } finally { if (szPassword != IntPtr.Zero) Marshal.ZeroFreeGlobalAllocUnicode(szPassword); safeCertStoreHandle.Dispose(); } if (encodedRawData == null) throw new CryptographicException(Environment.GetResourceString("Cryptography_X509_ExportFailed")); return encodedRawData; #else // !FEATURE_CORECLR return RawData; #endif // !FEATURE_CORECLR } [System.Security.SecuritySafeCritical] // auto-generated private void LoadCertificateFromBlob (byte[] rawData, object password, X509KeyStorageFlags keyStorageFlags) { if (rawData == null || rawData.Length == 0) throw new ArgumentException(Environment.GetResourceString("Arg_EmptyOrNullArray"), "rawData"); Contract.EndContractBlock(); X509ContentType contentType = X509Utils.MapContentType(X509Utils._QueryCertBlobType(rawData)); #if !FEATURE_CORECLR && !FEATURE_PAL if (contentType == X509ContentType.Pkcs12 && (keyStorageFlags & X509KeyStorageFlags.PersistKeySet) == X509KeyStorageFlags.PersistKeySet) { KeyContainerPermission kp = new KeyContainerPermission(KeyContainerPermissionFlags.Create); kp.Demand(); } #endif // !FEATURE_CORECLR && !FEATURE_PAL uint dwFlags = X509Utils.MapKeyStorageFlags(keyStorageFlags); IntPtr szPassword = IntPtr.Zero; RuntimeHelpers.PrepareConstrainedRegions(); try { szPassword = X509Utils.PasswordToHGlobalUni(password); X509Utils._LoadCertFromBlob(rawData, szPassword, dwFlags, #if FEATURE_CORECLR false, #else // FEATURE_CORECLR (keyStorageFlags & X509KeyStorageFlags.PersistKeySet) == 0 ? false : true, #endif // FEATURE_CORECLR else ref m_safeCertContext); } finally { if (szPassword != IntPtr.Zero) Marshal.ZeroFreeGlobalAllocUnicode(szPassword); } } [System.Security.SecurityCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] private void LoadCertificateFromFile (string fileName, object password, X509KeyStorageFlags keyStorageFlags) { if (fileName == null) throw new ArgumentNullException("fileName"); Contract.EndContractBlock(); string fullPath = Path.GetFullPathInternal(fileName); new FileIOPermission (FileIOPermissionAccess.Read, fullPath).Demand(); X509ContentType contentType = X509Utils.MapContentType(X509Utils._QueryCertFileType(fileName)); #if !FEATURE_CORECLR && !FEATURE_PAL if (contentType == X509ContentType.Pkcs12 && (keyStorageFlags & X509KeyStorageFlags.PersistKeySet) == X509KeyStorageFlags.PersistKeySet) { KeyContainerPermission kp = new KeyContainerPermission(KeyContainerPermissionFlags.Create); kp.Demand(); } #endif // !FEATURE_CORECLR && !FEATURE_PAL uint dwFlags = X509Utils.MapKeyStorageFlags(keyStorageFlags); IntPtr szPassword = IntPtr.Zero; RuntimeHelpers.PrepareConstrainedRegions(); try { szPassword = X509Utils.PasswordToHGlobalUni(password); X509Utils._LoadCertFromFile(fileName, szPassword, dwFlags, #if FEATURE_CORECLR false, #else // FEATURE_CORECLR (keyStorageFlags & X509KeyStorageFlags.PersistKeySet) == 0 ? false : true, #endif // FEATURE_CORECLR else ref m_safeCertContext); } finally { if (szPassword != IntPtr.Zero) Marshal.ZeroFreeGlobalAllocUnicode(szPassword); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== // // X509Certificate.cs // namespace System.Security.Cryptography.X509Certificates { using Microsoft.Win32; using System; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Security; using System.Security.Permissions; using System.Security.Util; using System.Text; using System.Runtime.Versioning; using System.Globalization; using System.Diagnostics.Contracts; [System.Runtime.InteropServices.ComVisible(true)] public enum X509ContentType { Unknown = 0x00, Cert = 0x01 #if !FEATURE_CORECLR , SerializedCert = 0x02, #if !FEATURE_PAL Pfx = 0x03, Pkcs12 = Pfx, #endif // !FEATURE_PAL SerializedStore = 0x04, Pkcs7 = 0x05, Authenticode = 0x06 #endif // !FEATURE_CORECLR } // DefaultKeySet, UserKeySet and MachineKeySet are mutually exclusive [Serializable] [Flags] [System.Runtime.InteropServices.ComVisible(true)] public enum X509KeyStorageFlags { DefaultKeySet = 0x00 #if !FEATURE_CORECLR , UserKeySet = 0x01, MachineKeySet = 0x02, Exportable = 0x04, UserProtected = 0x08, PersistKeySet = 0x10 #endif // !FEATURE_CORECLR } [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public class X509Certificate : IDeserializationCallback, ISerializable { private const string m_format = "X509"; private string m_subjectName; private string m_issuerName; private byte[] m_serialNumber; private byte[] m_publicKeyParameters; private byte[] m_publicKeyValue; private string m_publicKeyOid; private byte[] m_rawData; private byte[] m_thumbprint; private DateTime m_notBefore; private DateTime m_notAfter; [System.Security.SecurityCritical /*auto-generated*/] private SafeCertContextHandle m_safeCertContext; // // public constructors // [System.Security.SecuritySafeCritical] // auto-generated private void Init() { m_safeCertContext = SafeCertContextHandle.InvalidHandle; } public X509Certificate () { Init(); } public X509Certificate (byte[] data):this() { if ((data != null) && (data.Length != 0)) LoadCertificateFromBlob(data, null, X509KeyStorageFlags.DefaultKeySet); } public X509Certificate (byte[] rawData, string password):this() { LoadCertificateFromBlob(rawData, password, X509KeyStorageFlags.DefaultKeySet); } #if FEATURE_X509_SECURESTRINGS public X509Certificate (byte[] rawData, SecureString password):this() { LoadCertificateFromBlob(rawData, password, X509KeyStorageFlags.DefaultKeySet); } #endif // FEATURE_X509_SECURESTRINGS public X509Certificate (byte[] rawData, string password, X509KeyStorageFlags keyStorageFlags):this() { LoadCertificateFromBlob(rawData, password, keyStorageFlags); } #if FEATURE_X509_SECURESTRINGS public X509Certificate (byte[] rawData, SecureString password, X509KeyStorageFlags keyStorageFlags):this() { LoadCertificateFromBlob(rawData, password, keyStorageFlags); } #endif // FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public X509Certificate (string fileName):this() { LoadCertificateFromFile(fileName, null, X509KeyStorageFlags.DefaultKeySet); } [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public X509Certificate (string fileName, string password):this() { LoadCertificateFromFile(fileName, password, X509KeyStorageFlags.DefaultKeySet); } #if FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public X509Certificate (string fileName, SecureString password):this() { LoadCertificateFromFile(fileName, password, X509KeyStorageFlags.DefaultKeySet); } #endif // FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public X509Certificate (string fileName, string password, X509KeyStorageFlags keyStorageFlags):this() { LoadCertificateFromFile(fileName, password, keyStorageFlags); } #if FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public X509Certificate (string fileName, SecureString password, X509KeyStorageFlags keyStorageFlags):this() { LoadCertificateFromFile(fileName, password, keyStorageFlags); } #endif // FEATURE_X509_SECURESTRINGS // Package protected constructor for creating a certificate from a PCCERT_CONTEXT [System.Security.SecurityCritical] // auto-generated_required [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] public X509Certificate (IntPtr handle):this() { if (handle == IntPtr.Zero) throw new ArgumentException(Environment.GetResourceString("Arg_InvalidHandle"), "handle"); Contract.EndContractBlock(); X509Utils._DuplicateCertContext(handle, ref m_safeCertContext); } [System.Security.SecuritySafeCritical] // auto-generated public X509Certificate (X509Certificate cert):this() { if (cert == null) throw new ArgumentNullException("cert"); Contract.EndContractBlock(); if (cert.m_safeCertContext.pCertContext != IntPtr.Zero) X509Utils._DuplicateCertContext(cert.m_safeCertContext.pCertContext, ref this.m_safeCertContext); // we need to keep the certificate context alive until we are done with duplicating the handle. GC.KeepAlive(cert.m_safeCertContext); } public X509Certificate (SerializationInfo info, StreamingContext context):this() { byte[] rawData = (byte[]) info.GetValue("RawData", typeof(byte[])); if (rawData != null) LoadCertificateFromBlob(rawData, null, X509KeyStorageFlags.DefaultKeySet); } [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public static X509Certificate CreateFromCertFile (string filename) { return new X509Certificate(filename); } [System.Security.SecuritySafeCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public static X509Certificate CreateFromSignedFile (string filename) { return new X509Certificate(filename); } [System.Runtime.InteropServices.ComVisible(false)] public IntPtr Handle { [System.Security.SecurityCritical] // auto-generated_required [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags=SecurityPermissionFlag.UnmanagedCode)] get { return m_safeCertContext.pCertContext; } } [System.Security.SecuritySafeCritical] // auto-generated [Obsolete("This method has been deprecated. Please use the Subject property instead. http://go.microsoft.com/fwlink/?linkid=14202")] public virtual string GetName() { ThrowIfContextInvalid(); return X509Utils._GetSubjectInfo(m_safeCertContext, X509Constants.CERT_NAME_RDN_TYPE, true); } [System.Security.SecuritySafeCritical] // auto-generated [Obsolete("This method has been deprecated. Please use the Issuer property instead. http://go.microsoft.com/fwlink/?linkid=14202")] public virtual string GetIssuerName() { ThrowIfContextInvalid(); return X509Utils._GetIssuerName(m_safeCertContext, true); } [System.Security.SecuritySafeCritical] // auto-generated public virtual byte[] GetSerialNumber() { ThrowIfContextInvalid(); if (m_serialNumber == null) m_serialNumber = X509Utils._GetSerialNumber(m_safeCertContext); return (byte[]) m_serialNumber.Clone(); } public virtual string GetSerialNumberString() { return SerialNumber; } [System.Security.SecuritySafeCritical] // auto-generated public virtual byte[] GetKeyAlgorithmParameters() { ThrowIfContextInvalid(); if (m_publicKeyParameters == null) m_publicKeyParameters = X509Utils._GetPublicKeyParameters(m_safeCertContext); return (byte[]) m_publicKeyParameters.Clone(); } [System.Security.SecuritySafeCritical] // auto-generated public virtual string GetKeyAlgorithmParametersString() { ThrowIfContextInvalid(); return Hex.EncodeHexString(GetKeyAlgorithmParameters()); } [System.Security.SecuritySafeCritical] // auto-generated public virtual string GetKeyAlgorithm() { ThrowIfContextInvalid(); if (m_publicKeyOid == null) m_publicKeyOid = X509Utils._GetPublicKeyOid(m_safeCertContext); return m_publicKeyOid; } [System.Security.SecuritySafeCritical] // auto-generated public virtual byte[] GetPublicKey() { ThrowIfContextInvalid(); if (m_publicKeyValue == null) m_publicKeyValue = X509Utils._GetPublicKeyValue(m_safeCertContext); return (byte[]) m_publicKeyValue.Clone(); } public virtual string GetPublicKeyString() { return Hex.EncodeHexString(GetPublicKey()); } [System.Security.SecuritySafeCritical] // auto-generated public virtual byte[] GetRawCertData() { return RawData; } public virtual string GetRawCertDataString() { return Hex.EncodeHexString(GetRawCertData()); } public virtual byte[] GetCertHash() { SetThumbprint(); return (byte[]) m_thumbprint.Clone(); } public virtual string GetCertHashString() { SetThumbprint(); return Hex.EncodeHexString(m_thumbprint); } public virtual string GetEffectiveDateString() { return NotBefore.ToString(); } public virtual string GetExpirationDateString() { return NotAfter.ToString(); } [System.Runtime.InteropServices.ComVisible(false)] public override bool Equals (Object obj) { if (!(obj is X509Certificate)) return false; X509Certificate other = (X509Certificate) obj; return this.Equals(other); } [System.Security.SecuritySafeCritical] // auto-generated public virtual bool Equals (X509Certificate other) { if (other == null) return false; if (m_safeCertContext.IsInvalid) return other.m_safeCertContext.IsInvalid; if (!this.Issuer.Equals(other.Issuer)) return false; if (!this.SerialNumber.Equals(other.SerialNumber)) return false; return true; } [System.Security.SecuritySafeCritical] // auto-generated public override int GetHashCode() { if (m_safeCertContext.IsInvalid) return 0; SetThumbprint(); int value = 0; for (int i = 0; i < m_thumbprint.Length && i < 4; ++i) { value = value << 8 | m_thumbprint[i]; } return value; } public override string ToString() { return ToString(false); } [System.Security.SecuritySafeCritical] // auto-generated public virtual string ToString (bool fVerbose) { if (fVerbose == false || m_safeCertContext.IsInvalid) return GetType().FullName; StringBuilder sb = new StringBuilder(); // Subject sb.Append("[Subject]" + Environment.NewLine + " "); sb.Append(this.Subject); // Issuer sb.Append(Environment.NewLine + Environment.NewLine + "[Issuer]" + Environment.NewLine + " "); sb.Append(this.Issuer); // Serial Number sb.Append(Environment.NewLine + Environment.NewLine + "[Serial Number]" + Environment.NewLine + " "); sb.Append(this.SerialNumber); // NotBefore sb.Append(Environment.NewLine + Environment.NewLine + "[Not Before]" + Environment.NewLine + " "); sb.Append(FormatDate(this.NotBefore)); // NotAfter sb.Append(Environment.NewLine + Environment.NewLine + "[Not After]" + Environment.NewLine + " "); sb.Append(FormatDate(this.NotAfter)); // Thumbprint sb.Append(Environment.NewLine + Environment.NewLine + "[Thumbprint]" + Environment.NewLine + " "); sb.Append(this.GetCertHashString()); sb.Append(Environment.NewLine); return sb.ToString(); } /// /// Convert a date to a string. /// /// Some cultures, specifically using the Um-AlQura calendar cannot convert dates far into /// the future into strings. If the expiration date of an X.509 certificate is beyond the range /// of one of these these cases, we need to fall back to a calendar which can express the dates /// protected static string FormatDate(DateTime date) { CultureInfo culture = CultureInfo.CurrentCulture; if (!culture.DateTimeFormat.Calendar.IsValidDay(date.Year, date.Month, date.Day, 0)) { #if !FEATURE_ONLY_CORE_CALENDARS // The most common case of culture failing to work is in the Um-AlQuara calendar. In this case, // we can fall back to the Hijri calendar, otherwise fall back to the invariant culture. if (culture.DateTimeFormat.Calendar is UmAlQuraCalendar) { culture = culture.Clone() as CultureInfo; culture.DateTimeFormat.Calendar = new HijriCalendar(); } else #endif // !FEATURE_ONLY_CORE_CALENDARS { culture = CultureInfo.InvariantCulture; } } return date.ToString(culture); } public virtual string GetFormat() { return m_format; } public string Issuer { [System.Security.SecuritySafeCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_issuerName == null) m_issuerName = X509Utils._GetIssuerName(m_safeCertContext, false); return m_issuerName; } } public string Subject { [System.Security.SecuritySafeCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_subjectName == null) m_subjectName = X509Utils._GetSubjectInfo(m_safeCertContext, X509Constants.CERT_NAME_RDN_TYPE, false); return m_subjectName; } } [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(byte[] rawData) { Reset(); LoadCertificateFromBlob(rawData, null, X509KeyStorageFlags.DefaultKeySet); } [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(byte[] rawData, string password, X509KeyStorageFlags keyStorageFlags) { Reset(); LoadCertificateFromBlob(rawData, password, keyStorageFlags); } #if FEATURE_X509_SECURESTRINGS [System.Security.SecurityCritical] // auto-generated_required [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(byte[] rawData, SecureString password, X509KeyStorageFlags keyStorageFlags) { Reset(); LoadCertificateFromBlob(rawData, password, keyStorageFlags); } #endif // FEATURE_X509_SECURESTRINGS [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(string fileName) { Reset(); LoadCertificateFromFile(fileName, null, X509KeyStorageFlags.DefaultKeySet); } [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(string fileName, string password, X509KeyStorageFlags keyStorageFlags) { Reset(); LoadCertificateFromFile(fileName, password, keyStorageFlags); } #if FEATURE_X509_SECURESTRINGS [System.Security.SecurityCritical] // auto-generated_required [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Import(string fileName, SecureString password, X509KeyStorageFlags keyStorageFlags) { Reset(); LoadCertificateFromFile(fileName, password, keyStorageFlags); } #endif // FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated [System.Runtime.InteropServices.ComVisible(false)] public virtual byte[] Export(X509ContentType contentType) { return ExportHelper(contentType, null); } [System.Security.SecuritySafeCritical] // auto-generated [System.Runtime.InteropServices.ComVisible(false)] public virtual byte[] Export(X509ContentType contentType, string password) { return ExportHelper(contentType, password); } #if FEATURE_X509_SECURESTRINGS [System.Security.SecuritySafeCritical] // auto-generated public virtual byte[] Export(X509ContentType contentType, SecureString password) { return ExportHelper(contentType, password); } #endif // FEATURE_X509_SECURESTRINGS [System.Security.SecurityCritical] // auto-generated_required [System.Runtime.InteropServices.ComVisible(false)] [PermissionSetAttribute(SecurityAction.InheritanceDemand, Unrestricted=true)] public virtual void Reset () { m_subjectName = null; m_issuerName = null; m_serialNumber = null; m_publicKeyParameters = null; m_publicKeyValue = null; m_publicKeyOid = null; m_rawData = null; m_thumbprint = null; m_notBefore = DateTime.MinValue; m_notAfter = DateTime.MinValue; if (!m_safeCertContext.IsInvalid) { // Free the current certificate handle m_safeCertContext.Dispose(); m_safeCertContext = SafeCertContextHandle.InvalidHandle; } } #if FEATURE_SERIALIZATION ///[System.Security.SecurityCritical] // auto-generated_required void ISerializable.GetObjectData (SerializationInfo info, StreamingContext context) { if (m_safeCertContext.IsInvalid) info.AddValue("RawData", null); else info.AddValue("RawData", this.RawData); } /// void IDeserializationCallback.OnDeserialization(Object sender) {} #endif // // internal. // internal SafeCertContextHandle CertContext { [System.Security.SecurityCritical] // auto-generated get { return m_safeCertContext; } } // // private methods. // [System.Security.SecurityCritical] // auto-generated private void ThrowIfContextInvalid() { if (m_safeCertContext.IsInvalid) throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidHandle"), "m_safeCertContext"); } private DateTime NotAfter { [System.Security.SecuritySafeCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_notAfter == DateTime.MinValue) { Win32Native.FILE_TIME fileTime = new Win32Native.FILE_TIME(); X509Utils._GetDateNotAfter(m_safeCertContext, ref fileTime); m_notAfter = DateTime.FromFileTime(fileTime.ToTicks()); } return m_notAfter; } } private DateTime NotBefore { [System.Security.SecuritySafeCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_notBefore == DateTime.MinValue) { Win32Native.FILE_TIME fileTime = new Win32Native.FILE_TIME(); X509Utils._GetDateNotBefore(m_safeCertContext, ref fileTime); m_notBefore = DateTime.FromFileTime(fileTime.ToTicks()); } return m_notBefore; } } private byte[] RawData { [System.Security.SecurityCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_rawData == null) m_rawData = X509Utils._GetCertRawData(m_safeCertContext); return (byte[]) m_rawData.Clone(); } } private string SerialNumber { [System.Security.SecuritySafeCritical] // auto-generated get { ThrowIfContextInvalid(); if (m_serialNumber == null) m_serialNumber = X509Utils._GetSerialNumber(m_safeCertContext); return Hex.EncodeHexStringFromInt(m_serialNumber); } } [System.Security.SecuritySafeCritical] // auto-generated private void SetThumbprint () { ThrowIfContextInvalid(); if (m_thumbprint == null) m_thumbprint = X509Utils._GetThumbprint(m_safeCertContext); } [System.Security.SecurityCritical] // auto-generated private byte[] ExportHelper (X509ContentType contentType, object password) { switch(contentType) { case X509ContentType.Cert: break; #if FEATURE_CORECLR case (X509ContentType)0x02 /* X509ContentType.SerializedCert */: case (X509ContentType)0x03 /* X509ContentType.Pkcs12 */: throw new CryptographicException(Environment.GetResourceString("Cryptography_X509_InvalidContentType"), new NotSupportedException()); #else // FEATURE_CORECLR case X509ContentType.SerializedCert: break; #if !FEATURE_PAL case X509ContentType.Pkcs12: KeyContainerPermission kp = new KeyContainerPermission(KeyContainerPermissionFlags.Open | KeyContainerPermissionFlags.Export); kp.Demand(); break; #endif // !FEATURE_PAL #endif // FEATURE_CORECLR else default: throw new CryptographicException(Environment.GetResourceString("Cryptography_X509_InvalidContentType")); } #if !FEATURE_CORECLR IntPtr szPassword = IntPtr.Zero; byte[] encodedRawData = null; SafeCertStoreHandle safeCertStoreHandle = X509Utils.ExportCertToMemoryStore(this); RuntimeHelpers.PrepareConstrainedRegions(); try { szPassword = X509Utils.PasswordToHGlobalUni(password); encodedRawData = X509Utils._ExportCertificatesToBlob(safeCertStoreHandle, contentType, szPassword); } finally { if (szPassword != IntPtr.Zero) Marshal.ZeroFreeGlobalAllocUnicode(szPassword); safeCertStoreHandle.Dispose(); } if (encodedRawData == null) throw new CryptographicException(Environment.GetResourceString("Cryptography_X509_ExportFailed")); return encodedRawData; #else // !FEATURE_CORECLR return RawData; #endif // !FEATURE_CORECLR } [System.Security.SecuritySafeCritical] // auto-generated private void LoadCertificateFromBlob (byte[] rawData, object password, X509KeyStorageFlags keyStorageFlags) { if (rawData == null || rawData.Length == 0) throw new ArgumentException(Environment.GetResourceString("Arg_EmptyOrNullArray"), "rawData"); Contract.EndContractBlock(); X509ContentType contentType = X509Utils.MapContentType(X509Utils._QueryCertBlobType(rawData)); #if !FEATURE_CORECLR && !FEATURE_PAL if (contentType == X509ContentType.Pkcs12 && (keyStorageFlags & X509KeyStorageFlags.PersistKeySet) == X509KeyStorageFlags.PersistKeySet) { KeyContainerPermission kp = new KeyContainerPermission(KeyContainerPermissionFlags.Create); kp.Demand(); } #endif // !FEATURE_CORECLR && !FEATURE_PAL uint dwFlags = X509Utils.MapKeyStorageFlags(keyStorageFlags); IntPtr szPassword = IntPtr.Zero; RuntimeHelpers.PrepareConstrainedRegions(); try { szPassword = X509Utils.PasswordToHGlobalUni(password); X509Utils._LoadCertFromBlob(rawData, szPassword, dwFlags, #if FEATURE_CORECLR false, #else // FEATURE_CORECLR (keyStorageFlags & X509KeyStorageFlags.PersistKeySet) == 0 ? false : true, #endif // FEATURE_CORECLR else ref m_safeCertContext); } finally { if (szPassword != IntPtr.Zero) Marshal.ZeroFreeGlobalAllocUnicode(szPassword); } } [System.Security.SecurityCritical] // auto-generated [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] private void LoadCertificateFromFile (string fileName, object password, X509KeyStorageFlags keyStorageFlags) { if (fileName == null) throw new ArgumentNullException("fileName"); Contract.EndContractBlock(); string fullPath = Path.GetFullPathInternal(fileName); new FileIOPermission (FileIOPermissionAccess.Read, fullPath).Demand(); X509ContentType contentType = X509Utils.MapContentType(X509Utils._QueryCertFileType(fileName)); #if !FEATURE_CORECLR && !FEATURE_PAL if (contentType == X509ContentType.Pkcs12 && (keyStorageFlags & X509KeyStorageFlags.PersistKeySet) == X509KeyStorageFlags.PersistKeySet) { KeyContainerPermission kp = new KeyContainerPermission(KeyContainerPermissionFlags.Create); kp.Demand(); } #endif // !FEATURE_CORECLR && !FEATURE_PAL uint dwFlags = X509Utils.MapKeyStorageFlags(keyStorageFlags); IntPtr szPassword = IntPtr.Zero; RuntimeHelpers.PrepareConstrainedRegions(); try { szPassword = X509Utils.PasswordToHGlobalUni(password); X509Utils._LoadCertFromFile(fileName, szPassword, dwFlags, #if FEATURE_CORECLR false, #else // FEATURE_CORECLR (keyStorageFlags & X509KeyStorageFlags.PersistKeySet) == 0 ? false : true, #endif // FEATURE_CORECLR else ref m_safeCertContext); } finally { if (szPassword != IntPtr.Zero) Marshal.ZeroFreeGlobalAllocUnicode(szPassword); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ContextMenu.cs
- BoundPropertyEntry.cs
- HyperLinkDataBindingHandler.cs
- DynamicValidatorEventArgs.cs
- FieldNameLookup.cs
- CodeThrowExceptionStatement.cs
- SR.cs
- SignatureDescription.cs
- Trace.cs
- MetadataItemCollectionFactory.cs
- BypassElementCollection.cs
- LogReserveAndAppendState.cs
- SecUtil.cs
- StatusBarDrawItemEvent.cs
- SqlProviderManifest.cs
- EntityDataSourceConfigureObjectContext.cs
- SafeFileHandle.cs
- SqlProcedureAttribute.cs
- PropertyCondition.cs
- AnonymousIdentificationSection.cs
- SqlTypesSchemaImporter.cs
- MimeMapping.cs
- LogStore.cs
- DataGridColumnHeadersPresenter.cs
- XamlGridLengthSerializer.cs
- SecurityPolicySection.cs
- Cursors.cs
- SelectedDatesCollection.cs
- TableColumnCollectionInternal.cs
- SqlCacheDependencyDatabase.cs
- mediaeventshelper.cs
- HeaderLabel.cs
- SerializerWriterEventHandlers.cs
- MembershipPasswordException.cs
- PolicyVersion.cs
- TextFindEngine.cs
- TimeZoneInfo.cs
- PeerPresenceInfo.cs
- CustomCredentialPolicy.cs
- SaveFileDialog.cs
- FullTextLine.cs
- BamlStream.cs
- StopStoryboard.cs
- SecurityPolicySection.cs
- ParallelEnumerable.cs
- DataGridColumnCollection.cs
- CDSCollectionETWBCLProvider.cs
- ContainerSelectorGlyph.cs
- ColorAnimationBase.cs
- SortQuery.cs
- XmlNotation.cs
- DocumentPaginator.cs
- ExtendedProperty.cs
- ServiceReference.cs
- CreateUserErrorEventArgs.cs
- ManipulationStartingEventArgs.cs
- SoapSchemaExporter.cs
- TypedTableGenerator.cs
- IisTraceWebEventProvider.cs
- TaskFormBase.cs
- XmlComment.cs
- UserInitiatedNavigationPermission.cs
- ReceiveParametersContent.cs
- ArraySegment.cs
- CustomAttributeSerializer.cs
- ThumbAutomationPeer.cs
- StreamingContext.cs
- EventPrivateKey.cs
- ConfigurationSectionGroup.cs
- OdbcParameterCollection.cs
- HiddenField.cs
- control.ime.cs
- MediaElementAutomationPeer.cs
- GlyphTypeface.cs
- ApplicationBuildProvider.cs
- CommandSet.cs
- StorageBasedPackageProperties.cs
- EditingMode.cs
- AppliedDeviceFiltersEditor.cs
- Bezier.cs
- Console.cs
- BinaryMessageEncodingBindingElement.cs
- BindingMemberInfo.cs
- Pair.cs
- IPGlobalProperties.cs
- ColorConvertedBitmapExtension.cs
- SerializableAttribute.cs
- PrimitiveCodeDomSerializer.cs
- ByteStreamMessageEncoderFactory.cs
- FrameworkElementAutomationPeer.cs
- GACMembershipCondition.cs
- Script.cs
- GroupBox.cs
- AttributeEmitter.cs
- MissingManifestResourceException.cs
- EpmTargetPathSegment.cs
- WebContext.cs
- SQLMoneyStorage.cs
- LoadedOrUnloadedOperation.cs
- XmlToDatasetMap.cs