| /** |
| * 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*/ |