
    j                     :   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	c m
Z	 d dlmZ dZdZdZde dZde dZd	Z ej&                         Z ej&                         Z ej&                         Zdadadad
 Zd Zd Zd Zd Zd Ze dk(  r e        yy)    N)AESGCM864011069739334z	127.0.0.1i"  zleo/centrin/z/s1zleo/centrout/zSTS-TESTc                      d} t        j                  dd| gd      j                         }t        j	                  |      }t        |      dk7  rt        d      |S )Na2  
require "/var/www/html/sts_secure/lib/db.php";
require "/var/www/html/sts_secure/lib/crypto.php";

$pdo = sts_db();

$s = $pdo->prepare(
    "SELECT device_key_ciphertext,
            device_key_nonce,
            device_key_tag
     FROM devices
     WHERE imei = :imei"
);

$s->execute([":imei" => "864011069739334"]);
$r = $s->fetch();

if (!$r) {
    fwrite(STDERR, "Device non trovato\n");
    exit(1);
}

$k = sts_decrypt_device_key_from_storage(
    $r["device_key_ciphertext"],
    $r["device_key_nonce"],
    $r["device_key_tag"]
);

echo bin2hex($k);
phpz-rT)text    zDeviceKey non valida)
subprocesscheck_outputstripbytesfromhexlenRuntimeError)r   resultkeys      2/var/www/html/sts_secure/tools/test_secure_mqtt.pyget_device_keyr   "   s`    C> $$	c eg 
 --
C
3x2~122J    c                    | j                  d      sy | j                  d      }t        |      dk7  ry t        j                  |d         }t        j                  |d         }t        j                  |d         }t        t              }|j                  |||z   d      }t        j                  |j                  d            S )	NzS1O||            s   STS1:S2Cutf-8)
startswithsplitr   base64	b64decoder   
device_keydecryptjsonloadsdecode)payloadpartsnonce
ciphertexttagaesplains          r   decrypt_s1or,   O   s    f%MM#E
5zQU1X&E!!%(+J


58
$C

CKKSE ::W r   c           
         d}t        j                  t        ddd      j                  d      }t        j                  |      }|t        j                  d|      z   }t        t              }|j                  ||d      }|d d	 }|d	d  }	d
| d|ddt        j                  |      j                          dt        j                  |	      j                          }
t        d       | j                  t         |
d       y )Nr   GETEXCEPTCNT)IdType),:)
separatorsr   z>Is   STS1:C2SizS1D|r   08XzTX comando cifrato GETEXCEPTCNTr   qos)r"   dumpsAPP_IDencoder   r   structpackr   r    encryptr   	b64encoder$   printpublishTOPIC_IN)clientsidseqr+   	sid_bytesr'   r*   	encryptedr(   r)   envelopes              r   send_secure_commandrG   i   s   
CJJ"	
  fWo 
 c"I E
 
CI 4CJ
CD/C se1SIQJ'..0
1C '')
*	,  

+,
NN  r   c                     |dk7  rt        d|       y t        d       t        dt               | j                  t               t        j	                          y )Nr   zConnessione MQTT fallita:zMQTT TLS connessozSUB:)r>   	TOPIC_OUT	subscribe	connectedset)rA   userdataflagsrcs       r   
on_connectrP      sK    	Qw'	
 		
	&)
 MMOr   c                    |j                   j                  dd      }t        d|d d t        |      dkD  rdndz          	 t	        |      }|sy |j                  d	      d
k(  r|j                  d      t        k7  rt        d       y |j                  d      at        st        d       y t        d       t        dt               t        j                          t        | t               y |j                  d      dk(  r@t        d       t        t        j                  |d             t        j                          y y # t
        $ r}t        d|       Y d }~y d }~ww xY w)Nr   replace)errorszRX MQTT:P   z... zRX non decifrabile:SecWELCOMENoncezWELCOME con nonce erratoSidzWELCOME senza SIDzWELCOME cifrato: OKzSID:r0   r.   z Risposta applicativa cifrata: OKr   )indent)r%   r$   r>   r   r,   	Exceptiongetclient_nonce_b64sid_hexwelcome_receivedrL   rG   r"   r7   response_received)rA   rM   msgr   dataes         r   
on_messagerd      sY    ;;  D
 
Sb	d)b.b	*4  xx)#88G 00* ((5/# #$fg	

 	xx>).	
 	JJ	
 	 *K  !	
 	s   D? ?	EEEc                      t        d       t               at        d       t        j                  d      } t	        j
                  d      }t        j                  |      j                         a	t        j                         }d|_        t        j                  |_        t        j                   t        j"                        }|j%                  d|        |j'                  |       t(        |_        t*        |_        t        d       |j-                  t.        t0        d	       |j3                          t4        j7                  d
      st9        d      dt:         dt         }t        d       |j=                  t>        |d       t@        j7                  d      st9        d      tB        j7                  d      st9        d      t                t        d       t        d       t        d       |jE                          |jG                          y )NzRecupero DeviceKey dal DB...z DeviceKey: OK (non visualizzata)z&Password MQTT utente sts_secure_test:    F)protocolsts_secure_testzConnessione broker...      zTimeout connessione MQTTzS1H|r   zTX HELLO sicuror   r5      zWELCOME sicuro non ricevutoz!Risposta applicativa non ricevutaz==============================z MQTT SICURO END-TO-END: OK)$r>   r   r    getpassosurandomr   r=   r$   r]   sslcreate_default_contextcheck_hostname	CERT_NONEverify_modemqttClientMQTTv311username_pw_settls_set_contextrP   rd   connectBROKERPORT
loop_startrK   waitr   r8   r?   r@   r_   r`   
disconnect	loop_stop)passwordclient_noncectxrA   hellos        r   mainr      s    
&  !J	* 0H ::b>L''fh  
$
$
&CCmmCO[[F 
 3"F"F	 NN
 >>!&
 	

 vha
	 

 
 NN     #)
 	
 !!!$/
 	
 
G	( 
% 
( 
r   __main__)!r   rl   r"   rm   ro   r:   r	   	threadingpaho.mqtt.clientrt   rA   +cryptography.hazmat.primitives.ciphers.aeadr   IMEIrz   r{   r@   rI   r8   EventrK   r_   r`   r    r]   r^   r   r,   rG   rP   rd   r   __name__ r   r   <module>r      s       	 
      > 	$s#D6%		IOO	"9??$ #IOO% 
 
*Z4)X$A HaH zF r   