scapy.layers.tls.keyexchange_tls13

TLS 1.3 key exchange logic.

class scapy.layers.tls.keyexchange_tls13.KeyShareEntry(_pkt, /, *, group=None, kxlen=None, key_exchange=b'')[source]

Bases: Packet

When building from scratch, we create a DH private key, and when dissecting, we create a DH public key. Default group is secp256r1.

aliastypes = [<class 'scapy.layers.tls.keyexchange_tls13.KeyShareEntry'>, <class 'scapy.packet.Packet'>]
create_privkey(**kwargs: Any) Any[source]
do_build()[source]

We need this hack, else ‘self’ would be replaced by __iter__.next().

extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortEnumField (KeyShareEntry).group>, <FieldLenField (KeyShareEntry).kxlen>, <XStrLenField (KeyShareEntry).key_exchange>]
post_build(pkt, pay)[source]
post_dissection(r)[source]
privkey
pubkey
register_pubkey(**kwargs: Any) Any[source]
class scapy.layers.tls.keyexchange_tls13.PSKBinderEntry(_pkt, /, *, binder_len=None, binder=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.tls.keyexchange_tls13.PSKBinderEntry'>, <class 'scapy.packet.Packet'>]
default_payload_class(payload)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FieldLenField (PSKBinderEntry).binder_len>, <StrLenField (PSKBinderEntry).binder>]
class scapy.layers.tls.keyexchange_tls13.PSKIdentity(_pkt, /, *, identity_len=None, identity=b'', obfuscated_ticket_age=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.tls.keyexchange_tls13.PSKIdentity'>, <class 'scapy.packet.Packet'>]
default_payload_class(payload)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<FieldLenField (PSKIdentity).identity_len>, <TicketField (PSKIdentity).identity>, <IntField (PSKIdentity).obfuscated_ticket_age>]
class scapy.layers.tls.keyexchange_tls13.TLS_Ext_KeyShare_CH(_pkt, /, *, type=51, len=None, client_shares_len=None, client_shares=[])[source]

Bases: TLS_Ext_Unknown

aliastypes = [<class 'scapy.layers.tls.keyexchange_tls13.TLS_Ext_KeyShare_CH'>, <class 'scapy.layers.tls.extensions.TLS_Ext_Unknown'>, <class 'scapy.layers.tls.session._GenericTLSSessionInheritance'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortEnumField (TLS_Ext_KeyShare_CH).type>, <ShortField (TLS_Ext_KeyShare_CH).len>, <FieldLenField (TLS_Ext_KeyShare_CH).client_shares_len>, <PacketListField (TLS_Ext_KeyShare_CH).client_shares>]
post_build(pkt, pay)[source]
post_dissection(r)[source]
class scapy.layers.tls.keyexchange_tls13.TLS_Ext_KeyShare_HRR(_pkt, /, *, type=51, len=None, selected_group=None)[source]

Bases: TLS_Ext_Unknown

aliastypes = [<class 'scapy.layers.tls.keyexchange_tls13.TLS_Ext_KeyShare_HRR'>, <class 'scapy.layers.tls.extensions.TLS_Ext_Unknown'>, <class 'scapy.layers.tls.session._GenericTLSSessionInheritance'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortEnumField (TLS_Ext_KeyShare_HRR).type>, <ShortField (TLS_Ext_KeyShare_HRR).len>, <ShortEnumField (TLS_Ext_KeyShare_HRR).selected_group>]
class scapy.layers.tls.keyexchange_tls13.TLS_Ext_KeyShare_SH(_pkt, /, *, type=51, len=None, server_share=None)[source]

Bases: TLS_Ext_Unknown

aliastypes = [<class 'scapy.layers.tls.keyexchange_tls13.TLS_Ext_KeyShare_SH'>, <class 'scapy.layers.tls.extensions.TLS_Ext_Unknown'>, <class 'scapy.layers.tls.session._GenericTLSSessionInheritance'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortEnumField (TLS_Ext_KeyShare_SH).type>, <ShortField (TLS_Ext_KeyShare_SH).len>, <PacketField (TLS_Ext_KeyShare_SH).server_share>]
post_build(pkt, pay)[source]
post_dissection(r)[source]
class scapy.layers.tls.keyexchange_tls13.TLS_Ext_PreSharedKey_CH(_pkt, /, *, type=41, len=None, identities_len=None, identities=[], binders_len=None, binders=[])[source]

Bases: TLS_Ext_Unknown

aliastypes = [<class 'scapy.layers.tls.keyexchange_tls13.TLS_Ext_PreSharedKey_CH'>, <class 'scapy.layers.tls.extensions.TLS_Ext_Unknown'>, <class 'scapy.layers.tls.session._GenericTLSSessionInheritance'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortEnumField (TLS_Ext_PreSharedKey_CH).type>, <ShortField (TLS_Ext_PreSharedKey_CH).len>, <FieldLenField (TLS_Ext_PreSharedKey_CH).identities_len>, <PacketListField (TLS_Ext_PreSharedKey_CH).identities>, <FieldLenField (TLS_Ext_PreSharedKey_CH).binders_len>, <PacketListField (TLS_Ext_PreSharedKey_CH).binders>]
class scapy.layers.tls.keyexchange_tls13.TLS_Ext_PreSharedKey_SH(_pkt, /, *, type=41, len=None, selected_identity=None)[source]

Bases: TLS_Ext_Unknown

aliastypes = [<class 'scapy.layers.tls.keyexchange_tls13.TLS_Ext_PreSharedKey_SH'>, <class 'scapy.layers.tls.extensions.TLS_Ext_Unknown'>, <class 'scapy.layers.tls.session._GenericTLSSessionInheritance'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortEnumField (TLS_Ext_PreSharedKey_SH).type>, <ShortField (TLS_Ext_PreSharedKey_SH).len>, <ShortField (TLS_Ext_PreSharedKey_SH).selected_identity>]
class scapy.layers.tls.keyexchange_tls13.Ticket(_pkt, /, *, key_name=None, iv=None, encstatelen=None, encstate=b'', mac=None)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.tls.keyexchange_tls13.Ticket'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<StrFixedLenField (Ticket).key_name>, <StrFixedLenField (Ticket).iv>, <FieldLenField (Ticket).encstatelen>, <StrLenField (Ticket).encstate>, <StrFixedLenField (Ticket).mac>]
class scapy.layers.tls.keyexchange_tls13.TicketField(name: str, default: Packet, cls: Union[Callable[[bytes], Packet], Type[Packet]]  # noqa: E501, length_from: Optional[Callable[[Packet], int]]  # noqa: E501 = None)[source]

Bases: PacketLenField

m2i(pkt, m)[source]
scapy.layers.tls.keyexchange_tls13.get_usable_tls13_sigalgs(li, key, location='certificateverify')[source]

From a list of proposed signature algorithms, this function returns a list of usable signature algorithms. The order of the signature algorithms in the list returned by the function matches the one of the proposal.