]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
ADD: aes128_encrypt ECB in scripting.c
authoriceman1001 <iceman@iuse.se>
Tue, 26 May 2015 19:51:18 +0000 (21:51 +0200)
committericeman1001 <iceman@iuse.se>
Tue, 26 May 2015 19:51:18 +0000 (21:51 +0200)
ADD: aes128_decrypt ECB in scripting.c
ADD: Sha1Hex method in utils.lua

client/lualibs/utils.lua
client/scripting.c

index 41fb0856361c44c312be919dba6e9c903769bf3f..7db57f333717584cc4b67c8da8419bd05107f9dd 100644 (file)
@@ -101,7 +101,7 @@ local Utils =
        end,\r
 \r
        ------------ SHA1 hash\r
        end,\r
 \r
        ------------ SHA1 hash\r
-       -- Takes a hex string and calculates a SHA1 hash\r
+       -- Takes a string and calculates a SHA1 hash\r
        Sha1 = function(s)\r
                if s == nil then return nil end\r
                if #s == 0 then return nil end\r
        Sha1 = function(s)\r
                if s == nil then return nil end\r
                if #s == 0 then return nil end\r
@@ -113,6 +113,19 @@ local Utils =
                end\r
                return nil\r
        end,    \r
                end\r
                return nil\r
        end,    \r
+       -- Takes a hex string and calculates a SHA1 hash\r
+       Sha1Hex = function(s)\r
+               if s == nil then return nil end\r
+               if #s == 0 then return nil end\r
+               if  type(s) == 'string' then\r
+                       local utils = require('utils')\r
+                       local asc = utils.ConvertHexToAscii(s)\r
+                       local hash = core.sha1(asc)\r
+                       return hash\r
+               end\r
+               return nil\r
+       end,    \r
+\r
        \r
        -- input parameter is a string\r
        -- Swaps the endianess and returns a number,  \r
        \r
        -- input parameter is a string\r
        -- Swaps the endianess and returns a number,  \r
index 8bfe916ec4b3badc796313fc10d66f82c0403552..b979b652f4b5603b34b1f924e13d239eab8230c7 100644 (file)
@@ -16,6 +16,7 @@
 #include "cmdmain.h"
 #include "scripting.h"
 #include "util.h"
 #include "cmdmain.h"
 #include "scripting.h"
 #include "util.h"
+#include "ui.h"
 #include "nonce2key/nonce2key.h"
 #include "../common/iso15693tools.h"
 #include "../common/crc16.h"
 #include "nonce2key/nonce2key.h"
 #include "../common/iso15693tools.h"
 #include "../common/crc16.h"
@@ -232,7 +233,7 @@ static int l_iso15693_crc(lua_State *L)
  Simple AES 128 cbc hook up to OpenSSL.
  params:  key, input
 */
  Simple AES 128 cbc hook up to OpenSSL.
  params:  key, input
 */
-static int l_aes128decrypt(lua_State *L)
+static int l_aes128decrypt_cbc(lua_State *L)
 {
        //Check number of arguments
        int i;
 {
        //Check number of arguments
        int i;
@@ -261,7 +262,36 @@ static int l_aes128decrypt(lua_State *L)
        lua_pushlstring(L,(const char *)&outdata, sizeof(outdata));
        return 1;// return 1 to signal one return value
 }
        lua_pushlstring(L,(const char *)&outdata, sizeof(outdata));
        return 1;// return 1 to signal one return value
 }
-static int l_aes128encrypt(lua_State *L)
+static int l_aes128decrypt_ecb(lua_State *L)
+{
+       //Check number of arguments
+       int i;
+    size_t size;
+    const char *p_key = luaL_checklstring(L, 1, &size);
+    if(size != 32)  return returnToLuaWithError(L,"Wrong size of key, got %d bytes, expected 32", (int) size);
+
+    const char *p_encTxt = luaL_checklstring(L, 2, &size);
+
+       unsigned char indata[16] = {0x00};
+       unsigned char outdata[16] = {0x00};
+    unsigned char aes_key[16] = {0x00};
+
+       // convert key to bytearray and convert input to bytearray
+       for (i = 0; i < 32; i += 2) {
+               sscanf(&p_encTxt[i], "%02x", (unsigned int *)&indata[i / 2]);
+               sscanf(&p_key[i], "%02x", (unsigned int *)&aes_key[i / 2]);
+       }
+    aes_context ctx;
+    aes_init(&ctx);
+       aes_setkey_dec(&ctx, aes_key, 128);
+       aes_crypt_ecb(&ctx, AES_DECRYPT, indata, outdata );
+
+    //Push decrypted array as a string
+       lua_pushlstring(L,(const char *)&outdata, sizeof(outdata));
+       return 1;// return 1 to signal one return value
+}
+
+static int l_aes128encrypt_cbc(lua_State *L)
 {
        //Check number of arguments
        int i;
 {
        //Check number of arguments
        int i;
@@ -290,6 +320,34 @@ static int l_aes128encrypt(lua_State *L)
        return 1;// return 1 to signal one return value
 }
 
        return 1;// return 1 to signal one return value
 }
 
+static int l_aes128encrypt_ecb(lua_State *L)
+{
+       //Check number of arguments
+       int i;
+    size_t size;
+    const char *p_key = luaL_checklstring(L, 1, &size);
+    if(size != 32)  return returnToLuaWithError(L,"Wrong size of key, got %d bytes, expected 32", (int) size);
+
+    const char *p_txt = luaL_checklstring(L, 2, &size);
+    
+       unsigned char indata[16] = {0x00};
+       unsigned char outdata[16] = {0x00};
+    unsigned char aes_key[16] = {0x00};
+       
+       for (i = 0; i < 32; i += 2) {
+               sscanf(&p_txt[i], "%02x", (unsigned int *)&indata[i / 2]);
+               sscanf(&p_key[i], "%02x", (unsigned int *)&aes_key[i / 2]);
+       }       
+    aes_context ctx;
+    aes_init(&ctx);
+       aes_setkey_enc(&ctx, aes_key, 128);
+       aes_crypt_ecb(&ctx, AES_ENCRYPT, indata, outdata );
+       //Push encrypted array as a string
+       lua_pushlstring(L,(const char *)&outdata, sizeof(outdata));
+       return 1;// return 1 to signal one return value
+}
+
+
 static int l_crc16(lua_State *L)
 {
        size_t size;
 static int l_crc16(lua_State *L)
 {
        size_t size;
@@ -370,8 +428,10 @@ int set_pm3_libraries(lua_State *L)
         {"clearCommandBuffer",          l_clearCommandBuffer},
                {"console",                     l_CmdConsole},
                {"iso15693_crc",                l_iso15693_crc},
         {"clearCommandBuffer",          l_clearCommandBuffer},
                {"console",                     l_CmdConsole},
                {"iso15693_crc",                l_iso15693_crc},
-               {"aes128_decrypt",              l_aes128decrypt},
-               {"aes128_encrypt",              l_aes128encrypt},
+               {"aes128_decrypt",              l_aes128decrypt_cbc},
+               {"aes128_decrypt_ecb",          l_aes128decrypt_ecb},
+               {"aes128_encrypt",              l_aes128encrypt_cbc},           
+               {"aes128_encrypt_ecb",          l_aes128encrypt_ecb},
                {"crc16",                       l_crc16},
                {"crc64",                       l_crc64},
                {"sha1",                                                l_sha1},
                {"crc16",                       l_crc16},
                {"crc64",                       l_crc64},
                {"sha1",                                                l_sha1},
Impressum, Datenschutz