Amadis

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 24 Next »

Agnos 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).

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)

typedef struct {
tByte mNumberOfADF;
tADF mList[MAX_SUPPORTED_ADF];
tBoolean mEliminatedADF[MAX_SUPPORTED_ADF];
tBoolean mCardBlocked;
tBoolean mAnyBlockedApplication;
tByte mSelectionIndex;
} tADFList;

tADF (selection.h)

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)

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

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

agnSetAgnosDatabase

agnSetKernelStatus

agnSetEMVTag

agnOverwriteTag

agnRemoveTag

agnGetEMVTag

agnGetAllTags

agnGetDatabase

agnIsEMVTagKnown

agnIsEMVTagPresent

agnIsEMVTagEmpty

agnIsEMVTagNotEmpty

agnSetExitState

agnSetParsingCallback

agnSetStateCallback

agnSetBuilDOLCallback

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

C Example

See emvco.c

  • No labels