35 SafeCertStoreHandle safeCertStoreHandle = global::Interop.crypt32.CertDuplicateStore(storeHandle);
36 if (safeCertStoreHandle ==
null || safeCertStoreHandle.
IsInvalid)
40 return new StorePal(safeCertStoreHandle);
51 while (global::Interop.crypt32.CertEnumCertificatesInStore(
_certStore, ref pCertContext))
71 if (global::Interop.crypt32.CertFindCertificateInStore(
_certStore,
CertFindType.CERT_FIND_EXISTING, certContext2, ref pCertContext))
74 if (!global::Interop.crypt32.CertDeleteCertificateFromStore(pCertContext2))
107 if (!global::Interop.crypt32.CertEnumCertificatesInStore(
_certStore, ref pCertContext))
126 if (!global::Interop.crypt32.CertEnumCertificatesInStore(
_certStore, ref pCertContext2))
133 if (!global::Interop.crypt32.CertSerializeCertificateStoreElement(pCertContext2, 0,
null, ref pcbElement))
137 byte[] array3 =
new byte[pcbElement];
138 if (!global::Interop.crypt32.CertSerializeCertificateStoreElement(pCertContext2, 0, array3, ref pcbElement))
157 fixed (
byte* pbData =
array)
159 pPFX.pbData = pbData;
184 fixed (
byte* pbData =
array)
186 pvSaveToPara.pbData = pbData;
207 bool flag = fileName !=
null;
208 fixed (
byte* pbData = rawData)
210 fixed (
char* ptr = fileName)
215 void* pvObject = (flag ? ((
void*)ptr) : ((
void*)(&cRYPTOAPI_BLOB)));
216 if (!global::Interop.crypt32.CryptQueryObject(flag ?
CertQueryObjectType.CERT_QUERY_OBJECT_FILE :
CertQueryObjectType.CERT_QUERY_OBJECT_BLOB, pvObject, ExpectedContentTypeFlags.CERT_QUERY_CONTENT_FLAG_CERT | ExpectedContentTypeFlags.CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | ExpectedContentTypeFlags.CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | ExpectedContentTypeFlags.CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | ExpectedContentTypeFlags.CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | ExpectedContentTypeFlags.CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED |
ExpectedContentTypeFlags.CERT_QUERY_CONTENT_FLAG_PFX,
ExpectedFormatTypeFlags.CERT_QUERY_FORMAT_FLAG_ALL, 0,
IntPtr.
Zero, out var pdwContentType,
IntPtr.
Zero, out var phCertStore,
IntPtr.
Zero,
IntPtr.
Zero))
220 if (pdwContentType ==
ContentType.CERT_QUERY_CONTENT_PFX)
222 phCertStore.Dispose();
227 fixed (
byte* pbData2 = rawData)
230 phCertStore = global::Interop.crypt32.PFXImportCertStore(ref pPFX, password, dwFlags);
231 if (phCertStore ==
null || phCertStore.IsInvalid)
239 while (global::Interop.crypt32.CertEnumCertificatesInStore(phCertStore, ref pCertContext))
242 if (!global::Interop.crypt32.CertSetCertificateContextProperty(pCertContext,
CertContextPropId.CERT_CLR_DELETE_KEY_PROP_ID,
CertSetPropertyFlags.CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG, &cRYPTOAPI_BLOB2))
266 return new StorePal(safeCertStoreHandle);
276 for (
int i = 0; i < certificates.
Count; i++)
284 return new StorePal(safeCertStoreHandle);
296 return new StorePal(safeCertStoreHandle);
320 pfxCertStoreFlags |= PfxCertStoreFlags.PKCS12_ALWAYS_CNG_KSP |
PfxCertStoreFlags.PKCS12_NO_PERSIST_KEY;
322 return pfxCertStoreFlags;
345 switch (storeLocation)
354 return certStoreFlags;
SafeCertContextHandle CertContext
unsafe CERT_CONTEXT * CertContext
unsafe CERT_CONTEXT * Disconnect()
override void Dispose(bool disposing)
unsafe byte[] SaveToMemoryStore(CertStoreSaveAs dwSaveAs)
SafeCertStoreHandle _certStore
void CopyTo(X509Certificate2Collection collection)
StorePal(SafeCertStoreHandle certStore)
void Add(ICertificatePal certificate)
static IExportPal FromCertificate(ICertificatePalCore cert)
static PfxCertStoreFlags MapKeyStorageFlags(X509KeyStorageFlags keyStorageFlags)
void CloneTo(X509Certificate2Collection collection)
unsafe byte[] Export(X509ContentType contentType, SafePasswordHandle password)
static IStorePal FromSystemStore(string storeName, StoreLocation storeLocation, OpenFlags openFlags)
static unsafe StorePal FromBlobOrFile(ReadOnlySpan< byte > rawData, string fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
static ILoaderPal FromBlob(ReadOnlySpan< byte > rawData, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
void MoveTo(X509Certificate2Collection collection)
static IStorePal FromHandle(IntPtr storeHandle)
unsafe void Remove(ICertificatePal certificate)
static CertStoreFlags MapX509StoreFlags(StoreLocation storeLocation, OpenFlags flags)
static ILoaderPal FromFile(string fileName, SafePasswordHandle password, X509KeyStorageFlags keyStorageFlags)
static IExportPal LinkFromCertificateCollection(X509Certificate2Collection certificates)
static void KeepAlive(object? obj)
static byte[] ReadAllBytes(string path)
static int GetHRForLastWin32Error()
static int GetLastWin32Error()
static void Copy(int[] source, int startIndex, IntPtr destination, int length)
static string Cryptography_InvalidStoreHandle
static string Cryptography_X509_InvalidContentType
static string Cryptography_X509_StoreNotOpen
unsafe byte * pbCertEncoded
static readonly IntPtr Zero