mirror of
https://github.com/RfidResearchGroup/ChameleonMini.git
synced 2026-05-12 11:20:37 -07:00
Finish decoding Data Manipulation Commands commands of MFDESFire
(cherry picked from commit 502d951)
This commit is contained in:
@@ -27,6 +27,9 @@ StatusCode = {
|
||||
0xF0 : "FILE_NOT_FOUND",
|
||||
0xF1 : "ERR_FILE_INTEGRITY"
|
||||
}
|
||||
#########################
|
||||
# PICC Level Commands
|
||||
#########################
|
||||
# Create APP CMD
|
||||
def decodeCreateAPP(data):
|
||||
note = ""
|
||||
@@ -147,8 +150,11 @@ def decodeGetKeyVersion(data):
|
||||
def decodeRespGetKeyVersion(data):
|
||||
return "KeyVersion" + hex(data[1]) if len(data) == 2 else strFail
|
||||
|
||||
##############################
|
||||
# Data Manipulation Commands
|
||||
##############################
|
||||
# Read Data
|
||||
def decodeReadData(data):
|
||||
def decodeFileNoOffsetLen(data):
|
||||
if len(data) == 8:
|
||||
fileNo = data[1]
|
||||
offSet = data[2:5]
|
||||
@@ -156,8 +162,32 @@ def decodeReadData(data):
|
||||
return "FileNo:"+hex(fileNo) + " OffSet:0x"+hexlify(offSet).decode() + " len:0x"+hexlify(length).decode()
|
||||
else:
|
||||
return strFail
|
||||
# Write Data
|
||||
def decodeFileNoOffsetLenData(data):
|
||||
if len(data) > 8:
|
||||
fileNo = data[1]
|
||||
offSet = data[2:5]
|
||||
length = data[5:8]
|
||||
dataWrite = data[8:]
|
||||
return "FileNo:"+hex(fileNo) + " OffSet:0x"+hexlify(offSet).decode() + " len:0x"+hexlify(length).decode() + \
|
||||
" Data:0x" + hexlify(dataWrite).decode()
|
||||
else:
|
||||
return strFail
|
||||
|
||||
def decodeRespReadData(data):
|
||||
# Get Value
|
||||
def decodeFileNo(data):
|
||||
if len(data) == 2:
|
||||
return "FileNo:"+hex(data[1])
|
||||
else:
|
||||
return strFail
|
||||
# Credit
|
||||
def decodeFileNoData(data):
|
||||
if len(data) >2:
|
||||
return "FileNo:" + hex(data[1]) + " Data:0x" + hexlify(data[2:]).decode()
|
||||
else:
|
||||
return strFail
|
||||
|
||||
def decodeData(data):
|
||||
return "Data:0x"+hexlify(data[1:]).decode() if len(data) >1 else strFail
|
||||
|
||||
def decodeAdiFrame(data):
|
||||
@@ -173,31 +203,46 @@ def decodeDummy(data):
|
||||
|
||||
MFDESFireCMDTypes = {
|
||||
# PICC Level Commands, GetVersion not decoded, please refer to datasheet for the meaning of resp
|
||||
0xCA : {"name": "CreateApp", "CMDdecoder":decodeCreateAPP, "RespDecoder": decodeDummy},
|
||||
0xDA : {"name": "DelApp", "CMDdecoder":decodeDelAPP, "RespDecoder": decodeDummy},
|
||||
0xCA : {"name": "CreateApp ", "CMDdecoder":decodeCreateAPP, "RespDecoder": decodeDummy},
|
||||
0xDA : {"name": "DelApp ", "CMDdecoder":decodeDelAPP, "RespDecoder": decodeDummy},
|
||||
0x5A : {"name": "SelectApp ", "CMDdecoder":decodeSelectAPP, "RespDecoder": decodeDummy},
|
||||
0x6A : {"name": "GetAPPID ", "CMDdecoder":decodeGetAPPID, "RespDecoder": decodeRespGetAPPID},
|
||||
0xFC : {"name": "FormatPICC", "CMDdecoder":decodeDummy, "RespDecoder": decodeDummy},
|
||||
0x60 : {"name": "GetVersion", "CMDdecoder":decodeDummy, "RespDecoder": decodeDummy},
|
||||
0xFC : {"name": "FormatPICC ", "CMDdecoder":decodeDummy, "RespDecoder": decodeDummy},
|
||||
0x60 : {"name": "GetVersion ", "CMDdecoder":decodeDummy, "RespDecoder": decodeDummy},
|
||||
# Data Manipulation Commands
|
||||
0xBD : {"name": "ReadData ", "CMDdecoder":decodeReadData, "RespDecoder": decodeRespReadData},
|
||||
0xBD : {"name": "ReadData ", "CMDdecoder":decodeFileNoOffsetLen, "RespDecoder": decodeData},
|
||||
0x3D : {"name": "WriteData ", "CMDdecoder":decodeFileNoOffsetLenData, "RespDecoder": decodeDummy},
|
||||
0x6C : {"name": "GetValue ", "CMDdecoder":decodeFileNo, "RespDecoder": decodeData},
|
||||
0x0C : {"name": "Credit ", "CMDdecoder":decodeFileNoData, "RespDecoder": decodeDummy},
|
||||
0xDC : {"name": "Debit ", "CMDdecoder":decodeFileNoData, "RespDecoder": decodeDummy},
|
||||
0x1C : {"name": "LimitedCredit ", "CMDdecoder":decodeFileNoData, "RespDecoder": decodeDummy},
|
||||
0x3B : {"name": "WriteRecord ", "CMDdecoder":decodeFileNoOffsetLenData, "RespDecoder": decodeDummy},
|
||||
0xBB : {"name": "ReadRecord ", "CMDdecoder":decodeFileNoOffsetLen, "RespDecoder": decodeData},
|
||||
0xEB : {"name": "ClearRecordFile ", "CMDdecoder":decodeFileNo, "RespDecoder": decodeDummy},
|
||||
0xC7 : {"name": "CommitTransaction ","CMDdecoder":decodeDummy, "RespDecoder": decodeDummy},
|
||||
0xA7 : {"name": "AbortTransaction ","CMDdecoder":decodeDummy, "RespDecoder": decodeDummy},
|
||||
# Security Related CMD
|
||||
0xAA : {"name": "AuthAES ", "CMDdecoder": decodeAuthAES, "RespDecoder": decodeRespAuthAES},
|
||||
0x0A : {"name": "Auth3DES", "CMDdecoder": decodeAuth3DES, "RespDecoder": decodeRespAuth3DES},
|
||||
0x54 : {"name": "ChangeKeySettings ","CMDdecoder":decodeChangeKeySettings,"respDecoder": decodeDummy},
|
||||
0xAA : {"name": "AuthAES ", "CMDdecoder": decodeAuthAES, "RespDecoder": decodeRespAuthAES},
|
||||
0x0A : {"name": "Auth3DES ", "CMDdecoder": decodeAuth3DES, "RespDecoder": decodeRespAuth3DES},
|
||||
0x54 : {"name": "ChangeKeySettings ","CMDdecoder":decodeChangeKeySettings,"RespDecoder": decodeDummy},
|
||||
0x45 : {"name": "GetKeySettings ", "CMDdecoder":decodeDummy, "RespDecoder": decodeRespGetKeySettings},
|
||||
0xC4 : {"name": "ChangeKey ", "CMDdecoder":decodeChangeKey, "RespDecoder": decodeDummy},
|
||||
0x64 : {"name": "GetKeyVersion ", "CMDdecoder":decodeGetKeyVersion, "RespDecoder": decodeRespGetKeyVersion},
|
||||
|
||||
# Additional Frame
|
||||
0xAF: {"name": "AdditionalFrame ", "CMDdecoder": decodeAdiFrame, "RespDecoder": decodeRespAdiFrame},
|
||||
0xAF: {"name": "AdditionalFrame ", "CMDdecoder": decodeAdiFrame, "RespDecoder": decodeRespAdiFrame},
|
||||
|
||||
}
|
||||
|
||||
# Commands need to use additional frame
|
||||
MFDESFireAFCMD = {
|
||||
0xAA : {"name": "AuthAES", "AFReaderDecoder":decodeAuthAESAF, "AFCardDecoder": decodeCardAuthAESAF},
|
||||
0x0A : {"name": "Auth3DES", "AFReaderDecoder":decodeAuth3DESAF, "AFCardDecoder": decodeCardAuth3DESAF},
|
||||
0xAA : {"name": "AuthAES ", "AFReaderDecoder":decodeAuthAESAF, "AFCardDecoder": decodeCardAuthAESAF},
|
||||
0x0A : {"name": "Auth3DES ", "AFReaderDecoder":decodeAuth3DESAF, "AFCardDecoder": decodeCardAuth3DESAF},
|
||||
|
||||
0x3D : {"name": "WriteData ", "AFReaderDecoder":decodeData, "AFCardDecoder": decodeDummy},
|
||||
0xBB : {"name": "ReadRecord ", "AFReaderDecoder":decodeDummy, "AFCardDecoder": decodeData},
|
||||
|
||||
0x3B: {"name": "WriteRecord ", "AFReaderDecoder": decodeData, "AFCardDecoder": decodeDummy}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user