Exemplo n.º 1
0
        public void Open(OpenFlags openFlags)
        {
            uint dwFlags = this.MapX509StoreFlags(this.storeLocation, openFlags);

            System.IdentityModel.SafeCertStoreHandle handle = System.IdentityModel.CAPI.CertOpenStore(new IntPtr(10L), 0x10001, IntPtr.Zero, dwFlags, this.storeName);
            if ((handle == null) || handle.IsInvalid)
            {
                int hr = Marshal.GetLastWin32Error();
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(hr));
            }
            this.certStoreHandle = handle;
        }
Exemplo n.º 2
0
 private static System.IdentityModel.SafeCertStoreHandle ExportToMemoryStore(X509Certificate2Collection collection, IntPtr pCertContext)
 {
     System.IdentityModel.CAPI.CERT_CONTEXT cert_context = (System.IdentityModel.CAPI.CERT_CONTEXT)Marshal.PtrToStructure(pCertContext, typeof(System.IdentityModel.CAPI.CERT_CONTEXT));
     if (((collection == null) || (collection.Count <= 0)) && (cert_context.hCertStore == IntPtr.Zero))
     {
         return(System.IdentityModel.SafeCertStoreHandle.InvalidHandle);
     }
     System.IdentityModel.SafeCertStoreHandle hCertStore = System.IdentityModel.CAPI.CertOpenStore(new IntPtr(2L), 0x10001, IntPtr.Zero, 0x2200, null);
     if ((hCertStore == null) || hCertStore.IsInvalid)
     {
         int hr = Marshal.GetLastWin32Error();
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(hr));
     }
     if ((collection != null) && (collection.Count > 0))
     {
         X509Certificate2Enumerator enumerator = collection.GetEnumerator();
         while (enumerator.MoveNext())
         {
             X509Certificate2 current = enumerator.Current;
             if (!System.IdentityModel.CAPI.CertAddCertificateLinkToStore(hCertStore, current.Handle, 4, System.IdentityModel.SafeCertContextHandle.InvalidHandle))
             {
                 int num2 = Marshal.GetLastWin32Error();
                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(num2));
             }
         }
     }
     if (cert_context.hCertStore != IntPtr.Zero)
     {
         X509Store store = new X509Store(cert_context.hCertStore);
         X509Certificate2Collection certificates = null;
         try
         {
             certificates = store.Certificates;
             X509Certificate2Enumerator enumerator2 = certificates.GetEnumerator();
             while (enumerator2.MoveNext())
             {
                 X509Certificate2 certificate2 = enumerator2.Current;
                 if (!System.IdentityModel.CAPI.CertAddCertificateLinkToStore(hCertStore, certificate2.Handle, 4, System.IdentityModel.SafeCertContextHandle.InvalidHandle))
                 {
                     int num3 = Marshal.GetLastWin32Error();
                     throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(num3));
                 }
             }
         }
         finally
         {
             System.IdentityModel.SecurityUtils.ResetAllCertificates(certificates);
             store.Close();
         }
     }
     return(hCertStore);
 }
Exemplo n.º 3
0
        private static unsafe void BuildChain(IntPtr hChainEngine, IntPtr pCertContext, X509Certificate2Collection extraStore, OidCollection applicationPolicy, OidCollection certificatePolicy, X509RevocationMode revocationMode, X509RevocationFlag revocationFlag, DateTime verificationTime, TimeSpan timeout, out System.IdentityModel.SafeCertChainHandle ppChainContext)
        {
            System.IdentityModel.SafeCertStoreHandle  hAdditionalStore = ExportToMemoryStore(extraStore, pCertContext);
            System.IdentityModel.CAPI.CERT_CHAIN_PARA pChainPara       = new System.IdentityModel.CAPI.CERT_CHAIN_PARA {
                cbSize = (uint)Marshal.SizeOf(typeof(System.IdentityModel.CAPI.CERT_CHAIN_PARA))
            };
            SafeHGlobalHandle invalidHandle = SafeHGlobalHandle.InvalidHandle;
            SafeHGlobalHandle handle3       = SafeHGlobalHandle.InvalidHandle;

            try
            {
                if ((applicationPolicy != null) && (applicationPolicy.Count > 0))
                {
                    pChainPara.RequestedUsage.dwType = 0;
                    pChainPara.RequestedUsage.Usage.cUsageIdentifier = (uint)applicationPolicy.Count;
                    invalidHandle = CopyOidsToUnmanagedMemory(applicationPolicy);
                    pChainPara.RequestedUsage.Usage.rgpszUsageIdentifier = invalidHandle.DangerousGetHandle();
                }
                if ((certificatePolicy != null) && (certificatePolicy.Count > 0))
                {
                    pChainPara.RequestedIssuancePolicy.dwType = 0;
                    pChainPara.RequestedIssuancePolicy.Usage.cUsageIdentifier = (uint)certificatePolicy.Count;
                    handle3 = CopyOidsToUnmanagedMemory(certificatePolicy);
                    pChainPara.RequestedIssuancePolicy.Usage.rgpszUsageIdentifier = handle3.DangerousGetHandle();
                }
                pChainPara.dwUrlRetrievalTimeout = (uint)timeout.Milliseconds;
                System.Runtime.InteropServices.ComTypes.FILETIME pTime = new System.Runtime.InteropServices.ComTypes.FILETIME();
                *((long *)&pTime) = verificationTime.ToFileTime();
                uint dwFlags = MapRevocationFlags(revocationMode, revocationFlag);
                if (!System.IdentityModel.CAPI.CertGetCertificateChain(hChainEngine, pCertContext, ref pTime, hAdditionalStore, ref pChainPara, dwFlags, IntPtr.Zero, out ppChainContext))
                {
                    int hr = Marshal.GetLastWin32Error();
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(hr));
                }
            }
            finally
            {
                if (invalidHandle != null)
                {
                    invalidHandle.Dispose();
                }
                if (handle3 != null)
                {
                    handle3.Dispose();
                }
                hAdditionalStore.Close();
            }
        }
 public void Open(OpenFlags openFlags)
 {
     uint dwFlags = this.MapX509StoreFlags(this.storeLocation, openFlags);
     System.IdentityModel.SafeCertStoreHandle handle = System.IdentityModel.CAPI.CertOpenStore(new IntPtr(10L), 0x10001, IntPtr.Zero, dwFlags, this.storeName);
     if ((handle == null) || handle.IsInvalid)
     {
         int hr = Marshal.GetLastWin32Error();
         throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new CryptographicException(hr));
     }
     this.certStoreHandle = handle;
 }
 internal extern static bool CertAddCertificateLinkToStore(
     [In] SafeCertStoreHandle hCertStore,
     [In] IntPtr pCertContext,
     [In] uint dwAddDisposition,
     [In, Out] SafeCertContextHandle ppStoreContext
     );