@@ -302,17 +302,49 @@ def decode_jk(response_to_decode: bytes, head_len: int):
302302 '1' : 'running' ,
303303 '2' : 'not running' ,
304304 '3' : 'console disabled by GUI' }
305+
305306 TAMPER_STATUS_CODE = {
306307 '0' : 'Unknown' ,
307308 '1' : 'Not Tampered' ,
308309 '2' : 'Tampered' }
310+
309311 HOST_STATUS_CODE = {
310312 '0' : 'unknown' ,
311313 '1' : 'running' ,
312314 '2' : 'not running' ,
313315 '3' : 'not configured'
314316 }
315317
318+ TAMPER_CAUSE_CODE = {
319+ '00' : 'unknown' ,
320+ '01' : 'temp out of range' ,
321+ '02' : 'battery low' ,
322+ '03' : 'erase button pressed' ,
323+ '04' : 'security processor watchdog' ,
324+ '05' : 'power too high' ,
325+ '06' : 'security processor restart' ,
326+ '07' : 'motion detected' ,
327+ '08' : 'case tampered' ,
328+ '09' : 'TSPP Module' ,
329+ '10' : 'General'
330+ }
331+ LMK_ALGORITHM_CODE = {
332+ '0' : '3DES2Key' ,
333+ '1' : '3DES3Key' ,
334+ '2' : 'AES 256-bit'
335+ }
336+ LMK_SCHEME_CODE = {
337+ 'V' : 'Variant' ,
338+ 'K' : 'Keyblock'
339+ }
340+ LMK_STATUS_CODE = {
341+ 'L' : 'Live' ,
342+ 'T' : 'Test'
343+ }
344+ LMK_AUTH_CODE = {
345+ '0' : 'Not authorized' ,
346+ '1' : 'Authorized'
347+ }
316348 msg_len = int .from_bytes (response_to_decode [:2 ], byteorder = 'big' , signed = False )
317349 print ("Message length" , msg_len )
318350 response_to_decode = response_to_decode .decode ('ascii' , 'replace' )
@@ -348,7 +380,7 @@ def decode_jk(response_to_decode: bytes, head_len: int):
348380 print ("Tamper State: " , TAMPER_STATUS_CODE .get (tamper_state , '?' ))
349381 str_pointer = str_pointer + 1
350382 if tamper_state == '2' :
351- print ("Tamper Cause: " , response_to_decode [str_pointer :str_pointer + 2 ])
383+ print ("Tamper Cause: " , TAMPER_CAUSE_CODE . get ( response_to_decode [str_pointer :str_pointer + 2 ], '?' ) )
352384 str_pointer = str_pointer + 2
353385 print ("Tamper Date: " , response_to_decode [str_pointer :str_pointer + 6 ])
354386 str_pointer = str_pointer + 6
@@ -363,6 +395,28 @@ def decode_jk(response_to_decode: bytes, head_len: int):
363395 str_pointer = str_pointer + 2
364396 if int (lmk_loaded ) > 0 :
365397 print ("There are LMK loaded" )
398+ remaining_to_decode = response_to_decode [str_pointer :]
399+ lmks_string = str .split (remaining_to_decode , '\x15 ' )[0 ]
400+ lmks_array = str .split (lmks_string , '\x14 ' )
401+ for lmk in lmks_array :
402+ if len (lmk ) > 0 :
403+ local_lmk_pointer = 0
404+ print ("LMK ID: " , lmk [local_lmk_pointer :local_lmk_pointer + 2 ])
405+ local_lmk_pointer = local_lmk_pointer + 2
406+ print ("Authorised: " , LMK_AUTH_CODE .get (lmk [local_lmk_pointer :local_lmk_pointer + 1 ], '?' ))
407+ local_lmk_pointer = local_lmk_pointer + 1
408+ print ("Num Authorised Activities: " , lmk [local_lmk_pointer :local_lmk_pointer + 2 ])
409+ local_lmk_pointer = local_lmk_pointer + 2
410+ print ("LMK Scheme: " , LMK_SCHEME_CODE .get (lmk [local_lmk_pointer :local_lmk_pointer + 1 ], '?' ))
411+ local_lmk_pointer = local_lmk_pointer + 1
412+ print ("Algorithm: " , LMK_ALGORITHM_CODE .get (lmk [local_lmk_pointer :local_lmk_pointer + 1 ], '?' ))
413+ local_lmk_pointer = local_lmk_pointer + 1
414+ print ("Status: " , LMK_STATUS_CODE .get (lmk [local_lmk_pointer :local_lmk_pointer + 1 ], '?' ))
415+ local_lmk_pointer = local_lmk_pointer + 1
416+ print ("Comments: " , lmk [local_lmk_pointer :])
417+ fraud_detection = str .split (response_to_decode [str_pointer :], '\x15 ' )[1 ]
418+ print ("Fraud detection Exceeded: " , fraud_detection [0 ])
419+ print ("PIN attacks exceeded: " , fraud_detection [1 ])
366420 print ("" )
367421
368422
0 commit comments