From: marshmellow42 <marshmellowrf@gmail.com>
Date: Wed, 10 Jun 2015 01:21:51 +0000 (-0400)
Subject: reveng- iceman1001 s scripting updates
X-Git-Tag: v3.0.0~76^2~12
X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/53ee28cb3a14f529f36fcfeb514b7ef718a31973

reveng- iceman1001 s scripting updates
---

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. <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,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