reveng- iceman1001 s scripting updates

This commit is contained in:
marshmellow42 2015-06-09 21:21:51 -04:00
parent 2e16354693
commit 53ee28cb3a
3 changed files with 32 additions and 31 deletions

View file

@ -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

View file

@ -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}
};

View file

@ -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. <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
@ -39,30 +39,29 @@ 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)
end
if 1 == 1 then
return
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
end