> For the complete documentation index, see [llms.txt](https://sandbox-docs.verifone.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sandbox-docs.verifone.com/adk-5.0-programmers-guide/_e_m_v___c_t___interface_8h_source.md).

# EMV\_CT\_Interface.h

[Go to the documentation of this file.](/adk-5.0-programmers-guide/readme/files/dir_f2a776acea245b054b8e462971041f2d/dir_a8473f4b62cdc0a6141a040fa4015132/dir_f787d7497684cf42d067468735e00a3d/dir_18e3d3062bbf485b8b342eb241e15d99/_e_m_v___c_t___interface_8h.md)

```cpp
 1 /****************************************************************************
 2 * Product: ADK Cards Service - EMV Contact (CT)
 3 * Company: Verifone
 4 * Author: GSS R&D Germany
 5 * Content: Client (structure) interface - functions and definitions
 6 ****************************************************************************/
 7 
 14 #ifndef _EMV_CT_INTERFACE_H_ /* avoid double interface-includes */
 15 #define _EMV_CT_INTERFACE_H_
 16 
 17 #ifdef __cplusplus
 18 extern "C" {
 19 #endif
 20 
 21 #include "emv/EMV_Common_Interface.h"
 22 #include "EMV_CT_Link.h"
 23 #include "EMV_CT_Version.h"
 24 
 25 #define DLL_CTC // no client shared libraries anymore
 26 
 27 
 28 // ========================================================================================================
 29 // === COMMON PART ===
 30 // ========================================================================================================
 31 
 32 
 35 typedef struct EMV_CT_APPLI_STRUCT
 36 {
 37  unsigned char aidlen;
 38  unsigned char AID[16];
 39 } EMV_CT_APPLI_TYPE;
 40 
 41 #define EMV_CT_APPLI_INITIALIZER {0, {0}}
 42 
 47 typedef struct EMV_CT_CANDIDATE_STRUCT
 48 {
 49  EMV_CT_APPLI_TYPE candidate;
 50  unsigned char name[17];
 51 } EMV_CT_CANDIDATE_TYPE;
 52 
 53 #define EMV_CT_SUPPORTED_SIZE_9F0A 50 
 54 
 55 typedef struct EMV_CT_CANDIDATE_DATA_STRUCT
 60 {
 61  unsigned char API;
 62  unsigned char CodeTableIndex;
 63  unsigned char IIN[4];
 64  unsigned char IBAN[35];
 65  unsigned char BIC[12];
 66  unsigned char country2[2];
 67  unsigned char country3[3];
 68  unsigned char len9F06;
 69  unsigned char DF62_ASF[33];
 70  unsigned char selData[1+EMV_CT_SUPPORTED_SIZE_9F0A];
 71 } EMV_CT_CANDIDATE_DATA_TYPE;
 72 
 73 #define EMV_CT_CANDIDATE_DATA_INITIALIZER {0, 0, {0}, {0}, {0}, {0}, {0}, 0, {0}, {0}}
 74 
 76 #define EMV_CT_COMMON_CANDS 10 
 77 
 78 typedef struct EMV_CT_DOL_STRUCT
 81 {
 82  unsigned char dollen;
 83  unsigned char DOL[EMV_ADK_MAX_LG_DDOL];
 84 } EMV_CT_DOL_TYPE;
 85 
 88 typedef struct EMV_CT_TRACK2_STRUCT
 89 {
 90  unsigned char tr2len;
 91  unsigned char tr2data[19];
 92 } EMV_CT_TRACK2_TYPE;
 93 
 96 typedef struct EMV_CT_CRDNAME_STRUCT
 97 {
 98  unsigned char crdNameLen;
 99  unsigned char crdName[26];
 100 } EMV_CT_CRDNAME_TYPE;
 101 
 104 typedef struct EMV_CT_ICCRND_STRUCT
 105 {
 106  unsigned char iccRNDLen;
 107  unsigned char iccRND[8];
 108 } EMV_CT_ICCRND_TYPE;
 109 
 112 typedef struct EMV_CT_ISSDATA_STRUCT
 113 {
 114  unsigned char issDataLen;
 115  unsigned char issData[32];
 116 } EMV_CT_ISSDATA_TYPE;
 117 
 118 
 122 
 126 #define EMV_CT_PIN_INPUT_ONLINE 0 
 127 #define EMV_CT_PIN_INPUT_PLAIN 1 
 128 #define EMV_CT_PIN_INPUT_ENCIPHERED 2 
 129 #define EMV_CT_PIN_INPUT_PLAIN_EXT 3 
 130 #define EMV_CT_PIN_INPUT_ENCIPHERED_EXT 4 
 131 #define EMV_CT_CVM_CUSTOM 5 
 132 
 134 
 139 #define EMV_CT_PIN_INPUT_OKAY 0 
 140 #define EMV_CT_PIN_INPUT_COMM_ERR 1 
 141 #define EMV_CT_PIN_INPUT_ABORT 2 
 142 #define EMV_CT_PIN_INPUT_BYPASS 3 
 143 #define EMV_CT_PIN_INPUT_TIMEOUT 4 
 144 #define EMV_CT_PIN_INPUT_OTHER_ERR 5 
 145 #define EMV_CT_PIN_UNCRIT_TIMEOUT 6 
 146 
 148 
 153 #define EMV_CT_EMV_0 0x00 
 154 #define EMV_CT_EMV_1 0x01 
 155 #define EMV_CT_NON_EMV 0xFF 
 156 
 158 
 159 // ========================================================================================================
 160 // === Transaction Information ===
 161 // ========================================================================================================
 162 
 167 
 173  #define EMV_ADK_INF_INIT 0x80 
 174  #define EMV_ADK_INF_SEL_TERMDATA 0x81 
 175  #define EMV_ADK_INF_SEL_TEXTE 0x82 
 176  #define EMV_ADK_INF_SEL_PAYINIT_OK 0x83 
 177  #define EMV_ADK_INF_SEL_CHECK_OK 0x85 
 178  #define EMV_ADK_INF_SEL_BUILD_APPLI_LIST 0x86 
 179  #define EMV_ADK_INF_SEL_ANOTHER 0x87 
 180  #define EMV_ADK_INF_SEL_FINAL 0x88 
 181  #define EMV_ADK_INF_SEL_NO 0x89 
 182  #define EMV_ADK_INF_SEL_FINISH_OK 0x8A 
 183  #define EMV_ADK_INF_SEL_BLOCK_APPLI 0x8B 
 184  #define EMV_ADK_INF_SEL_BLOCK_CARD 0x8C 
 185  #define EMV_ADK_INF_SEL_LOA_PROC 0x8D 
 186  #define EMV_ADK_INF_SEL_UI_LOA_PROC 0x8E 
 187  #define EMV_ADK_INF_TRANS_CHECK_OK 0x91 
 188  #define EMV_ADK_INF_TRANS_READ_TERM 0x92 
 189  #define EMV_ADK_INF_TRANS_READ_APPLI 0x93 
 190  #define EMV_ADK_INF_TRANS_SEL_LANG 0x95 
 191  #define EMV_ADK_INF_TRANS_CONF_AMOUNT 0x96 
 192  #define EMV_ADK_INF_TRANS_INITIATE 0x97 
 193  #define EMV_ADK_INF_TRANS_READ_CARD_DATA 0x98 
 194  #define EMV_ADK_INF_TRANS_CHECK_APPLI_DATA 0x99 
 195  #define EMV_ADK_INF_TRANS_PROC_RESTRICTION 0x9A 
 196  #define EMV_ADK_INF_TRANS_CARD_AUTH 0x9B 
 197  #define EMV_ADK_INF_TRANS_VERIFY 0x9C 
 198  #define EMV_ADK_INF_TRANS_RISK 0x9D 
 199  #define EMV_ADK_INF_TRANS_AAT 0x9E 
 200  #define EMV_ADK_INF_TRANS_1GENAC 0x9F 
 201  #define EMV_ADK_INF_TRANS_VERIFY_CARD 0xA0 
 202  #define EMV_ADK_INF_TRANS_VERIFY_ABANDON 0xA1 
 203  #define EMV_ADK_INF_TRANS_VERIFY_OTHER 0xA2 
 204  #define EMV_ADK_INF_TRANS_VERIFY_ONLINE 0xA3 
 205  #define EMV_ADK_INF_TRANS_VERIFY_NOK 0xA4 
 206  #define EMV_ADK_INF_TRANS_VERIFY_OK 0xA5 
 207  #define EMV_ADK_INF_TRANS_VERIFY_SIGNATURE 0xA6 
 208  #define EMV_ADK_INF_TRANS_1CRYPT_TC 0xA7 
 209  #define EMV_ADK_INF_TRANS_1CRYPT_ARQC_CDA 0xA8 
 210  #define EMV_ADK_INF_TRANS_1CRYPT_ARQC_OTHER 0xA9 
 211  #define EMV_ADK_INF_TRANS_1CRYPT_AAC 0xAA 
 212  #define EMV_ADK_INF_TRANS_1CRYPT_AAR 0xAB 
 213  #define EMV_ADK_INF_TRANS_1CRYPT_UNKNOWN 0xAC 
 214  #define EMV_ADK_INF_ONL_CHECK_OK 0xB1 
 215  #define EMV_ADK_INF_ONL_FALSE 0xB3 
 216  #define EMV_ADK_INF_ONL_TRUE 0xB4 
 217  #define EMV_ADK_INF_ONL_PIN 0xB5 
 218  #define EMV_ADK_INF_ONL_HOST_AUTH 0xB6 
 219  #define EMV_ADK_INF_ONL_CRIT_SC 0xB7 
 220  #define EMV_ADK_INF_ONL_AC 0xB8 
 221  #define EMV_ADK_INF_ONL_2GENAC 0xB9 
 222  #define EMV_ADK_INF_ONL_UNCRIT_SC 0xBA 
 223  #define EMV_ADK_INF_TRANS_VERIFY_PARAM 0xBB 
 224  #define EMV_ADK_INF_FETCH_TXN_TAG_DATA 0xBC 
 225 
 227 
 232  #define EMV_ADK_STEP_01 1 
 233  #define EMV_ADK_STEP_02 2 
 234  #define EMV_ADK_STEP_03 3 
 235  #define EMV_ADK_STEP_04 4 
 236  #define EMV_ADK_STEP_05 5 
 237  #define EMV_ADK_STEP_06 6 
 238  #define EMV_ADK_STEP_07 7 
 239  #define EMV_ADK_STEP_08 8 
 240  #define EMV_ADK_STEP_09 9 
 241  #define EMV_ADK_STEP_10 10 
 242  #define EMV_ADK_STEP_11 11 
 243  #define EMV_ADK_STEP_12 12 
 244  #define EMV_ADK_STEP_13 13 
 245  #define EMV_ADK_STEP_14 14 
 246  #define EMV_ADK_STEP_15 15 
 247  #define EMV_ADK_STEP_16 16 
 248  #define EMV_ADK_STEP_17 17 
 249  #define EMV_ADK_STEP_18 18 
 250  #define EMV_ADK_STEP_19 19 
 251  #define EMV_ADK_STEP_20 20 
 252  #define EMV_ADK_STEP_21 21 
 253  #define EMV_ADK_STEP_22 22 
 254  #define EMV_ADK_STEP_23 23 
 255  #define EMV_ADK_STEP_24 24 
 256  #define EMV_ADK_STEP_25 25 
 257  #define EMV_ADK_STEP_26 26 
 258  #define EMV_ADK_STEP_27 27 
 259  #define EMV_ADK_STEP_28 28 
 260  #define EMV_ADK_STEP_29 29 
 261  #define EMV_ADK_STEP_30 30 
 262 
 264 
 268  #define EMV_ADK_DF62_ERR_POS1_CHIP_RESET 0x1000u 
 269  #define EMV_ADK_DF62_ERR_POS1_SEL_LIST_AID 0x2000u 
 270  #define EMV_ADK_DF62_ERR_POS1_SEL_LIST_PSE 0x2100u 
 271  #define EMV_ADK_DF62_ERR_POS1_READ_LIST_PSE 0x2200u 
 272  #define EMV_ADK_DF62_ERR_POS1_SEL_FINAL 0x3000u 
 273  #define EMV_ADK_DF62_ERR_POS1_GPO 0x4000u 
 274  #define EMV_ADK_DF62_ERR_POS1_READ 0x5000u 
 275  #define EMV_ADK_DF62_ERR_POS1_INT_AUTH 0x6000u 
 276  #define EMV_ADK_DF62_ERR_POS1_GETDATA_PTC 0x7001u 
 277  #define EMV_ADK_DF62_ERR_POS1_GETCHALLENGE 0x7100u 
 278  #define EMV_ADK_DF62_ERR_POS1_VERIFY_ENC_PIN 0x7210u 
 279  #define EMV_ADK_DF62_ERR_POS1_VERIFY_PLAIN_PIN 0x7220u 
 280  #define EMV_ADK_DF62_ERR_POS1_GETDATA_ATC 0x8001u 
 281  #define EMV_ADK_DF62_ERR_POS1_GETDATA_LOATC 0x8002u 
 282  #define EMV_ADK_DF62_ERR_POS1_GENAC_1 0x9001u 
 283  #define EMV_ADK_DF62_ERR_POS1_GENAC_1_CDA 0x9011u 
 284  #define EMV_ADK_DF62_ERR_POS1_EXTAUTH 0xA000u 
 285  #define EMV_ADK_DF62_ERR_POS1_CRIT_SCRIPT 0xB100u 
 286  #define EMV_ADK_DF62_ERR_POS1_GENAC_2 0x9002u 
 287  #define EMV_ADK_DF62_ERR_POS1_GENAC_2_CDA 0x9012u 
 288  #define EMV_ADK_DF62_ERR_POS1_NON_CRIT_SCRIPT 0xB200u 
 289 
 291 
 295  #define EMV_ADK_DF62_ERR_POS2_TRANSPORT_LAYER 0x0000u 
 296  #define EMV_ADK_DF62_ERR_POS2_BASE_ERROR 0x0001u 
 297  #define EMV_ADK_DF62_ERR_POS2_RAPDU 0xFFFFu 
 298 // EMV_ADK_DF62_ERR_POS2_XXXX XXXX // SW1 SW2 of R-APDU
 299 
 301 
 305  #define EMV_ADK_DF62_ERR_POS3_CHIPCARD 0x01 
 306  #define EMV_ADK_DF62_ERR_POS3_TERMINAL 0x02 
 307  #define EMV_ADK_DF62_ERR_POS3_ACQUIRER 0x03 
 308  #define EMV_ADK_DF62_ERR_POS3_CARDHOLDER 0x04 
 309 
 311 
 323  #define EMV_ADK_DF62_ERR_POS7_ABORT 0x01 
 324  #define EMV_ADK_DF62_ERR_POS7_MAG_FALLBACK 0x02 
 325 
 327 
 328 
 329 // ========================================================================================================
 330 // === TERMINAL CONFIGURATION ===
 331 // ========================================================================================================
 332 
 335 typedef struct EMV_CT_TERMDATA_STRUCT /* === EMV_CT_TERMDATA_TYPE === */
 336 {
 337  unsigned char TermTyp;
 338  unsigned char TermCountryCode[2];
 339  unsigned char TermCap[3];
 340  unsigned char TermAddCap[5];
 341  unsigned char TermIdent[8];
 342  unsigned char CurrencyTrans[2];
 343  unsigned char ExpTrans;
 344  unsigned char SuppLang[EMV_ADK_MAX_LANG];
 345  unsigned char IFDSerialNumber[8];
 346 
 347  char KernelVersion[EMV_ADK_VERSION_ASCII_SIZE];
 348  char FrameworkVersion[EMV_ADK_VERSION_ASCII_SIZE];
 349  char L1DriverVersion[EMV_ADK_VERSION_ASCII_SIZE];
 350 
 351  unsigned char Info_Included_Data[8];
 352 } EMV_CT_TERMDATA_TYPE;
 353 
 354 #define EMV_CT_TERMDATA_INITIALIZER {0,{0},{0},{0},{0},{0},0,{0},{0},{0},{0},{0},{0}}
 355 
 360 /* Byte 1 */
 361 #define EMV_CT_INPUT_TRM_TYPE 0x01 
 362 #define EMV_CT_INPUT_TRM_CURRENCY 0x02 
 363 #define EMV_CT_INPUT_TRM_EXP_CURRENCY 0x04 
 364 #define EMV_CT_INPUT_TRM_COUNTRY_CODE 0x08 
 365 #define EMV_CT_INPUT_TRM_CAPABILITIES 0x10 
 366 #define EMV_CT_INPUT_TRM_ADD_CAPS 0x20 
 367 #define EMV_CT_INPUT_TRM_ID 0x40 
 368 /* Byte 2 */
 369 #define EMV_CT_INPUT_TRM_LANGUAGES 0x01 
 370 #define EMV_CT_INPUT_TRM_IFD_SERIAL 0x02 
 371 #define EMV_CT_INPUT_TRM_KERNEL_VERSION 0x04 
 372 #define EMV_CT_INPUT_TRM_FRAMEWORK_VERSION 0x08 
 373 #define EMV_CT_INPUT_TRM_L1DRIVER_VERSION 0x10 
 374 
 376 
 377 // ========================================================================================================
 378 // === APPLICATION CONFIGURATION ===
 379 // ========================================================================================================
 380 
 381 
 386 #define EMV_CT_PROCESS_TACIAC_DEFAULT_BEFORE 0x00 
 387 #define EMV_CT_PROCESS_TACIAC_DEFAULT_AFTER 0x01 
 388 
 390 
 403 #define EMV_CT_CHECKSUM_DEFAULT "\x00\x00\x00\x00\x00" 
 404 
 405 /* Byte 1 */
 406 #define EMV_CT_CHECKSUM_INCLUDE_VERSION 0x01 
 407 #define EMV_CT_CHECKSUM_TRANSACTION_LOG 0x02 
 408 #define EMV_CT_CHECKSUM_EXCEPTION_FILE 0x04 
 409 #define EMV_CT_CHECKSUM_FORCE_ONLINE 0x08 
 410 #define EMV_CT_CHECKSUM_FORCE_ACCEPTANCE 0x10 
 411 #define EMV_CT_CHECKSUM_SUPPORT_ONL_DATA_CAPTURE 0x20 
 412 #define EMV_CT_CHECKSUM_SUPPORT_PSE 0x40 
 413 #define EMV_CT_CHECKSUM_ACCOUNT_TYPE 0x80 
 414 
 415 /* Byte 2 */
 416 #define EMV_CT_CHECKSUM_SUPPORT_ADVICES 0x01 
 417 #define EMV_CT_CHECKSUM_SUPPORT_CARDHOLDER_CONF 0x02 
 418 #define EMV_CT_CHECKSUM_PIN_BYPASS 0x04 
 419 #define EMV_CT_CHECKSUM_SUPPORT_DEFAULT_TDOL 0x08 
 420 #define EMV_CT_CHECKSUM_SUPPORT_BATCH_DATA_CAPTURE 0x10 
 421 #define EMV_CT_CHECKSUM_SUPPORT_VOICE_REF_ISS 0x20 
 422 #define EMV_CT_CHECKSUM_SUPPORT_VOICE_REF_CARD 0x40 
 423 #define EMV_CT_CHECKSUM_MULTILANG_SUPPORT 0x80 
 424 
 425 // Byte 3
 426 #define EMV_CT_CHECKSUM_PIN_BYPASS_ONCE 0x01 
 427 
 429 #define EMV_CT_MAX_NO_OF_NON_EMVCO_TAGS 20 
 434 
 436 #define EMV_CT_MAX_TAGLIST_SIZE 20 
 437 #define EMV_CT_MAX_APP_VERS 10
 438 
 440 typedef struct EMV_CT_TAGLIST_STRUCT
 441 {
 442  unsigned char anztag;
 443  unsigned short tags[EMV_CT_MAX_TAGLIST_SIZE];
 444 } EMV_CT_TAGLIST_TYPE;
 445 
 449 typedef struct EMV_CT_APPLIDATA_STRUCT // EMV_CT_APPLIDATA_TYPE
 450 {
 451  // *** EMVCo mandatory data ***
 452  unsigned char VerNum[2];
 453  unsigned char AppName[16+1];
 454  unsigned char ASI;
 455  unsigned char BrKey[2];
 456  unsigned char TermIdent[8];
 457  unsigned char FloorLimit[4];
 458  unsigned char Threshhold[4];
 459  unsigned char TargetPercentage;
 460  unsigned char MaxTargetPercentage;
 461  unsigned char TACDenial[5];
 462  unsigned char TACOnline[5];
 463  unsigned char TACDefault[5];
 464  unsigned char EMV_Application;
 465  EMV_CT_DOL_TYPE Default_TDOL;
 466  EMV_CT_DOL_TYPE Default_DDOL;
 467  unsigned char MerchIdent[15];
 468  unsigned char CDAProcessing;
 469  unsigned char ACBeforeAfter;
 470  unsigned char AIP_CVM_not_supported;
 471  unsigned char POS_EntryMode;
 472  unsigned char Additional_Versions_No[2*EMV_CT_MAX_APP_VERS];
 473  unsigned char Security_Limit[4];
 474 
 475  unsigned char App_FlowCap[5];
 476 
 477  // Options for further development:
 478  // * define limits for AIDs, e.g. use this AID from 0$ to 100$ and another AID from 50$ to 1000$, ... to enable optimizing interchange fees for the customers
 479 
 480  // *** optional data (range 9F50 - 9F7F) ***
 481  unsigned char Additional_Tags_TRM[EMV_ADK_ADD_TAG_SIZE];
 482  EMV_CT_DOL_TYPE Additional_Tags_CRD;
 483  EMV_CT_TAGLIST_TYPE Mandatory_Tags_CRD;
 484 
 485  // Terminal data per AID, enables virtual terminals per AID, duplicated from terminal wide parameters, the terminal wide is used if not available
 486  unsigned char App_TermCap[3];
 487  unsigned char Capabilities_belowLimit[3];
 488  unsigned char App_CountryCodeTerm[2];
 489  unsigned char App_TermAddCap[5];
 490  unsigned char App_TermTyp;
 491 
 492  // parameters for domestic / local application selection and processing handling
 493  EMV_CT_APPLI_TYPE xAIDPrio[EMV_ADK_MAX_PRIO_APP];
 494  unsigned char tucFallbackMIDs[EMV_ADK_MAX_CHP_TO_MSR];
 495  unsigned char xuc_Special_TRX[8];
 496  unsigned char uc_FallBack_Handling;
 497  unsigned char Customer_CVM;
 498 
 499  unsigned char Chksum_Params[5];
 500  char ChksumASCIIEMVCO[EMV_ADK_CHECKSUM_ASCII_SIZE];
 501 
 502  EMV_CT_APPLI_TYPE MasterAID;
 503  unsigned char TxnTypesSale[3];
 504  unsigned char TxnTypesCash[3];
 508  unsigned char TxnTypesCashback[3];
 510  unsigned char TxnTypesRefund[3];
 512  unsigned char DataContainerReadIds[89];
 514  unsigned char DataContainerReadRanges[89];
 515 
 516  unsigned char Info_Included_Data[8];
 517 } EMV_CT_APPLIDATA_TYPE;
 518 
 519 
 524 /* Byte 1 */
 525 #define EMV_CT_INPUT_APL_VERSION 0x01 
 526 #define EMV_CT_INPUT_APL_NAME 0x02 
 527 #define EMV_CT_INPUT_APL_ASI 0x04 
 528 #define EMV_CT_INPUT_APL_MERCHANT_CATCODE 0x08 
 529 #define EMV_CT_INPUT_APL_TID 0x10 
 530 #define EMV_CT_INPUT_APL_FLOOR_LIMIT 0x20 
 531 #define EMV_CT_INPUT_APL_THRESH 0x40 
 532 #define EMV_CT_INPUT_APL_TARGET 0x80 
 533 /* Byte 2 */
 534 #define EMV_CT_INPUT_APL_MAXTARGET 0x01 
 535 #define EMV_CT_INPUT_APL_TAC_DENIAL 0x02 
 536 #define EMV_CT_INPUT_APL_TAC_ONLINE 0x04 
 537 #define EMV_CT_INPUT_APL_TAC_DEFAULT 0x08 
 538 #define EMV_CT_INPUT_APL_TDOL 0x10 
 539 #define EMV_CT_INPUT_APL_DDOL 0x20 
 540 #define EMV_CT_INPUT_APL_MERCHANT_IDENT 0x40 
 541 #define EMV_CT_INPUT_APL_ADD_TAGS 0x80 
 542 /* Byte 3 */
 543 #define EMV_CT_INPUT_APL_MAND_TAGS 0x01 
 544 #define EMV_CT_INPUT_APL_TERM_CAPS 0x02 
 545 #define EMV_CT_INPUT_APL_FLOW_CAPS 0x04 
 546 #define EMV_CT_INPUT_APL_AIP_CVM_NOTSUPP 0x08 
 547 #define EMV_CT_INPUT_APL_COUNTRY_CODE 0x10 
 548 #define EMV_CT_INPUT_APL_ADD_TERM_CAPS 0x20 
 549 #define EMV_CT_INPUT_APL_PRIO_APPS 0x40 
 550 #define EMV_CT_INPUT_APL_MID 0x80 
 551 /* Byte 4 */
 552 #define EMV_CT_INPUT_APL_EMV_APPKIND 0x01 
 553 #define EMV_CT_INPUT_APL_SPECIAL_TXN 0x02 
 554 #define EMV_CT_INPUT_APL_FALLBACK 0x04 
 555 #define EMV_CT_INPUT_APL_CDA 0x08 
 556 #define EMV_CT_INPUT_APL_AC_BEFOREAFTER 0x10 
 557 #define EMV_CT_INPUT_APL_POS_ENTRY 0x20 
 558 #define EMV_CT_INPUT_APL_TRM_TYPE 0x40 
 559 #define EMV_CT_INPUT_APL_CUSTOMER_CVM 0x80 
 560 /* Byte 5 */
 561 #define EMV_CT_INPUT_APL_CHECKSUM_PARAMS 0x01 
 562 #define EMV_CT_INPUT_APL_CHECKSUM 0x02 
 563 #define EMV_CT_INPUT_APL_MASTER_AID 0x04 
 564 #define EMV_CT_INPUT_APL_ADD_CRD_TAGS 0x08 
 565 #define EMV_CT_INPUT_APL_ADD_VERSIONS 0x10 
 566 #define EMV_CT_INPUT_APL_SEC_LIMIT 0x20 
 567 #define EMV_CT_INPUT_APL_SEC_CAPS 0x40 
 568 // free bit 0x80
 569 
 570 // byte 6, EMV_CT_APPLIDATA_STRUCT::Info_Included_Data[5]
 571 #define EMV_CT_INPUT_APL_TXN_TYPES_SALE 0x01 
 572 #define EMV_CT_INPUT_APL_TXN_TYPES_CASH 0x02 
 573 #define EMV_CT_INPUT_APL_TXN_TYPES_CASHBACK 0x04 
 574 #define EMV_CT_INPUT_APL_TXN_TYPES_REFUND 0x08 
 575 #define EMV_CT_INPUT_APL_DCR_LIST_IDS 0x10 
 576 #define EMV_CT_INPUT_APL_DCR_LIST_RANGES 0x20 
 577 
 579 
 584 #define CVM_CONTINUE 0x00 
 585 #define CVM_DEFAULT_SIGN 0x01 
 586 #define CVM_DEFAULT_ONLINE_PIN 0x02 
 587 #define CVM_ABORT 0x03 
 588 
 590 
 595 /* Byte 1 */
 596 #define FORCE_RISK_MANAGEMENT 0x01 
 597 #define BLACKLIST 0x02 
 598 #define TRANSACTION_LOG 0x04 
 599 #define PIN_BYPASS 0x08 
 600 #define FORCE_ONLINE 0x10 
 601 #define FORCE_ACCEPTANCE 0x20 
 602 /* Byte 2 */
 603 #define CASH_SUPPORT 0x01 
 604 #define CASHBACK_SUPPORT 0x02 
 605 #define EMV_CT_CHECK_INCONS_TRACK2_PAN 0x04 
 606 #define EMV_CT_CONF_AMOUNT_PIN 0x08 
 607 #define EMV_CT_DOMESTIC_CHECK 0x10 
 608 #define TRANSACTION_TYPE_17_FOR_CASH 0x20 
 609 #define EMV_CT_CHECK_INCONS_TRACK2_NO_EXP 0x40 
 613 #define TRANSACTION_TYPE_30_FOR_PREAUTH 0x80 
 614 /* Byte 3 */
 618 #define REFERRAL_AFTER_TRX 0x01 
 619 #define DCC_CHECK 0x02 
 620 #define REFUND_CONFIRM_AMOUNT 0x04 
 621 #define EMV_CT_USE_CFG_APPL_NAME 0x08 
 622 #define EMV_CT_FALLBACK_ON_INCONS_TRACK2 0x10 
 623 #define EMV_CT_AMOUNT_CONFIRM_ON_SIGNATURE 0x20 
 624 #define EMV_CT_SDA_SELECTED_TVR_ON 0x40 
 625 #define EMV_CASHBACK_OFFLINE_SUPPORT 0x80 
 626 /* Byte 4 */
 627 #define REFUND_PROCESSING_RESTRICTIONS 0x01 
 628 #define REFUND_NO_GENERATE_AC 0x02 
 629 #define REFUND_FLOW_INTERAC 0x04 
 630 #define REFUND_NO_ZERO_AMOUNT 0x08 
 631 #define DPAS_DATA_STORAGE_SUPPORT 0x10 
 632 #define DPAS_EXTENDED_LOGGING_SUPPORT 0x20 
 633 #define DPAS_CDCVM_SUPPORT 0x40 
 634 #define APP_FLOW_VISA_QUASI_CASH 0x80 
 635 /* Byte 5 */
 636 #define APP_FLOW_CASHBACK_TRANS_TYPE_00 0x01 
 637 #define REFUND_FLOW_ARQC 0x02 
 640 
 642 
 647 #define CDA_EMV_MODE_1 0 
 648 #define CDA_EMV_MODE_2 1 
 649 #define CDA_EMV_MODE_3 2 
 650 #define CDA_EMV_MODE_4 3 
 651 
 653 #define FB_DEFAULT_EMVCO 0x00 
 658 #define FB_GERMAN_POS_SPEC 0x01 
 659 #define FB_NO_UNATTENDED_FALLB 0x80 
 660 
 662 
 663 
 664 
 665 // ========================================================================================================
 666 // === EMV TRANSACTION DATA ===
 667 // ========================================================================================================
 668 
 673 typedef struct EMV_CT_DOM_CHIP_STRUCT
 674 {
 675  EMV_CT_APPLI_TYPE xAIDChip;
 676  unsigned char ucAppName[16+1];
 677  unsigned char ucASI;
 678  unsigned char xuc_Special_TRX[8];
 679  unsigned char uc_EMVConformSelect;
 681 } EMV_CT_DOM_CHIP_TYPE;
 684 
 685 
 689 typedef struct EMV_CT_FALLBCK_MSR_STRUCT
 690 {
 691  unsigned char xMID;
 692  unsigned char xuc_Special_TRX[8];
 693  unsigned char ucFallback;
 696  unsigned char ucOptions;
 697 } EMV_CT_FALLBCK_MSR_TYPE;
 698 
 699 
 705 typedef struct EMV_CT_PAYMENT_STRUCT
 706 {
 707  unsigned char Amount[6];
 708  unsigned char CurrencyTrans[2];
 711  unsigned char ExpTrans;
 714  unsigned char Date[3];
 717  unsigned char Time[3];
 719  unsigned char TransCount[4];
 721  unsigned char Cashback_Amount[6];
 723  unsigned char Force_Online;
 730  unsigned char Force_Acceptance;
 732  unsigned char Online_Switch;
 734  unsigned char uc_AccountType;
 736  char PreSelected_Language;
 738  unsigned char uc_AmountConfirmation;
 740  EMV_CT_TAGLIST_TYPE Additional_Result_Tags;
 743 } EMV_CT_PAYMENT_TYPE;
 744 
 745 
 749 typedef struct EMV_CT_APPS_SELECT_STRUCT
 750 {
 751  unsigned char No_DirectorySelect;
 752  char ucCardholderConfirmation;
 754  EMV_CT_APPLI_TYPE ExcludeEmvAIDs[3];
 756  unsigned char countDomesticChip;
 758  EMV_CT_DOM_CHIP_TYPE xDomestic_Chip[EMV_ADK_MAX_DOM_CHP];
 760  unsigned char countFallbackMS;
 762  EMV_CT_FALLBCK_MSR_TYPE xFallback_MS[EMV_ADK_MAX_FB_MSR];
 764  unsigned char countCommonCands;
 767  unsigned char ModifiedCandidates[EMV_CT_COMMON_CANDS];
 770 } EMV_CT_APPS_SELECT_TYPE;
 773 
 774 
 775 
 776 // ========================================================================================================
 777 // === APPLICATION SELECTION ===
 778 // ========================================================================================================
 779 
 784 #define FB_NEVER 0x00 
 785 #define FB_CHIP_APP 0x01 
 786 #define FB_APP 0x02 
 787 #define FB_CHIP 0x03 
 788 #define FB_ALWAYS 0x04 
 789 
 791 #define FB_OPT_CASHBACK 0x01 
 796 
 798 
 801 typedef struct EMV_CT_SELECT_STRUCT // EMV_CT_SELECT_TYPE
 802 {
 803  unsigned char InitTXN_Buildlist;
 804  unsigned char TransType;
 808  EMV_CT_PAYMENT_TYPE TXN_Data;
 813  EMV_CT_APPS_SELECT_TYPE SEL_Data;
 816  unsigned char TxnOptions[5];
 817  unsigned char TxnSteps[3];
 819  unsigned char Info_Included_Data[8];
 821 } EMV_CT_SELECT_TYPE;
 822 
 823 
 828 /* Byte 1 */
 829 #define INPUT_SEL_AMOUNT 0x01 
 830 #define INPUT_SEL_AMOUNT_CURRENCY 0x02 
 831 #define INPUT_SEL_CUREXPONENT 0x04 
 832 #define INPUT_SEL_DATE 0x08 
 833 #define INPUT_SEL_TIME 0x10 
 834 #define INPUT_SEL_TTYPE 0x20 
 835 #define INPUT_SEL_EXCLUDE_AID 0x40 
 836 #define INPUT_SEL_BUILDLIST 0x80 
 837 /* Byte 2 */
 838 #define INPUT_SEL_FORCE_ONLINE 0x01 
 839 #define INPUT_SEL_FORCE_ACCEPT 0x02 
 840 #define INPUT_SEL_NO_PSE 0x04 
 841 #define INPUT_SEL_CARDCONF 0x08 
 842 #define INPUT_SEL_ONLINE_SWITCH 0x10 
 843 #define INPUT_SEL_TXN_OPTIONS 0x20 
 844 #define INPUT_SEL_DOMCHIP 0x40 
 845 #define INPUT_SEL_FALLBACK_MSR 0x80 
 846 /* Byte 3 */
 847 #define INPUT_SEL_TXN_COUNTER 0x01 
 848 #define INPUT_SEL_TXN_STEPS 0x02 
 849 #define INPUT_SEL_CB_AMOUNT 0x04 
 850 #define INPUT_SEL_ACCOUNT_TYPE 0x08 
 851 #define INPUT_SEL_LANGUAGE 0x10 
 852 #define INPUT_SEL_AMOUNT_CONF 0x20 
 853 #define INPUT_SEL_ADD_TAGS 0x40 
 854 #define INPUT_SEL_MOD_CANDLIST 0x80 
 855 
 856 
 858 
 863 #define CARD_CONF_YES 0x00 
 864 #define CARD_CONF_NO 0x01 
 865 
 867 
 872 #define REUSE_LIST_REMOVE_AID 0x00 
 873 #define BUILD_NEW 0x01 
 874 
 875 #define REUSE_EXISTING_LIST_SEL_0 0xF0 
 876 #define REUSE_EXISTING_LIST_SEL_1 0xF1 
 877 #define REUSE_EXISTING_LIST_SEL_2 0xF2 
 878 #define REUSE_EXISTING_LIST_SEL_3 0xF3 
 879 #define REUSE_EXISTING_LIST_SEL_4 0xF4 
 880  // continues up to 0xFF for up to 15 candidates
 881 
 883 
 886 typedef struct EMV_CT_SELECTRES_STRUCT
 887 {
 888  EMV_CT_APPLI_TYPE T_84_DFName;
 889  unsigned char AppName[16+1];
 890  unsigned char T_50_ApplicationName[16+1];
 891  unsigned char T_9F11_CodeTable;
 892  unsigned char T_9F12_PreferredName[16+1];
 893  unsigned char T_5F2D_Lang_Pref[8+1];
 894  unsigned char T_DF62_ErrorData[15];
 895  unsigned char T_DF63_DisplayText;
 896  unsigned char countFallbackMS;
 897  EMV_CT_FALLBCK_MSR_TYPE xFallback_MS[EMV_ADK_MAX_FB_MSR];
 898  unsigned char PDOL_tags;
 899 
 900  EMV_CT_CANDIDATE_TYPE T_BF04_Candidates[EMV_CT_COMMON_CANDS];
 901  EMV_CT_APPLI_TYPE T_DF04_Aidselected;
 902 
 903  unsigned char T_DF61_Info_Received_Data[8];
 904 } EMV_CT_SELECTRES_TYPE;
 905 
 906 #define EMV_SELECTRES_PDOL_TAG_TRANSTYPE 0x20 
 907 #define EMV_SELECTRES_PDOL_TAG_ACCOUNTTYPE 0x40 
 908 #define EMV_SELECTRES_PDOL_TAG_AMOUNT 0x80 
 909 
 910 // byte 1 (T_DF61_Info_Received_Data[0])
 915 #define DF61_SEL_DF62_ERRORDATA 0x01 
 916 #define DF61_SEL_AGREED_APPNAME 0x02 
 917 #define DF61_SEL_50_APPLICATION_NAME 0x04 
 918 #define DF61_SEL_9F11_CODE_TABLE 0x08 
 919 #define DF61_SEL_5F2D_LANG_PREF 0x10 
 920 #define DF61_SEL_84_DF_NAME 0x20 
 921 #define DF61_SEL_9F12_PREF_NAME 0x40 
 922 #define DF61_SEL_9F63_DISPTXT 0x80 
 923 // byte 2 (T_DF61_Info_Received_Data[1])
 924 #define DF61_SEL_MID_DATA 0x01 
 925 #define DF61_SEL_PDOL 0x02 
 926 #define DF61_SEL_AID 0x04 
 927 #define DF61_SEL_CANDIDATES 0x08 
 928 
 930 
 931 
 932 // ========================================================================================================
 933 // === TRANSACTION EXECUTION ===
 934 // ========================================================================================================
 935 
 940  // byte 1 (TxnOptions[0])
 941  #define EMV_CT_SELOP_CBCK_APPLI_SEL 0x01 
 942  #define EMV_CT_SELOP_RESERV_ALLOW_B_ON_A 0x02 
 943  #define EMV_CT_SELOP_CBCK_DOMESTIC_APPS 0x04 
 944  #define EMV_CT_SELOP_ADDALL 0x08 
 945  #define EMV_CT_SELOP_ADDBLO 0x10 
 946  #define EMV_CT_NO_LONGEST_AID_MATCH 0x20 
 947  #define EMV_CT_ALLOW_BLOCKED 0x40 
 948  #define EMV_CT_SELOP_REMOVEALL_BUT_EXCLUDED 0x80 
 949  // byte 2 (TxnOptions[1])
 950  #define EMV_CT_TRXOP_PIN_BYPASS_NO_SUBSEQUENT 0x01 
 951  #define EMV_CT_TRXOP_MULTIPLE_RANDOM_NUMBERS 0x02 
 952  #define EMV_CT_TRXOP_DCC_CALLBACK 0x04 
 953  #define EMV_CT_TRXOP_DCC_CALLBACK_ALWAYS 0x08 
 956  #define EMV_CT_TRXOP_NO_FALLBACK_AFTER_CVM 0x10 
 957  #define EMV_CT_TRXOP_AMOUNT_CONF 0x20 
 958  #define EMV_CT_TRXOP_ENFORCE_PIN 0x40 
 959  #define EMV_CT_TRXOP_FALLBACK_GOODSERVICE 0x80 
 960  // byte 3 (TxnOptions[2])
 961  #define EMV_CT_TRXOP_MERCHINFO_CALLBACK 0x01 
 962  #define EMV_CT_TRXOP_RND_CALLBACK 0x02 
 963  #define EMV_CT_TRXOP_HOTLST_LOG_CALLBACK 0x04 
 964  #define EMV_CT_TRXOP_LOCAL_CHCK_CALLBACK 0x08 
 965  #define EMV_CT_TRXOP_CARDHINFO_CALLBACK 0x10 
 966  #define EMV_CT_TRXOP_EARLY_PIN_ENTRY 0x20 
 967  #define EMV_CT_TRXOP_DELAYED_EARLY_PIN 0x40 
 968  #define EMV_CT_TRXOP_KERNEL_PARSE_UNKNOWN_TLV 0x80 
 969  // byte 4 (TxnOptions[3])
 970  #define EMV_CT_SELOP_NO_UTF8 0x01 
 971  #define EMV_CT_TRXOP_NO_UTF8 0x01 
 972  #define EMV_CT_TRXOP_TIP_AMOUNT_ZERO 0x02 
 973 # define EMV_CT_TRXOP_NO_CHECK_BB_PADDING 0x04 
 974 # define EMV_CT_TRXOP_NO_CHECK_DDLEN 0x08 
 975  // byte 5 (TxnOptions[4])
 976  #define ONL_OPTS_LAST_PIN_TRY 0x01 
 977  #define EMV_CT_TRXOP_PERFORM_ISS_ACQ_CVM 0x02 
 978  #define EMV_CT_TRXOP_WRITE_DS_OFFLINE_TXN 0x08 
 979  #define EMV_CT_TRXOP_FORCE_TACIAC_DEFAULT 0x10 
 980  #define EMV_CT_SELOP_WEEK_PRIORITY_APPS 0x20 
 981  #define EMV_CT_CUST_APPLI_SELECTION_PERFORMED 0x40 
 982  #define EMV_CT_SELOP_DETECT_EMPTY_LIST 0x80 
 983 
 985 
 1005 // byte 1
 1006 #define RETURN_CANDIDATE_LIST 0x01 
 1007 #define RETURN_AFTER_GPO 0x02 
 1008 #define RETURN_AFTER_READ_RECORD 0x04 
 1009 #define RETURN_AFTER_DATA_AUTH 0x08 
 1010 #define RETURN_FOR_CVM_PROCESS 0x10 
 1011 #define RETURN_FOR_CVM_FINISH 0x20 
 1012  // 0x40 leave gap for a return after CVM processing but before risk management
 1013 #define RETURN_AFTER_RISK_MANGEMENT 0x80 
 1014 // byte 2
 1015 #define RETURN_CAND_LIST_PREPROC 0x01 
 1016 #define RETURN_CAND_LIST_SKIP 0x02 
 1017 // byte 3
 1018 #define MS_RETURN_CALLBACKS 0x80 
 1019 #define MS_ADD_TO_HOTLIST 0x01 
 1020 #define MS_DECLINE_AAC 0x02 
 1021 #define MS_ABORT_TXN 0x04 
 1022 #define MS_PIN_BYPASS 0x08 
 1023 #define MS_CUST_CVM_OK 0x10 
 1024 #define MS_PINPAD_NOTPRESENT 0x20 
 1025 #define MS_PINICC_STOP 0x40 
 1026 
 1028 
 1034 #define CONFIRM_AMOUNT_BEFORE_CVM 0x00 
 1035 #define CONFIRM_AMOUNT_AFTER_CVM 0x01 
 1036 
 1038 
 1044 #define MODE_DCC_NO_TRX_CONTINUE 0 
 1045 #define MODE_DCC_YES_TRX_CONTINUE 1 
 1046 #define MODE_DCC_NO_TRX_ABORT 2 
 1047 #define MODE_DCC_YES_TRX_ABORT 3 
 1048 
 1050 
 1053 typedef struct EMV_CT_TRANSAC_STRUCT // EMV_CT_TRANSAC_TYPE
 1054 {
 1055  EMV_CT_PAYMENT_TYPE TXN_Data;
 1056 
 1057  unsigned char TxnOptions[5];
 1058  unsigned char TxnSteps[3];
 1059 
 1060  unsigned char Info_Included_Data[8];
 1061 } EMV_CT_TRANSAC_TYPE;
 1062 
 1063 
 1068  /* Byte 1 */
 1069 #define INPUT_OFL_TXN_COUNTER 0x01 
 1070 #define INPUT_OFL_ADD_TAGS 0x02 
 1071 #define INPUT_OFL_CB_AMOUNT 0x04 
 1072 #define INPUT_OFL_ACCOUNT_TYPE 0x08 
 1073 #define INPUT_OFL_LANGUAGE 0x10 
 1074 #define INPUT_OFL_AMOUNT_CONF 0x20 
 1075 #define INPUT_OFL_TXN_OPTIONS 0x40 
 1076 #define INPUT_OFL_TXN_STEPS 0x80 
 1077  /* Byte 2 */
 1078 #define INPUT_OFL_AMOUNT 0x01 
 1079 #define INPUT_OFL_AMOUNT_CURRENCY 0x02 
 1080 #define INPUT_OFL_CUREXPONENT 0x04 
 1081 #define INPUT_OFL_DATE 0x08 
 1082 #define INPUT_OFL_TIME 0x10 
 1083 #define INPUT_OFL_FORCE_ONLINE 0x20 
 1084 #define INPUT_OFL_FORCE_ACCEPT 0x40 
 1085 #define INPUT_OFL_ONLINE_SWITCH 0x80 
 1086 
 1088 
 1092 typedef struct EMV_CT_SRCRIPTRES_STRUCT
 1093 {
 1094  unsigned char countScriptCrit;
 1095  unsigned char ScriptCritResult[EMV_ADK_SCRIPT_RESULT_MAX][EMV_ADK_SCRIPT_RESULT_LEN];
 1096  unsigned char countScriptUnCrit;
 1097  unsigned char ScriptUnCritResult[EMV_ADK_SCRIPT_RESULT_MAX][EMV_ADK_SCRIPT_RESULT_LEN];
 1098 } EMV_CT_SRCRIPTRES_TYPE;
 1099 
 1100 
 1103 typedef struct EMV_CT_HOST_STRUCT
 1104 {
 1105  char OnlineResult;
 1106  unsigned char AuthResp[2];
 1107  unsigned char LenAuth;
 1108  unsigned char* AuthData;
 1109  unsigned short LenScriptCrit;
 1110  unsigned char* ScriptCritData;
 1111  unsigned short LenScriptUnCrit;
 1112  unsigned char* ScriptUnCritData;
 1113  unsigned char AuthorizationCode[6];
 1114  char Result_referral;
 1115  char AuthResp_Referral[2];
 1116  char AuthResp_Wrong_PIN[2];
 1117  char AuthResp_Positive[2];
 1118  unsigned char PreAuth_Amount[6];
 1119  unsigned char amountOthUpd[6];
 1122  unsigned char TxnOptions[5];
 1124  unsigned char TxnSteps[3];
 1125 
 1126  unsigned short WriteDataStorageLen;
 1127  unsigned char* WriteDataStorageData;
 1128 
 1129  unsigned char Info_Included_Data[8];
 1130 } EMV_CT_HOST_TYPE;
 1131 
 1132 
 1137  /* Byte 1, Index 0 */
 1138 #define INPUT_ONL_ONLINE_RESP 0x01 
 1139 #define INPUT_ONL_ONLINE_AC 0x02 
 1140 #define INPUT_ONL_AUTHDATA 0x04 
 1141 #define INPUT_ONL_SCRIPTCRIT 0x08 
 1142 #define INPUT_ONL_SCRIPTUNCRIT 0x10 
 1143 #define INPUT_ONL_AUTHCODE 0x20 
 1144 #define INPUT_ONL_RESULT_REFERRAL 0x40 
 1145 #define INPUT_ONL_ARC_REFERRAL 0x80 
 1146  /* Byte 2, Index 1 */
 1147 #define INPUT_ONL_ARC_WRONGPIN 0x01 
 1148 #define INPUT_ONL_TXN_OPTIONS 0x02 
 1149 #define INPUT_ONL_AMOUNT_GAC2 0x04 
 1150 #define INPUT_ONL_TXN_STEPS 0x08 
 1151 #define INPUT_ONL_ARC_POSITIVE 0x10 
 1152 #define INPUT_ONL_WRITE_DS_DATA 0x20 
 1153 #define INPUT_ONL_AMOUNT_OTH 0x40 
 1154 
 1156 
 1160 typedef struct EMV_CT_TRANSRES_STRUCT // EMV_CT_TRANSRES_TYPE
 1161 {
 1162  unsigned long StatusInfo;
 1163  unsigned char T_9F27_CryptInfo;
 1164  unsigned char T_9F36_ATC[2];
 1165  unsigned char T_9F26_Cryptogramm[8];
 1166  unsigned char T_5A_PAN[10];
 1167  unsigned char T_9F39_POSEntryMode;
 1168  unsigned char T_5F24_AppExpDate[3];
 1169  unsigned char T_9F41_TransCount[4];
 1170  unsigned char T_5F34_PANSequenceNo[1];
 1172  EMV_CT_TRACK2_TYPE T_57_DataTrack2;
 1173  EMV_CT_ISSDATA_TYPE T_9F10_DataIssuer;
 1174  unsigned char T_9F37_RandomNumber[4];
 1175  unsigned char T_95_TVR[5];
 1176  unsigned char T_9A_Date[3];
 1177  unsigned char T_9F21_Time[3];
 1178  unsigned char T_9C_TransType;
 1179  unsigned char T_5F2A_CurrencyTrans[2];
 1184  unsigned char T_82_AIP[2];
 1185  unsigned char T_9F1A_TermCountryCode[2];
 1186  unsigned char T_9F34_CVM_Res[3];
 1187  unsigned char T_9F33_TermCap[3];
 1188  unsigned char T_9F35_TermTyp;
 1190  unsigned char T_9F1E_IFDSerialNumber[8];
 1191  EMV_CT_APPLI_TYPE T_84_DFName;
 1192  unsigned char T_9F09_VerNum[2];
 1193  EMV_CT_SRCRIPTRES_TYPE scriptresults;
 1194  unsigned char T_9B_TSI[2];
 1195  EMV_CT_APPLI_TYPE T_9F06_AID;
 1196  unsigned char Add_TXN_Tags[EMV_ADK_ADD_TAG_SIZE];
 1197  unsigned char T_9F02_TXNAmount[6];
 1198  unsigned char T_9F03_TXNAdditionalAmount[6];
 1199  unsigned char T_9F53_MC_CatCode[1];
 1200  unsigned char AppName[16+1];
 1201  unsigned char T_5F25_AppEffDate[3];
 1203  unsigned char T_5F28_IssCountryCode[2];
 1204  unsigned char T_9F45_DataAuthCode[2];
 1205  EMV_CT_ICCRND_TYPE T_9F4C_ICCDynNumber;
 1206  unsigned char TACDenial[5];
 1207  unsigned char TACOnline[5];
 1208  unsigned char TACDefault[5];
 1209  unsigned char T_9F0E_IACDenial[5];
 1210  unsigned char T_9F0F_IACOnline[5];
 1211  unsigned char T_9F0D_IACDefault[5];
 1212  unsigned char T_9F40_AddTermCap[5];
 1213  unsigned char T_DF62_ErrorData[15];
 1215  unsigned char T_9F16_MerchIdent[15];
 1216  unsigned char T_DF63_DisplayText;
 1217  EMV_CT_CRDNAME_TYPE T_5F20_Cardholder;
 1218  unsigned char T_5F2D_Lang_Pref[8+1];
 1219  unsigned char T_9F08_ICC_Appli_Vers_No[2];
 1220  unsigned char T_5F36_Trx_Currency_Exp;
 1221  unsigned char T_DF59_Offl_PIN_errors;
 1222  unsigned char T_5F30_ServiceCode[2];
 1223  unsigned char T_DF17_FallbackMID;
 1224  unsigned char T_8E_CVM_List[EMV_ADK_MAX_CVM_LIST_LEN];
 1226  unsigned char T_DF64_KernelDebugData[EMV_ADK_DEBUG_DATA_SIZE];
 1228  unsigned char T_DF61_Info_Received_Data[8];
 1229 } EMV_CT_TRANSRES_TYPE;
 1230 
 1231 
 1236 /* Byte 1 */
 1237 #define TRX_STATUSINFO 0x01 
 1238 #define TRX_9F27_CRYPTINFO 0x02 
 1239 #define TRX_9F36_ATC 0x04 
 1240 #define TRX_9F26_CRYPTOGRAMM 0x08 
 1241 #define TRX_5A_PAN 0x10 
 1242 #define TRX_9F39_POS_ENTRY_MODE 0x20 
 1243 #define TRX_5F24_APPEXPDATE 0x40 
 1244 #define TRX_9F41_TRANSCOUNT 0x80 
 1245 
 1246 /* Byte 2 */
 1247 #define TRX_5F34_PAN_SEQ_NUMBER 0x01 
 1248 #define TRX_57_DATA_TRACK2 0x02 
 1249 #define TRX_9F10_DATAISSUER 0x04 
 1250 #define TRX_9F37_RANDOM_NUMBER 0x08 
 1251 #define TRX_95_TVR 0x10 
 1252 #define TRX_9A_DATE 0x20 
 1253 #define TRX_9F21_TIME 0x40 
 1254 #define TRX_9C_TRANSTYPE 0x80 
 1255 
 1256 /* Byte 3 */
 1257 #define TRX_5F2A_TRX_CURRENCY 0x01 
 1258 #define TRX_82_AIP 0x02 
 1259 #define TRX_9F1A_TERM_COUNTRY_CODE 0x04 
 1260 #define TRX_9F34_CVM_RES 0x08 
 1261 #define TRX_9F33_TERMCAP 0x10 
 1262 #define TRX_9F35_TERMTYP 0x20 
 1263 #define TRX_9F1E_IFDSERIALNUMBER 0x40 
 1264 #define TRX_84_DFNAME 0x80 
 1265 
 1266 /* Byte 4 */
 1267 #define TRX_9F09_VERNUM 0x01 
 1268 #define TRX_SCRIPTRESULTS 0x02 
 1269 #define TRX_9B_TSI 0x04 
 1270 #define TRX_9F06_AID 0x08 
 1271 #define TRX_ADDITIONAL_TAGS 0x10 
 1272 #define TRX_APPNAME 0x20 
 1273 #define TRX_5F25_APPEFFDATE 0x40 
 1274 #define TRX_5F28_ISSCOUNTRYCODE 0x80 
 1275 
 1276 /* Byte 5 */
 1277 #define TRX_9F45_DATAAUTHCODE 0x01 
 1278 #define TRX_9F4C_ICCDYNNUMBER 0x02 
 1279 #define TRX_TAC_DENIAL 0x04 
 1280 #define TRX_TAC_ONLINE 0x08 
 1281 #define TRX_TAC_DEFAULT 0x10 
 1282 #define TRX_9F0E_IAC_DENIAL 0x20 
 1283 #define TRX_9F0F_IAC_ONLINE 0x40 
 1284 #define TRX_9F0D_IAC_DEFAULT 0x80 
 1285 
 1286 /* Byte 6 */
 1287 //#define TRX_9F42_APPCURRENCYCODE 0x01 ///< B6b1: 2013-11-20 removed former T_9F42_AppCurrencyCode (only ::EMV_CT_CARDDATA_TYPE)
 1288 #define TRX_9F40_TERMCAP 0x02 
 1289 #define TRX_DF62_ERRORDATA_TRANS 0x04 
 1290 #define TRX_9F16_MERCHANT_ID 0x08 
 1291 #define TRX_5F20_CARDHOLDER 0x10 
 1292 #define TRX_5F2D_LANG_PREFERENCE 0x20 
 1293 #define TRX_9F08_ICC_APPLI_VERS_NO 0x40 
 1294 #define TRX_5F36_TRX_CURRENCY_EXPO 0x80 
 1295 
 1296 /* Byte 7 */
 1297 #define TRX_5F30_SERVICE_CODE 0x01 
 1298 #define EMV_CT_TRX_DF17_FALLBACK_MID 0x02 
 1299 #define EMV_CT_TRX_8E_CVM_List 0x04 
 1300 #define TRX_DF63_DISPLAY_ID 0x08 
 1301 #define TRX_DF64_KERNEL_DEBUG 0x10 
 1302 #define TRX_9F02_AMOUNT 0x20 
 1303 #define TRX_9F03_CB_AMOUNT 0x40 
 1304 #define TRX_9F53_MC_CATCODE 0x80 
 1305 
 1306 /* Byte 8 */
 1307 #define TRX_DF59_OFFLINE_PIN_ERRORS 0x01 
 1308 
 1309 
 1311 
 1312 
 1313 // ========================================================================================================
 1314 // === MISCELLANEOUS ===
 1315 // ========================================================================================================
 1316 
 1317 
 1318 // ========================================================================================================
 1319 // === CALLBACK defines ===
 1320 // ========================================================================================================
 1321 
 1328 typedef unsigned char EMV_ADK_MerchantInfo;
 1329 #define eEMVMerCustSelApp 0 
 1330 #define eEMVMerConfAmount 1 
 1331 #define eEMVMerCrdhldVerif 2 
 1332 #define eEMVMerReadAppData 3 
 1333 #define eEMVMerOffAuth 4 
 1334 #define eEMVMer1stGAC 5 
 1335 #define eEMVMer2ndGAC 6 
 1336 #define eEMVMerSelect 7 
 1337 #define eEMVMerPINProgress 8 
 1338 #define eEMVMerCustConf 9 
 1339 #define eEMVMerPINInput 10 
 1340 #define eEMVMerLangSelect 11 
 1341 
 1342 #define eEMVMerCustLang 0x80 
 1343 
 1345 typedef unsigned char eCardholderInfo;
 1351 #define eEMVCrdWrongPIN 0 
 1352 #define eEMVCrdCorrectPIN 1 
 1353 #define eEMVCrdAppChange 2 
 1354 #define eEMVCrdLastTryPIN 3 
 1355 
 1357 
 1362 #define CBK_SEL_MERCHANT 0x00 
 1363 #define CBK_SEL_CUSTOMER 0x01 
 1364 
 1366 
 1371 #define CBK_DOMAPP_REMAIN 0 
 1372 #define CBK_DOMAPP_REMOVE 1 
 1373 #define CBK_DOMAPP_REMAIN2 2 
 1374 #define CBK_DOMAPP_REMAIN3 3 
 1375 
 1377 
 1384 #define DOM_OPTION_LEN 3 
 1385 #define DOM_OPTION_AUSTRIAN_NGV 0x01 
 1386 #define DOM_OPTION_TRX_INTERCEPT 0x02 
 1387 #define DOM_OPTION_ABORT_NO_TEXT 0x04 
 1388 #define DOM_OPTION_TIP_OFF 0x08 
 1389 
 1391 
 1396 #define DOM_INFO_LEN 3 
 1397 #define DOM_INFO_ICC_REQ_AMOUNT 0x01 
 1398 #define DOM_INFO_ICC_REQ_TRANSTYPE 0x02 
 1399 
 1401 #define DCC_CBCK_INFO_LEN 3 
 1408 #define DCC_CBCK_INFO_PDOL_FORBIT 0x01 
 1409 
 1411 
 1414 typedef struct EMV_CT_CAPKEY_STRUCT
 1415 {
 1416  unsigned char *RID;
 1417  unsigned char Index;
 1418  unsigned char *Key;
 1419  unsigned char KeyLen;
 1420  unsigned char Exponent;
 1421  unsigned char *Hash;
 1422  unsigned char noOfRevocEntries;
 1423  unsigned char* RevocEntries;
 1424 } EMV_CT_CAPKEY_TYPE;
 1425 
 1426 
 1429 typedef struct EMV_CT_CAPREAD_STRUCT
 1430 {
 1431  unsigned char RID[5];
 1432  unsigned char Index;
 1433  unsigned char KeyLen;
 1434 } EMV_CT_CAPREAD_TYPE;
 1435 
 1436 
 1437 // ========================================================================================================
 1438 // === CALLBACK FUNCTION for additional features and apps interaction during the transaction ===
 1439 // === (PIN, Application Selection, DCC, ...) ===
 1440 // ========================================================================================================
 1441 
 1452 #define TAG_BF01_CBK_MERCHINFO 0xBF01 
 1453 #define TAG_BF02_CBK_AMOUNTCONF 0xBF02 
 1458 #define TAG_BF03_CBK_LOG_HOTLIST 0xBF03 
 1468 #define TAG_BF04_CBK_REDUCE_CAND 0xBF04 
 1476 #define TAG_BF05_CBK_DOM_APPS 0xBF05 
 1494 #define TAG_BF06_CBK_LOCAL_CHECKS 0xBF06 
 1499 #define TAG_BF07_CBK_DCC 0xBF07 
 1523 #define TAG_BF08_CBK_PIN 0xBF08 
 1542 #define TAG_BF09_CBK_CARDHOLDERINFO 0xBF09 
 1552 #define TAG_BF7F_CBK_TRACE 0xBF7F 
 1557 #define TAG_BF13_CBK_RND 0xBF13 
 1563 
 1569 
 1570 
 1571 #define FS_CALLBACK_DATA_RECORD 0xFF // currently max. 201 bytes (5 candidates in cbk_reduceCandidateList())
 1572 
 1573 // ========================================================================================================
 1574 // === SERIALIZED FUNCTIONAL CONTACT INTERFACE ===
 1575 // ========================================================================================================
 1576 
 1577 
 1578 #define EMV_CT_SER_Init_Framework(dataIn, dataInLen, dataOut, dataOutLen) EMV_CT_SER_Init_Framework_Client(EMV_CT_FRAMEWORK_VERSION, (dataIn), (dataInLen), (dataOut), (dataOutLen))
 1579 
 1580 DLL_CTC EMV_ADK_INFO EMV_CT_SER_Init_Framework_Client(const char *version, const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1581 
 1582 DLL_CTC void EMV_CT_SER_Exit_Framework(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1583 
 1584 DLL_CTC EMV_ADK_INFO EMV_CT_SER_MapVirtualTerminal(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1585 
 1586 DLL_CTC EMV_ADK_INFO EMV_CT_SER_StoreCAPKey(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1587 
 1588 DLL_CTC EMV_ADK_INFO EMV_CT_SER_ReadCAPKeys(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1589 
 1590 DLL_CTC EMV_ADK_INFO EMV_CT_SER_SetTermData(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1591 
 1592 DLL_CTC EMV_ADK_INFO EMV_CT_SER_GetTermData(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1593 
 1594 DLL_CTC EMV_ADK_INFO EMV_CT_SER_SetAppliData(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1595 
 1596 DLL_CTC EMV_ADK_INFO EMV_CT_SER_GetAppliData(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1597 
 1598 DLL_CTC EMV_ADK_INFO EMV_CT_SER_StartTransaction(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1599 
 1600 DLL_CTC EMV_ADK_INFO EMV_CT_SER_GetCandidateData(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1601 
 1602 DLL_CTC EMV_ADK_INFO EMV_CT_SER_ContinueOffline(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1603 
 1604 DLL_CTC EMV_ADK_INFO EMV_CT_SER_ContinueOnline(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1605 
 1606 DLL_CTC EMV_ADK_INFO EMV_CT_SER_fetchTxnTags(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1607 
 1608 DLL_CTC EMV_ADK_INFO EMV_CT_SER_fetchTxnDOL(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1609 
 1610 DLL_CTC EMV_ADK_INFO EMV_CT_SER_updateTxnTags(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1611 
 1612 DLL_CTC EMV_ADK_INFO EMV_CT_SER_CheckSupportedAID(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1613 
 1614 DLL_CTC EMV_ADK_INFO EMV_CT_SER_EndTransaction(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1615 
 1616 DLL_CTC unsigned char EMV_CT_SER_SmartISO(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1617 
 1618 DLL_CTC unsigned char EMV_CT_SER_SmartDetect(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1619 
 1620 DLL_CTC unsigned char EMV_CT_SER_SmartReset(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1621 
 1622 DLL_CTC unsigned char EMV_CT_SER_SmartPowerOff(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1623 
 1624 DLL_CTC unsigned char EMV_CT_SER_SmartPIN(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1625 
 1626 DLL_CTC unsigned char EMV_CT_SER_Send_PIN_Offline(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 1627 
 1628 
 1629 // ========================================================================================================
 1630 // === FUNCTIONAL CONTACT INTERFACE ===
 1631 // ========================================================================================================
 1632 
 1633 
 1638 #define EMV_CT_INIT_OPT_BASE_INIT 0x00000001 
 1639 #define EMV_CT_INIT_OPT_CONFIG_MODE 0x00000008 
 1640 #define EMV_CT_INIT_OPT_USE_DEF_VT_CAPK 0x00000010 
 1643 #define EMV_CT_INIT_OPT_DELETE_ALL 0x00000020 
 1644 #define EMV_CT_INIT_OPT_TRACE 0x00000100 
 1645 #define EMV_CT_INIT_OPT_TRACE_CLT 0x00000200 
 1646 #define EMV_CT_INIT_OPT_TRACE_SYSLOG 0x00000800 
 1647 #define EMV_CT_INIT_OPT_TRACE_ADK_LOG 0x00080000 
 1648 #define EMV_CT_INIT_OPT_TIMINGS 0x00100000 
 1649 #define EMV_CT_INIT_OPT_SHARED_CONFIG 0x00200000 
 1650 #define EMV_CT_INIT_OPT_EPP_MASTER 0x00400000 
 1653 
 1657 #define EMV_CT_INIT_VIRT_1 0x01000000 
 1658 #define EMV_CT_INIT_VIRT_2 0x02000000 
 1659 #define EMV_CT_INIT_VIRT_3 0x03000000 
 1660 #define EMV_CT_INIT_VIRT_4 0x04000000 
 1661 #define EMV_CT_INIT_VIRT_5 0x05000000 
 1662 #define EMV_CT_INIT_VIRT_6 0x06000000 
 1663 #define EMV_CT_INIT_VIRT_7 0x07000000 
 1664 #define EMV_CT_INIT_VIRT_8 0x08000000 
 1665 #define EMV_CT_INIT_VIRT_9 0x09000000 
 1666 #define EMV_CT_INIT_VIRT_10 0x0A000000 
 1667 #define EMV_CT_INIT_VIRT_11 0x0B000000 
 1668 #define EMV_CT_INIT_VIRT_12 0x0C000000 
 1669 #define EMV_CT_INIT_VIRT_13 0x0D000000 
 1670 #define EMV_CT_INIT_VIRT_14 0x0E000000 
 1671 #define EMV_CT_INIT_VIRT_15 0x0F000000 
 1672 #define EMV_CT_INIT_VIRT_16 0x10000000 
 1673 #define EMV_CT_INIT_VIRT_17 0x11000000 
 1674 #define EMV_CT_INIT_VIRT_18 0x12000000 
 1675 #define EMV_CT_INIT_VIRT_19 0x13000000 
 1676 #define EMV_CT_INIT_VIRT_20 0x14000000 
 1677 
 1679 
 1680 #define EMV_CT_Init_Framework(numberOfAIDs, EMV_Callback, externalData, options) EMV_CT_Init_Framework_Client(EMV_CT_FRAMEWORK_VERSION, (numberOfAIDs), (EMV_Callback), (externalData), (options))
 1681 
 1706 /*****************************************************************************
 1707 * EMV_CT_Init_Framework_Client
 1708 *****************************************************************************/
 1713 DLL_CTC EMV_ADK_INFO EMV_CT_Init_Framework_Client(const char *version, unsigned char numberOfAIDs, EMV_CT_CALLBACK_FnT EMV_Callback, void* externalData, unsigned long options);
 1714 
 1715 
 1716 /*****************************************************************************
 1717 * EMV_CT_Exit_Framework
 1718 *****************************************************************************/
 1730 DLL_CTC void EMV_CT_Exit_Framework(void);
 1731 
 1732 /*****************************************************************************
 1733 * EMV_CT_Exit_Framework_extended
 1734 *****************************************************************************/
 1749 DLL_CTC void EMV_CT_Exit_Framework_extended(unsigned char options);
 1750 
 1755 #define EXIT_CT_BASE 0x00 
 1756 #define EXIT_CT_COMPLETE 0x01 
 1759 
 1762 
 1763 /*****************************************************************************
 1764 * EMV_CT_CLIENT_GetVersion
 1765 *****************************************************************************/
 1773 DLL_CTC const char* EMV_CT_CLIENT_GetVersion(void);
 1774 
 1775 
 1776 /*****************************************************************************
 1777 * EMV_CT_FRAMEWORK_GetVersion
 1778 *****************************************************************************/
 1791 DLL_CTC const char* EMV_CT_FRAMEWORK_GetVersion(void);
 1792 
 1793 
 1794 /*****************************************************************************
 1795 * EMV_CT_MapVirtualTerminal
 1796 *****************************************************************************/
 1821 DLL_CTC EMV_ADK_INFO EMV_CT_MapVirtualTerminal(EMV_ADK_VIRTUALTERMMAP_TYPE VirtualTermMapType, unsigned char *TLVSwitchValue, unsigned int TLVBufLen, unsigned char VirtualTerminal);
 1822 
 1823 
 1824 /*****************************************************************************
 1825 * EMV_CT_StoreCAPKey
 1826 *****************************************************************************/
 1849 DLL_CTC EMV_ADK_INFO EMV_CT_StoreCAPKey(EMV_ADK_HANDLE_RECORD_TYPE eHandleCAPKeyType, const EMV_CT_CAPKEY_TYPE *pxKeyData);
 1850 
 1851 
 1852 /*****************************************************************************
 1853 * EMV_CT_ReadCAPKeys
 1854 *****************************************************************************/
 1883 DLL_CTC EMV_ADK_INFO EMV_CT_ReadCAPKeys(EMV_CT_CAPREAD_TYPE *pxKeyData, unsigned char *pucMaxnum);
 1884 
 1885 /*****************************************************************************
 1886 * EMV_CT_GetCAPKeyInfo
 1887 *****************************************************************************/
 1924 DLL_CTC EMV_ADK_INFO EMV_CT_GetCAPKeyInfo(EMV_CT_CAPREAD_TYPE *pxKeyInfo, unsigned capacity, unsigned offset, unsigned *received, unsigned *configured);
 1925 
 1926 
 1927 /*****************************************************************************
 1928 * EMV_CT_SetTermData
 1929 *****************************************************************************/
 1950 DLL_CTC EMV_ADK_INFO EMV_CT_SetTermData(EMV_CT_TERMDATA_TYPE* pxTermData);
 1951 
 1952 /*****************************************************************************
 1953 * EMV_CT_GetTermData
 1954 *****************************************************************************/
 1974 DLL_CTC EMV_ADK_INFO EMV_CT_GetTermData(EMV_CT_TERMDATA_TYPE* pxTermData);
 1975 
 1976 /*****************************************************************************
 1977 * EMV_CT_SetAppliData
 1978 *****************************************************************************/
 2006 DLL_CTC EMV_ADK_INFO EMV_CT_SetAppliData(EMV_ADK_HANDLE_RECORD_TYPE eHandleAppliType, EMV_CT_APPLI_TYPE* pxAID, EMV_CT_APPLIDATA_TYPE* pxAppliData);
 2007 
 2008 /*****************************************************************************
 2009 * EMV_CT_GetAppliData
 2010 *****************************************************************************/
 2035 DLL_CTC EMV_ADK_INFO EMV_CT_GetAppliData(EMV_ADK_READAPPLI_TYPE eReadAppliType, EMV_CT_APPLI_TYPE* pxAID, EMV_CT_APPLIDATA_TYPE* pxAppliData);
 2036 
 2037 
 2038 /*****************************************************************************
 2039 * EMV_CT_ApplyConfiguration
 2040 *****************************************************************************/
 2064 DLL_CTC EMV_ADK_INFO EMV_CT_ApplyConfiguration(unsigned long options);
 2065 
 2066 
 2067 /*****************************************************************************
 2068 * EMV_CT_StartTransaction
 2069 *****************************************************************************/
 2105 DLL_CTC EMV_ADK_INFO EMV_CT_StartTransaction(EMV_CT_SELECT_TYPE *pxSelectInput, EMV_CT_SELECTRES_TYPE* pxSelectRes);
 2106 
 2107 /*****************************************************************************
 2108 * EMV_CT_GetCandidateData
 2109 *****************************************************************************/
 2128 DLL_CTC EMV_ADK_INFO EMV_CT_GetCandidateData(EMV_CT_CANDIDATE_DATA_TYPE *candidateData);
 2129 
 2130 /*****************************************************************************
 2131 * EMV_CT_ContinueOffline
 2132 *****************************************************************************/
 2181 DLL_CTC EMV_ADK_INFO EMV_CT_ContinueOffline(EMV_CT_TRANSAC_TYPE *pxTransactionInput, EMV_CT_TRANSRES_TYPE *pxTransRes);
 2182 
 2183 /*****************************************************************************
 2184 * EMV_CT_ContinueOnline
 2185 *****************************************************************************/
 2209 DLL_CTC EMV_ADK_INFO EMV_CT_ContinueOnline(EMV_CT_HOST_TYPE *pxOnlineInput, EMV_CT_TRANSRES_TYPE *pxTransRes);
 2210 
 2211 /*****************************************************************************
 2212 * EMV_CT_fetchTxnTags
 2213 *****************************************************************************/
 2244 DLL_CTC EMV_ADK_INFO EMV_CT_fetchTxnTags(unsigned long options, unsigned long* requestedTags, unsigned short noOfRequestedTags,
 2245  unsigned char* tlvBuffer, unsigned short bufferLength, unsigned short* tlvDataLength );
 2246 
 2247 
 2248 /*****************************************************************************
 2249 * EMV_CT_fetchTxnDOL
 2250 *****************************************************************************/
 2282 DLL_CTC EMV_ADK_INFO EMV_CT_fetchTxnDOL(unsigned long options, const unsigned char* DOL, unsigned dolLen, unsigned char* buffer, unsigned bufferSize, unsigned* dataLength);
 2283 
 2284 /*****************************************************************************
 2285 * EMV_CT_updateTxnTags
 2286 *****************************************************************************/
 2343 DLL_CTC EMV_ADK_INFO EMV_CT_updateTxnTags(unsigned long options, unsigned char *tlvBuffer, unsigned short bufferLength);
 2344 
 2347 typedef struct
 2348 {
 2349  EMV_CT_APPLI_TYPE aid;
 2350  unsigned char API;
 2352  unsigned char text[17];
 2354  unsigned char aux_text[17];
 2356  unsigned char code_table;
 2358  unsigned char lang_pref[9];
 2364 } EMV_CT_CandListType;
 2366 
 2367 /*****************************************************************************
 2368  * EMV_CT_CheckSupportedAID
 2369  *****************************************************************************/
 2406 DLL_CTC EMV_ADK_INFO EMV_CT_CheckSupportedAID(
 2407  const EMV_CT_APPLI_TYPE* aid, unsigned char ASI,
 2408  const unsigned char* defaultLabel,
 2409  EMV_CT_CandListType* pCandList, unsigned char MaxCand,
 2410  unsigned char* pCandidateCount, unsigned short* sw12,
 2411  const unsigned char* adtCardTagList);
 2412 
 2413 /*****************************************************************************
 2414 * EMV_CT_EndTransaction
 2415 *****************************************************************************/
 2430 DLL_CTC EMV_ADK_INFO EMV_CT_EndTransaction(unsigned long options);
 2431 
 2432 // ========================================================================================================
 2433 // === CONTACT FUNCTIONS for transparent ICC access of the customer card ===
 2434 // ========================================================================================================
 2435 
 2440 #define EMV_CT_CUSTOMER 0x00 
 2441 #define EMV_CT_SAM_1 0x01 
 2442 #define EMV_CT_SAM_2 0x02 
 2443 #define EMV_CT_SAM_3 (EMV_CT_SAM_1|EMV_CT_SAM_2) 
 2444 #define EMV_CT_TRY_PPS 0x04 
 2445 #define EMV_CT_SKIP_ATR 0x08 
 2446 #define EMV_CT_TRY_PPS_EPA 0x10 
 2447 #define EMV_CT_WARMRESET 0x20 
 2448 // bit 7,8 ID 0 Slot only
 2449 #define EMV_CT_DETECT_WRONG_ATR 0x40 
 2450 #define EMV_CT_ID0_ISO_MODE 0x80 
 2451 // bit 7,8 SAM slots only
 2452 #define EMV_CT_SAM_EMV_MODE 0x40 
 2453 #define EMV_CT_CARD_CLASS_B_3V 0x80 
 2454 
 2456 
 2457 /*****************************************************************************
 2458 * EMV_CT_SmartISO
 2459 *****************************************************************************/
 2478 DLL_CTC unsigned char EMV_CT_SmartISO (unsigned char ucOptions, unsigned short usInDataLen, unsigned char *pucDataIn, unsigned short *pusOutDataLen, unsigned char *pucDataOut, unsigned short usOutBufferLength);
 2479 
 2480 /*****************************************************************************
 2481 * EMV_CT_SmartDetect
 2482 *****************************************************************************/
 2497 DLL_CTC unsigned char EMV_CT_SmartDetect(unsigned char ucOptions);
 2498 
 2499 /*****************************************************************************
 2500 * EMV_CT_SmartReset
 2501 *****************************************************************************/
 2519 DLL_CTC unsigned char EMV_CT_SmartReset(unsigned char ucOptions, unsigned char* pucATR, unsigned long* pnATRLength);
 2520 
 2521 /*****************************************************************************
 2522 * EMV_CT_SmartPowerOff
 2523 *****************************************************************************/
 2538 DLL_CTC unsigned char EMV_CT_SmartPowerOff(unsigned char ucOptions);
 2539 
 2540 /*****************************************************************************
 2541 * EMV_CT_SmartPIN
 2542 *****************************************************************************/
 2569 DLL_CTC unsigned char EMV_CT_SmartPIN(const unsigned char * INICCRandom,
 2570  const unsigned char * PubKeyData,
 2571  int PubKeyLen,
 2572  int Exponent,
 2573  unsigned char* pucPINResultData);
 2574 
 2575 
 2576 /*****************************************************************************
 2577 * EMV_CT_Send_PIN_Offline
 2578 *****************************************************************************/
 2602 DLL_CTC unsigned char EMV_CT_Send_PIN_Offline(unsigned char *pucPINResultData);
 2603 
 2604 
 2609  #define CONTACT_LED_ID_0 0x00 
 2610 
 2611  #define CONTACT_LED_OFF 0x00 
 2612  #define CONTACT_LED_ON 0x01 
 2613  #define CONTACT_LED_BLINK 0x02 
 2614 
 2615  #define CONTACT_LED_COLOR_WHITE 0x01 
 2616  #define CONTACT_LED_COLOR_RED 0x02 
 2617  #define CONTACT_LED_COLOR_GREEN 0x03 
 2618  #define CONTACT_LED_COLOR_BLUE 0x04 
 2619  #define CONTACT_LED_COLOR_YELLOW 0x05 
 2620 
 2622 /*****************************************************************************
 2623 * EMV_CT_LED
 2624 *****************************************************************************/
 2637 DLL_CTC unsigned char EMV_CT_LED(unsigned char ucLedId, unsigned char ucLedState, unsigned char ucLedColor, unsigned long ulTimeoutMs);
 2638 
 2639 
 2640 #ifdef __cplusplus
 2641 } // extern "C"
 2642 #endif
 2643 
 2644 #endif // #ifndef _EMV_CT_INTERFACE_H_
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://sandbox-docs.verifone.com/adk-5.0-programmers-guide/_e_m_v___c_t___interface_8h_source.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
