mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-11 00:26:28 -04:00
86 lines
3.4 KiB
C
86 lines
3.4 KiB
C
#ifndef CC_CRYPT32_FUNC
|
|
#define CC_CRYPT32_FUNC
|
|
#endif
|
|
|
|
typedef void* HCERTSTORE;
|
|
typedef void* PCCERT_CONTEXT;
|
|
|
|
#define szOID_PKIX_KP_SERVER_AUTH "1.3.6.1.5.5.7.3.1"
|
|
#define szOID_SERVER_GATED_CRYPTO "1.3.6.1.4.1.311.10.3.3"
|
|
#define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
|
|
|
|
#define CERT_STORE_PROV_MEMORY ((LPCSTR)2)
|
|
#define CERT_STORE_ADD_ALWAYS 4
|
|
#define X509_ASN_ENCODING 0x1
|
|
|
|
typedef struct _CRYPTOAPI_BLOB {
|
|
DWORD cbData;
|
|
BYTE* pbData;
|
|
} DATA_BLOB;
|
|
|
|
typedef struct _CTL_USAGE {
|
|
DWORD cUsageIdentifier;
|
|
LPSTR *rgpszUsageIdentifier;
|
|
} CERT_ENHKEY_USAGE;
|
|
|
|
#define USAGE_MATCH_TYPE_AND 0x0
|
|
#define USAGE_MATCH_TYPE_OR 0x1
|
|
|
|
typedef struct _CERT_USAGE_MATCH {
|
|
DWORD dwType;
|
|
CERT_ENHKEY_USAGE Usage;
|
|
} CERT_USAGE_MATCH;
|
|
|
|
typedef struct _CERT_CHAIN_PARA {
|
|
DWORD cbSize;
|
|
CERT_USAGE_MATCH RequestedUsage;
|
|
} CERT_CHAIN_PARA;
|
|
|
|
typedef struct _CERT_TRUST_STATUS {
|
|
DWORD dwErrorStatus;
|
|
DWORD dwInfoStatus;
|
|
} CERT_TRUST_STATUS, *PCERT_TRUST_STATUS;
|
|
|
|
typedef struct _CERT_CHAIN_CONTEXT {
|
|
DWORD cbSize;
|
|
CERT_TRUST_STATUS TrustStatus;
|
|
DWORD cChain;
|
|
void* rgpChain;
|
|
DWORD cLowerQualityChainContext;
|
|
void* rgpLowerQualityChainContext;
|
|
BOOL fHasRevocationFreshnessTime;
|
|
DWORD dwRevocationFreshnessTime;
|
|
DWORD dwCreateFlags;
|
|
GUID ChainId;
|
|
} CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT;
|
|
typedef const CERT_CHAIN_CONTEXT* PCCERT_CHAIN_CONTEXT;
|
|
|
|
|
|
CC_CRYPT32_FUNC BOOL (WINAPI *_CryptProtectData )(DATA_BLOB* dataIn, PCWSTR dataDescr, PVOID entropy, PVOID reserved, PVOID promptStruct, DWORD flags, DATA_BLOB* dataOut);
|
|
CC_CRYPT32_FUNC BOOL (WINAPI *_CryptUnprotectData)(DATA_BLOB* dataIn, PWSTR* dataDescr, PVOID entropy, PVOID reserved, PVOID promptStruct, DWORD flags, DATA_BLOB* dataOut);
|
|
|
|
CC_CRYPT32_FUNC HCERTSTORE (WINAPI *_CertOpenStore)(LPCSTR storeProvider, DWORD encodingType, void* cryptProv, DWORD flags, const void* para);
|
|
CC_CRYPT32_FUNC BOOL (WINAPI *_CertCloseStore)(HCERTSTORE certStore, DWORD flags);
|
|
CC_CRYPT32_FUNC BOOL (WINAPI *_CertAddEncodedCertificateToStore)(HCERTSTORE certStore, DWORD certEncodingType, const BYTE* certEncoded, DWORD lenEncoded, DWORD addDisposition, PCCERT_CONTEXT* certContext);
|
|
|
|
CC_CRYPT32_FUNC BOOL (WINAPI *_CertGetCertificateChain)(PVOID chainEngine, PCCERT_CONTEXT certContext, LPFILETIME time, HCERTSTORE additionalStore, CERT_CHAIN_PARA* chainPara, DWORD flags, PVOID reserved, PCCERT_CHAIN_CONTEXT* chainContext);
|
|
CC_CRYPT32_FUNC void (WINAPI *_CertFreeCertificateChain)(PCCERT_CHAIN_CONTEXT chainContext);
|
|
|
|
CC_CRYPT32_FUNC BOOL (WINAPI *_CertFreeCertificateContext)(PCCERT_CONTEXT certContext);
|
|
|
|
static void Crypt32_LoadDynamicFuncs(void) {
|
|
static const struct DynamicLibSym funcs[] = {
|
|
DynamicLib_OptSym(CryptProtectData), DynamicLib_OptSym(CryptUnprotectData),
|
|
DynamicLib_ReqSym(CertGetCertificateChain), DynamicLib_ReqSym(CertFreeCertificateChain),
|
|
DynamicLib_ReqSym(CertOpenStore), DynamicLib_ReqSym(CertCloseStore),
|
|
DynamicLib_ReqSym(CertAddEncodedCertificateToStore),
|
|
DynamicLib_ReqSym(CertFreeCertificateContext),
|
|
};
|
|
|
|
static const cc_string crypt32 = String_FromConst("CRYPT32.DLL");
|
|
static void* crypt32_lib;
|
|
|
|
if (crypt32_lib) return;
|
|
DynamicLib_LoadAll(&crypt32, funcs, Array_Elems(funcs), &crypt32_lib);
|
|
}
|