Table of Contents |
---|
Agnos - along with AgnosDB - provides a set of EMV core primitives which support EMV transaction flow. These primitives are used by:
CT payment applications (see emvco.c as example)
CL card processing applications (alias CL kernels)
C Structures
tTransactionalContext (agnos.h)
See emvco.c for an example using that structure (CT transaction flow only).
Code Block | ||||
---|---|---|---|---|
| ||||
typedef struct { /** If bTRUE, TAC/IAC default processing is skipped if unable to go online*/ tBoolean mSkipTACIACDefault; /** If bTRUE, TAC processing is performed*/ tBoolean mTAC; /** If bTRUE, Floor Limit Checking is performed*/ tBoolean mFloorLimitChecking; /** If bTRUE, RTS is performed*/ tBoolean mRandomTransactionSelection; /** If bTRUE, Velocity Checking is performed*/ tBoolean mVelocityChecking; /** If bTRUE, Default TDOL is supported*/ tBoolean mDefaultTDOL; /** TDOL length*/ tByte mDefaultTDOLLen; /**Tag 0x97*/ tByte mDefaultTDOLValue[TDOL_MAX_LENGTH]; /** If bTRUE, Default DDOL is supported*/ tBoolean mDefaultDDOL; /** DDOL length*/ tByte mDefaultDDOLLen; /**Tag 0x9F49 or 0x9F69 (UDOL for contactless)*/ tByte mDefaultDDOLValue[DDOL_MAX_LENGTH]; /**Terminal Action Code - Denial*/ tTVR mTACDenial; /**Terminal Action Code - Online*/ tTVR mTACOnline; /**Terminal Action Code - Default*/ tTVR mTACDefault; /**Tag 0x9F1B*/ tAmount mTerminalFloorLimit; /**See EMV Book III, TRM section - Random Transaction Selection*/ tPercentage mTargetPercentage; /**See EMV Book III, TRM section - Random Transaction Selection. Same transaction currency exponent as 0x9F02*/ tAmount mThresholdValue; /**See EMV Book III, TRM section - Random Transaction Selection*/ tPercentage mMaxTargetPercentage; /**if bTRUE, pin may be bypassed when requested*/ tBoolean mPINByPass; /**bTRUE when merchant manually requested transaction to go online*/ tBoolean mForcedOnline; /**Tag 0x9A*/ tNumericDate mTransactionDate[3]; /**Tag 0x9F21*/ tNumericDate mTransactionTime[3]; /**Tag 0x9F35*/ tTerminalType mTerminalType; /** Transaction language*/ tByte mLanguage; /** PIN entry delay in second*/ tCounter mPinTimeOut; /** CDAMode1, CDAMode2 and CDAMode3 only*/ tCDAType mCDAType; /**if bTRUE, Terminal Risk Management is performed even if ICC doesn't request it*/ tBoolean mForceTRM; /**Tag 0x5F57*/ tByte mAccountType; /**Tag 0x9F39*/ tByte mPOSEntryMode; /**Tag 0x9F41*/ tCounter mTransactionSequenceCounter; /**Tag 0x9F1D*/ tByte mTerminalRiskManagementData[8]; /**Tag 0x9F3A*/ tAmount mAmountReferenceCurrency; /**Tag 0x9F3C*/ tByte mTransactionReferenceCurrencyCode[2]; /**Tag 0x9F3D*/ tByte mTransactionReferenceCurrencyExponent; /**Tag 0x9F1A*/ tByte mTerminalCountryCode[2]; /**Tag 0x5F2A*/ tByte mTransactionCurrencyCode[2]; /**Tag 0x5F36*/ tByte mTransactionCurrencyExponent; /**Tag 0x9F33*/ tByte mTerminalCapabilities[3]; /**Tag 0x9F40*/ tByte mAdditionalTerminalCapabilities[5]; /**Tag 0x9F09*/ tByte mApplicationVersionNumber[2]; /**Tag 0x9C*/ tByte mTxnType; /**Tag 0x9F1C*/ tByte mTerminalIdentification[8]; /**Tag 0x9F1E*/ tByte mIFDSerialNumber[8]; /**Tag 0x9F01*/ tByte mAcquirerIdentifier[6]; } tTransactionalContext; |
tADFList (selection.h)
Code Block | ||||
---|---|---|---|---|
| ||||
typedef struct { tByte mNumberOfADF; tADF mList[MAX_SUPPORTED_ADF]; tBoolean mEliminatedADF[MAX_SUPPORTED_ADF]; tBoolean mCardBlocked; tBoolean mAnyBlockedApplication; tByte mSelectionIndex; } tADFList; |
tADF (selection.h)
Code Block | ||||
---|---|---|---|---|
| ||||
typedef struct { tByte mADFName[MAX_AID_LENGTH];//0x4F tByte mADFLen; tByte mLabel[MAX_AID_LENGTH];//0x50 tByte mLabelLen; tByte mPreferredName[MAX_AID_LENGTH];//0x9F12 tByte mPreferredNameLen; tByte mPriorityIndicator;//0x87 tByte mLangagePreference[8];//0x5F2D tByte mLangagePreferenceLen; tByte mIssuerCodeTableIndex;//0x9F11 tByte mRemainingFCI[200];//0xBF0C. May contain Issuer Country Code 5F56 AND/OR Application Selection Flag DF62 tByte mRemainingFCILen; tByte mBlocked; tByte mCorrespondingAIDOrderNumber;// Order of the ADF in the AID list (application supported by terminal) // Extension to support PPSE tByte mKernelIdentifier[8];//0x9F2A tByte mKernelIdentifierLen; tByte mRequestedKernelId; tByte mExtendedSelection[MAX_AID_LENGTH];//0x9F29 tByte mExtendedSelectionLen; } tADF; |
tPSE (selection.h)
Code Block | ||||
---|---|---|---|---|
| ||||
typedef struct { tByte mPSEName[MAX_AID_LENGTH];//0x84 tByte mPSELen; tByte mSFI;//0x88 tByte mLangagePreference[8];//0x5F2D tByte mLangagePreferenceLen; tByte mIssuerCodeTableIndex;//0x9F11 tByte mRemainingFCI[MAX_REMAINING_FCI_LENGTH];//0xBF0C. May contain Issuer Country Code 5F56 AND/OR Application Selection Flag DF62 tByte mRemainingFCILen; } tPSE; |
Primitives
Names | Comments |
---|---|
Initialization | |
agnGetVersionNumber | Provide EMV core engine version |
agnOpenSession | Open a CT session to initiate an EMV transaction flow |
agnOpenSessionCL | Open a CL session to initiate an EMV transaction flow |
agnInititateEMVTransaction | Initiate/Resume an EMV transaction |
agnCompleteEMVTransaction | Complete a transaction as per EMVCo definition |
agnCloseSession | Close a transaction flow |
Setters and Getters | |
agnSetAgnosDatabase | |
agnSetKernelStatus | |
agnSetEMVTag | |
agnOverwriteTag | |
agnRemoveTag | |
agnGetEMVTag | |
agnGetAllTags | |
agnGetDatabase | |
agnIsEMVTagKnown | |
agnIsEMVTagPresent | |
agnIsEMVTagEmpty | |
agnIsEMVTagNotEmpty | |
agnORTVR | OR a specific TVR’s bit to 1 |
agnORAgnosTVR | OR a specific Agnos TVR’s bit to 1 |
agnSetAgnosTVR | Set a specific Agnos TVR byte value |
AgnosDB | |
adbGetVersionNumber | Provide Agnos database version |
adbResetDataBase | |
adbAddTag | |
adbAddUnknownTag | |
adbGetUnknowTags | |
adbGetUnknownTagsLength | |
adbGetUnknownTagsCount | |
adbGetAllTLV |
C Example
See emvco.c