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 39 Next »

See emvco.c. and selectionlogic.h. They provide good examples on agnos.h and selection.h integration in the scope of contact card processing.

C Structures

tTransactionalContext (agnos.h)

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

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

Add a series of tags. Each tag is statically indexed and ruled by an update condition. Use an appropriate update condition to store tags directly into Agnos database

agnSetKernelStatus

Set core engine to a specific state. Use this primitive to skip a state in State Machine mode

agnSetEMVTag

Add a tag into Agnos database without checking tag’s update condition

agnOverwriteTag

Overwrite an existing tag. If it doesn’t exist, create it (no garbage collection if sizes don’t match)

agnRemoveTag

Remove a tag from Agnos database (no garbage collection)

agnGetEMVTag

Get a specific tag from Agnos database

agnGetAllTags

Get all tags from Agnos database

agnGetDatabase

Get the current database

agnIsEMVTagKnown

Return bTRUE is tag statically known

agnIsEMVTagPresent

Return bTRUE if tag is present whatever its length

agnIsEMVTagEmpty

Return bTRUE if tag’s length is 0

agnIsEMVTagNotEmpty

Return bTRUE if tag’s length is not 0

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 Primitives

adbGetVersionNumber

Provide Agnos database version. Get all pointers on shared RAM spaces provided by SAL/HAL and set adbAddTag strategy to STANDARD (i.e. EMVCo rule where update conditions are not checked)

adbResetDataBase

Reserved to Agnos core engine.

Reset database structure

adbSetStrategy

Reserved to Agnos core engine and contactless card processing.

By default, Agnos databse uses EMVco tags storage strategy where no check is performed on tags' update conditions. If a storage strategy is defined (by a contactless card processing) then:

  • If an AddTag_Contacltess callback is defined (by a contactless card processing), Agnos database calls the callback to check wheter a tag can be added

  • Else, Agnos database uses its default contactless storage strategy

adbAddTag

Reserved to Agnos core engine.

Check whether a tag may be added into EMV tags database. In order to store EMV tags directly into Agnos database, use agnSetAgnosDataBase primitive instead

adbAddUnknownTag

Add any tags into EMV tags database in “UnknowTag” bucket

adbGetUnknowTags

Get all tags stored into unknown tags bucket

adbGetUnknownTagsLength

Get the bucket’s length

adbGetUnknownTagsCount

Get tags count from the bucket

adbGetAllTLV

Get all TLV stored in AgnosDB

tTagDataBase db;
unsigned char buffer[100]="";
unsigned short maxLength=100, actualLength=0;

aceOut(adbGetVersionNumber());

adbResetDataBase(&db);

adbGetAllTLV(&db,buffer,maxLength,&actualLength);
aceSendRawDD(buffer,actualLength);

adbAddUnknownTag(&db,(const unsigned char*)"\x9F\x02\x06\x99\x99\x99\x99\x99\x99",0x09);
adbGetAllTLV(&db,buffer,maxLength,&actualLength);
aceSendRawDD(buffer,actualLength);

  • No labels