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
00035 #if !defined(_FEDM_ISC_TAG_HANDLER_ISO14443_4_MIFARE_DESFIRE_SAM_CRYPTO_H_INCLUDED_)
00036 #define _FEDM_ISC_TAG_HANDLER_ISO14443_4_MIFARE_DESFIRE_SAM_CRYPTO_H_INCLUDED_
00037
00038 #if !defined(_FEDM_NO_TAG_HANDLER_ISO14443)
00039
00040 #include <string>
00041 #include "../../FEDM.h"
00042
00043 class FedmIscTagHandler_ISO14443_4_MIFARE_DESFire;
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00070 class _FEDM_ISC_CORE_EXT_CLASS FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto
00071 {
00072 public:
00073 friend class FedmIscTagHandler_ISO14443_4_MIFARE_DESFire;
00074 friend class FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_Impl_C3;
00075
00082 unsigned char GetErrorSource();
00083
00090 unsigned int GetErrorCode();
00091
00098 void SetTimeout(unsigned int uiTimeout);
00099
00112 int Authenticate( unsigned char ucSamSlotNo,
00113 unsigned char ucDESFireAuthMode,
00114 unsigned char ucDESFireKeyNo,
00115 unsigned char ucSamAuthMode,
00116 unsigned char ucSamKeyNo,
00117 unsigned char ucSamKeyVersion,
00118 unsigned char ucSamDiversificationInputLen,
00119 unsigned char* pucSamDiversificationInput);
00120
00133 int ChangeKeySettings( unsigned char ucSamSlotNo,
00134 unsigned char ucNewKeySettings );
00135
00148 int GetKeySettings( unsigned char ucSamSlotNo,
00149 unsigned char* pucResponseData,
00150 unsigned int uiResponseBufferLength,
00151 unsigned int& uiResponseLength );
00152
00165 int ChangeKey( unsigned char ucSamSlotNo,
00166 unsigned char ucSamKeyCompilationMethod,
00167 unsigned char ucSamCfg,
00168 unsigned char ucSamKeyNoCurrentKey,
00169 unsigned char ucSamKeyVersionCurrentKey,
00170 unsigned char ucSamKeyNoNewKey,
00171 unsigned char ucSamKeyVersionNewKey,
00172 unsigned char ucSamDiversificationInputLen,
00173 unsigned char* pucSamDiversificationInput);
00174
00187 int GetKeyVersion( unsigned char ucSamSlotNo,
00188 unsigned char ucDESFireKeyNo,
00189 unsigned char* pucResponseData,
00190 unsigned int uiResponseBufferLength,
00191 unsigned int& uiResponseLength );
00192
00193
00194
00195
00196
00209 int CreateApplication( unsigned char ucSamSlotNo,
00210 unsigned char ucPiccLevelFlags,
00211 unsigned int uiApplicationID,
00212 unsigned char ucKeySetting1,
00213 unsigned char ucKeySetting2,
00214 unsigned int uiISOFileID,
00215 std::string sDFName );
00216
00229 int DeleteApplication( unsigned char ucSamSlotNo,
00230 unsigned char ucPiccLevelFlags,
00231 unsigned int uiApplicationID );
00232
00245 int GetApplicationIDs( unsigned char ucSamSlotNo,
00246 unsigned char ucPiccLevelFlags,
00247 unsigned char* pucResponseData,
00248 unsigned int uiResponseBufferLength,
00249 unsigned int& uiResponseLength );
00250
00263 int FreeMemory( unsigned char ucSamSlotNo,
00264 unsigned char ucPiccLevelFlags,
00265 unsigned char* pucResponseData,
00266 unsigned int uiResponseBufferLength,
00267 unsigned int& uiResponseLength );
00268
00281 int GetDFNames( unsigned char ucSamSlotNo,
00282 unsigned char ucPiccLevelFlags,
00283 unsigned char* pucResponseData,
00284 unsigned int uiResponseBufferLength,
00285 unsigned int& uiResponseLength );
00286
00299 int SelectApplication( unsigned char ucSamSlotNo,
00300 unsigned char ucPiccLevelFlags,
00301 unsigned int uiApplicationID );
00302
00315 int FormatPICC( unsigned char ucSamSlotNo,
00316 unsigned char ucPiccLevelFlags );
00317
00330 int GetVersion( unsigned char ucSamSlotNo,
00331 unsigned char ucPiccLevelFlags,
00332 unsigned char* pucResponseData,
00333 unsigned int uiResponseBufferLength,
00334 unsigned int& uiResponseLength );
00335
00348 int GetCardUID( unsigned char ucSamSlotNo,
00349 unsigned char ucPiccLevelFlags,
00350 unsigned char* pucResponseData,
00351 unsigned int uiResponseBufferLength,
00352 unsigned int& uiResponseLength );
00353
00366 int SetConfiguration( unsigned char ucSamSlotNo,
00367 unsigned char ucPiccLevelFlags,
00368 unsigned char* pucRequestData,
00369 unsigned int uiRequestLength );
00370
00371
00372
00373
00374
00387 int ChangeFileSettings( unsigned char ucSamSlotNo,
00388 unsigned char ucApplicationLevelFlags,
00389 unsigned char ucFileNo,
00390 unsigned char ucNewFileCommSettings,
00391 unsigned char ucNewFileReadWriteAccessRights,
00392 unsigned char ucNewFileChangeAccessRights,
00393 unsigned char ucNewFileReadAccessRights,
00394 unsigned char ucNewFileWriteAccessRights );
00395
00408 int GetFileIDs( unsigned char ucSamSlotNo,
00409 unsigned char ucApplicationLevelFlags,
00410 unsigned char* pucResponseData,
00411 unsigned int uiResponseBufferLength,
00412 unsigned int& uiResponseLength );
00413
00426 int GetFileSettings( unsigned char ucSamSlotNo,
00427 unsigned char ucApplicationLevelFlags,
00428 unsigned char ucFileNo,
00429 unsigned char* pucResponseData,
00430 unsigned int uiResponseBufferLength,
00431 unsigned int& uiResponseLength );
00432
00445 int CreateStdDataFile( unsigned char ucSamSlotNo,
00446 unsigned char ucApplicationLevelFlags,
00447 unsigned char ucFileNo,
00448 unsigned int uiISOFileID,
00449 unsigned char ucFileCommSettings,
00450 unsigned char ucFileReadWriteAccessRights,
00451 unsigned char ucFileChangeAccessRights,
00452 unsigned char ucFileReadAccessRights,
00453 unsigned char ucFileWriteAccessRights,
00454 unsigned int uiFileSize );
00455
00468 int CreateBackupDataFile( unsigned char ucSamSlotNo,
00469 unsigned char ucApplicationLevelFlags,
00470 unsigned char ucFileNo,
00471 unsigned int uiISOFileID,
00472 unsigned char ucFileCommSettings,
00473 unsigned char ucFileReadWriteAccessRights,
00474 unsigned char ucFileChangeAccessRights,
00475 unsigned char ucFileReadAccessRights,
00476 unsigned char ucFileWriteAccessRights,
00477 unsigned int uiFileSize );
00478
00491 int CreateValueFile( unsigned char ucSamSlotNo,
00492 unsigned char ucApplicationLevelFlags,
00493 unsigned char ucFileNo,
00494 unsigned char ucFileCommSettings,
00495 unsigned char ucFileReadWriteAccessRights,
00496 unsigned char ucFileChangeAccessRights,
00497 unsigned char ucFileReadAccessRights,
00498 unsigned char ucFileWriteAccessRights,
00499 unsigned int uiLowerLimit,
00500 unsigned int uiUpperLimit,
00501 unsigned int uiValue,
00502 unsigned char ucLimitedCreditEnabled );
00503
00516 int CreateLinearRecordFile( unsigned char ucSamSlotNo,
00517 unsigned char ucApplicationLevelFlags,
00518 unsigned char ucFileNo,
00519 unsigned int uiISOFileID,
00520 unsigned char ucFileCommSettings,
00521 unsigned char ucFileReadWriteAccessRights,
00522 unsigned char ucFileChangeAccessRights,
00523 unsigned char ucFileReadAccessRights,
00524 unsigned char ucFileWriteAccessRights,
00525 unsigned int uiRecordSize,
00526 unsigned int uiMaxNoOfRecords );
00527
00540 int CreateCyclicRecordFile( unsigned char ucSamSlotNo,
00541 unsigned char ucApplicationLevelFlags,
00542 unsigned char ucFileNo,
00543 unsigned int uiISOFileID,
00544 unsigned char ucFileCommSettings,
00545 unsigned char ucFileReadWriteAccessRights,
00546 unsigned char ucFileChangeAccessRights,
00547 unsigned char ucFileReadAccessRights,
00548 unsigned char ucFileWriteAccessRights,
00549 unsigned int uiRecordSize,
00550 unsigned int uiMaxNoOfRecords );
00551
00564 int DeleteFile( unsigned char ucSamSlotNo,
00565 unsigned char ucApplicationLevelFlags,
00566 unsigned char ucFileNo );
00567
00580 int GetISOFileIDs( unsigned char ucSamSlotNo,
00581 unsigned char ucApplicationLevelFlags,
00582 unsigned char* pucResponseData,
00583 unsigned int uiResponseBufferLength,
00584 unsigned int& uiResponseLength );
00585
00586
00587
00588
00589
00602 int ReadStandardData( unsigned char ucSamSlotNo,
00603 unsigned char ucDataManipulationFlags,
00604 unsigned char ucFileNo,
00605 unsigned char ucFileCommSettings,
00606 unsigned int uiFileOffset,
00607 unsigned int uiFileLen,
00608 unsigned char* pucFileData );
00609
00622 int WriteStandardData( unsigned char ucSamSlotNo,
00623 unsigned char ucDataManipulationFlags,
00624 unsigned char ucFileNo,
00625 unsigned char ucFileCommSettings,
00626 unsigned int uiFileOffset,
00627 unsigned int uiFileLen,
00628 unsigned char* pucFileData );
00629
00642 int GetValue( unsigned char ucSamSlotNo,
00643 unsigned char ucDataManipulationFlags,
00644 unsigned char ucFileNo,
00645 unsigned char ucFileCommSettings,
00646 unsigned int& uiValue );
00647
00660 int Credit( unsigned char ucSamSlotNo,
00661 unsigned char ucDataManipulationFlags,
00662 unsigned char ucFileNo,
00663 unsigned char ucFileCommSettings,
00664 unsigned int uiCreditValue );
00665
00678 int Debit( unsigned char ucSamSlotNo,
00679 unsigned char ucDataManipulationFlags,
00680 unsigned char ucFileNo,
00681 unsigned char ucFileCommSettings,
00682 unsigned int uiDebitValue );
00683
00684
00697 int LimitedCredit( unsigned char ucSamSlotNo,
00698 unsigned char ucDataManipulationFlags,
00699 unsigned char ucFileNo,
00700 unsigned char ucFileCommSettings,
00701 unsigned int uiCreditValue );
00702
00715 int WriteRecord( unsigned char ucSamSlotNo,
00716 unsigned char ucDataManipulationFlags,
00717 unsigned char ucFileNo,
00718 unsigned char ucFileCommSettings,
00719 unsigned int uiFileOffset,
00720 unsigned int uiRecordLen,
00721 unsigned char* pucRecordData );
00722
00735 int ReadRecords( unsigned char ucSamSlotNo,
00736 unsigned char ucDataManipulationFlags,
00737 unsigned char ucFileNo,
00738 unsigned char ucFileCommSettings,
00739 unsigned int uiRecordOffset,
00740 unsigned int uiNoOfRecords,
00741 unsigned int uiRecordSize,
00742 unsigned char* pucRecordData );
00743
00756 int ClearRecordFile( unsigned char ucSamSlotNo,
00757 unsigned char ucDataManipulationFlags,
00758 unsigned char ucFileNo,
00759 unsigned char ucFileCommSettings );
00760
00773 int CommitTransaction( unsigned char ucSamSlotNo,
00774 unsigned char ucDataManipulationFlags );
00775
00788 int AbortTransaction( unsigned char ucSamSlotNo,
00789 unsigned char ucDataManipulationFlags );
00790
00791 protected:
00792
00793 FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto();
00794
00795 virtual ~FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto();
00796
00797
00798
00799 int SetPortTimeout(unsigned int uiTimeout);
00800
00801
00802 int GetPortTimeout(unsigned int* uiTimeout);
00803
00804 FedmIscTagHandler_ISO14443_4_MIFARE_DESFire* m_pParent;
00805 unsigned int m_uiTimeout;
00806
00807 };
00808
00809 #endif // #if !defined(_FEDM_NO_TAG_HANDLER_ISO14443)
00810
00811 #endif // !defined(_FEDM_ISC_TAG_HANDLER_ISO14443_4_MIFARE_DESFIRE_SAM_CRYPTO_H_INCLUDED_)