scapy.layers.tls.keyexchange_tls13

TLS 1.3 key exchange logic.

class scapy.layers.tls.keyexchange_tls13.KeyShareEntry(*args, **kargs)

Bases: scapy.packet.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
create_privkey(**kwargs)
do_build()

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

extract_padding(s)
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             GROUP             |             KXLEN             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          KEY EXCHANGE         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                        Fig. KeyShareEntry                        
KeyShareEntry fields

group

ShortEnumField

'None'

kxlen

FieldLenField

'None'

key_exchange

StrLenField

"b''"

post_build(pkt, pay)
post_dissection(r)
privkey
pubkey
register_pubkey(**kwargs)
class scapy.layers.tls.keyexchange_tls13.PSKBinderEntry(*args, **kargs)

Bases: scapy.packet.Packet

aliastypes
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   BINDER LEN  |             BINDER            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                       Fig. PSKBinderEntry                        
PSKBinderEntry fields

binder_len

FieldLenField

'None'

binder

StrLenField

"b''"

class scapy.layers.tls.keyexchange_tls13.PSKIdentity(*args, **kargs)

Bases: scapy.packet.Packet

aliastypes
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          IDENTITY LEN         |            IDENTITY           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     OBFUSCATED TICKET AGE                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                         Fig. PSKIdentity                         
PSKIdentity fields

identity_len

FieldLenField

'None'

identity

TicketField

"b''"

obfuscated_ticket_age

IntField

'0'

class scapy.layers.tls.keyexchange_tls13.TLS_Ext_KeyShare_CH(*args, **kargs)

Bases: scapy.layers.tls.extensions.TLS_Ext_Unknown

aliastypes
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              TYPE             |              LEN              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       CLIENT SHARES LEN       |         CLIENT SHARES         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Fig. TLS_Ext_KeyShare_CH                     
TLS_Ext_KeyShare_CH fields

type

ShortEnumField

'51'

len

ShortField

'None'

client_shares_len

FieldLenField

'None'

client_shares

PacketListField

'[]'

post_build(pkt, pay)
post_dissection(r)
class scapy.layers.tls.keyexchange_tls13.TLS_Ext_KeyShare_HRR(*args, **kargs)

Bases: scapy.layers.tls.extensions.TLS_Ext_Unknown

aliastypes
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              TYPE             |              LEN              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         SELECTED GROUP        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                    Fig. TLS_Ext_KeyShare_HRR                     
TLS_Ext_KeyShare_HRR fields

type

ShortEnumField

'51'

len

ShortField

'None'

selected_group

ShortEnumField

'None'

class scapy.layers.tls.keyexchange_tls13.TLS_Ext_KeyShare_SH(*args, **kargs)

Bases: scapy.layers.tls.extensions.TLS_Ext_Unknown

aliastypes
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              TYPE             |              LEN              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          SERVER SHARE         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                     Fig. TLS_Ext_KeyShare_SH                     
TLS_Ext_KeyShare_SH fields

type

ShortEnumField

'51'

len

ShortField

'None'

server_share

PacketField

'None'

post_build(pkt, pay)
post_dissection(r)
class scapy.layers.tls.keyexchange_tls13.TLS_Ext_PreSharedKey_CH(*args, **kargs)

Bases: scapy.layers.tls.extensions.TLS_Ext_Unknown

aliastypes
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              TYPE             |              LEN              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         IDENTITIES LEN        |           IDENTITIES          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          BINDERS LEN          |            BINDERS            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Fig. TLS_Ext_PreSharedKey_CH                   
TLS_Ext_PreSharedKey_CH fields

type

ShortEnumField

'41'

len

ShortField

'None'

identities_len

FieldLenField

'None'

identities

PacketListField

'[]'

binders_len

FieldLenField

'None'

binders

PacketListField

'[]'

class scapy.layers.tls.keyexchange_tls13.TLS_Ext_PreSharedKey_SH(*args, **kargs)

Bases: scapy.layers.tls.extensions.TLS_Ext_Unknown

aliastypes
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              TYPE             |              LEN              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       SELECTED IDENTITY       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Fig. TLS_Ext_PreSharedKey_SH                   
TLS_Ext_PreSharedKey_SH fields

type

ShortEnumField

'41'

len

ShortField

'None'

selected_identity

ShortField

'None'

class scapy.layers.tls.keyexchange_tls13.Ticket(*args, **kargs)

Bases: scapy.packet.Packet

aliastypes
fields_desc
Display RFC-like schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            KEY NAME           |               IV              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          ENCSTATELEN          |            ENCSTATE           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              MAC              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                           Fig. Ticket                            
Ticket fields

key_name

StrFixedLenField

'None'

iv

StrFixedLenField

'None'

encstatelen

FieldLenField

'None'

encstate

StrLenField

"b''"

mac

StrFixedLenField

'None'

class scapy.layers.tls.keyexchange_tls13.TicketField(*args, **kwds)

Bases: scapy.fields.PacketField

length_from
m2i(pkt, m)