00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #if !defined(_FEDM_ISC_TAG_HANDLER_ISO14443_4_MAXIM_MAX66040_H_INCLUDED_)
00035 #define _FEDM_ISC_TAG_HANDLER_ISO14443_4_MAXIM_MAX66040_H_INCLUDED_
00036
00037 #if !defined(_FEDM_NO_TAG_HANDLER_ISO14443)
00038
00039 #include "../../FEDM.h"
00040 #include "FedmIscTagHandler_ISO14443_4_Maxim.h"
00041
00042 class FEDM_ISOTabItem;
00043
00044
00045
00046
00055 class _FEDM_ISC_CORE_EXT_CLASS FedmIscTagHandler_ISO14443_4_Maxim_MAX66040 : public FedmIscTagHandler_ISO14443_4_Maxim
00056 {
00057 public:
00058
00059
00060 friend class FEDM_ISCReaderModule;
00061 friend class FEDM_ISCReader;
00062 friend class FEDM_ISOTabItem;
00063
00064
00065
00066
00081 int UserComputePageMAC( unsigned char* pucSecret,
00082 unsigned char* pucMemoryPageData,
00083 unsigned char ucPageNumber,
00084 unsigned char* pucUID,
00085 unsigned char* pucMAC);
00086
00100 int UserComputeSecret( unsigned char* pucSecret,
00101 unsigned char* pucMemoryPageData,
00102 unsigned char* pucPartialSecret,
00103 unsigned char* pucNewSecret);
00104
00121 int UserComputeCopyBufferMAC( unsigned char* pucSecret,
00122 unsigned char* pucMemoryPageData,
00123 unsigned char* pucReadWriteBufferData,
00124 unsigned char* pucIntegrityBytes,
00125 unsigned char pucPageNumber,
00126 unsigned char* pucUID,
00127 unsigned char* pucMAC);
00128
00142 int GetMemoryPageData( unsigned char ucPageNumber,
00143 unsigned char& ucIndicator,
00144 unsigned char* pucMemoryPageData);
00145
00157 int ComputeMAC( unsigned char* pucM,
00158 unsigned int* puiMAC);
00159
00165 int UpdateChallenge();
00166
00178 int GenerateSecret( unsigned char ucControlByte,
00179 unsigned char* pucPartialSecret,
00180 unsigned char& ucIndicator,
00181 unsigned char& ucPageCRCStatus);
00182
00194 int WriteBuffer( unsigned char ucBlockNumber,
00195 unsigned char* pucNewBlockData,
00196 unsigned char& ucIndicator);
00197
00209 int ReadBuffer( unsigned char& ucIndicator,
00210 unsigned char& ucBlockNumber,
00211 unsigned char* pucReadWriteBufferData);
00212
00224 int CopyBuffer( unsigned char ucBlockNumber,
00225 unsigned char* pucMAC,
00226 unsigned char& ucIndicator,
00227 unsigned char& ucPageCRCStatus);
00228
00240 int ReadSingleBlock( unsigned char ucBlockNumber,
00241 unsigned char& ucIndicator,
00242 unsigned char* pucMemoryData);
00243
00255 int ReadSingleBlockWithBlockSecurity( unsigned char ucBlockNumber,
00256 unsigned char& ucIndicator,
00257 unsigned char& ucSecurityStatus,
00258 unsigned char* pucMemoryData);
00259
00271 int CustomReadBlock( unsigned char ucBlockNumber,
00272 unsigned char& ucIndicator,
00273 unsigned char* pucMemoryData,
00274 unsigned char* pucIntegrityBytes);
00275
00287 int CustomReadBlockWithBlockSecurity( unsigned char ucBlockNumber,
00288 unsigned char& ucIndicator,
00289 unsigned char& ucSecurityStatus,
00290 unsigned char* pucMemoryData,
00291 unsigned char* pucIntegrityBytes);
00292
00304 int ComputePageMAC( unsigned char ucPageNumber,
00305 unsigned char& ucIndicator,
00306 unsigned char& ucPageCRCStatus,
00307 unsigned char* pucMAC);
00308
00320 int WriteAFI( unsigned char ucAfiValue,
00321 unsigned char& ucIndicator);
00322
00334 int LockAFI( unsigned char& ucIndicator);
00335
00336 protected:
00337
00338 FedmIscTagHandler_ISO14443_4_Maxim_MAX66040(FEDM_ISCReader* pReader, FEDM_ISOTabItem* pTabItem);
00339
00340 FedmIscTagHandler_ISO14443_4_Maxim_MAX66040(FEDM_ISCReader* pReader, unsigned int uiTagHandlerType, FEDM_ISOTabItem* pTabItem);
00341
00342 virtual ~FedmIscTagHandler_ISO14443_4_Maxim_MAX66040();
00343
00344 unsigned char m_ucRequestData[64];
00345 unsigned char m_ucResponseData[256];
00346
00347 unsigned char ucChallenge[5];
00348
00349 };
00350
00351 #endif // #if !defined(_FEDM_NO_TAG_HANDLER_ISO14443)
00352
00353 #endif // !defined(_FEDM_ISC_TAG_HANDLER_ISO14443_MAX66040_4_MAXIM_H_INCLUDED_)