Uncomment the TicketField line for parsing a RFC 5077 ticket.
| 1654 | |
| 1655 | |
| 1656 | class TLS13NewSessionTicket(_TLSHandshake): |
| 1657 | """ |
| 1658 | Uncomment the TicketField line for parsing a RFC 5077 ticket. |
| 1659 | """ |
| 1660 | name = "TLS 1.3 Handshake - New Session Ticket" |
| 1661 | fields_desc = [ByteEnumField("msgtype", 4, _tls_handshake_type), |
| 1662 | ThreeBytesField("msglen", None), |
| 1663 | IntField("ticket_lifetime", 0xffffffff), |
| 1664 | IntField("ticket_age_add", 0), |
| 1665 | FieldLenField("noncelen", None, fmt="B", |
| 1666 | length_of="ticket_nonce"), |
| 1667 | StrLenField("ticket_nonce", "", |
| 1668 | length_from=lambda pkt: pkt.noncelen), |
| 1669 | FieldLenField("ticketlen", None, length_of="ticket"), |
| 1670 | # TicketField("ticket", "", |
| 1671 | StrLenField("ticket", "", |
| 1672 | length_from=lambda pkt: pkt.ticketlen), |
| 1673 | _ExtensionsLenField("extlen", None, length_of="ext"), |
| 1674 | _ExtensionsField("ext", None, |
| 1675 | length_from=lambda pkt: (pkt.msglen - |
| 1676 | (pkt.ticketlen or 0) - # noqa: E501 |
| 1677 | pkt.noncelen or 0) - 13)] # noqa: E501 |
| 1678 | |
| 1679 | def build(self): |
| 1680 | fval = self.getfieldval("ticket") |
| 1681 | if fval == b"": |
| 1682 | # Here, the ticket is just a random 48-byte label |
| 1683 | # The ticket may also be a self-encrypted and self-authenticated |
| 1684 | # value |
| 1685 | self.ticket = os.urandom(48) |
| 1686 | |
| 1687 | fval = self.getfieldval("ticket_nonce") |
| 1688 | if fval == b"": |
| 1689 | # Nonce is randomly chosen |
| 1690 | self.ticket_nonce = os.urandom(32) |
| 1691 | |
| 1692 | fval = self.getfieldval("ticket_lifetime") |
| 1693 | if fval == 0xffffffff: |
| 1694 | # ticket_lifetime is set to 12 hours |
| 1695 | self.ticket_lifetime = 43200 |
| 1696 | |
| 1697 | fval = self.getfieldval("ticket_age_add") |
| 1698 | if fval == 0: |
| 1699 | # ticket_age_add is a random 32-bit value |
| 1700 | self.ticket_age_add = struct.unpack("!I", os.urandom(4))[0] |
| 1701 | |
| 1702 | return _TLSHandshake.build(self) |
| 1703 | |
| 1704 | def post_dissection_tls_session_update(self, msg_str): |
| 1705 | if self.tls_session.connection_end == "client": |
| 1706 | self.tls_session.client_session_ticket = self.ticket |
| 1707 | |
| 1708 | |
| 1709 | ############################################################################### |
no test coverage detected
searching dependent graphs…