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];
CmdCrc(Cmd);
return 0;
}
+/*
// for testing reveng api - cmdcrc.c
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
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);
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
//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");
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.
{"sha1", l_sha1},
{"reveng_models", l_reveng_models},
{"reveng_runmodel", l_reveng_RunModel},
-
{NULL, NULL}
};
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. <optional> defaults to all known CRC presets.
+ -w bitwidth of the CRC family of algorithm. <optional> defaults to all known CRC presets.
Examples :
script run e -b 010203040506070809
script run e -b 010203040506070809 -w 16
-- 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