Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ BuildChain()

static unsafe ChainPal Internal.Cryptography.Pal.ChainPal.BuildChain ( bool useMachineContext,
ICertificatePal cert,
X509Certificate2Collection extraStore,
OidCollection applicationPolicy,
OidCollection certificatePolicy,
X509RevocationMode revocationMode,
X509RevocationFlag revocationFlag,
X509Certificate2Collection customTrustStore,
X509ChainTrustMode trustMode,
DateTime verificationTime,
TimeSpan timeout,
bool disableAia )
inlinestatic

Definition at line 94 of file ChainPal.cs.

95 {
96 CertificatePal certificatePal = (CertificatePal)cert;
97 using SafeChainEngineHandle safeChainEngineHandle = GetChainEngine(trustMode, customTrustStore, useMachineContext);
98 using SafeCertStoreHandle hStore = ConvertStoreToSafeHandle(extraStore);
99 CERT_CHAIN_PARA pChainPara = default(CERT_CHAIN_PARA);
100 pChainPara.cbSize = Marshal.SizeOf<CERT_CHAIN_PARA>();
101 int numOids;
102 using SafeHandle safeHandle = applicationPolicy.ToLpstrArray(out numOids);
103 if (!safeHandle.IsInvalid)
104 {
105 pChainPara.RequestedUsage.dwType = CertUsageMatchType.USAGE_MATCH_TYPE_AND;
106 pChainPara.RequestedUsage.Usage.cUsageIdentifier = numOids;
107 pChainPara.RequestedUsage.Usage.rgpszUsageIdentifier = safeHandle.DangerousGetHandle();
108 }
109 int numOids2;
110 using SafeHandle safeHandle2 = certificatePolicy.ToLpstrArray(out numOids2);
111 if (!safeHandle2.IsInvalid)
112 {
113 pChainPara.RequestedIssuancePolicy.dwType = CertUsageMatchType.USAGE_MATCH_TYPE_AND;
114 pChainPara.RequestedIssuancePolicy.Usage.cUsageIdentifier = numOids2;
115 pChainPara.RequestedIssuancePolicy.Usage.rgpszUsageIdentifier = safeHandle2.DangerousGetHandle();
116 }
117 pChainPara.dwUrlRetrievalTimeout = (int)Math.Floor(timeout.TotalMilliseconds);
118 FILETIME fILETIME = FILETIME.FromDateTime(verificationTime);
119 CertChainFlags dwFlags = MapRevocationFlags(revocationMode, revocationFlag, disableAia);
120 if (!global::Interop.crypt32.CertGetCertificateChain(safeChainEngineHandle.DangerousGetHandle(), certificatePal.CertContext, &fILETIME, hStore, ref pChainPara, dwFlags, IntPtr.Zero, out var ppChainContext))
121 {
122 return null;
123 }
124 return new ChainPal(ppChainContext);
125 }
static SafeChainEngineHandle GetChainEngine(X509ChainTrustMode trustMode, X509Certificate2Collection customTrustStore, bool useMachineContext)
Definition ChainPal.cs:127
ChainPal(SafeX509ChainHandle chain)
Definition ChainPal.cs:170
static CertChainFlags MapRevocationFlags(X509RevocationMode revocationMode, X509RevocationFlag revocationFlag, bool disableAia)
Definition ChainPal.cs:151
static SafeCertStoreHandle ConvertStoreToSafeHandle(X509Certificate2Collection extraStore, bool returnEmptyHandle=false)
Definition ChainPal.cs:142
static double Floor(double d)
static int SizeOf(object structure)
Definition Marshal.cs:697
static FILETIME FromDateTime(DateTime dt)
Definition FILETIME.cs:17
static readonly IntPtr Zero
Definition IntPtr.cs:18

References Internal.Cryptography.Pal.ChainPal.ChainPal(), Internal.Cryptography.Pal.CertificatePal.CertContext, Internal.Cryptography.Pal.ChainPal.ConvertStoreToSafeHandle(), System.Math.Floor(), Internal.Cryptography.Pal.Native.FILETIME.FromDateTime(), Internal.Cryptography.Pal.ChainPal.GetChainEngine(), Internal.Cryptography.Pal.ChainPal.MapRevocationFlags(), System.Runtime.InteropServices.Marshal.SizeOf(), System.timeout, and System.IntPtr.Zero.

Referenced by System.Security.Cryptography.X509Certificates.X509Chain.Build(), and Internal.Cryptography.Pal.FindPal.VerifyCertificateIgnoringErrors().