From: iceman1001 Date: Tue, 20 Jan 2015 08:32:53 +0000 (+0100) Subject: Merge branch 'master' of https://github.com/Proxmark/proxmark3 X-Git-Tag: v2.0.0-rc1~44^2~13 X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/5149e37e66dd3324905ec7e18e67798b03f16ef6 Merge branch 'master' of https://github.com/Proxmark/proxmark3 Conflicts: armsrc/appmain.c armsrc/apps.h --- 5149e37e66dd3324905ec7e18e67798b03f16ef6 diff --cc armsrc/appmain.c index 13995f59,530dc39c..b998c2a1 --- a/armsrc/appmain.c +++ b/armsrc/appmain.c @@@ -798,18 -801,9 +801,18 @@@ void UsbPacketReceived(uint8_t *packet case CMD_MIFAREU_READBL: MifareUReadBlock(c->arg[0],c->d.asBytes); break; + case CMD_MIFAREUC_AUTH1: + MifareUC_Auth1(c->arg[0],c->d.asBytes); + break; + case CMD_MIFAREUC_AUTH2: + MifareUC_Auth2(c->arg[0],c->d.asBytes); + break; case CMD_MIFAREU_READCARD: - MifareUReadCard(c->arg[0],c->arg[1],c->d.asBytes); + MifareUReadCard(c->arg[0], c->arg[1], c->d.asBytes); break; + case CMD_MIFAREUC_READCARD: + MifareUReadCard(c->arg[0],c->arg[1],c->d.asBytes); + break; case CMD_MIFARE_READSC: MifareReadSector(c->arg[0], c->arg[1], c->arg[2], c->d.asBytes); break; diff --cc armsrc/mifarecmd.c index 470af6a7,ecd8728d..22926dcf --- a/armsrc/mifarecmd.c +++ b/armsrc/mifarecmd.c @@@ -1127,58 -1061,3 +1127,58 @@@ void MifareCIdent() // // DESFIRE // + +void Mifare_DES_Auth1(uint8_t arg0, uint8_t *datain){ + + byte_t dataout[11] = {0x00}; + uint8_t uid[10] = {0x00}; + uint32_t cuid; + + iso14a_clear_trace(); + iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN); + + int len = iso14443a_select_card(uid, NULL, &cuid); + if(!len) { + if (MF_DBGLEVEL >= MF_DBG_ERROR) + Dbprintf("Can't select card"); + OnError(1); + return; + }; + + if(mifare_desfire_des_auth1(cuid, dataout)){ + if (MF_DBGLEVEL >= MF_DBG_ERROR) + Dbprintf("Authentication part1: Fail."); + OnError(4); + return; + } + + if (MF_DBGLEVEL >= MF_DBG_EXTENDED) DbpString("AUTH 1 FINISHED"); + + cmd_send(CMD_ACK,1,cuid,0,dataout, sizeof(dataout)); +} + +void Mifare_DES_Auth2(uint32_t arg0, uint8_t *datain){ + + uint32_t cuid = arg0; + uint8_t key[16] = {0x00}; + byte_t isOK = 0; + byte_t dataout[12] = {0x00}; + + memcpy(key, datain, 16); + + isOK = mifare_desfire_des_auth2(cuid, key, dataout); + + if( isOK) { + if (MF_DBGLEVEL >= MF_DBG_EXTENDED) + Dbprintf("Authentication part2: Failed"); + OnError(4); + return; + } + + if (MF_DBGLEVEL >= MF_DBG_EXTENDED) + DbpString("AUTH 2 FINISHED"); + + cmd_send(CMD_ACK, isOK, 0, 0, dataout, sizeof(dataout)); + FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); + LEDsoff(); - } ++} diff --cc client/lualibs/commands.lua index 13b9c8e7,13b9c8e7..a5442f2a --- a/client/lualibs/commands.lua +++ b/client/lualibs/commands.lua @@@ -49,7 -49,7 +49,7 @@@ local _commands = CMD_EM4X_WRITE_WORD = 0x0219, CMD_IO_DEMOD_FSK = 0x021A, CMD_IO_CLONE_TAG = 0x021B, -- CMD_EM410X_DEMOD = 0x021C, ++ CMD_EM410X_DEMOD = 0x021c, --/* CMD_SET_ADC_MUX: ext1 is 0 for lopkd, 1 for loraw, 2 for hipkd, 3 for hiraw */ --// For the 13.56 MHz tags diff --cc client/lualibs/utils.lua index e84f70ad,e84f70ad..c5baa406 --- a/client/lualibs/utils.lua +++ b/client/lualibs/utils.lua @@@ -108,6 -108,6 +108,24 @@@ local Utils return retval end, ++ -- input parameter is a string ++ -- Swaps the endianess and returns a string, ++ -- IE: 'cd7a' -> '7acd' -> 0x7acd ++ SwapEndiannessStr = function(s, len) ++ if s == nil then return nil end ++ if #s == 0 then return '' end ++ if type(s) ~= 'string' then return nil end ++ ++ local retval ++ if len == 16 then ++ retval = s:sub(3,4)..s:sub(1,2) ++ elseif len == 24 then ++ retval = s:sub(5,6)..s:sub(3,4)..s:sub(1,2) ++ elseif len == 32 then ++ retval = s:sub(7,8)..s:sub(5,6)..s:sub(3,4)..s:sub(1,2) ++ end ++ return retval ++ end, ------------ CONVERSIONS -- @@@ -116,7 -116,7 +134,7 @@@ local B,K,OUT,I,D=16,"0123456789ABCDEF","",0 while IN>0 do I=I+1 -- IN,D=math.floor(IN/B),math.mod(IN,B)+1 ++ IN , D = math.floor(IN/B), math.modf(IN,B)+1 OUT=string.sub(K,D,D)..OUT end return OUT diff --cc client/scripts/tnp3dump.lua index 520161b9,520161b9..f41fe8ab --- a/client/scripts/tnp3dump.lua +++ b/client/scripts/tnp3dump.lua @@@ -249,18 -249,18 +249,19 @@@ local function main(args end end ++ ++ local uid = block0:sub(1,8) ++ local itemtype = block1:sub(1,4) ++ local cardid = block1:sub(9,24) ++ -- Write dump to files if not DEBUG then -- local foo = dumplib.SaveAsBinary(bindata, outputTemplate..'.bin') ++ local foo = dumplib.SaveAsBinary(bindata, outputTemplate..'_uid_'..uid..'.bin') print(("Wrote a BIN dump to the file %s"):format(foo)) -- local bar = dumplib.SaveAsText(emldata, outputTemplate..'.eml') ++ local bar = dumplib.SaveAsText(emldata, outputTemplate..'_uid_'..uid..'.eml') print(("Wrote a EML dump to the file %s"):format(bar)) end -- local uid = block0:sub(1,8) -- local itemtype = block1:sub(1,4) -- local cardid = block1:sub(9,24) -- -- Show info print( string.rep('--',20) ) print( (' ITEM TYPE : 0x%s - %s'):format(itemtype, toyNames[itemtype]) ) diff --cc client/scripts/tnp3sim.lua index f43dafa2,f43dafa2..adc34cce --- a/client/scripts/tnp3sim.lua +++ b/client/scripts/tnp3sim.lua @@@ -241,18 -241,18 +241,20 @@@ local function main(args local cmdSetDbgOff = "hf mf dbg 0" core.console( cmdSetDbgOff) -- -- Look for tag present on reader, -- result, err = lib14a.read1443a(false) -- if not result then return oops(err) end ++ -- if not loadFromDump then ++ -- -- Look for tag present on reader, ++ -- result, err = lib14a.read1443a(false) ++ -- if not result then return oops(err) end -- core.clearCommandBuffer() ++ -- core.clearCommandBuffer() -- if 0x01 ~= result.sak then -- NXP MIFARE TNP3xxx -- return oops('This is not a TNP3xxx tag. aborting.') -- end ++ -- if 0x01 ~= result.sak then -- NXP MIFARE TNP3xxx ++ -- return oops('This is not a TNP3xxx tag. aborting.') ++ -- end -- -- Show tag info -- print((' Found tag : %s'):format(result.name)) ++ -- -- Show tag info ++ -- print((' Found tag : %s'):format(result.name)) ++ -- end -- Load dump.bin file print( (' Load data from %s'):format(inputTemplate)) @@@ -349,7 -349,7 +351,7 @@@ err = LoadEmulator(blocks) if err then return oops(err) end core.clearCommandBuffer() -- print('The simulation is now prepared.\n --> run \"hf mf sim 5 '..uid..'\" <--') ++ print('The simulation is now prepared.\n --> run \"hf mf sim u '..uid..' x\" <--') end end main(args) diff --cc common/cmd.h index b330a219,b330a219..bc69ff61 --- a/common/cmd.h +++ b/common/cmd.h @@@ -33,8 -33,8 +33,8 @@@ #ifndef _PROXMARK_CMD_H_ #define _PROXMARK_CMD_H_ --#include --#include ++#include "common.h" ++#include "usb_cmd.h" #include "usb_cdc.h" bool cmd_receive(UsbCommand* cmd); diff --cc common/usb_cdc.h index d7b9c2e5,d7b9c2e5..59e73a47 --- a/common/usb_cdc.h +++ b/common/usb_cdc.h @@@ -35,7 -35,7 +35,7 @@@ #ifndef _USB_CDC_H_ #define _USB_CDC_H_ --#include ++#include "common.h" void usb_disable(); void usb_enable();