FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto.h
Go to the documentation of this file.
00001 /*-------------------------------------------------------------------
00002 |                                                                               |
00003 |      FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto.h          |
00004 |                                                                               |
00005 ---------------------------------------------------------------------
00006 
00007 Copyright © 2009-2010   FEIG ELECTRONIC GmbH, All Rights Reserved.
00008                                                 Lange Strasse 4
00009                                                 D-35781 Weilburg
00010                                                 Federal Republic of Germany
00011                                                 phone    : +49 6471 31090
00012                                                 fax      : +49 6471 310999
00013                                                 e-mail   : obid-support@feig.de
00014                                                 Internet : http://www.feig.de
00015                                         
00016 Author                  :       Markus Hultsch
00017 Begin                   :       30.03.2009
00018 
00019 Version                 :       03.02.05 / 07.09.2010 / M. Hultsch
00020 
00021 Operation Systems       :       independent
00022 
00023 Function                        :       implementation class for OBID® classic-pro transponder ISO14443-4 MIFARE DESFire
00024                                                 with [0xC3] commands and internal SAM crypto commands
00025 
00026 NOTE                            :       this class supports only selected mode in Host-Mode
00027 
00028 
00029 Trademarks:
00030 -----------
00031 OBID®, OBID i-scan® and OBID myAXXESS® are registered Trademarks of FEIG ELECTRONIC GmbH
00032 Other Trademarks: see FEDM.h
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 // constants
00049 //#####################################################################################
00050 
00051 
00052 
00053 
00054 
00055 //####################################################################
00056 // class FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto
00057 // >> supports only ISO Host Commands <<
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         // 10 PICC level commands
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         // 10 application level commands
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         // 11 data manipulation commands
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         // constructor
00793         FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto();
00794         // destructor
00795         virtual ~FedmIscTagHandler_ISO14443_4_MIFARE_DESFire_SamCrypto();
00796 
00797 
00798         // setting port parameter
00799         int SetPortTimeout(unsigned int uiTimeout);             // for all port types
00800 
00801         // getting port parameter
00802         int GetPortTimeout(unsigned int* uiTimeout);    // for all port types
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_)


rfid_drivers
Author(s): Raul Perula-Martinez
autogenerated on Thu Apr 2 2015 03:06:14