From a75d63f19b93f22faeff886f9f2568f3d7531d55 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Mon, 22 Feb 2016 17:50:32 +0100 Subject: [PATCH] ADD: added the crc8legic to Lua. call it with core.crc8legic also a helper function to take a hexstring and calc the crc on it, was added inside utils.lua Call it inside a lua-script like this: local utils = require('utils') local data = '01020304' local crc = utils.Crc8Legic(data) print (uid, ('%02x'):format(crc)) --- client/lualibs/utils.lua | 15 +++++++++++++++ client/scripting.c | 29 +++++++++++++---------------- client/scripting.h | 15 +++++++++++++++ 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/client/lualibs/utils.lua b/client/lualibs/utils.lua index 698017d9..399c30ed 100644 --- a/client/lualibs/utils.lua +++ b/client/lualibs/utils.lua @@ -82,6 +82,20 @@ local Utils = return nil end, + ------------ CRC-16 ccitt checksums + -- Takes a hex string and calculates a crc16 + Crc8Legic = function(s) + if s == nil then return nil end + if #s == 0 then return nil end + if type(s) == 'string' then + local utils = require('utils') + local asc = utils.ConvertHexToAscii(s) + local hash = core.crc8legic(asc) + return hash + end + return nil + end, + ------------ CRC-16 ccitt checksums -- Takes a hex string and calculates a crc16 Crc16 = function(s) @@ -96,6 +110,7 @@ local Utils = return nil end, + ------------ CRC-64 ecma checksums -- Takes a hex string and calculates a crc64 ecma Crc64 = function(s) diff --git a/client/scripting.c b/client/scripting.c index 5d9ce55a..6eef88ba 100644 --- a/client/scripting.c +++ b/client/scripting.c @@ -1,5 +1,6 @@ //----------------------------------------------------------------------------- // Copyright (C) 2013 m h swende +// Modified 2015,2016, iceman // // This code is licensed to you under the terms of the GNU GPL, version 2 or, // at your option, any later version. See the LICENSE.txt file for the text of @@ -7,23 +8,8 @@ //----------------------------------------------------------------------------- // Some lua scripting glue to proxmark core. //----------------------------------------------------------------------------- - -#include -#include -#include -#include "proxmark3.h" -#include "usb_cmd.h" -#include "cmdmain.h" #include "scripting.h" -#include "util.h" -#include "nonce2key/nonce2key.h" -#include "../common/iso15693tools.h" -#include "iso14443crc.h" -#include "../common/crc16.h" -#include "../common/crc64.h" -#include "../common/sha1.h" -#include "aes.h" -#include "cmdcrc.h" + /** * The following params expected: * UsbCommand c @@ -369,6 +355,16 @@ static int l_aes128encrypt_ecb(lua_State *L) return 1;// return 1 to signal one return value } +static int l_crc8legic(lua_State *L) +{ + size_t size; + const char *p_str = luaL_checklstring(L, 1, &size); + + uint16_t retval = CRC8Legic( (uint8_t*) p_str, size); + lua_pushinteger(L, (int) retval); + return 1; +} + static int l_crc16(lua_State *L) { size_t size; @@ -510,6 +506,7 @@ int set_pm3_libraries(lua_State *L) {"aes128_decrypt_ecb", l_aes128decrypt_ecb}, {"aes128_encrypt", l_aes128encrypt_cbc}, {"aes128_encrypt_ecb", l_aes128encrypt_ecb}, + {"crc8legic", l_crc8legic}, {"crc16", l_crc16}, {"crc64", l_crc64}, {"sha1", l_sha1}, diff --git a/client/scripting.h b/client/scripting.h index 89a866bc..3a3babe3 100644 --- a/client/scripting.h +++ b/client/scripting.h @@ -11,6 +11,21 @@ #define SCRIPTING_H__ #include +#include +#include +#include "proxmark3.h" +#include "usb_cmd.h" +#include "cmdmain.h" +#include "util.h" +#include "nonce2key/nonce2key.h" +#include "../common/iso15693tools.h" +#include "iso14443crc.h" +#include "../common/crc.h" +#include "../common/crc16.h" +#include "../common/crc64.h" +#include "../common/sha1.h" +#include "aes.h" +#include "cmdcrc.h" /** * @brief set_libraries loads the core components of pm3 into the 'pm3' -- 2.39.2