internal static SafeCertContextHandle GetCertContext(X509Certificate2 certificate)
        {
            SafeCertContextHandle safeCertContext = CAPI.CertDuplicateCertificateContext(certificate.Handle);

            GC.KeepAlive(certificate);
            return(safeCertContext);
        }
示例#2
0
        internal unsafe X509ExtensionCollection(SafeCertContextHandle safeCertContextHandle)
        {
            using (SafeCertContextHandle certContext = CAPI.CertDuplicateCertificateContext(safeCertContextHandle)) {
                CAPI.CERT_CONTEXT pCertContext = *((CAPI.CERT_CONTEXT *)certContext.DangerousGetHandle());
                CAPI.CERT_INFO    pCertInfo    = (CAPI.CERT_INFO)Marshal.PtrToStructure(pCertContext.pCertInfo, typeof(CAPI.CERT_INFO));
                uint   cExtensions             = pCertInfo.cExtension;
                IntPtr rgExtensions            = pCertInfo.rgExtension;

                for (uint index = 0; index < cExtensions; index++)
                {
                    X509Extension extension       = new X509Extension(new IntPtr((long)rgExtensions + (index * Marshal.SizeOf(typeof(CAPI.CERT_EXTENSION)))));
                    X509Extension customExtension = CryptoConfig.CreateFromName(extension.Oid.Value) as X509Extension;
                    if (customExtension != null)
                    {
                        customExtension.CopyFrom(extension);
                        extension = customExtension;
                    }
                    Add(extension);
                }
            }
        }
 internal unsafe X509ExtensionCollection(System.Security.Cryptography.SafeCertContextHandle safeCertContextHandle)
 {
     this.m_list = new ArrayList();
     using (System.Security.Cryptography.SafeCertContextHandle handle = CAPI.CertDuplicateCertificateContext(safeCertContextHandle))
     {
         CAPIBase.CERT_CONTEXT cert_context = *((CAPIBase.CERT_CONTEXT *)handle.DangerousGetHandle());
         CAPIBase.CERT_INFO    cert_info    = (CAPIBase.CERT_INFO)Marshal.PtrToStructure(cert_context.pCertInfo, typeof(CAPIBase.CERT_INFO));
         uint   cExtension  = cert_info.cExtension;
         IntPtr rgExtension = cert_info.rgExtension;
         for (uint i = 0; i < cExtension; i++)
         {
             X509Extension asnEncodedData = new X509Extension(new IntPtr(((long)rgExtension) + (i * Marshal.SizeOf(typeof(CAPIBase.CERT_EXTENSION)))));
             X509Extension extension2     = CryptoConfig.CreateFromName(asnEncodedData.Oid.Value) as X509Extension;
             if (extension2 != null)
             {
                 extension2.CopyFrom(asnEncodedData);
                 asnEncodedData = extension2;
             }
             this.Add(asnEncodedData);
         }
     }
 }
示例#4
0
 internal static System.Security.Cryptography.SafeCertContextHandle GetCertContext(X509Certificate2 certificate)
 {
     System.Security.Cryptography.SafeCertContextHandle certContextHandle = CAPI.CertDuplicateCertificateContext(certificate.Handle);
     GC.KeepAlive((object)certificate);
     return(certContextHandle);
 }
 public X509Certificate2(string fileName, string password) : base(fileName, password)
 {
     this.m_safeCertContext = System.Security.Cryptography.SafeCertContextHandle.InvalidHandle;
     this.m_safeCertContext = CAPI.CertDuplicateCertificateContext(base.Handle);
 }
 public X509Certificate2(byte[] rawData, string password, X509KeyStorageFlags keyStorageFlags) : base(rawData, password, keyStorageFlags)
 {
     this.m_safeCertContext = System.Security.Cryptography.SafeCertContextHandle.InvalidHandle;
     this.m_safeCertContext = CAPI.CertDuplicateCertificateContext(base.Handle);
 }
 protected X509Certificate2(SerializationInfo info, StreamingContext context) : base(info, context)
 {
     this.m_safeCertContext = System.Security.Cryptography.SafeCertContextHandle.InvalidHandle;
     this.m_safeCertContext = CAPI.CertDuplicateCertificateContext(base.Handle);
 }
 public X509Certificate2(byte[] rawData, SecureString password) : base(rawData, password)
 {
     this.m_safeCertContext = System.Security.Cryptography.SafeCertContextHandle.InvalidHandle;
     this.m_safeCertContext = CAPI.CertDuplicateCertificateContext(base.Handle);
 }
 public X509Certificate2(X509Certificate certificate) : base(certificate)
 {
     this.m_safeCertContext = System.Security.Cryptography.SafeCertContextHandle.InvalidHandle;
     this.m_safeCertContext = CAPI.CertDuplicateCertificateContext(base.Handle);
 }
 public override void Import(string fileName, string password, X509KeyStorageFlags keyStorageFlags)
 {
     this.Reset();
     base.Import(fileName, password, keyStorageFlags);
     this.m_safeCertContext = CAPI.CertDuplicateCertificateContext(base.Handle);
 }
 public override void Import(byte[] rawData, SecureString password, X509KeyStorageFlags keyStorageFlags)
 {
     this.Reset();
     base.Import(rawData, password, keyStorageFlags);
     this.m_safeCertContext = CAPI.CertDuplicateCertificateContext(base.Handle);
 }
 public override void Import(string fileName)
 {
     this.Reset();
     base.Import(fileName);
     this.m_safeCertContext = CAPI.CertDuplicateCertificateContext(base.Handle);
 }
 public override void Import(byte[] rawData)
 {
     this.Reset();
     base.Import(rawData);
     this.m_safeCertContext = CAPI.CertDuplicateCertificateContext(base.Handle);
 }