X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/dd1df4901d3b663f30483e53e1fabb50713d9274..df4ee66ea9e0792a1ef1df00554b5224e2f1446e:/client/scripting.c diff --git a/client/scripting.c b/client/scripting.c index fff3c0f6..5d9ce55a 100644 --- a/client/scripting.c +++ b/client/scripting.c @@ -18,6 +18,7 @@ #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" @@ -52,12 +53,11 @@ static int l_SendCommand(lua_State *L){ const char *data = luaL_checklstring(L, 1, &size); if(size != sizeof(UsbCommand)) { - printf("Got data size %d, expected %d" , (int) size,(int) sizeof(UsbCommand)); + printf("Got data size %d, expected %d" , (int) size,(int) sizeof(UsbCommand)); lua_pushstring(L,"Wrong data size"); return 1; } -// UsbCommand c = (*data); SendCommand((UsbCommand* )data); return 0; // no return values } @@ -100,7 +100,7 @@ static int l_WaitForResponseTimeout(lua_State *L){ if(WaitForResponseTimeout(cmd, &response, ms_timeout)) { //Push it as a string - lua_pushlstring(L,(const char *)&response,sizeof(UsbCommand)); + lua_pushlstring(L,(const char *)&response, sizeof(UsbCommand)); return 1;// return 1 to signal one return value }else{ @@ -229,6 +229,28 @@ static int l_iso15693_crc(lua_State *L) return 1; } +static int l_iso14443b_crc(lua_State *L) +{ + /* void ComputeCrc14443(int CrcType, + const unsigned char *Data, int Length, + unsigned char *TransmitFirst, + unsigned char *TransmitSecond) + */ + unsigned char buf[USB_CMD_DATA_SIZE]; + size_t len = 0; + const char *data = luaL_checklstring(L, 1, &len); + if (USB_CMD_DATA_SIZE < len) + len = USB_CMD_DATA_SIZE-2; + + for (int i = 0; i < len; i += 2) { + sscanf(&data[i], "%02x", (unsigned int *)&buf[i / 2]); + } + ComputeCrc14443(CRC_14443_B, buf, len, &buf[len], &buf[len+1]); + + lua_pushlstring(L, (const char *)&buf, len+2); + return 1; +} + /* Simple AES 128 cbc hook up to OpenSSL. params: key, input @@ -397,11 +419,10 @@ static int l_reveng_models(lua_State *L){ if( in_width > 89 ) return returnToLuaWithError(L,"Width cannot exceed 89, got %d", in_width); - uint32_t width = (uint32_t)in_width; - int ans = GetModels(models, &count, &width); - if (!ans){ - return 0; - } + uint8_t width[80]; + width[0] = (uint8_t)in_width; + int ans = GetModels(models, &count, width); + if (!ans) return 0; lua_newtable(L); @@ -484,6 +505,7 @@ int set_pm3_libraries(lua_State *L) {"clearCommandBuffer", l_clearCommandBuffer}, {"console", l_CmdConsole}, {"iso15693_crc", l_iso15693_crc}, + {"iso14443b_crc", l_iso14443b_crc}, {"aes128_decrypt", l_aes128decrypt_cbc}, {"aes128_decrypt_ecb", l_aes128decrypt_ecb}, {"aes128_encrypt", l_aes128encrypt_cbc},