mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-22 04:25:08 +00:00
414 lines
10 KiB
C
414 lines
10 KiB
C
/**
|
|
* This file has no copyright assigned and is placed in the Public Domain.
|
|
* This file is part of the mingw-w64 runtime package.
|
|
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
|
*/
|
|
|
|
#ifndef _INC_CARDMOD
|
|
#define _INC_CARDMOD
|
|
#include <wincrypt.h>
|
|
|
|
#define CARD_BUFFER_SIZE_ONLY 0x20000000
|
|
#define CARD_PADDING_INFO_PRESENT 0x40000000
|
|
|
|
#define CARD_PADDING_NONE 0
|
|
#define CARD_PADDING_PKCS1 1
|
|
#define CARD_PADDING_PSS 4
|
|
|
|
#define CARD_CREATE_CONTAINER_KEY_GEN 1
|
|
#define CARD_CREATE_CONTAINER_KEY_IMPORT 2
|
|
|
|
#define AT_KEYEXCHANGE 1
|
|
#define AT_SIGNATURE 2
|
|
#define AT_ECDSA_P256 3
|
|
#define AT_ECDSA_P384 4
|
|
#define AT_ECDSA_P521 5
|
|
#define AT_ECDHE_P256 6
|
|
#define AT_ECDHE_P384 7
|
|
#define AT_ECDHE_P521 8
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define InvalidAc 0
|
|
|
|
typedef enum _CARD_DIRECTORY_ACCESS_CONDITION {
|
|
UserCreateDeleteDirAc = 1,
|
|
AdminCreateDeleteDirAc = 2
|
|
} CARD_DIRECTORY_ACCESS_CONDITION;
|
|
|
|
typedef enum _CARD_FILE_ACCESS_CONDITION {
|
|
EveryoneReadUserWriteAc = 1,
|
|
UserWriteExecuteAc = 2,
|
|
EveryoneReadAdminWriteAc = 3,
|
|
UnknownAc = 4
|
|
} CARD_FILE_ACCESS_CONDITION;
|
|
|
|
typedef struct _CARD_SIGNING_INFO {
|
|
DWORD dwVersion;
|
|
BYTE bContainerIndex;
|
|
DWORD dwKeySpec;
|
|
DWORD dwSigningFlags;
|
|
ALG_ID aiHashAlg;
|
|
PBYTE pbData;
|
|
DWORD cbData;
|
|
PBYTE pbSignedData;
|
|
DWORD cbSignedData;
|
|
LPVOID pPaddingInfo;
|
|
DWORD dwPaddingType;
|
|
} CARD_SIGNING_INFO, *PCARD_SIGNING_INFO;
|
|
|
|
typedef struct _CARD_CAPABILITIES {
|
|
DWORD dwVersion;
|
|
WINBOOL fCertificateCompression;
|
|
WINBOOL fKeyGen;
|
|
} CARD_CAPABILITIES, *PCARD_CAPABILITIES;
|
|
|
|
typedef struct _CONTAINER_INFO {
|
|
DWORD dwVersion;
|
|
DWORD dwReserved;
|
|
DWORD cbSigPublicKey;
|
|
PBYTE pbSigPublicKey;
|
|
DWORD cbKeyExPublicKey;
|
|
PBYTE pbKeyExPublicKey;
|
|
} CONTAINER_INFO, *PCONTAINER_INFO;
|
|
|
|
typedef LPVOID ( WINAPI *PFN_CSP_ALLOC )(SIZE_T Size);
|
|
typedef LPVOID ( WINAPI *PFN_CSP_REALLOC )(LPVOID Address,SIZE_T Size);
|
|
typedef VOID ( WINAPI *PFN_CSP_FREE )(LPVOID Address);
|
|
typedef DWORD ( WINAPI *PFN_CSP_CACHE_ADD_FILE )(
|
|
PVOID pvCacheContext,
|
|
LPWSTR wszTag,
|
|
DWORD dwFlags,
|
|
PBYTE pbData,
|
|
DWORD cbData
|
|
);
|
|
|
|
typedef DWORD ( WINAPI *PFN_CSP_CACHE_LOOKUP_FILE )(
|
|
PVOID pvCacheContext,
|
|
LPWSTR wszTag,
|
|
DWORD dwFlags,
|
|
PBYTE *ppbData,
|
|
PDWORD pcbData
|
|
);
|
|
|
|
typedef DWORD ( WINAPI *PFN_CSP_CACHE_DELETE_FILE )(
|
|
PVOID pvCacheContext,
|
|
LPWSTR wszTag,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
typedef DWORD ( WINAPI *PFN_CSP_PAD_DATA )(
|
|
PCARD_SIGNING_INFO pSigningInfo,
|
|
DWORD cbMaxWidth,
|
|
DWORD *pcbPaddedBuffer,
|
|
PBYTE *ppbPaddedBuffer
|
|
);
|
|
|
|
typedef struct _CARD_DERIVE_KEY {
|
|
DWORD dwVersion;
|
|
DWORD dwFlags;
|
|
LPCWSTR pwszKDF;
|
|
BYTE bSecretAgreementIndex;
|
|
PVOID pParameterList;
|
|
PUCHAR pbDerivedKey;
|
|
DWORD cbDerivedKey;
|
|
} CARD_DERIVE_KEY, *PCARD_DERIVE_KEY;
|
|
|
|
typedef struct _CARD_FILE_INFO {
|
|
DWORD dwVersion;
|
|
DWORD cbFileSize;
|
|
CARD_FILE_ACCESS_CONDITION AccessCondition;
|
|
} CARD_FILE_INFO, *PCARD_FILE_INFO;
|
|
|
|
typedef struct _CARD_FREE_SPACE_INFO {
|
|
DWORD dwVersion;
|
|
DWORD dwBytesAvailable;
|
|
DWORD dwKeyContainersAvailable;
|
|
DWORD dwMaxKeyContainers;
|
|
} CARD_FREE_SPACE_INFO, *PCARD_FREE_SPACE_INFO;
|
|
|
|
typedef struct _CARD_RSA_DECRYPT_INFO {
|
|
DWORD dwVersion;
|
|
BYTE bContainerIndex;
|
|
DWORD dwKeySpec;
|
|
PBYTE pbData;
|
|
DWORD cbData;
|
|
} CARD_RSA_DECRYPT_INFO, *PCARD_RSA_DECRYPT_INFO;
|
|
|
|
typedef struct _CARD_DH_AGREEMENT_INFO {
|
|
DWORD dwVersion;
|
|
BYTE bContainerIndex;
|
|
DWORD dwFlags;
|
|
DWORD dwPublicKey;
|
|
PBYTE pbPublicKey;
|
|
PBYTE pbReserved;
|
|
DWORD cbReserved;
|
|
BYTE bSecretAgreementIndex;
|
|
} CARD_DH_AGREEMENT_INFO, *PCARD_DH_AGREEMENT_INFO;
|
|
|
|
typedef struct _CARD_KEY_SIZES {
|
|
DWORD dwVersion;
|
|
DWORD dwMinimumBitlen;
|
|
DWORD dwMaximumBitlen;
|
|
DWORD dwIncrementalBitlen;
|
|
} CARD_KEY_SIZES, *PCARD_KEY_SIZES;
|
|
|
|
typedef struct _CARD_DATA *PCARD_DATA;
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_DELETE_CONTEXT)(
|
|
PCARD_DATA pCardData
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_QUERY_CAPABILITIES)(
|
|
PCARD_DATA pCardData,
|
|
PCARD_CAPABILITIES pCardCapabilities
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_DELETE_CONTAINER)(
|
|
PCARD_DATA pCardData,
|
|
BYTE bContainerIndex,
|
|
DWORD dwReserved
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_CREATE_CONTAINER)(
|
|
PCARD_DATA pCardData,
|
|
BYTE bContainerIndex,
|
|
DWORD dwFlags,
|
|
DWORD dwKeySpec,
|
|
DWORD dwKeySize,
|
|
PBYTE pbKeyData
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_GET_CONTAINER_INFO)(
|
|
PCARD_DATA pCardData,
|
|
BYTE bContainerIndex,
|
|
DWORD dwFlags,
|
|
PCONTAINER_INFO pContainerInfo
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_AUTHENTICATE_PIN)(
|
|
PCARD_DATA pCardData,
|
|
LPWSTR pwszUserId,
|
|
PBYTE pbPin,
|
|
DWORD cbPin,
|
|
PDWORD pcAttemptsRemaining
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_GET_CHALLENGE)(
|
|
PCARD_DATA pCardData,
|
|
PBYTE *ppbChallengeData,
|
|
PDWORD pcbChallengeData
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_AUTHENTICATE_CHALLENGE)(
|
|
PCARD_DATA pCardData,
|
|
PBYTE pbResponseData,
|
|
DWORD cbResponseData,
|
|
PDWORD pcAttemptsRemaining
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_UNBLOCK_PIN)(
|
|
PCARD_DATA pCardData,
|
|
LPWSTR pwszUserId,
|
|
PBYTE pbAuthenticationData,
|
|
DWORD cbAuthenticationData,
|
|
PBYTE pbNewPinData,
|
|
DWORD cbNewPinData,
|
|
DWORD cRetryCount,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_CHANGE_AUTHENTICATOR)(
|
|
PCARD_DATA pCardData,
|
|
LPWSTR pwszUserId,
|
|
PBYTE pbCurrentAuthenticator,
|
|
DWORD cbCurrentAuthenticator,
|
|
PBYTE pbNewAuthenticator,
|
|
DWORD cbNewAuthenticator,
|
|
DWORD cRetryCount,
|
|
DWORD dwFlags,
|
|
PDWORD pcAttemptsRemaining
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_DEAUTHENTICATE)(
|
|
PCARD_DATA pCardData,
|
|
LPWSTR pwszUserId,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_CREATE_DIRECTORY)(
|
|
PCARD_DATA pCardData,
|
|
LPSTR pszDirectory,
|
|
CARD_DIRECTORY_ACCESS_CONDITION AccessCondition
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_DELETE_DIRECTORY)(
|
|
PCARD_DATA pCardData,
|
|
LPSTR pszDirectoryName
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_CREATE_FILE)(
|
|
PCARD_DATA pCardData,
|
|
LPSTR pszDirectoryName,
|
|
LPSTR pszFileName,
|
|
DWORD cbInitialCreationSize,
|
|
CARD_FILE_ACCESS_CONDITION AccessCondition
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_READ_FILE)(
|
|
PCARD_DATA pCardData,
|
|
LPSTR pszDirectoryName,
|
|
LPSTR pszFileName,
|
|
DWORD dwFlags,
|
|
PBYTE *ppbData,
|
|
PDWORD pcbData
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_WRITE_FILE)(
|
|
PCARD_DATA pCardData,
|
|
LPSTR pszDirectoryName,
|
|
LPSTR pszFileName,
|
|
DWORD dwFlags,
|
|
PBYTE pbData,
|
|
DWORD cbData
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_DELETE_FILE)(
|
|
PCARD_DATA pCardData,
|
|
LPSTR pszDirectoryName,
|
|
LPSTR pszFileName,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_ENUM_FILES)(
|
|
PCARD_DATA pCardData,
|
|
LPSTR pszDirectoryName,
|
|
LPSTR *pmszFileNames,
|
|
LPDWORD pdwcbFileName,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_GET_FILE_INFO)(
|
|
PCARD_DATA pCardData,
|
|
LPSTR pszDirectoryName,
|
|
LPSTR pszFileName,
|
|
PCARD_FILE_INFO pCardFileInfo
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_QUERY_FREE_SPACE)(
|
|
PCARD_DATA pCardData,
|
|
DWORD dwFlags,
|
|
PCARD_FREE_SPACE_INFO pCardFreeSpaceInfo
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_QUERY_KEY_SIZES)(
|
|
PCARD_DATA pCardData,
|
|
DWORD dwKeySpec,
|
|
DWORD dwFlags,
|
|
PCARD_KEY_SIZES pKeySizes
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_SIGN_DATA)(
|
|
PCARD_DATA pCardData,
|
|
PCARD_SIGNING_INFO pInfo
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_RSA_DECRYPT)(
|
|
PCARD_DATA pCardData,
|
|
PCARD_RSA_DECRYPT_INFO pInfo
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_CONSTRUCT_DH_AGREEMENT)(
|
|
PCARD_DATA pCardData,
|
|
PCARD_DH_AGREEMENT_INFO pAgreementInfo
|
|
);
|
|
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef DWORD (WINAPI *PFN_CARD_DERIVE_KEY)(
|
|
PCARD_DATA pCardData,
|
|
PCARD_DERIVE_KEY pAgreementInfo
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CARD_DESTROY_DH_AGREEMENT)(
|
|
PCARD_DATA pCardData,
|
|
BYTE bSecretAgreementIndex,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
typedef DWORD (WINAPI *PFN_CSP_GET_DH_AGREEMENT)(
|
|
PCARD_DATA pCardData,
|
|
PVOID hSecretAgreement,
|
|
BYTE *pbSecretAgreementIndex,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
#else
|
|
typedef LPVOID PFN_CARD_DERIVE_KEY;
|
|
typedef LPVOID PFN_CARD_DESTROY_DH_AGREEMENT;
|
|
typedef LPVOID PFN_CSP_GET_DH_AGREEMENT;
|
|
#endif /*(_WIN32_WINNT >= 0x0600)*/
|
|
|
|
typedef struct _CARD_DATA {
|
|
DWORD dwVersion;
|
|
PBYTE pbAtr;
|
|
DWORD cbAtr;
|
|
LPWSTR pwszCardName;
|
|
PFN_CSP_ALLOC pfnCspAlloc;
|
|
PFN_CSP_REALLOC pfnCspReAlloc;
|
|
PFN_CSP_FREE pfnCspFree;
|
|
PFN_CSP_CACHE_ADD_FILE pfnCspCacheAddFile;
|
|
PFN_CSP_CACHE_LOOKUP_FILE pfnCspCacheLookupFile;
|
|
PFN_CSP_CACHE_DELETE_FILE pfnCspCacheDeleteFile;
|
|
PVOID pvCacheContext;
|
|
PFN_CSP_PAD_DATA pfnCspPadData;
|
|
SCARDCONTEXT hSCardCtx;
|
|
SCARDHANDLE hScard;
|
|
PVOID pvVendorSpecific;
|
|
PFN_CARD_DELETE_CONTEXT pfnCardDeleteContext;
|
|
PFN_CARD_QUERY_CAPABILITIES pfnCardQueryCapabilities;
|
|
PFN_CARD_DELETE_CONTAINER pfnCardDeleteContainer;
|
|
PFN_CARD_CREATE_CONTAINER pfnCardCreateContainer;
|
|
PFN_CARD_GET_CONTAINER_INFO pfnCardGetContainerInfo;
|
|
PFN_CARD_AUTHENTICATE_PIN pfnCardAuthenticatePin;
|
|
PFN_CARD_GET_CHALLENGE pfnCardGetChallenge;
|
|
PFN_CARD_AUTHENTICATE_CHALLENGE pfnCardAuthenticateChallenge;
|
|
PFN_CARD_UNBLOCK_PIN pfnCardUnblockPin;
|
|
PFN_CARD_CHANGE_AUTHENTICATOR pfnCardChangeAuthenticator;
|
|
PFN_CARD_DEAUTHENTICATE pfnCardDeauthenticate;
|
|
PFN_CARD_CREATE_DIRECTORY pfnCardCreateDirectory;
|
|
PFN_CARD_DELETE_DIRECTORY pfnCardDeleteDirectory;
|
|
LPVOID pvUnused3;
|
|
LPVOID pvUnused4;
|
|
PFN_CARD_CREATE_FILE pfnCardCreateFile;
|
|
PFN_CARD_READ_FILE pfnCardReadFile;
|
|
PFN_CARD_WRITE_FILE pfnCardWriteFile;
|
|
PFN_CARD_DELETE_FILE pfnCardDeleteFile;
|
|
PFN_CARD_ENUM_FILES pfnCardEnumFiles;
|
|
PFN_CARD_GET_FILE_INFO pfnCardGetFileInfo;
|
|
PFN_CARD_QUERY_FREE_SPACE pfnCardQueryFreeSpace;
|
|
PFN_CARD_QUERY_KEY_SIZES pfnCardQueryKeySizes;
|
|
PFN_CARD_SIGN_DATA pfnCardSignData;
|
|
PFN_CARD_RSA_DECRYPT pfnCardRSADecrypt;
|
|
PFN_CARD_CONSTRUCT_DH_AGREEMENT pfnCardConstructDHAgreement;
|
|
PFN_CARD_DERIVE_KEY pfnCardDeriveKey;
|
|
PFN_CARD_DESTROY_DH_AGREEMENT pfnCardDestroyDHAgreement;
|
|
PFN_CSP_GET_DH_AGREEMENT pfnCspGetDHAgreement;
|
|
} CARD_DATA, *PCARD_DATA;
|
|
|
|
DWORD WINAPI CardAcquireContext(
|
|
PCARD_DATA pCardData,
|
|
DWORD dwFlags
|
|
);
|
|
|
|
DWORD WINAPI CardDeleteContainer(
|
|
PCARD_DATA pCardData,
|
|
BYTE bContainerIndex,
|
|
DWORD dwReserved
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /*_INC_CARDMOD*/
|