From: iceman1001 <iceman@iuse.se>
Date: Sun, 9 Nov 2014 18:29:47 +0000 (+0100)
Subject: FIX: I think the dumping of data is correct now in tnp3.lua.   MD5 string vs bytearra... 
X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/commitdiff_plain/cd5767d43da36aa44a78bd4dcfbd7016349da3c6?ds=inline;hp=22f1c57786097d373e6d4706588b5d9e9a09e8e5

FIX: I think the dumping of data is correct now in tnp3.lua.   MD5 string vs bytearrays in lua are tricky
ADD: utils.lua some functions to convert between ascii, bytes and strings.
---

diff --git a/client/lualibs/utils.lua b/client/lualibs/utils.lua
index 6b3777db..bff89c5f 100644
--- a/client/lualibs/utils.lua
+++ b/client/lualibs/utils.lua
@@ -46,21 +46,46 @@ local Utils =
 	end,
 	---
 	-- Convert Byte array to string of hex
-	ConvertBytes2String = function(bytes)
-		local s = {}
+	ConvertBytes2HexString = function(bytes)
+		if #bytes == 0 then
+			return ''
+		end
+		local s={}
 		for i = 1, #(bytes) do
 			s[i] = string.format("%02X",bytes[i]) 
 		end
 		return table.concat(s)
 	end,	
-
-	ConvertStringToBytes = function(s)
+	-- Convert byte array to string with ascii
+    ConvertBytesToAsciiString = function(bytes)
+		if #bytes == 0 then
+			return ''
+		end
+		local s={}
+		for i = 1, #(bytes) do
+			s[i] = string.char(bytes[i]) 
+		end
+		return table.concat(s)		
+	end,	 
+	ConvertHexStringToBytes = function(s)
 		local t={}
+		if s == nil then return t end
+		if #s == 0 then return t end
 		for k in s:gmatch"(%x%x)" do
 			table.insert(t,tonumber(k,16))
 		end
 		return t
 	end,
+	ConvertAsciiStringToBytes = function(s)
+		local t={}
+		if s == nil then return t end
+		if #s == 0 then return t end
+		
+		for k in s:gmatch"(.)" do
+			table.insert(t, string.byte(k))
+		end
+		return t
+	end,
 	
 	-- function convertStringToBytes(str)
 	-- local bytes = {}
diff --git a/client/scripts/tnp3.lua b/client/scripts/tnp3.lua
index 56d0b486..303963ba 100644
--- a/client/scripts/tnp3.lua
+++ b/client/scripts/tnp3.lua
@@ -93,7 +93,7 @@ end
 local function main(args)
 
 	print( string.rep('--',20) )
-    --print( string.rep('--',20) )
+	print( string.rep('--',20) )
 	--print()
 	
 	local keyA
@@ -187,35 +187,30 @@ local function main(args)
 		local blockdata, err = waitCmd()
 		if err then return oops(err) end		
 
-		local b = blockNo%4
-
-		if b ~= 3 then
+		if  blockNo%4 ~= 3 then
 			if blockNo < 8 then
 				-- Block 0-7 not encrypted
-				blocks[blockNo+1] = ('%02d  :: %s :: %s'):format(blockNo,blockdata,blockdata) 
+				blocks[blockNo+1] = ('%02d  :: %s'):format(blockNo,blockdata) 
 			else
-				local base = ('%s%s%d%s'):format(block0, block1, blockNo, hashconstant)		local md5hash = md5.sumhexa(base)
+				local base = ('%s%s%02d%s'):format(block0, block1, blockNo, hashconstant)	
+				local baseArr = utils.ConvertHexStringToBytes(base)
+				local baseStr = utils.ConvertBytesToAsciiString(baseArr)
+				local md5hash = md5.sumhexa(baseStr)
 				local aestest = core.aes(md5hash, blockdata)
-			
-				local _,hex = bin.unpack(("H%d"):format(16),aestest)
-			
-				-- local hexascii = string.gsub(hex, '(%x%x)', 
-								-- function(value) 
-									-- return string.char(tonumber(value, 16)) 
-								-- end
-							-- )
+				--print(aestest, type(aestest))
+				local hex = utils.ConvertAsciiStringToBytes(aestest)
+				hex = utils.ConvertBytes2HexString(hex)
+				--local _,hex = bin.unpack(("H%d"):format(16),aestest)
 
 				if string.find(blockdata, '^0+$') then
-					blocks[blockNo+1] = ('%02d  :: %s :: %s'):format(blockNo,blockdata,blockdata) 
+					blocks[blockNo+1] = ('%02d  :: %s'):format(blockNo,blockdata) 
 				else
-					--blocks[blockNo+1] = ('%02d :: %s :: %s :: %s '):format(blockNo,key,md5hash,hex)
-					blocks[blockNo+1] = ('%02d  :: %s :: %s'):format(blockNo,blockdata,hex) 
+					blocks[blockNo+1] = ('%02d  :: %s'):format(blockNo,hex) 
 				end		
 			end
-
 		else
 			-- Sectorblocks, not encrypted
-			blocks[blockNo+1] = ('%02d  :: %s :: %s'):format(blockNo,blockdata,blockdata) 
+			blocks[blockNo+1] = ('%02d  :: %s'):format(blockNo,blockdata) 
 		end
 	end
 	
@@ -226,10 +221,11 @@ local function main(args)
 	print( ('        UID : %s'):format(uid) )
 	print( ('  ITEM TYPE : %s - %s'):format(itemtype, toyNames[itemtype]) )
 	print( ('     CARDID : %s'):format(cardid ) )	
-	print('BLK :: DATA                                DECRYPTED' )
+	print('BLK :: Decrypted                        Ascii' )
 	print( string.rep('--',36) )
 	for _,s in pairs(blocks) do
-		print( s )
+		local arr = utils.ConvertHexStringToBytes(s:sub(7,#s))
+		print( s, utils.ConvertBytesToAsciiString(arr) )
 	end 
 end