Files
zig/lib/std/os/windows/crypt32.zig
T

284 lines
7.7 KiB
Zig

const std = @import("../../std.zig");
const windows = std.os.windows;
const BOOL = windows.BOOL;
const DWORD = windows.DWORD;
const BYTE = windows.BYTE;
const LONG = windows.LONG;
const LPCSTR = windows.LPCSTR;
const LPCWSTR = windows.LPCWSTR;
const FILETIME = windows.FILETIME;
const HANDLE = windows.HANDLE;
// ref: um/wincrypt.h
pub const HCRYPTPROV_LEGACY = enum(usize) { NULL = 0 };
pub const CERT_INFO = *opaque {};
pub const CTL_USAGE = extern struct {
cUsageIdentifier: DWORD,
rgpszUsageIdentifier: [*]const LPCSTR,
};
pub const CERT_ENHKEY_USAGE = CTL_USAGE;
pub const ENCODING = enum(u16) {
UNSPECIFIED = 0x0000,
ASN = 0x0001,
NDR = 0x0002,
_,
pub const TYPE = packed struct(DWORD) {
CERT: ENCODING = .UNSPECIFIED,
CMSG: ENCODING = .UNSPECIFIED,
};
};
pub const HCERTSTORE = *opaque {};
pub const CERT_CONTEXT = extern struct {
dwCertEncodingType: ENCODING.TYPE,
pbCertEncoded: [*]BYTE,
cbCertEncoded: DWORD,
pCertInfo: CERT_INFO,
hCertStore: HCERTSTORE,
};
pub const CERT_STORE = struct {
pub const PROV = enum(usize) {
MSG = 1,
MEMORY = 2,
FILE = 3,
REG = 4,
PKCS7 = 5,
SERIALIZED = 6,
FILENAME_A = 7,
FILENAME_W = 8,
SYSTEM_A = 9,
SYSTEM_W = 10,
COLLECTION = 11,
SYSTEM_REGISTRY_A = 12,
SYSTEM_REGISTRY_W = 13,
PHYSICAL_W = 14,
SMART_CARD_W = 15,
LDAP_W = 16,
PKCS12 = 17,
/// LPCSTR
_,
pub fn fromString(str: LPCSTR) PROV {
return @enumFromInt(@intFromPtr(str));
}
};
pub const FLAG = packed struct(DWORD) {
NO_CRYPT_RELEASE: bool = false,
SET_LOCALIZED_NAME: bool = false,
DEFER_CLOSE_UNTIL_LAST_FREE: bool = false,
Reserved3: u1 = 0,
DELETE: bool = false,
UNSAFE_PHYSICAL: bool = false,
SHARE_STORE: bool = false,
SHARE_CONTEXT: bool = false,
MANIFOLD: bool = false,
ENUM_ARCHIVED: bool = false,
UPDATE_KEYID: bool = false,
BACKUP_RESTORE: bool = false,
MAXIMUM_ALLOWED: bool = false,
CREATE_NEW: bool = false,
OPEN_EXISTING: bool = false,
READONLY: bool = false,
Reserved16: u16 = 0,
};
pub const ADD = enum(DWORD) {
NEW = 1,
USE_EXISTING = 2,
REPLACE_EXISTING = 3,
ALWAYS = 4,
REPLACE_EXISTING_INHERIT_PROPERTIES = 5,
REWER = 6,
NEWER_INHERIT_PROPERTIES = 7,
_,
};
};
pub extern "crypt32" fn CertOpenStore(
lpszStoreProvider: CERT_STORE.PROV,
dwEncodingType: ENCODING.TYPE,
hCryptProv: HCRYPTPROV_LEGACY,
dwFlags: CERT_STORE.FLAG,
pvPara: ?*const anyopaque,
) callconv(.winapi) ?HCERTSTORE;
pub const CERT_CLOSE_STORE_FLAG = packed struct(DWORD) {
FORCE: bool = false,
CHECK: bool = false,
Reserved2: u30 = 0,
};
pub extern "crypt32" fn CertCloseStore(
hCertStore: HCERTSTORE,
dwFlags: CERT_CLOSE_STORE_FLAG,
) callconv(.winapi) BOOL;
pub extern "crypt32" fn CertEnumCertificatesInStore(
hCertStore: HCERTSTORE,
pPrevCertContext: ?*CERT_CONTEXT,
) callconv(.winapi) ?*CERT_CONTEXT;
pub extern "crypt32" fn CertFreeCertificateContext(
pCertContext: ?*const CERT_CONTEXT,
) callconv(.winapi) BOOL;
pub extern "crypt32" fn CertAddEncodedCertificateToStore(
hCertStore: ?HCERTSTORE,
dwCertEncodingType: ENCODING.TYPE,
pbCertEncoded: [*]const BYTE,
cbCertEncoded: DWORD,
dwAddDisposition: CERT_STORE.ADD,
ppCertContext: ?*?*const CERT_CONTEXT,
) callconv(.winapi) BOOL;
pub extern "crypt32" fn CertOpenSystemStoreW(
hProv: HCRYPTPROV_LEGACY,
szSubsystemProtocol: LPCWSTR,
) callconv(.winapi) ?HCERTSTORE;
pub const HCERTCHAINENGINE = enum(usize) {
CURRENT_USER = 0x0,
LOCAL_MACHINE = 0x1,
SERIAL_LOCAL_MACHINE = 0x2,
/// HANDLE
_,
pub fn fromHandle(handle: HANDLE) HCERTCHAINENGINE {
return @enumFromInt(@intFromPtr(handle));
}
};
pub const CERT_CHAIN = packed struct(DWORD) {
CACHE_END_CERT: bool = false,
THREAD_STORE_SYNC: bool = false,
CACHE_ONLY_URL_RETRIEVAL: bool = false,
USE_LOCAL_MACHINE_STORE: bool = false,
ENABLE_CACHE_AUTO_UPDATE: bool = false,
ENABLE_SHARE_STORE: bool = false,
Reserved6: u20 = 0,
REVOCATION_CHECK_OCSP_CERT: bool = false,
REVOCATION_ACCUMULATIVE_TIMEOUT: bool = false,
REVOCATION_CHECK_END_CERT: bool = false,
REVOCATION_CHECK_CHAIN: bool = false,
REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT: bool = false,
REVOCATION_CHECK_CACHE_ONLY: bool = false,
pub const CONTEXT = opaque {};
pub const USAGE_MATCH = extern struct {
dwType: TYPE,
Usage: CERT_ENHKEY_USAGE,
pub const TYPE = enum(DWORD) { AND = 0x00000000, OR = 0x00000001, _ };
};
pub const PARA = extern struct {
cbSize: DWORD = @sizeOf(PARA),
RequestedUsage: USAGE_MATCH,
};
pub const POLICY = enum(usize) {
BASE = 1,
AUTHENTICODE = 2,
AUTHENTICODE_TS = 3,
SSL = 4,
BASIC_CONSTRAINTS = 5,
NT_AUTH = 6,
MICROSOFT_ROOT = 7,
EV = 8,
SSL_F12 = 9,
SSL_HPKP_HEADER = 10,
THIRD_PARTY_ROOT = 11,
SSL_KEY_PIN = 12,
CT = 13,
/// LPCSTR
_,
pub fn fromString(str: LPCSTR) POLICY {
return @enumFromInt(@intFromPtr(str));
}
pub const PARA = extern struct {
cbSize: DWORD = @sizeOf(POLICY.PARA),
dwFlags: FLAG,
pvExtraPolicyPara: ?*anyopaque,
};
pub const STATUS = extern struct {
cbSize: DWORD = @sizeOf(STATUS),
dwError: windows.Win32Error,
lChainIndex: LONG,
lElementIndex: LONG,
pvExtraPolicyStatus: ?*anyopaque,
};
pub const FLAG = packed struct(DWORD) {
IGNORE_NOT_TIME_VALID: bool = false,
IGNORE_CTL_NOT_TIME_VALID: bool = false,
IGNORE_NOT_TIME_NESTED: bool = false,
IGNORE_INVALID_BASIC_CONSTRAINTS: bool = false,
ALLOW_UNKNOWN_CA: bool = false,
IGNORE_WRONG_USAGE: bool = false,
IGNORE_INVALID_NAME: bool = false,
IGNORE_INVALID_POLICY: bool = false,
IGNORE_END_REV_UNKNOWN: bool = false,
IGNORE_CTL_SIGNER_REV_UNKNOWN: bool = false,
IGNORE_CA_REV_UNKNOWN: bool = false,
IGNORE_ROOT_REV_UNKNOWN: bool = false,
IGNORE_PEER_TRUST: bool = false,
IGNORE_NOT_SUPPORTED_CRITICAL_EXT: bool = false,
TRUST_TESTROOT: bool = false,
ALLOW_TESTROOT: bool = false,
Reserved16: u11 = 0,
IGNORE_WEAK_SIGNATURE: bool = false,
Reserved28: u4 = 0,
};
};
};
pub const HTTPSPolicyCallbackData = extern struct {
cbSize: DWORD = @sizeOf(HTTPSPolicyCallbackData),
dwAuthType: AUTHTYPE,
fdwChecks: DWORD = 0,
pwszServerName: ?LPCWSTR = null,
pub const AUTHTYPE = enum(DWORD) { CLIENT = 1, SERVER = 2, _ };
};
pub extern "crypt32" fn CertGetCertificateChain(
hChainEngine: HCERTCHAINENGINE,
pCertContext: *const CERT_CONTEXT,
pTime: ?*const FILETIME,
hAdditionalStore: ?HCERTSTORE,
pChainPara: *const CERT_CHAIN.PARA,
dwFlags: CERT_CHAIN,
pvReserved: ?*const anyopaque,
ppChainContext: **const CERT_CHAIN.CONTEXT,
) callconv(.winapi) BOOL;
pub extern "crypt32" fn CertFreeCertificateChain(
pChainContext: *const CERT_CHAIN.CONTEXT,
) callconv(.winapi) void;
pub extern "crypt32" fn CertVerifyCertificateChainPolicy(
pszPolicyOID: CERT_CHAIN.POLICY,
pChainContext: *const CERT_CHAIN.CONTEXT,
pPolicyPara: *const CERT_CHAIN.POLICY.PARA,
pPolicyStatus: *CERT_CHAIN.POLICY.STATUS,
) callconv(.winapi) BOOL;