/*
* GSC-IS (v2.1) Service Call Level Service Provider Module for PC/SC Lite and
* DoD CAC/CACv2/PIV/PIVv2 Cards
*/
/* Access ... ? */
#define BSI_AM_XAUTH 0x02
#define BSI_AM_SECURE_CHANNEL_GP 0x04
#define BSI_AM_PIN 0x06
#define BSI_AM_SECURE_CHANNEL_ISO 0x0B
/* Access Control Rules */
#define BSI_ACR_ALWYS 0x00
#define BSI_ACR_NEVER 0x01
#define BSI_ACR_XAUTH 0x02
#define BSI_ACR_XAUTH_OR_PIN 0x03
#define BSI_SECURE_CHANNEL_GP 0x04 /* typo in spec? */
#define BSI_ACR_SECURE_CHANNEL_GP 0x04
#define BSI_ACR_PIN_ALWAYS 0x05
#define BSI_ACR_PIN 0x06
#define BSI_ACR_XAUTH_THEN_PIN 0x07
#define BSI_ACR_UPDATE_ONCE 0x08
#define BSI_ACR_PIN_THEN_XAUTH 0x09
#define BSI_SECURE_CHANNEL_ISO 0x0B /* typo in spec? */
#define BSI_ACR_SECURE_CHANNEL_ISO 0x0B
#define BSI_ACR_XAUTH_AND_PIN 0x0C
/* Algorithms */
#define BSI_CKM_DES3_ECB 0x81
#define BSI_CKM_DES3_CBC 0x82
#define BSI_CKM_RSA_NO_PAD 0xA3
/* Return Codes */
#define BSI_OK 0x00
#define BSI_ACCESS_DENIED 0x01
#define BSI_ACR_NOT_AVAILABLE 0x02
#define BSI_BAD_AID 0x03
#define BSI_BAD_ALGO_ID 0x04
#define BSI_BAD_AUTH 0x05
#define BSI_BAD_HANDLE 0x06
#define BSI_BAD_PARAM 0x07
#define BSI_BAD_TAG 0x08
#define BSI_CARD_ABSENT 0x09
#define BSI_CARD_REMOVED 0x0A
#define BSI_NO_SPSSERVICE 0x0B
#define BSI_IO_ERROR 0x0C
#define BSI_INSUFFICIENT_BUFFER 0x0E
#define BSI_NO_CARDSERVICE 0x0F
#define BSI_NO_MORE_SPACE 0x10
#define BSI_PIN_BLOCKED 0x11
#define BSI_TAG_EXISTS 0x13
#define BSI_TIMEOUT_ERROR 0x14
#define BSI_TERMINAL_AUTH 0x15
#define BSI_NO_TEXT_AVAILABLE 0x16
#define BSI_UNKNOWN_ERROR 0x17
#define BSI_UNKNOWN_READER 0x18
#define BSI_SC_LOCKED 0x19
#define BSI_NOT_TRANSACTED 0x20
#define MaxNbAM 50
struct BSIAcr {
unsigned long ACRType;
unsigned long keyIDOrReference[MaxNbAM];
unsigned long AuthNb;
unsigned long ACRID;
};
struct GCacr {
struct BSIAcr createACR;
struct BSIAcr deleteACR;
struct BSIAcr readTagListACR;
struct BSIAcr readValueACR;
struct BSIAcr updateValueACR;
};
struct GCContainerSize {
unsigned long maxNbDataItems;
unsigned long maxValueStorageSize;
};
struct CRYPTOacr {
struct BSIAcr getChallengeACR;
struct BSIAcr internalAuthenticateACR;
struct BSIAcr pkiComputeACR;
struct BSIAcr createACR;
struct BSIAcr deleteACR;
struct BSIAcr readTagListACR;
struct BSIAcr readValueACR;
struct BSIAcr updateValueACR;
};
struct BSIAuthenticator {
};
unsigned long gscBsiUtilAcquireContext(unsigned long hCard, unsigned char *AID, struct BSIAuthenticator strctAuthenticator[], unsigned long authNb);
unsigned long gscBsiUtilConnect(unsigned char *readerName, unsigned long *hCard);
unsigned long gscBsiUtilDisconnect(unsigned long hCard);
unsigned long gscBsiUtilBeginTransaction(unsigned long hCard, _Bool blType);
unsigned long gscBsiUtilEndTransaction(unsigned long hCard);
unsigned long gscBsiUtilGetVersion(unsigned char **version);
unsigned long gscBsiUtilGetCardProperties(unsigned long hCard, unsigned char **CCCUniqueID, unsigned long *cardCapability);
unsigned long gscBsiUtilGetCardStatus(unsigned long hCard);
unsigned long gscBsiUtilGetExtendedErrorText(unsigned long hCard, unsigned char **errorText);
unsigned long gscBsiUtilGetReaderList(unsigned char ***readerList);
unsigned long gscBsiUtilPassthru(unsigned long hCard, unsigned char *cardCommand, unsigned char **cardResponse);
unsigned long gscBsiUtilReleaseContext(unsigned long hCard, unsigned char *AID);
unsigned long gscBsiGcDataCreate(unsigned long hCard, unsigned char *AID, unsigned char tag, unsigned char *value);
unsigned long gscBsiGcDataDelete(unsigned long hCard, unsigned char *AID, unsigned char tag);
unsigned long gscBsiGcGetContainerProperties(unsigned long hCard, unsigned char *AID, struct GCacr *strctGCacr, struct GCContainerSize *strctContainerSizes, unsigned char **containerVersion);
unsigned long gscBsiGcReadTagList(unsigned long hCard, unsigned char *AID, unsigned char **tagArray);
unsigned long gscBsiGcReadValue(unsigned long hCard, unsigned char *AID, unsigned char tag, unsigned char **value);
unsigned long gscBsiGcUpdateValue(unsigned long hCard, unsigned char *AID, unsigned char tag, unsigned char *value);
unsigned long gscBsiGetChallenge(unsigned long hCard, unsigned char *AID, unsigned char **challenge);
unsigned long gscBsiSkiInternalAuthenticate(unsigned long hCard, unsigned char *AID, unsigned char algoID, unsigned char *challenge, unsigned char **cryptogram);
unsigned long gscBsiPkiCompute(unsigned long hCard, unsigned char *AID, unsigned char algoID, unsigned char *message, unsigned char **result);
unsigned long gscBsiPkiGetCertificate(unsigned long hCard, unsigned char *AID, unsigned char **Certificate);
unsigned long gscBsiGetCryptoProperties(unsigned long hCard, unsigned char *AID, struct CRYPTOacr *strctCRYPTOacr, unsigned long *keyLen);