Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
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
breakoutModewide
languagec
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
breakoutModewide
languagec
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
breakoutModewide
languagec
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
breakoutModewide
languagec
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