Skip to content

Commit d2f40aa

Browse files
committed
Fix NSS KeyLog cannot decrypt TLS1.3 traffic.
1 parent cbb09c4 commit d2f40aa

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

scapy/layers/tls/session.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,13 @@ def compute_tls13_early_secrets(self, external=False):
731731
b"".join(self.handshake_messages))
732732
self.tls13_derived_secrets["early_exporter_secret"] = ees
733733

734+
if self.nss_keys:
735+
cets = self.nss_keys.get('CLIENT_EARLY_TRAFFIC_SECRET', {}).get(self.client_random, cets)
736+
self.tls13_derived_secrets["client_handshake_traffic_secret"] = cets
737+
738+
ees = self.nss_keys.get('EARLY_EXPORTER_SECRET', {}).get(self.client_random, ees)
739+
self.tls13_derived_secrets["server_handshake_traffic_secret"] = ees
740+
734741
if self.connection_end == "server":
735742
if self.prcs:
736743
self.prcs.tls13_derive_keys(cets)
@@ -768,6 +775,13 @@ def compute_tls13_handshake_secrets(self):
768775
b"".join(self.handshake_messages))
769776
self.tls13_derived_secrets["server_handshake_traffic_secret"] = shts
770777

778+
if self.nss_keys:
779+
chts = self.nss_keys.get('CLIENT_HANDSHAKE_TRAFFIC_SECRET', {}).get(self.client_random, chts)
780+
self.tls13_derived_secrets["client_handshake_traffic_secret"] = chts
781+
782+
shts = self.nss_keys.get('SERVER_HANDSHAKE_TRAFFIC_SECRET', {}).get(self.client_random, shts)
783+
self.tls13_derived_secrets["server_handshake_traffic_secret"] = shts
784+
771785
def compute_tls13_traffic_secrets(self):
772786
"""
773787
Ciphers key and IV are updated accordingly for Application data.
@@ -801,6 +815,16 @@ def compute_tls13_traffic_secrets(self):
801815
b"".join(self.handshake_messages))
802816
self.tls13_derived_secrets["exporter_secret"] = es
803817

818+
if self.nss_keys:
819+
cts0 = self.nss_keys.get('CLIENT_TRAFFIC_SECRET_0', {}).get(self.client_random, cts0)
820+
self.tls13_derived_secrets["client_traffic_secrets"] = [cts0]
821+
822+
sts0 = self.nss_keys.get('SERVER_TRAFFIC_SECRET_0', {}).get(self.client_random, sts0)
823+
self.tls13_derived_secrets["server_traffic_secrets"] = [sts0]
824+
825+
es = self.nss_keys.get('EXPORTER_SECRET', {}).get(self.client_random, es)
826+
self.tls13_derived_secrets["exporter_secret"] = es
827+
804828
if self.connection_end == "server":
805829
# self.prcs.tls13_derive_keys(cts0)
806830
self.pwcs.tls13_derive_keys(sts0)

0 commit comments

Comments
 (0)