From 53ee28cb3a14f529f36fcfeb514b7ef718a31973 Mon Sep 17 00:00:00 2001 From: marshmellow42 Date: Tue, 9 Jun 2015 21:21:51 -0400 Subject: [PATCH] reveng- iceman1001 s scripting updates --- client/cmdmain.c | 6 ++++-- client/scripting.c | 26 +++++++++++++------------- client/scripts/e.lua | 31 +++++++++++++++---------------- 3 files changed, 32 insertions(+), 31 deletions(-) diff --git a/client/cmdmain.c b/client/cmdmain.c index c479e151..21886ca0 100644 --- a/client/cmdmain.c +++ b/client/cmdmain.c @@ -34,9 +34,10 @@ static int CmdHelp(const char *Cmd); static int CmdQuit(const char *Cmd); static int CmdRev(const char *Cmd); // for testing reveng api - cmdcrc.c +/* static int CmdrevengT(const char *Cmd); static int CmdrevengC(const char *Cmd); - +*/ //For storing command that are received from the device static UsbCommand cmdBuffer[CMD_BUFFER_SIZE]; @@ -84,6 +85,7 @@ int CmdRev(const char *Cmd) CmdCrc(Cmd); return 0; } +/* // for testing reveng api - cmdcrc.c int CmdrevengT(const char *Cmd) { @@ -92,7 +94,7 @@ int CmdrevengT(const char *Cmd) int CmdrevengC(const char *Cmd) { return CmdrevengTestC(Cmd); -} +}*/ /** * @brief This method should be called when sending a new command to the pm3. In case any old diff --git a/client/scripting.c b/client/scripting.c index 414f5315..cc6498ce 100644 --- a/client/scripting.c +++ b/client/scripting.c @@ -393,7 +393,7 @@ static int l_reveng_models(lua_State *L){ char *models[80]; int count = 0; - lua_Integer in_width = luaL_checkinteger(L, 1); + int in_width = luaL_checkinteger(L, 1); if( in_width > 89 ) return returnToLuaWithError(L,"Width cannot exceed 89, got %d", in_width); @@ -412,6 +412,13 @@ static int l_reveng_models(lua_State *L){ return 1; } +//Called with 4 parameters. +// inModel ,string containing the crc model name: 'CRC-8' +// inHexStr ,string containing the hex representation of the data that will be used for CRC calculations. +// reverse ,int 0/1 (bool) if 1, calculate the reverse CRC +// endian ,char, 'B','b','L','l','t','r' describing if Big-Endian or Little-Endian should be used in different combinations. +// +// outputs: string with hex representation of the CRC result static int l_reveng_RunModel(lua_State *L){ //-c || -v //inModel = valid model name string - CRC-8 @@ -422,19 +429,14 @@ static int l_reveng_RunModel(lua_State *L){ //result = calculated crc hex string char result[50]; - size_t dataLen; - const char *inModel = luaL_checklstring(L, 1, &dataLen); - if ( dataLen < 4 ) return returnToLuaWithError(L,"Can't find model, got %s", inModel); - - const char *inHexStr = luaL_checklstring(L, 2, &dataLen); - if ( dataLen < 4 ) return returnToLuaWithError(L,"Hex string too short, got %d", dataLen); - - int reverse = luaL_checkinteger(L, 3); - const char endian = luaL_checklstring(L, 4, &dataLen)[0]; + const char *inModel = luaL_checkstring(L, 1); + const char *inHexStr = luaL_checkstring(L, 2); + bool reverse = lua_toboolean(L, 3); + const char endian = luaL_checkstring(L, 4)[0]; //PrintAndLog("mod: %s, hex: %s, rev %d", inModel, inHexStr, reverse); //int RunModel(char *inModel, char *inHexStr, bool reverse, char endian, char *result) - int ans = RunModel( (char *)inModel, (char *)inHexStr, (bool)reverse, endian, result); + int ans = RunModel( (char *)inModel, (char *)inHexStr, reverse, endian, result); if (!ans) return returnToLuaWithError(L,"Reveng failed"); @@ -442,7 +444,6 @@ static int l_reveng_RunModel(lua_State *L){ return 1; } - /** * @brief Sets the lua path to include "./lualibs/?.lua", in order for a script to be * able to do "require('foobar')" if foobar.lua is within lualibs folder. @@ -490,7 +491,6 @@ int set_pm3_libraries(lua_State *L) {"sha1", l_sha1}, {"reveng_models", l_reveng_models}, {"reveng_runmodel", l_reveng_RunModel}, - {NULL, NULL} }; diff --git a/client/scripts/e.lua b/client/scripts/e.lua index 4dd71490..bca8af45 100644 --- a/client/scripts/e.lua +++ b/client/scripts/e.lua @@ -1,15 +1,15 @@ local getopt = require('getopt') local utils = require('utils') -example = "script calculates many checksums (CRC) over the provided hex input" +example = "script calculates many different checksums (CRC) over the provided hex input" author = "Iceman" desc = [[ -This script calculates many checksums (CRS) over the provided hex input. +This script calculates many checksums (CRC) over the provided hex input. Arguments: -b data in hex - -w width of the CRC algorithm. defaults to all known CRC presets. + -w bitwidth of the CRC family of algorithm. defaults to all known CRC presets. Examples : script run e -b 010203040506070809 script run e -b 010203040506070809 -w 16 @@ -39,31 +39,30 @@ end -- The main entry point function main(args) - local data = '01020304' + local data local width = 0 -- Read the parameters for o, a in getopt.getopt(args, 'hb:w:') do if o == "h" then return help() end - if o == "b" then data = utils.ConvertHexToa end + if o == "b" then data = a end if o == "w" then width = a end end - print('Width of CRC: '..width..' bytes: '..data) - print('') - print('Model','CRC', 'CRC_Reverse') + data = data or '01020304' + print( string.rep('-',60) ) + print('Bit width of CRC | '..width) + print('Bytes | '..data) + print('') + print( ('%-20s| %-16s| %s'):format('Model','CRC', 'CRC reverse')) + print( string.rep('-',60) ) local lists = core.reveng_models(width) for _,i in pairs(lists) do - local one = core.reveng_runmodel(i, data, 0,0) - local two = core.reveng_runmodel(i, data, 1,0) - - print(i, one, two) + local one = core.reveng_runmodel(i, data, false, '0') + local two = core.reveng_runmodel(i, data, true, '0') + print( ('%-20s| %-16s| %s'):format(i, one:upper(), two:upper()) ) end - - if 1 == 1 then - return - end end main(args) \ No newline at end of file -- 2.39.2