@@ -429,7 +429,7 @@ def _handshakeClientAsync(self, srpParams=(), certParams=(), anonParams=(),
429429
430430 # Log client random and master secret for version < TLS1.3
431431 if self .sslkeylogfile and self .version < (3 , 4 ):
432- self ._log_session_keys ('CLIENT_RANDOM' , self ._clientRandom , self .session .masterSecret )
432+ self ._log_session_keys (( 'CLIENT_RANDOM' , self ._clientRandom , self .session .masterSecret ) )
433433
434434
435435 def _handshakeClientAsyncHelper (self , srpParams , certParams , anonParams ,
@@ -1329,10 +1329,12 @@ def _clientTLS13Handshake(self, settings, session, clientHello,
13291329
13301330 # TLS1.3 log Client and Server traffic secrets for SSLKEYLOGFILE
13311331 if self .sslkeylogfile :
1332- self ._log_session_keys ('CLIENT_HANDSHAKE_TRAFFIC_SECRET' ,
1333- clientHello .random ,
1334- cl_handshake_traffic_secret )
1335- self ._log_session_keys ('SERVER_HANDSHAKE_TRAFFIC_SECRET' , clientHello .random , sr_handshake_traffic_secret )
1332+ self ._log_session_keys ([
1333+ ('CLIENT_HANDSHAKE_TRAFFIC_SECRET' ,
1334+ clientHello .random , cl_handshake_traffic_secret ),
1335+ ('SERVER_HANDSHAKE_TRAFFIC_SECRET' ,
1336+ clientHello .random , sr_handshake_traffic_secret )
1337+ ])
13361338
13371339 # prepare for reading encrypted messages
13381340 self ._recordLayer .calcTLS1_3PendingState (
@@ -1625,11 +1627,14 @@ def _clientTLS13Handshake(self, settings, session, clientHello,
16251627 self ._handshake_hash , prfName )
16261628
16271629
1628- # Now that we have all the TLS1.3 secrets during the handshake, log them if necessary
1630+ # Now that we have all the TLS1.3 secrets during the handshake,
1631+ # log them if necessary
16291632 if self .sslkeylogfile :
1630- self ._log_session_keys ('EXPORTER_SECRET' , clientHello .random , exporter_master_secret )
1631- self ._log_session_keys ('CLIENT_TRAFFIC_SECRET_0' , clientHello .random , cl_app_traffic )
1632- self ._log_session_keys ('SERVER_TRAFFIC_SECRET_0' , clientHello .random , sr_app_traffic )
1633+ self ._log_session_keys ([
1634+ ('EXPORTER_SECRET' , clientHello .random , exporter_master_secret ),
1635+ ('CLIENT_TRAFFIC_SECRET_0' , clientHello .random , cl_app_traffic ),
1636+ ('SERVER_TRAFFIC_SECRET_0' , clientHello .random , sr_app_traffic )
1637+ ])
16331638
16341639 self ._recordLayer .calcTLS1_3PendingState (
16351640 serverHello .cipher_suite ,
@@ -1727,8 +1732,8 @@ def _clientTLS13Handshake(self, settings, session, clientHello,
17271732 resumptionMasterSecret = resumption_master_secret ,
17281733 # NOTE it must be a reference, not a copy!
17291734 tickets = self .tickets ,
1730- cl_handshake_traffic_secret = cl_handshake_traffic_secret ,
1731- sr_handshake_traffic_secret = sr_handshake_traffic_secret )
1735+ cl_hs_traffic_secret = cl_handshake_traffic_secret ,
1736+ sr_hs_traffic_secret = sr_handshake_traffic_secret )
17321737
17331738 yield "finished" if not resuming else "resumed_and_finished"
17341739
@@ -2272,7 +2277,9 @@ def handshakeServerAsync(self, verifierDB=None,
22722277
22732278 # Log client random and master secret for version < TLS1.3
22742279 if self .sslkeylogfile and self .version < (3 , 4 ):
2275- self ._log_session_keys ('CLIENT_RANDOM' , self ._clientRandom , self .session .masterSecret )
2280+ self ._log_session_keys (('CLIENT_RANDOM' ,
2281+ self ._clientRandom ,
2282+ self .session .masterSecret ))
22762283
22772284
22782285 def _handshakeServerAsyncHelper (self , verifierDB ,
@@ -2983,10 +2990,12 @@ def _serverTLS13Handshake(self, settings, clientHello, cipherSuite,
29832990
29842991 # TLS1.3 log Client and Server traffic secrets for SSLKEYLOGFILE
29852992 if self .sslkeylogfile :
2986- self ._log_session_keys ('CLIENT_HANDSHAKE_TRAFFIC_SECRET' ,
2987- clientHello .random ,
2988- cl_handshake_traffic_secret )
2989- self ._log_session_keys ('SERVER_HANDSHAKE_TRAFFIC_SECRET' , clientHello .random , sr_handshake_traffic_secret )
2993+ self ._log_session_keys ([
2994+ ('CLIENT_HANDSHAKE_TRAFFIC_SECRET' ,
2995+ clientHello .random , cl_handshake_traffic_secret ),
2996+ ('SERVER_HANDSHAKE_TRAFFIC_SECRET' ,
2997+ clientHello .random , sr_handshake_traffic_secret )
2998+ ])
29902999
29913000 self .version = version
29923001 self ._recordLayer .calcTLS1_3PendingState (
@@ -3255,11 +3264,14 @@ def _serverTLS13Handshake(self, settings, clientHello, cipherSuite,
32553264 prf_name )
32563265
32573266
3258- # Now that we have all the TLS1.3 secrets during the handshake, log them if necessary
3267+ # Now that we have all the TLS1.3 secrets during the handshake,
3268+ # log them if necessary
32593269 if self .sslkeylogfile :
3260- self ._log_session_keys ('EXPORTER_SECRET' , clientHello .random , exporter_master_secret )
3261- self ._log_session_keys ('CLIENT_TRAFFIC_SECRET_0' , clientHello .random , cl_app_traffic )
3262- self ._log_session_keys ('SERVER_TRAFFIC_SECRET_0' , clientHello .random , sr_app_traffic )
3270+ self ._log_session_keys ([
3271+ ('EXPORTER_SECRET' , clientHello .random , exporter_master_secret ),
3272+ ('CLIENT_TRAFFIC_SECRET_0' , clientHello .random , cl_app_traffic ),
3273+ ('SERVER_TRAFFIC_SECRET_0' , clientHello .random , sr_app_traffic )
3274+ ])
32633275
32643276
32653277 # verify Finished of client
@@ -3326,8 +3338,8 @@ def _serverTLS13Handshake(self, settings, clientHello, cipherSuite,
33263338 resumptionMasterSecret = resumption_master_secret ,
33273339 # NOTE it must be a reference, not a copy
33283340 tickets = self .tickets ,
3329- cl_handshake_traffic_secret = cl_handshake_traffic_secret ,
3330- sr_handshake_traffic_secret = sr_handshake_traffic_secret )
3341+ cl_hs_traffic_secret = cl_handshake_traffic_secret ,
3342+ sr_hs_traffic_secret = sr_handshake_traffic_secret )
33313343
33323344 # switch to application_traffic_secret for client packets
33333345 self ._changeReadState ()
@@ -4783,7 +4795,7 @@ def _serverFinished(self, premasterSecret, clientRandom, serverRandom,
47834795 #Log client random and master secret if SSLKEYLOGFILE is set
47844796 if self .sslkeylogfile and self .version < (3 , 3 ):
47854797 print ('Logging session keys in serverFinished' )
4786- self ._log_session_keys ("CLIENT_RANDOM" , clientRandom , masterSecret )
4798+ self ._log_session_keys (( "CLIENT_RANDOM" , clientRandom , masterSecret ) )
47874799
47884800 #Exchange ChangeCipherSpec and Finished messages
47894801 for result in self ._getFinished (masterSecret ,
@@ -4981,9 +4993,15 @@ def _calculate_master_secret(self, premaster_secret, cipher_suite,
49814993 output_length = 48 )
49824994 return secret
49834995
4984- def _log_session_keys (self , secret_label , client_random , secret ):
4996+ def _log_session_keys (self , keys ):
4997+ if isinstance (keys , tuple ):
4998+ keys = [keys ]
4999+
49855000 with open (self .sslkeylogfile , 'a' ) as ssl_key_log_file :
4986- ssl_key_log_file .write (f"{ secret_label } { client_random .hex ()} { secret .hex ()} \n " )
5001+ ssl_key_log_file .writelines (
5002+ f"{ label } { client_random .hex ()} { secret .hex ()} \n "
5003+ for label , client_random , secret in keys
5004+ )
49875005
49885006 @staticmethod
49895007 def _pickServerKeyExchangeSig (settings , clientHello , certList = None ,
0 commit comments