@@ -91,8 +91,19 @@ def create(self):
9191 # Step 1; Step 2
9292 nonce = int .from_bytes (urandom (16 ), "little" , signed = True )
9393 log .debug ("Send req_pq: {}" .format (nonce ))
94- res_pq = self .send (functions .ReqPq (nonce ))
94+ res_pq = self .send (functions .ReqPqMulti (nonce ))
9595 log .debug ("Got ResPq: {}" .format (res_pq .server_nonce ))
96+ log .debug ("Server public key fingerprints: {}" .format (res_pq .server_public_key_fingerprints ))
97+
98+ for i in res_pq .server_public_key_fingerprints :
99+ if i in RSA .server_public_keys :
100+ log .debug ("Using fingerprint: {}" .format (i ))
101+ public_key_fingerprint = i
102+ break
103+ else :
104+ log .debug ("Fingerprint unknown: {}" .format (i ))
105+ else :
106+ raise Exception ("Public key not found" )
96107
97108 # Step 3
98109 pq = int .from_bytes (res_pq .pq , "big" )
@@ -118,7 +129,7 @@ def create(self):
118129 sha = sha1 (data ).digest ()
119130 padding = urandom (- (len (data ) + len (sha )) % 255 )
120131 data_with_hash = sha + data + padding
121- encrypted_data = RSA .encrypt (data_with_hash , res_pq . server_public_key_fingerprints [ 0 ] )
132+ encrypted_data = RSA .encrypt (data_with_hash , public_key_fingerprint )
122133
123134 log .debug ("Done encrypt data with RSA" )
124135
@@ -130,7 +141,7 @@ def create(self):
130141 server_nonce ,
131142 int .to_bytes (p , 4 , "big" ),
132143 int .to_bytes (q , 4 , "big" ),
133- res_pq . server_public_key_fingerprints [ 0 ] ,
144+ public_key_fingerprint ,
134145 encrypted_data
135146 )
136147 )
0 commit comments