HIP - Host Identity Protocol

Removed in version 1.6.0: pcapkit.protocols.internet.hip.Locator, with no alias: it is in this module, and pcapkit.protocols.internet.hip exports the protocol class alone (#2534).

pcapkit.protocols.internet.hip.protocol contains HIP only, which implements the extractor for Host Identity Protocol (HIP) [*], whose structure is:

Octets

Bits

Name

Description

0

0

hip.next

Next Header

1

8

hip.length

Header Length

2

16

hip.packet_fixed

Fixed Bit (0)

2

17

hip.type

Packet Type

3

24

hip.version

Version

3

28

hip.reserved

Reserved

3

31

hip.version_fixed

Fixed Bit (1)

4

32

hip.chksum

Checksum

6

48

hip.control

Controls

8

64

hip.shit

Sender’s Host Identity Tag

24

192

hip.rhit

Receiver’s Host Identity Tag

40

320

hip.parameters

HIP Parameters

class pcapkit.protocols.internet.hip.protocol.HIP(file=None, length=None, **kwargs)[source]

Bases: IPv6_Ext[HIP, HIP], Internet[HIP, HIP]

This class implements Host Identity Protocol.

Double-inherited, per the convention set on #917: a header usable only as an extension header inherits IPv6_Ext alone, while one also usable as a standalone protocol names Internet as well. HIP is both, on independent grounds:

  • RFC 7401 Section 5.1 states that “the HIP header is logically an IPv6 extension header”, and IANA lists protocol 139 in its IPv6 Extension Header Types registry.

  • RFC 7401 Appendix C.2, “IPv4 HIP Packet (I1 Packet)”, works a checksum for an IPv4 header carrying Next Header: 139 with Payload Protocol: 59. HIP therefore travels directly as an IPv4 payload, as do AH and ESP.

The IPv4 ground separates HIP from MH and Shim6, which are protocols in their own right but cannot appear under IPv4: RFC 6275 Section 6.1.1 defines the Mobility Header checksum over a pseudo-header of IPv6 header fields with no IPv4 variant, and Mobile IPv4 carries its equivalent messages over UDP port 434 (RFC 5944) rather than as protocol 135.

Internet is already reached transitively through IPv6_Ext; naming it records the classification, so a reader can tell a deliberate standalone protocol from a header that merely inherits one.

This class parses the following HIP parameters, which are registered in the self.__parameter__ attribute:

Parameter Code

Parameter Parser

ESP_INFO

_read_param_esp_info()

R1_Counter

_read_param_r1_counter()

R1_COUNTER

_read_param_r1_counter()

LOCATOR_SET

_read_param_locator_set()

PUZZLE

_read_param_puzzle()

SOLUTION

_read_param_solution()

SEQ

_read_param_seq()

ACK

_read_param_ack()

DH_GROUP_LIST

_read_param_dh_group_list()

DIFFIE_HELLMAN

_read_param_diffie_hellman()

HIP_TRANSFORM

_read_param_hip_transform()

HIP_CIPHER

_read_param_hip_cipher()

NAT_TRAVERSAL_MODE

_read_param_nat_traversal_mode()

TRANSACTION_PACING

_read_param_transaction_pacing()

ENCRYPTED

_read_param_encrypted()

HOST_ID

_read_param_host_id()

HIT_SUITE_LIST

_read_param_hit_suite_list()

CERT

_read_param_cert()

NOTIFICATION

_read_param_notification()

ECHO_REQUEST_SIGNED

_read_param_echo_request_signed()

REG_INFO

_read_param_reg_info()

REG_REQUEST

_read_param_reg_request()

REG_RESPONSE

_read_param_reg_response()

REG_FAILED

_read_param_reg_failed()

REG_FROM

_read_param_reg_from()

ECHO_RESPONSE_SIGNED

_read_param_echo_response_signed()

TRANSPORT_FORMAT_LIST

_read_param_transport_format_list()

ESP_TRANSFORM

_read_param_esp_transform()

SEQ_DATA

_read_param_seq_data()

ACK_DATA

_read_param_ack_data()

PAYLOAD_MIC

_read_param_payload_mic()

TRANSACTION_ID

_read_param_transaction_id()

OVERLAY_ID

_read_param_overlay_id()

ROUTE_DST

_read_param_route_dst()

HIP_TRANSPORT_MODE

_read_param_hip_transport_mode()

HIP_MAC

_read_param_hip_mac()

HIP_MAC_2

_read_param_hip_mac_2()

HIP_SIGNATURE_2

_read_param_hip_signature_2()

HIP_SIGNATURE

_read_param_hip_signature()

ECHO_REQUEST_UNSIGNED

_read_param_echo_request_unsigned()

ECHO_RESPONSE_UNSIGNED

_read_param_echo_response_unsigned()

RELAY_FROM

_read_param_relay_from()

RELAY_TO

_read_param_relay_to()

OVERLAY_TTL

_read_param_overlay_ttl()

ROUTE_VIA

_read_param_route_via()

FROM

_read_param_from()

RVS_HMAC

_read_param_rvs_hmac()

VIA_RVS

_read_param_via_rvs()

RELAY_HMAC

_read_param_relay_hmac()

Changed in version 1.5.0:

  • Parameters dispatch through __parameter__ rather than by method name (#429).

  • A parameter is padded to the record length RFC 7401 gives (#651), and PUZZLE, SOLUTION, R1_COUNTER and LOCATOR_SET are sized as the RFCs give them (#608, #653 to #655, #672, #679).

  • A rebuild reproduces the Header Length, a packet with no parameters, the PUZZLE lifetime, the reserved, padding and Locator flag bits, and the two fixed header bits (#1313, #1314, #1323, #1328, #1365, #1417, #1459).

  • A (code, data) pair rebuilds from the parsed data model rather than from its fields as keyword arguments, which dropped every field whose constructor keyword is spelled differently (#2352).

Changed in version 1.6.0:

  • make() and the parameter makers, given an integer argument its field cannot carry – negative, too wide, or a bool for a field wider than one bit – raise ProtocolError, rather than writing a different value or raising another exception; so does make() for parameters too long for the Header Length, and so do the PUZZLE and registration makers for a lifetime that is a bool or not a finite number of seconds (#2614).

  • The same makers raise it for a fixed-size octet argument of the wrong width – the checksum, the PUZZLE and SOLUTION opaque data, the PAYLOAD_MIC payload data, or reserved octets – rather than padding or cutting it to the field. The opaque and payload data default to zeros of that width (#2676).

  • Each enumeration field of make() and of the parameter makers, and the code of each parameter in parameters, as a (code, value) pair or parsed data, takes a member or an int code, resolved with the enumeration’s get; a name, a bool for a field wider than one bit, or a code the field cannot carry raises ProtocolError, rather than resolving against an enumeration inferred from the caller’s frame or writing a different value (#2594).

  • A header constructed without version is HIP version 2, as make() writes, rather than 6, the default IP version IPv6_Ext hands on under that name; and the ENCRYPTED maker, given an IV with a cipher other than AES-128-CBC and AES-256-CBC, raises ProtocolError, rather than counting an IV in the Length that the parameter does not carry. A parsed ENCRYPTED parameter takes its cipher from the HIP_CIPHER parameters before it, so an AES cipher’s IV is read as the IV, rather than warning of a missing HIP_CIPHER and reading the IV as encrypted data (#2708).

  • A parameter given to make() as empty raw octets, which hold no type, raises ProtocolError, rather than being dropped from the header (#2723).

Removed in version 1.6.0: The *_default, *_namespace and *_reversed arguments that went with each enumeration field of make() and of the parameter makers, such as next_default for next and group_default for the items of groups; resolve a name with resolve_index() first (#2594).

__parameter__: DefaultDict[Parameter | int, str | tuple[Callable[[Parameter, int, OrderedMultiDict[Parameter, Parameter]], Parameter], Callable[[Parameter, Parameter | None, int, Any], Parameter]]]

Parameter code to method mapping, see _read_hip_param() and/or _make_hip_param(). A str value names the methods _read_param_${name} and _make_param_${name}, falling back to _read_param_unassigned / _make_param_unassigned when they do not exist; any other value is a (parser, constructor) pair of callables.

property name: Literal['Host Identity Protocol']

Name of current protocol.

property alias: str

Acronym of corresponding protocol.

property length: int

Header length of current protocol.

property payload: ProtocolBase | NoReturn

Payload of current instance.

Raises:

UnsupportedCall – if the protocol is used as an IPv6 extension header

property protocol: str | None | NoReturn

Name of next layer protocol (if any).

Raises:

UnsupportedCall – if the protocol is used as an IPv6 extension header

property protochain: ProtoChain | NoReturn

Protocol chain of current instance.

Raises:

UnsupportedCall – if the protocol is used as an IPv6 extension header

read(length=None, *, extension=False, **kwargs)[source]

Read Host Identity Protocol.

Structure of HIP header [RFC 5201][RFC 7401]:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header   | Header Length |0| Packet Type |Version| RES.|1|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Checksum             |           Controls            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                Sender's Host Identity Tag (HIT)               |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               Receiver's Host Identity Tag (HIT)              |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
/                        HIP Parameters                         /
/                                                               /
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
  • length (int | None) – Length of packet data.

  • extension (bool) – If the packet is used as an IPv6 extension header.

  • **kwargs (Any) – Arbitrary keyword arguments.

Return type:

HIP

Returns:

Parsed packet data.

Raises:

ProtocolError – If the packet is malformed.

make(next=TransType.UDP, packet=Packet.HIP_DATA, packet_fixed=0, version=2, version_reserved=0, version_fixed=1, checksum=b'\x00\x00', controls_anonymous=False, controls_reserved=0, shit=0, rhit=0, parameters=None, payload=b'', **kwargs)[source]

Make (construct) packet data.

Parameters:
Return type:

HIP

Returns:

Constructed packet data.

Raises:

ProtocolError – If next, packet, version, a fixed or reserved bit, shit or rhit does not fit its field, next or packet is a name, the code of a parameter in parameters is a name, a bool or a code its field cannot carry, checksum is not two octets, or the parameters make a header too long for its one-octet Header Length.

Changed in version 1.5.0: Takes packet_fixed ahead of version and version_fixed ahead of checksum (#1459), version_reserved before version_fixed (#1417), and controls_reserved ahead of shit (#1328), which shifts every later positional argument.

classmethod register_parameter(code, meth)[source]

Register a parameter parser.

Parameters:
Warns:

RegistryWarning – If a different entry is already registered for code; it is overwritten. Handing back the entry already stored, or one equal to it, is a silent no-op. The entry code shipped with is accepted like any other, so an override can be undone (#1362, #1363).

classmethod id()[source]

Index ID of the protocol.

Return type:

tuple[Literal['HIP']]

Returns:

Index ID of the protocol.

__post_init__(file=None, length=None, *, version=2, extension=False, **kwargs)[source]

Post initialisation hook.

Overloads:
Parameters:
  • file (IO[bytes] | bytes | None) – Source packet stream.

  • length (int | None) – Length of packet data.

  • version (int) – When constructing, the HIP version make() writes, with make()’s default, the RFC 7401 version; when parsing, the version of the enclosing IP layer, which is not read.

  • extension (bool) – If the protocol is used as an IPv6 extension header.

  • **kwargs (Any) – Arbitrary keyword arguments.

See also

For construction arguments, please refer to self.make.

Note

version is declared here because IPv6_Ext.__post_init__ defaults it to 6, the IP version, and hands it on to make(), which writes it as the HIP version. Left to that default, a header constructed without one would be HIP version 6, which no RFC defines, rather than the version 2 make() called directly writes (#2708).

classmethod __index__()[source]

Numeral registry index of the protocol.

Return type:

TransType

Returns:

Numeral registry index of the protocol in IANA.

classmethod _make_data(data)[source]

Create key-value pairs from data for protocol construction.

Parameters:

data (HIP) – protocol data

Return type:

dict[str, Any]

Returns:

Key-value pairs for protocol construction.

_read_hip_param(length, *, version)[source]

Read HIP parameters.

Parameters:
  • length (int) – length of parameters

  • version (int) – HIP version

Return type:

OrderedMultiDict[Parameter, Parameter]

Returns:

Extracted HIP parameters.

Raises:

ProtocolError – if packet length threshold check failed

_make_hip_param(parameters, *, version)[source]

Make HIP parameter.

A (code, value) pair carries either a mapping of keyword arguments for the parameter’s constructor, or a parsed Parameter data model, which goes to the constructor positionally through _make_hip_param_data() rather than expanded as keyword arguments (#2352).

Parameters:
Return type:

tuple[list[Parameter | bytes], int]

Returns:

HIP parameters and total length.

Raises:

ProtocolError – If the code of a (code, value) pair, or the key of a parameter given as parsed data, is a name, a bool or a code its field cannot carry, or if a parameter given as raw octets is empty (#2723).

_read_param_unassigned(schema, *, version, options)[source]

Read HIP unassigned parameters.

Structure of HIP unassigned parameters [RFC 5201][RFC 7401]:

 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            |C|             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
/                          Contents                             /
/                                               +-+-+-+-+-+-+-+-+
|                                               |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

UnassignedParameter

Returns:

Parsed parameter data.

_read_param_esp_info(schema, *, version, options)[source]

Read HIP ESP_INFO parameter.

Structure of HIP ESP_INFO parameter [RFC 7402]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Reserved            |         KEYMAT Index          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            OLD SPI                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            NEW SPI                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

ESPInfoParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 12.

_read_param_r1_counter(schema, *, version, options)[source]

Read HIP R1_COUNTER parameter.

Structure of HIP R1_COUNTER parameter [RFC 5201][RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Reserved, 4 bytes                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                R1 generation counter, 8 bytes                 |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

R1CounterParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 12, or the parameter is the HIPv1-only code 128 in a packet of another version.

_read_param_locator_set(schema, *, version, options)[source]

Read HIP LOCATOR_SET parameter.

Structure of HIP LOCATOR_SET parameter [RFC 8046]:

 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              |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Traffic Type   | Locator Type | Locator Length | Reserved   |P|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Locator Lifetime                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Locator                            |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
.                                                               .
.                                                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Traffic Type   | Locator Type | Locator Length | Reserved   |P|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Locator Lifetime                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Locator                            |
|                                                               |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

LocatorSetParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If locator data is malformed.

_read_param_puzzle(schema, *, version, options)[source]

Read HIP PUZZLE parameter.

Structure of HIP PUZZLE parameter [RFC 5201][RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  #K, 1 byte   |    Lifetime   |        Opaque, 2 bytes        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Random #I, RHASH_len / 8 bytes           |
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

PuzzleParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If version is 1 and schema.len is NOT 12.

_read_param_solution(schema, *, version, options)[source]

Read HIP SOLUTION parameter.

Structure of HIP SOLUTION parameter [RFC 5201][RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  #K, 1 byte   |   Reserved    |        Opaque, 2 bytes        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Random #I, n bytes                       |
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Puzzle solution #J, RHASH_len / 8 bytes            |
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

SolutionParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If version is 1 and schema.len is NOT 20, or if schema.len - 4 is odd.

_read_param_seq(schema, *, version, options)[source]

Read HIP SEQ parameter.

Structure of HIP SEQ parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Update ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

SEQParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 4.

_read_param_ack(schema, *, version, options)[source]

Read HIP ACK parameter.

Structure of HIP ACK parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       peer Update ID 1                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                       peer Update ID n                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

ACKParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is not a multiple of 4.

_read_param_dh_group_list(schema, *, version, options)[source]

Read HIP DH_GROUP_LIST parameter.

Structure of HIP DH_GROUP_LIST parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DH GROUP ID #1| DH GROUP ID #2| DH GROUP ID #3| DH GROUP ID #4|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DH GROUP ID #n|                Padding                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

DHGroupListParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – The parameter is NOT supported in HIPv1.

_read_param_diffie_hellman(schema, *, version, options)[source]

Read HIP DIFFIE_HELLMAN parameter.

Structure of HIP DIFFIE_HELLMAN parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Group ID    |      Public Value Length      | Public Value  /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                               |            Padding            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

DiffieHellmanParameter

Returns:

Parsed parameter data.

_read_param_hip_transform(schema, *, version, options)[source]

Read HIP HIP_TRANSFORM parameter.

Structure of HIP HIP_TRANSFORM parameter [RFC 5201]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Suite ID #1        |          Suite ID #2          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Suite ID #n        |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

HIPTransformParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If the parameter is used in a version other than HIPv1, or schema.len is not a multiple of 2.

_read_param_hip_cipher(schema, *, version, options)[source]

Read HIP HIP_CIPHER parameter.

Structure of HIP HIP_CIPHER parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Cipher ID #1         |          Cipher ID #2         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Cipher ID #n         |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

HIPCipherParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If the parameter is used in HIPv1, or schema.len is not a multiple of 2.

_read_param_nat_traversal_mode(schema, *, version, options)[source]

Read HIP NAT_TRAVERSAL_MODE parameter.

Structure of HIP NAT_TRAVERSAL_MODE parameter [RFC 5770]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Reserved            |            Mode ID #1         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Mode ID #2          |            Mode ID #3         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Mode ID #n          |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

NATTraversalModeParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is not a multiple of 2.

_read_param_transaction_pacing(schema, *, version, options)[source]

Read HIP TRANSACTION_PACING parameter.

Structure of HIP TRANSACTION_PACING parameter [RFC 5770]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Min Ta                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

TransactionPacingParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 4.

_read_param_encrypted(schema, *, version, options)[source]

Read HIP ENCRYPTED parameter.

Structure of HIP ENCRYPTED parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              IV                               /
/                                                               /
/                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               /
/                        Encrypted data                         /
/                                                               /
/                               +-------------------------------+
/                               |            Padding            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

EncryptedParameter

Returns:

Parsed parameter data.

_read_param_host_id(schema, *, version, options)[source]

Read HIP HOST_ID parameter.

Structure of HIP HOST_ID parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          HI Length            |DI-Type|      DI Length        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Algorithm            |         Host Identity         /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                               |       Domain Identifier       /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                               |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

HostIDParameter

Returns:

Parsed parameter data.

_read_param_hit_suite_list(schema, *, version, options)[source]

Read HIP HIT_SUITE_LIST parameter.

Structure of HIP HIT_SUITE_LIST parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ID #1     |     ID #2     |     ID #3     |     ID #4     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     ID #n     |                Padding                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

HITSuiteListParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – The parameter is NOT supported in HIPv1.

_read_param_cert(schema, *, version, options)[source]

Read HIP CERT parameter.

Structure of HIP CERT parameter [RFC 8002]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  CERT group   |  CERT count   |    CERT ID    |   CERT type   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Certificate                          /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                               |   Padding (variable length)   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

CertParameter

Returns:

Parsed parameter data.

_read_param_notification(schema, *, version, options)[source]

Read HIP NOTIFICATION parameter.

Structure of HIP NOTIFICATION parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Reserved             |      Notify Message Type      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               /
/                   Notification Data                           /
/                                               +---------------+
/                                               |     Padding   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

NotificationParameter

Returns:

Parsed parameter data.

_read_param_echo_request_signed(schema, *, version, options)[source]

Read HIP ECHO_REQUEST_SIGNED parameter.

Structure of HIP ECHO_REQUEST_SIGNED parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Opaque data (variable length)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

EchoRequestSignedParameter

Returns:

Parsed parameter data.

_read_param_reg_info(schema, *, version, options)[source]

Read HIP REG_INFO parameter.

Structure of HIP REG_INFO parameter [RFC 8003]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Min Lifetime  | Max Lifetime  |  Reg Type #1  |  Reg Type #2  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      ...      |     ...       |  Reg Type #n  |               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    Padding    +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RegInfoParameter

Returns:

Parsed parameter data.

_read_param_reg_request(schema, *, version, options)[source]

Read HIP REG_REQUEST parameter.

Structure of HIP REG_REQUEST parameter [RFC 8003]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Lifetime    |  Reg Type #1  |  Reg Type #2  |  Reg Type #3  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      ...      |     ...       |  Reg Type #n  |               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    Padding    +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RegRequestParameter

Returns:

Parsed parameter data.

_read_param_reg_response(schema, *, version, options)[source]

Read HIP REG_RESPONSE parameter.

Structure of HIP REG_RESPONSE parameter [RFC 8003]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Lifetime    |  Reg Type #1  |  Reg Type #2  |  Reg Type #3  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      ...      |     ...       |  Reg Type #n  |               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    Padding    +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RegResponseParameter

Returns:

Parsed parameter data.

_read_param_reg_failed(schema, *, version, options)[source]

Read HIP REG_FAILED parameter.

Structure of HIP REG_FAILED parameter [RFC 8003]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Failure Type  |  Reg Type #1  |  Reg Type #2  |  Reg Type #3  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      ...      |     ...       |  Reg Type #n  |               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    Padding    +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RegFailedParameter

Returns:

Parsed parameter data.

_read_param_reg_from(schema, *, version, options)[source]

Read HIP REG_FROM parameter.

Structure of HIP REG_FROM parameter [RFC 5770]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Port              |    Protocol   |     Reserved  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                            Address                            |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RegFromParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 20.

_read_param_echo_response_signed(schema, *, version, options)[source]

Read HIP ECHO_RESPONSE_SIGNED parameter.

Structure of HIP ECHO_RESPONSE_SIGNED parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Opaque data (variable length)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

EchoResponseSignedParameter

Returns:

Parsed parameter data.

_read_param_transport_format_list(schema, *, version, options)[source]

Read HIP TRANSPORT_FORMAT_LIST parameter.

Structure of HIP TRANSPORT_FORMAT_LIST parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          TF type #1           |           TF type #2          /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/          TF type #n           |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

TransportFormatListParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If the parameter is used in HIPv1, or schema.len is not a multiple of 2.

_read_param_esp_transform(schema, *, version, options)[source]

Read HIP ESP_TRANSFORM parameter.

Structure of HIP ESP_TRANSFORM parameter [RFC 7402]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Reserved             |           Suite ID #1         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Suite ID #2          |           Suite ID #3         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Suite ID #n          |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

ESPTransformParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is not a multiple of 2.

_read_param_seq_data(schema, *, version, options)[source]

Read HIP SEQ_DATA parameter.

Structure of HIP SEQ_DATA parameter [RFC 6078]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

SeqDataParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 4.

_read_param_ack_data(schema, *, version, options)[source]

Read HIP ACK_DATA parameter.

Structure of HIP ACK_DATA parameter [RFC 6078]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Acked Sequence number                     /
/                                                               /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

AckDataParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is not a multiple of 4.

_read_param_payload_mic(schema, *, version, options)[source]

Read HIP PAYLOAD_MIC parameter.

Structure of HIP PAYLOAD_MIC parameter [RFC 6078]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Next Header  |                   Reserved                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Payload Data                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
/                         MIC Value                             /
/                                               +-+-+-+-+-+-+-+-+
|                                               |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

PayloadMICParameter

Returns:

Parsed parameter data.

_read_param_transaction_id(schema, *, version, options)[source]

Read HIP TRANSACTION_ID parameter.

Structure of HIP TRANSACTION_ID parameter [RFC 6078]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Identifier                          /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                               |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

TransactionIDParameter

Returns:

Parsed parameter data.

_read_param_overlay_id(schema, *, version, options)[source]

Read HIP OVERLAY_ID parameter.

Structure of HIP OVERLAY_ID parameter [RFC 6079]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Identifier                          /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                                               |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

OverlayIDParameter

Returns:

Parsed parameter data.

_read_param_route_dst(schema, *, version, options)[source]

Read HIP ROUTE_DST parameter.

Structure of HIP ROUTE_DST parameter [RFC 6028]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Flags             |            Reserved           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                            HIT #1                             |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
.                               .                               .
.                               .                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                            HIT #n                             |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RouteDstParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If the parameter is malformed.

_read_param_hip_transport_mode(schema, *, version, options)[source]

Read HIP HIP_TRANSPORT_MODE parameter.

Structure of HIP HIP_TRANSPORT_MODE parameter [RFC 6261]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Port              |           Mode ID #1          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Mode ID #2           |           Mode ID #3          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Mode ID #n           |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

HIPTransportModeParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is not a multiple of 2.

_read_param_hip_mac(schema, *, version, options)[source]

Read HIP HIP_MAC parameter.

Structure of HIP HIP_MAC parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                             HMAC                              |
/                                                               /
/                               +-------------------------------+
|                               |            Padding            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

HIPMACParameter

Returns:

Parsed parameter data.

_read_param_hip_mac_2(schema, *, version, options)[source]

Read HIP HIP_MAC_2 parameter.

Structure of HIP HIP_MAC_2 parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                             HMAC                              |
/                                                               /
/                               +-------------------------------+
|                               |            Padding            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

HIPMAC2Parameter

Returns:

Parsed parameter data.

_read_param_hip_signature_2(schema, *, version, options)[source]

Read HIP HIP_SIGNATURE_2 parameter.

Structure of HIP HIP_SIGNATURE_2 parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    SIG alg                    |            Signature          /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                               |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

HIPSignature2Parameter

Returns:

Parsed parameter data.

_read_param_hip_signature(schema, *, version, options)[source]

Read HIP HIP_SIGNATURE parameter.

Structure of HIP HIP_SIGNATURE parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    SIG alg                    |            Signature          /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/                               |             Padding           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

HIPSignatureParameter

Returns:

Parsed parameter data.

_read_param_echo_response_unsigned(schema, *, version, options)[source]

Read HIP ECHO_RESPONSE_UNSIGNED parameter.

Structure of HIP ECHO_RESPONSE_UNSIGNED parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Opaque data (variable length)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

EchoResponseUnsignedParameter

Returns:

Parsed parameter data.

_read_param_echo_request_unsigned(schema, *, version, options)[source]

Read HIP ECHO_REQUEST_UNSIGNED parameter.

Structure of HIP ECHO_REQUEST_UNSIGNED parameter [RFC 7401]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Opaque data (variable length)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

EchoRequestUnsignedParameter

Returns:

Parsed parameter data.

_read_param_relay_from(schema, *, version, options)[source]

Read HIP RELAY_FROM parameter.

Structure of HIP RELAY_FROM parameter [RFC 5770]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Port              |    Protocol   |     Reserved  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                            Address                            |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RelayFromParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 20.

_read_param_relay_to(schema, *, version, options)[source]

Read HIP RELAY_TO parameter.

Structure of HIP RELAY_TO parameter [RFC 5770]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Port              |    Protocol   |     Reserved  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                            Address                            |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RelayToParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 20.

_read_param_overlay_ttl(schema, *, version, options)[source]

Read HIP OVERLAY_TTL parameter.

Structure of HIP OVERLAY_TTL parameter [RFC 6079]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             TTL               |            Reserved           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

OverlayTTLParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 4.

_read_param_route_via(schema, *, version, options)[source]

Read HIP ROUTE_VIA parameter.

Structure of HIP ROUTE_VIA parameter [RFC 6028]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Flags             |            Reserved           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                            HIT #1                             |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
.                               .                               .
.                               .                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                            HIT #n                             |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RouteViaParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If the parameter is malformed.

_read_param_from(schema, *, version, options)[source]

Read HIP FROM parameter.

Structure of HIP FROM parameter [RFC 8004]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                             Address                           |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

FromParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 16.

_read_param_rvs_hmac(schema, *, version, options)[source]

Read HIP RVS_HMAC parameter.

Structure of HIP RVS_HMAC parameter [RFC 8004]:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                             HMAC                              |
/                                                               /
/                               +-------------------------------+
|                               |            Padding            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RVSHMACParameter

Returns:

Parsed parameter data.

_read_param_via_rvs(schema, *, version, options)[source]

Read HIP VIA_RVS parameter.

Structure of HIP VIA_RVS parameter [RFC 8004]:

 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              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                            Address                            |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
.                               .                               .
.                               .                               .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                            Address                            |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

ViaRVSParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is not a multiple of 16.

_read_param_relay_hmac(schema, *, version, options)[source]

Read HIP RELAY_HMAC parameter.

Structure of HIP RELAY_HMAC parameter [RFC 5770]:

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                             HMAC                              |
/                                                               /
/                               +-------------------------------+
|                               |            Padding            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
Return type:

RelayHMACParameter

Returns:

Parsed parameter data.

_make_param_unassigned(code, param=None, *, version, contents=b'', **kwargs)[source]

Make HIP unassigned parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (UnassignedParameter | None) – parameter data

  • version (int) – HIP protocol version

  • contents (bytes) – parameter contents

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

UnassignedParameter

Returns:

HIP parameter schema.

_make_param_esp_info(code, param=None, *, version, reserved=0, index=0, old_spi=0, new_spi=0, **kwargs)[source]

Make HIP ESP_INFO parameter.

Parameters:
Return type:

ESPInfoParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If reserved, index, old_spi or new_spi does not fit its field.

_make_param_r1_counter(code, param=None, *, version, counter=0, reserved=b'\x00\x00\x00\x00', **kwargs)[source]

Make HIP R1_COUNTER parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (R1CounterParameter | None) – parameter data

  • version (int) – HIP protocol version

  • counter (int) – R1 generation counter

  • reserved (bytes) – the four reserved octets

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

R1CounterParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If code is the HIPv1-only 128 and version is NOT 1, or counter does not fit in eight octets. Also if reserved is not four octets.

_make_param_locator_set(code, param=None, *, version, locator_set=None, **kwargs)[source]

Make HIP LOCATOR_SET parameter.

Parameters:
Return type:

LocatorSetParameter

Returns:

HIP parameter schema.

_make_param_puzzle(code, param=None, *, version, index=0, lifetime=0, lifetime_exponent=None, opaque=b'\x00\x00', random=0, rhash_len=None, **kwargs)[source]

Make HIP PUZZLE parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (PuzzleParameter | None) – parameter data

  • version (int) – HIP protocol version

  • index (int) – #K index

  • lifetime (timedelta | int) – lifetime, encoded to the nearest lower Lifetime octet; ignored when lifetime_exponent is given

  • lifetime_exponent (int | None) – the Lifetime octet itself, value in RFC 7401 Section 5.2.4’s 2^(value - 32) seconds

  • opaque (bytes) – opaque data

  • random (int) – random #I value

  • rhash_len (int | None) – on-wire width of Random #I, in bits; defaults to the width param was parsed with, or to what version fixes, or to random’s own bit length

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

PuzzleParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If lifetime_exponent does not fit one octet, lifetime cannot be encoded, or the width of Random #I is invalid; see _make_puzzle_lifetime and _make_puzzle_field_width. Also if index does not fit one octet, or random is negative or a bool. Also if opaque is not two octets.

_make_param_solution(code, param=None, *, version, index=0, reserved=None, opaque=b'\x00\x00', random=0, solution=0, rhash_len=None, **kwargs)[source]

Make HIP SOLUTION parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (SolutionParameter | None) – parameter data

  • version (int) – HIP protocol version

  • index (int) – #K index

  • reserved (int | None) – the Reserved octet, which RFC 7401 Section 5.2.5 requires to be “zero when sent”. Defaults to the octet param arrived with, so that re-serialising reproduces it rather than rewriting it, and to that mandated zero otherwise. Pass it explicitly to override either – notably to write the conformant zero over a non-conformant one received from a peer, which is otherwise unreachable because SolutionParameter is immutable

  • opaque (bytes) – opaque data

  • random (int) – random #I value

  • solution (int) – solution #J value

  • rhash_len (int | None) – on-wire width of Random #I and Puzzle solution #J alike, in bits; defaults to the width param was parsed with, or to what version fixes, or to the values’ own bit length

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

SolutionParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If the width of the two fields is invalid; see _make_puzzle_field_width. Also if index or reserved does not fit one octet, or random or solution is negative or a bool. Also if opaque is not two octets.

_make_param_seq(code, param=None, *, version, update_id=0, **kwargs)[source]

Make HIP SEQ parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (SEQParameter | None) – parameter data

  • version (int) – HIP protocol version

  • update_id (int) – update ID

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

SEQParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If update_id does not fit its field.

_make_param_ack(code, param=None, *, version, update_id=None, **kwargs)[source]

Make HIP ACK parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (ACKParameter | None) – parameter data

  • version (int) – HIP protocol version

  • update_id (list[int] | None) – list of update ID

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

ACKParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If an entry of update_id does not fit its field.

_make_param_dh_group_list(code, param=None, *, version, groups=None, **kwargs)[source]

Make HIP DH_GROUP_LIST parameter.

Parameters:
Return type:

DHGroupListParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – The parameter is NOT supported in HIPv1, or an entry of groups is a name or does not fit its field.

_make_param_diffie_hellman(code, param=None, *, version, group=Group.NIST_P_256, pub_val=0, **kwargs)[source]

Make HIP DIFFIE_HELLMAN parameter.

Parameters:
Return type:

DiffieHellmanParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If group is a name or does not fit its field, or pub_val is negative, a bool, or wider than its pub_len octets.

_make_param_hip_transform(code, param=None, *, version, suites=None, **kwargs)[source]

Make HIP HIP_TRANSFORM parameter.

Parameters:
Return type:

HIPTransformParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – The parameter is NOT supported outside HIPv1, or an entry of suites is a name or does not fit its field.

_make_param_hip_cipher(code, param=None, *, version, ciphers=None, **kwargs)[source]

Make HIP HIP_CIPHER parameter.

Parameters:
Return type:

HIPCipherParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – The parameter is NOT supported in HIPv1, or an entry of ciphers is a name or does not fit its field.

_make_param_nat_traversal_mode(code, param=None, *, version, modes=None, reserved=b'\x00\x00', **kwargs)[source]

Make HIP NAT_TRAVERSAL_MODE parameter.

Parameters:
Return type:

NATTraversalModeParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If an entry of modes is a name or does not fit its field, or reserved is not two octets.

_make_param_transaction_pacing(code, param=None, *, version, min_ta=0, **kwargs)[source]

Make HIP TRANSACTION_PACING parameter.

Parameters:
Return type:

TransactionPacingParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If min_ta does not fit its field.

_make_param_encrypted(code, param=None, *, version, cipher=Cipher.NULL_ENCRYPT, iv=None, data=b'', reserved=b'\x00\x00\x00\x00', **kwargs)[source]

Make HIP ENCRYPTED parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (EncryptedParameter | None) – parameter data

  • version (int) – HIP protocol version

  • cipher (Cipher | int) – cipher ID, of the width HIP_CIPHER carries it in

  • iv (bytes | None) – initialization vector, given for the AES ciphers and only for them

  • data (bytes) – encrypted data

  • reserved (bytes) – the four reserved octets

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

EncryptedParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If cipher is a name or does not fit its field, the cipher is AES-128-CBC or AES-256-CBC and iv is missing or NOT 16 octets, or iv is given with any other cipher, which takes none. Also if reserved is not four octets.

_make_param_host_id(code, param=None, *, version, hi=None, hi_curve=None, hi_pub_key=b'', hi_algorithm=HIAlgorithm.NULL_ENCRYPT, di=b'', di_type=DITypes.none_included, **kwargs)[source]

Make HIP HOST_ID parameter.

Parameters:
Return type:

HostIDParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If hi_algorithm or di_type is a name or does not fit its field, if neither hi nor param is given and hi_curve is not an ECDSA, ECDSA_LOW or EdDSA curve, or if hi is a HostIdentity whose curve is none of those.

_make_param_hit_suite_list(code, param=None, *, version, suites=None, **kwargs)[source]

Make HIP HIT_SUITE_LIST parameter.

Parameters:
Return type:

HITSuiteListParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – The parameter is NOT supported in HIPv1, or an entry of suites is a name or does not fit its field.

_make_param_cert(code, param=None, *, version, cert_group=0, cert_count=0, cert_id=0, cert_type=Certificate.X_509_v3, cert=b'', **kwargs)[source]

Make HIP CERT parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (CertParameter | None) – parameter data

  • version (int) – HIP protocol version

  • cert_group (int) – certificate group ID – an arbitrary number, locally managed by the sender per RFC 8002 Section 2

  • cert_count (int) – certificate count

  • cert_id (int) – certificate ID

  • cert_type (Certificate | int) – certificate type

  • cert (bytes) – certificate data

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

CertParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If cert_group, cert_count, cert_id or cert_type does not fit its field, or cert_type is a name.

Changed in version 1.5.0: cert_group is a plain int and defaults to 0; the cert_group_default, cert_group_namespace and cert_group_reversed arguments are gone, since they existed only to look the value up in the Diffie-Hellman group registry that RFC 8002 does not define for it (#2283).

_make_param_notification(code, param=None, *, version, msg_type=NotifyMessage.I2_ACKNOWLEDGEMENT, msg=b'', reserved=b'\x00\x00', **kwargs)[source]

Make HIP NOTIFICATION parameter.

Parameters:
Return type:

NotificationParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If msg_type is a name or does not fit its field, or reserved is not two octets.

_make_param_echo_request_signed(code, param=None, *, version, opaque=b'', **kwargs)[source]

Make HIP ECHO_REQUEST_SIGNED parameter.

Parameters:
Return type:

EchoRequestSignedParameter

Returns:

HIP parameter schema.

_make_param_reg_info(code, param=None, *, version, min_lifetime=0, max_lifetime=0xf, min_lifetime_exponent=None, max_lifetime_exponent=None, reg_info=None, **kwargs)[source]

Make HIP REG_INFO parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (RegInfoParameter | None) – parameter data

  • version (int) – HIP protocol version

  • min_lifetime (timedelta | int | float) – minimum lifetime, encoded to the nearest lower Min Lifetime octet; ignored when min_lifetime_exponent is given

  • max_lifetime (timedelta | int | float) – maximum lifetime, encoded to the nearest lower Max Lifetime octet; ignored when max_lifetime_exponent is given

  • min_lifetime_exponent (int | None) – the Min Lifetime octet itself, lifetime in RFC 8003 Section 4.1’s 2^((lifetime - 64)/8) seconds

  • max_lifetime_exponent (int | None) – the Max Lifetime octet itself

  • reg_info (list[Registration | int] | None) – registration information list

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

RegInfoParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If either exponent does not fit one octet, either lifetime cannot be encoded, see _make_registration_lifetime, or an entry of reg_info is a name or does not fit its field.

Changed in version 1.5.0: min_lifetime and max_lifetime are durations encoded per RFC 8003 Section 4.1 rather than octets written verbatim, and the new min_lifetime_exponent and max_lifetime_exponent take the octets directly (#2281).

_make_param_reg_request(code, param=None, *, version, lifetime=0, lifetime_exponent=None, reg_request=None, **kwargs)[source]

Make HIP REG_REQUEST parameter.

Parameters:
Return type:

RegRequestParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If lifetime_exponent does not fit one octet, lifetime cannot be encoded, see _make_registration_lifetime, or an entry of reg_request is a name or does not fit its field.

Changed in version 1.5.0: lifetime is a duration encoded per RFC 8003 Section 4.1 rather than an octet written verbatim, and the new lifetime_exponent takes the octet directly (#2281).

_make_param_reg_response(code, param=None, *, version, lifetime=0, lifetime_exponent=None, reg_response=None, **kwargs)[source]

Make HIP REG_RESPONSE parameter.

Parameters:
Return type:

RegResponseParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If lifetime_exponent does not fit one octet, lifetime cannot be encoded, see _make_registration_lifetime, or an entry of reg_response is a name or does not fit its field.

Changed in version 1.5.0: lifetime is a duration encoded per RFC 8003 Section 4.1 rather than an octet written verbatim, and the new lifetime_exponent takes the octet directly (#2281).

_make_param_reg_failed(code, param=None, *, version, failure_type=RegistrationFailure.Registration_requires_additional_credentials, reg_failed=None, **kwargs)[source]

Make HIP REG_FAILED parameter.

Changed in version 1.5.0: lifetime is replaced by failure_type, with no alias, and reg_failed takes registration types rather than failure types (#2309).

Parameters:
Return type:

RegFailedParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If failure_type or an entry of reg_failed is a name or does not fit its field.

_make_param_reg_from(code, param=None, *, version, port=0, protocol=TransType.UDP, address='::', reserved=b'\x00', **kwargs)[source]

Make HIP REG_FROM parameter.

Parameters:
Return type:

RegFromParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If port or protocol does not fit its field, or protocol is a name. Also if reserved is not one octet.

_make_param_echo_response_signed(code, param=None, *, version, opaque=b'', **kwargs)[source]

Make HIP ECHO_RESPONSE_SIGNED parameter.

Parameters:
Return type:

EchoResponseSignedParameter

Returns:

HIP parameter schema.

_make_param_transport_format_list(code, param=None, *, version, formats=None, **kwargs)[source]

Make HIP TRANSPORT_FORMAT_LIST parameter.

Parameters:
Return type:

TransportFormatListParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – The parameter is NOT supported in HIPv1, or an entry of formats is a name or does not fit its field.

_make_param_esp_transform(code, param=None, *, version, suites=None, reserved=b'\x00\x00', **kwargs)[source]

Make HIP ESP_TRANSFORM parameter.

Parameters:
Return type:

ESPTransformParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If an entry of suites is a name or does not fit its field, or reserved is not two octets.

_make_param_seq_data(code, param=None, *, version, seq=0, **kwargs)[source]

Make HIP SEQ_DATA parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (SeqDataParameter | None) – parameter data

  • version (int) – HIP protocol version

  • seq (int) – sequence number

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

SeqDataParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If seq does not fit its field.

_make_param_ack_data(code, param=None, *, version, ack=None, **kwargs)[source]

Make HIP ACK_DATA parameter.

Parameters:
Return type:

AckDataParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If an entry of ack does not fit its field.

_make_param_payload_mic(code, param=None, *, version, next=TransType.UDP, payload=b'\x00\x00\x00\x00', mic=b'', reserved=b'\x00\x00\x00', **kwargs)[source]

Make HIP PAYLOAD_MIC parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (PayloadMICParameter | None) – parameter data

  • version (int) – HIP protocol version

  • next (TransType | int) – next protocol

  • payload (bytes) – payload data

  • mic (bytes) – message integrity code

  • reserved (bytes) – the three reserved octets

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

PayloadMICParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If next is a name or does not fit its field, payload is not four octets, or reserved is not three.

_make_param_transaction_id(code, param=None, *, version, id=0, id_len=None, **kwargs)[source]

Make HIP TRANSACTION_ID parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (TransactionIDParameter | None) – parameter data

  • version (int) – HIP protocol version

  • id (int) – transaction ID

  • id_len (int | None) – on-wire width of Identifier, in octets; defaults to the width param was parsed with, or to id’s own bit length

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

TransactionIDParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If the width of Identifier is invalid; see _make_identifier_width.

Changed in version 1.5.0: New id_len argument, so that an identifier with leading zero octets rebuilds at the width it was read with (#2271).

_make_param_overlay_id(code, param=None, *, version, id=0, id_len=None, **kwargs)[source]

Make HIP OVERLAY_ID parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (OverlayIDParameter | None) – parameter data

  • version (int) – HIP protocol version

  • id (int) – overlay ID

  • id_len (int | None) – on-wire width of Identifier, in octets; defaults to the width param was parsed with, or to id’s own bit length

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

OverlayIDParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If the width of Identifier is invalid; see _make_identifier_width.

Changed in version 1.5.0: New id_len argument, so that an identifier with leading zero octets rebuilds at the width it was read with (#2271).

_make_param_route_dst(code, param=None, *, version, symmetric=False, must_follow=False, flags_reserved=0, hit=None, reserved=b'\x00\x00', **kwargs)[source]

Make HIP ROUTE_DST parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (RouteDstParameter | None) – parameter data

  • version (int) – HIP protocol version

  • symmetric (bool) – symmetric flag

  • must_follow (bool) – must-follow flag

  • flags_reserved (int) – the 14 reserved low-order bits of Flags

  • hit (list[bytes | str | int | IPv6Address] | None) – list of HITs

  • reserved (bytes) – the two reserved octets

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

RouteDstParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If flags_reserved does not fit its field. Also if reserved is not two octets.

_make_param_hip_transport_mode(code, param=None, *, version, port=0, modes=None, **kwargs)[source]

Make HIP HIP_TRANSPORT_MODE parameter.

Parameters:
Return type:

HIPTransportModeParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If port or an entry of modes does not fit its field, or an entry of modes is a name.

_make_param_hip_mac(code, param=None, *, version, hmac=b'', **kwargs)[source]

Make HIP HIP_MAC parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (HIPMACParameter | None) – parameter data

  • version (int) – HIP protocol version

  • hmac (bytes) – HMAC value

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

HIPMACParameter

Returns:

HIP parameter schema.

_make_param_hip_mac_2(code, param=None, *, version, hmac=b'', **kwargs)[source]

Make HIP HIP_MAC_2 parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (HIPMAC2Parameter | None) – parameter data

  • version (int) – HIP protocol version

  • hmac (bytes) – HMAC value

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

HIPMAC2Parameter

Returns:

HIP parameter schema.

_make_param_hip_signature_2(code, param=None, *, version, algorithm=HIAlgorithm.NULL_ENCRYPT, signature=b'', **kwargs)[source]

Make HIP HIP_SIGNATURE_2 parameter.

Parameters:
Return type:

HIPSignature2Parameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If algorithm is a name or does not fit its field.

_make_param_hip_signature(code, param=None, *, version, algorithm=HIAlgorithm.NULL_ENCRYPT, signature=b'', **kwargs)[source]

Make HIP HIP_SIGNATURE parameter.

Parameters:
Return type:

HIPSignatureParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If algorithm is a name or does not fit its field.

_make_param_echo_response_unsigned(code, param=None, *, version, opaque=b'', **kwargs)[source]

Make HIP ECHO_RESPONSE_UNSIGNED parameter.

Parameters:
Return type:

EchoResponseUnsignedParameter

Returns:

HIP parameter schema.

_make_param_echo_request_unsigned(code, param=None, *, version, opaque=b'', **kwargs)[source]

Make HIP ECHO_REQUEST_UNSIGNED parameter.

Parameters:
Return type:

EchoRequestUnsignedParameter

Returns:

HIP parameter schema.

_make_param_relay_from(code, param=None, *, version, port=0, protocol=TransType.UDP, address='::', reserved=b'\x00', **kwargs)[source]

Make HIP RELAY_FROM parameter.

Parameters:
Return type:

RelayFromParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If port or protocol does not fit its field, or protocol is a name. Also if reserved is not one octet.

_make_param_relay_to(code, param=None, *, version, port=0, protocol=TransType.UDP, address='::', reserved=b'\x00', **kwargs)[source]

Make HIP RELAY_TO parameter.

Parameters:
Return type:

RelayToParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If port or protocol does not fit its field, or protocol is a name. Also if reserved is not one octet.

_make_param_overlay_ttl(code, param=None, *, version, ttl=0, reserved=b'\x00\x00', **kwargs)[source]

Make HIP OVERLAY_TTL parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (OverlayTTLParameter | None) – parameter data

  • version (int) – HIP protocol version

  • ttl (int) – overlay time-to-live (TTL), as a count of remaining overlay hops rather than a duration – see OverlayTTLParameter.ttl

  • reserved (bytes) – the two reserved octets

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

OverlayTTLParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If ttl does not fit its field. Also if reserved is not two octets.

Changed in version 1.5.0: ttl is a hop count rather than a duration, and no longer accepts a timedelta (#2282).

_make_param_route_via(code, param=None, *, version, symmetric=False, must_follow=False, flags_reserved=0, hit=None, reserved=b'\x00\x00', **kwargs)[source]

Make HIP ROUTE_VIA parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (RouteViaParameter | None) – parameter data

  • version (int) – HIP protocol version

  • symmetric (bool) – symmetric flag

  • must_follow (bool) – must-follow flag

  • flags_reserved (int) – the 14 reserved low-order bits of Flags

  • hit (list[bytes | str | int | IPv6Address] | None) – list of HITs

  • reserved (bytes) – the two reserved octets

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

RouteViaParameter

Returns:

HIP parameter schema.

Raises:

ProtocolError – If flags_reserved does not fit its field. Also if reserved is not two octets.

_make_param_from(code, param=None, *, version, address='::', **kwargs)[source]

Make HIP FROM parameter.

Parameters:
Return type:

FromParameter

Returns:

HIP parameter schema.

_make_param_rvs_hmac(code, param=None, *, version, hmac=b'', **kwargs)[source]

Make HIP RVS_HMAC parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (RVSHMACParameter | None) – parameter data

  • version (int) – HIP protocol version

  • hmac (bytes) – HMAC value

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

RVSHMACParameter

Returns:

HIP parameter schema.

_make_param_via_rvs(code, param=None, *, version, address=None, **kwargs)[source]

Make HIP VIA_RVS parameter.

Parameters:
Return type:

ViaRVSParameter

Returns:

HIP parameter schema.

_make_param_relay_hmac(code, param=None, *, version, hmac=b'', **kwargs)[source]

Make HIP RELAY_HMAC parameter.

Parameters:
Return type:

RelayHMACParameter

Returns:

HIP parameter schema.

_make_hip_param_data(meth, code, param, *, version)[source]

Make a HIP parameter from the data model its reader produced.

The parsed parameter goes to meth positionally. Expanding it as keyword arguments instead would drop every field whose constructor keyword is spelled differently – HIP_TRANSFORM keeps its suites in suite_id and _make_param_hip_transform() takes them as suites, so **param left the parameter empty (#2352).

Parameters:
Return type:

Parameter

Returns:

HIP parameter schema.

Added in version 1.5.0.

Type Stubs

class pcapkit.protocols.internet.hip.protocol.Locator[source]

Bases: TypedDict

Locator dictionary type.

traffic: int

Traffic type.

type: int

Locator type.

preferred: bool

Preferred flag.

reserved: NotRequired[int]

Reserved bits of the flags octet.

lifetime: timedelta | int

Lifetime.

ip: IPv6Address | bytes | int | str

IP address.

spi: NotRequired[int]

SPI.

Header Schemas

Removed in version 1.6.0: pcapkit.protocols.schema.internet.hip, with no alias: the module moved here (#2534).

class pcapkit.protocols.internet.hip.schema.HIP(next=NO_VALUE, len=NO_VALUE, pkt=NO_VALUE, ver=NO_VALUE, checksum=NO_VALUE, control=NO_VALUE, shit=NO_VALUE, rhit=NO_VALUE, param=NO_VALUE, payload=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Schema

Header schema for HIP packet.

next: TransType = <EnumField next>

Next header.

len: int = <UInt8Field len>

Header length.

pkt: PacketType = <BitField pkt>

Packet type.

ver: VersionType = <BitField ver>

HIP version.

checksum: bytes = <BytesField checksum>

Checksum.

control: ControlsType = <BitField control>

HIP controls.

shit: int = <NumberField shit>

Sender’s host identity tag.

rhit: int = <NumberField rhit>

Receiver’s host identity tag.

param: list[Parameter] = <OptionField param>

HIP parameters.

payload: bytes = <PayloadField payload>

Payload.

class pcapkit.protocols.internet.hip.schema.Parameter(*args, **kwargs)[source]

Bases: EnumSchema[Parameter]

Base schema for HIP parameters.

type: Parameter = <EnumField type>

Parameter type.

len: int = <UInt16Field len>

Parameter length.

class pcapkit.protocols.internet.hip.schema.UnassignedParameter(type=NO_VALUE, len=NO_VALUE, value=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP unassigned parameters.

value: bytes = <BytesField value>

Parameter value.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.ESPInfoParameter(type=NO_VALUE, len=NO_VALUE, reserved=NO_VALUE, index=NO_VALUE, old_spi=NO_VALUE, new_spi=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ESP_INFO parameters.

Changed in version 1.5.0: reserved is read as an int rather than as zero padding bytes, and written back as given (#1328).

reserved: int = <UInt16Field reserved>

Reserved. RFC 7402 Section 5.1.1 draws it in the diagram but gives it no description in the field list that follows. Read as a value rather than as padding, so that re-serialising a parsed parameter reproduces the octets it arrived with.

index: int = <UInt16Field index>

Key management index.

old_spi: int = <UInt32Field old_spi>

Old SPI.

new_spi: int = <UInt32Field new_spi>

New SPI.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.R1CounterParameter(type=NO_VALUE, len=NO_VALUE, reserved=NO_VALUE, counter=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP R1_COUNTER parameters.

Registered under both codes, not 129 alone. RFC 5201 Section 5.2.3 (HIPv1) and RFC 7401 Section 5.2.3 (HIPv2) give the identical 4 + 8 layout to code 128 (R1_Counter) and code 129 (R1_COUNTER) – one parameter under two numbers, the difference being HIP’s own C-bit rather than an unrelated code – and the field list below is that layout exactly. __parameter__ carries two hand-written entries – not a name-normalisation rule; R1_Counter and R1_COUNTER differ only in case, and each needs its own line – mapping both codes to the same _read_param_r1_counter, and _make_param_r1_counter builds this class for either code. The schema lookup this class’s own code= feeds – consulted on the parse path by OptionField – would fall back to UnassignedParameter for 128 if a single-code code= registered 129 alone and left 128 unclaimed.

reserved: bytes = <PaddingField reserved>

Reserved.

counter: int = <UInt64Field counter>

R1 counter.

Eight octets, not four. RFC 7401 Section 5.2.3 labels the field “R1 generation counter, 8 bytes” in its diagram and then says outright that the parameter “contains a 64-bit unsigned integer in network byte order”, so the width is stated twice and inferred from neither. RFC 5201 Section 5.2.3 gives the same 4 + 8 layout, so there is no version under which four octets is right, and both codes that reach this class – R1_Counter (128, HIPv1) and R1_COUNTER (129) – take the eight. With the four reserved octets the contents are 12 octets, which RFC 7401 Section 5.2.1’s arithmetic pads to a 16-octet record.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.LocatorSetParameter(type=NO_VALUE, len=NO_VALUE, locators=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP LOCATOR_SET parameters.

locators: list[Locator] = <ListField locators>

List of locators.

The length callback is the parameter’s own Length, and that is correct on the unpacking path for the reason LOCATOR_SET_LEN gives – nothing has shadowed len yet when this field is resolved, since type and len are the only fields ahead of it. What matters is the quantity it is handed: RFC 7401 Section 5.2.1’s Length is a byte count, not the 4-octet units RFC 8046 Section 4 gives Locator Length, and _make_param_locator_set() writes it as one. Schema.unpack reads exactly field.length octets off the stream and hands only those to ListField.unpack, so a Length summed from the locators’ Locator Length values would offer a set of n plain IPv6 locators 4n octets of a 24n-octet contents, parse one truncated locator and leave the rest of the record unconsumed. With Length a byte count the budget is the contents, and each locator bills the 8 + Locator Length * 4 octets it actually consumed.

padding: bytes = <PaddingField padding>

Padding.

Not parameter_padding_len(), which every other parameter in this module uses, but locator_set_padding_len() – the same arithmetic read off a snapshot of this parameter’s Length rather than off pkt['len'] directly. LOCATOR_SET_LEN documents why the direct read does not work here: the nested Locator schemas share this parameter’s packet context while they pack, and their own len overwrites it before padding is reached.

The shadowed len is 4 for any IPv6 locator, so a padding read off pkt['len'] directly would append no padding at all whatever the locator count, where a set of plain IPv6 locators needs four octets.

class pcapkit.protocols.internet.hip.schema.Locator(traffic=NO_VALUE, type=NO_VALUE, len=NO_VALUE, flags=NO_VALUE, lifetime=NO_VALUE, value=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Schema

Header schema for HIP locators.

traffic: int = <UInt8Field traffic>

Traffic type.

type: int = <UInt8Field type>

Locator type.

len: int = <UInt8Field len>

Locator length.

flags: LocatorFlags = <BitField flags>

Reserved and flags.

lifetime: int = <UInt32Field lifetime>

Locator lifetime, in seconds.

value: IPv6Address | LocatorData = <SwitchField value>

Locator value.

class pcapkit.protocols.internet.hip.schema.LocatorData(spi=NO_VALUE, ip=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Schema

Header schema for HIP locator data.

spi: int = <UInt32Field spi>

SPI.

ip: IPv6Address = <IPv6AddressField ip>

Locator.

class pcapkit.protocols.internet.hip.schema.PuzzleParameter(type=NO_VALUE, len=NO_VALUE, index=NO_VALUE, lifetime=NO_VALUE, opaque=NO_VALUE, random=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP PUZZLE parameters.

index: int = <UInt8Field index>

Numeric index.

lifetime: int = <UInt8Field lifetime>

Lifetime.

opaque: bytes = <BytesField opaque>

Opaque data.

random: int = <NumberField random>

Random data.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.SolutionParameter(type=NO_VALUE, len=NO_VALUE, index=NO_VALUE, reserved=NO_VALUE, opaque=NO_VALUE, random=NO_VALUE, solution=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP SOLUTION parameters.

Removed in version 1.5.0: lifetime, now reserved: only PUZZLE carries a lifetime (#654).

index: int = <UInt8Field index>

Numeric index.

reserved: int = <UInt8Field reserved>

Reserved octet – “zero when sent, ignored when received” (RFC 7401 Section 5.2.5, and RFC 5201 Section 5.2.5 identically). This octet is not a lifetime: only PUZZLE carries one, at the same offset, and only the PUZZLE section (RFC 7401 Section 5.2.4, and RFC 5201 Section 5.2.4 identically) defines the 2^(value - 32) seconds encoding that goes in it.

opaque: bytes = <BytesField opaque>

Opaque data.

random: int = <NumberField random>

Random data.

solution: int = <NumberField solution>

Solution.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.SEQParameter(type=NO_VALUE, len=NO_VALUE, update_id=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP SEQ parameters.

update_id: int = <UInt32Field update_id>

Update ID.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.ACKParameter(type=NO_VALUE, len=NO_VALUE, update_id=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ACK parameters.

update_id: list[int] = <ListField update_id>

Update ID.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.DHGroupListParameter(type=NO_VALUE, len=NO_VALUE, groups=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP DH_GROUP_LIST parameters.

groups: list[Group] = <ListField groups>

List of DH groups.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.DiffieHellmanParameter(type=NO_VALUE, len=NO_VALUE, group=NO_VALUE, pub_len=NO_VALUE, pub_val=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP DIFFIE_HELLMAN parameters.

group: Group = <EnumField group>

Diffie-Hellman group.

pub_len: int = <UInt16Field pub_len>

Public value length.

pub_val: int = <NumberField pub_val>

Diffie-Hellman value.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.HIPTransformParameter(type=NO_VALUE, len=NO_VALUE, suites=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP HIP_TRANSFORM parameters.

suites: list[Suite] = <ListField suites>

Suite IDs.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.HIPCipherParameter(type=NO_VALUE, len=NO_VALUE, ciphers=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP HIP_CIPHER parameters.

ciphers: list[Cipher] = <ListField ciphers>

Cipher IDs.

padding: bytes = <PaddingField padding>

Padding.

post_process(packet)[source]

Revise schema data after unpacking process.

Parameters:

packet (dict[str, Any]) – Unpacked data.

Return type:

Schema

Returns:

Revised schema.

Note

The cipher IDs are added to the __hip_ciphers__ key of packet, the one context every parameter of the area is unpacked with, for an ENCRYPTED parameter after this one to read its cipher from (see EncryptedParameter.pre_unpack()). The parameters already parsed reach neither that context nor the reader’s options before the whole area is read (#2708).

class pcapkit.protocols.internet.hip.schema.NATTraversalModeParameter(type=NO_VALUE, len=NO_VALUE, reserved=NO_VALUE, modes=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP NAT_TRAVERSAL_MODE parameters.

reserved: bytes = <PaddingField reserved>

Reserved.

modes: list[NATTraversal] = <ListField modes>

NAT traversal modes.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.TransactionPacingParameter(type=NO_VALUE, len=NO_VALUE, min_ta=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP TRANSACTION_PACING parameters.

min_ta: int = <UInt32Field min_ta>

Transaction pacing.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.EncryptedParameter(type=NO_VALUE, len=NO_VALUE, reserved=NO_VALUE, iv=NO_VALUE, data=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ENCRYPTED parameters.

reserved: bytes = <PaddingField reserved>

Reserved.

iv: bytes = <ConditionalField iv>

Initialization vector.

data: bytes = <BytesField data>

Data.

padding: bytes = <PaddingField padding>

Padding.

classmethod pre_unpack(packet)[source]

Prepare packet data for unpacking process.

Parameters:

packet (dict[str, Any]) – packet data

Notes

When packet already carries a resolved cipher – as it does when this schema was built via HIP._make_param_encrypted, which sets it as a plain attribute so pack()’s own packet.update(self.__dict__) carries it in here – that value is trusted over the HIP_CIPHER lookup below.

Otherwise the cipher comes from the cipher IDs that the HIP_CIPHER parameters before this one in the area carry, in order, under __hip_ciphers__ (see HIPCipherParameter.post_process()): the first ENCRYPTED parameter takes the first cipher ID, the next one the next, as __hip_encrypted__ counts them (#2708).

post_process(packet)[source]

Revise schema data after unpacking process.

Parameters:

packet (dict[str, Any]) – Unpacked data.

Return type:

Schema

Returns:

Revised schema.

cipher: Cipher

Cipher ID. Not a schema field – set as a plain attribute, either by post_process() after unpacking, or by HIP._make_param_encrypted before packing – so it is documented here rather than accepted by __init__.

class pcapkit.protocols.internet.hip.schema.HostIDParameter(type=NO_VALUE, len=NO_VALUE, hi_len=NO_VALUE, di_data=NO_VALUE, algorithm=NO_VALUE, hi=NO_VALUE, di=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP HOST_ID parameters.

hi_len: int = <UInt16Field hi_len>

Host ID length.

di_data: DIData = <BitField di_data>

Domain ID type and length.

algorithm: HIAlgorithm = <EnumField algorithm>

Algorithm type.

hi: bytes | HostIdentity = <SwitchField hi>

Host ID.

di: bytes = <BytesField di>

Domain ID.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.HostIdentity(*args, **kwargs)[source]

Bases: EnumSchema[HIAlgorithm]

Host identity schema.

class pcapkit.protocols.internet.hip.schema.ECDSACurveHostIdentity(curve=NO_VALUE, pub_key=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: HostIdentity

Host identity schema with ECDSA curve.

curve: ECDSACurve = <EnumField curve>

Algorithm curve type.

pub_key: bytes = <BytesField pub_key>

Public key.

class pcapkit.protocols.internet.hip.schema.ECDSALowCurveHostIdentity(curve=NO_VALUE, pub_key=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: HostIdentity

Host identity schema with ECDSA_LOW curve.

curve: ECDSALowCurve = <EnumField curve>

Algorithm curve type.

pub_key: bytes = <BytesField pub_key>

Public key.

class pcapkit.protocols.internet.hip.schema.EdDSACurveHostIdentity(curve=NO_VALUE, pub_key=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: HostIdentity

Host identity schema with EdDSA curve.

curve: EdDSACurve = <EnumField curve>

Algorithm curve type.

pub_key: bytes = <BytesField pub_key>

Public key.

class pcapkit.protocols.internet.hip.schema.HITSuiteListParameter(type=NO_VALUE, len=NO_VALUE, suites=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP HIT_SUITE_LIST parameters.

suites: list[HITSuite] = <ListField suites>

HIT suite IDs.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.CertParameter(type=NO_VALUE, len=NO_VALUE, cert_group=NO_VALUE, cert_count=NO_VALUE, cert_id=NO_VALUE, cert_type=NO_VALUE, cert=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP CERT parameters.

cert_group: int = <UInt8Field cert_group>

Certificate group – the “Group ID grouping multiple related CERT parameters” of RFC 8002 Section 2. A plain octet, not a registry value: that section puts the CERT group namespace under local management by the sending host, so there is nothing to look it up in. It was an EnumField over the Diffie-Hellman group registry, which read a group of 7 back as the curve name NIST_P_256. See #2283.

cert_count: int = <UInt8Field cert_count>

Certificate count.

cert_id: int = <UInt8Field cert_id>

Certificate ID.

cert_type: Certificate = <EnumField cert_type>

Certificate type.

cert: bytes = <BytesField cert>

Certificate data.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.NotificationParameter(type=NO_VALUE, len=NO_VALUE, reserved=NO_VALUE, msg_type=NO_VALUE, msg=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP NOTIFICATION parameters.

reserved: bytes = <PaddingField reserved>

Reserved.

msg_type: NotifyMessage = <EnumField msg_type>

Notify message type.

msg: bytes = <BytesField msg>

Notification data.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.EchoRequestSignedParameter(type=NO_VALUE, len=NO_VALUE, opaque=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ECHO_REQUEST_SIGNED parameters.

opaque: bytes = <BytesField opaque>

Opaque data.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.RegInfoParameter(type=NO_VALUE, len=NO_VALUE, min_lifetime=NO_VALUE, max_lifetime=NO_VALUE, reg_info=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP REG_INFO parameters.

min_lifetime: int = <UInt8Field min_lifetime>

Minimum lifetime.

max_lifetime: int = <UInt8Field max_lifetime>

Maximum lifetime.

reg_info: list[Registration] = <ListField reg_info>

Registration types.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.RegRequestParameter(type=NO_VALUE, len=NO_VALUE, lifetime=NO_VALUE, reg_request=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP REG_REQUEST parameters.

lifetime: int = <UInt8Field lifetime>

Lifetime.

reg_request: list[Registration] = <ListField reg_request>

Registration types.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.RegResponseParameter(type=NO_VALUE, len=NO_VALUE, lifetime=NO_VALUE, reg_response=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP REG_RESPONSE parameters.

lifetime: int = <UInt8Field lifetime>

Lifetime.

reg_response: list[Registration] = <ListField reg_response>

Registration types.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.RegFailedParameter(type=NO_VALUE, len=NO_VALUE, failure_type=NO_VALUE, reg_failed=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP REG_FAILED parameters.

failure_type: RegistrationFailure = <EnumField failure_type>

Registration failure type.

reg_failed: list[Registration] = <ListField reg_failed>

Registration types.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.RegFromParameter(type=NO_VALUE, len=NO_VALUE, port=NO_VALUE, protocol=NO_VALUE, reserved=NO_VALUE, address=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP REG_FROM parameters.

port: int = <UInt16Field port>

Port.

protocol: TransType = <EnumField protocol>

Protocol.

reserved: bytes = <PaddingField reserved>

Reserved.

address: IPv6Address = <IPv6AddressField address>

Address.

class pcapkit.protocols.internet.hip.schema.EchoResponseSignedParameter(type=NO_VALUE, len=NO_VALUE, opaque=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ECHO_RESPONSE_SIGNED parameters.

opaque: bytes = <BytesField opaque>

Opaque data.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.TransportFormatListParameter(type=NO_VALUE, len=NO_VALUE, formats=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP TRANSPORT_FORMAT_LIST parameters.

formats: list[Parameter] = <ListField formats>

Transport formats.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.ESPTransformParameter(type=NO_VALUE, len=NO_VALUE, reserved=NO_VALUE, suites=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ESP_TRANSFORM parameters.

reserved: bytes = <PaddingField reserved>

Reserved.

suites: list[ESPTransformSuite] = <ListField suites>

Suite IDs.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.SeqDataParameter(type=NO_VALUE, len=NO_VALUE, seq=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP SEQ_DATA parameters.

seq: int = <UInt32Field seq>

Sequence number.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.AckDataParameter(type=NO_VALUE, len=NO_VALUE, ack=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ACK_DATA parameters.

ack: list[int] = <ListField ack>

Acked sequence number.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.PayloadMICParameter(type=NO_VALUE, len=NO_VALUE, next=NO_VALUE, reserved=NO_VALUE, payload=NO_VALUE, mic=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP PAYLOAD_MIC parameters.

next: TransType = <EnumField next>

Next header.

reserved: bytes = <PaddingField reserved>

Reserved.

payload: bytes = <BytesField payload>

Payload data.

mic: bytes = <BytesField mic>

MIC value.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.TransactionIDParameter(type=NO_VALUE, len=NO_VALUE, id=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP TRANSACTION_ID parameters.

id: int = <NumberField id>

Transaction ID.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.OverlayIDParameter(type=NO_VALUE, len=NO_VALUE, id=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP OVERLAY_ID parameters.

id: int = <NumberField id>

Overlay ID.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.RouteDstParameter(type=NO_VALUE, len=NO_VALUE, flags=NO_VALUE, reserved=NO_VALUE, hit=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ROUTE_DST parameters.

flags: RouteFlags = <BitField flags>

Flags.

reserved: bytes = <PaddingField reserved>

Reserved.

hit: list[IPv6Address] = <ListField hit>

HIT addresses.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.HIPTransportModeParameter(type=NO_VALUE, len=NO_VALUE, port=NO_VALUE, mode=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP HIP_TRANSPORT_MODE parameters.

port: int = <UInt16Field port>

Port.

mode: list[Transport] = <ListField mode>

Mode IDs.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.HIPMACParameter(type=NO_VALUE, len=NO_VALUE, hmac=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP HIP_MAC parameters.

hmac: bytes = <BytesField hmac>

HMAC value.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.HIPMAC2Parameter(type=NO_VALUE, len=NO_VALUE, hmac=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP HIP_MAC_2 parameters.

hmac: bytes = <BytesField hmac>

HMAC value.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.HIPSignature2Parameter(type=NO_VALUE, len=NO_VALUE, algorithm=NO_VALUE, signature=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP HIP_SIGNATURE_2 parameters.

algorithm: HIAlgorithm = <EnumField algorithm>

Signature algorithm.

signature: bytes = <BytesField signature>

Signature value.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.HIPSignatureParameter(type=NO_VALUE, len=NO_VALUE, algorithm=NO_VALUE, signature=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP HIP_SIGNATURE parameters.

algorithm: HIAlgorithm = <EnumField algorithm>

Signature algorithm.

signature: bytes = <BytesField signature>

Signature value.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.EchoRequestUnsignedParameter(type=NO_VALUE, len=NO_VALUE, opaque=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ECHO_REQUEST_UNSIGNED parameters.

opaque: bytes = <BytesField opaque>

Opaque data.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.EchoResponseUnsignedParameter(type=NO_VALUE, len=NO_VALUE, opaque=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ECHO_RESPONSE_UNSIGNED parameters.

opaque: bytes = <BytesField opaque>

Opaque data.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.RelayFromParameter(type=NO_VALUE, len=NO_VALUE, port=NO_VALUE, protocol=NO_VALUE, reserved=NO_VALUE, address=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP RELAY_FROM parameters.

port: int = <UInt16Field port>

Port.

protocol: TransType = <EnumField protocol>

Protocol.

reserved: bytes = <PaddingField reserved>

Reserved.

address: IPv6Address = <IPv6AddressField address>

Address.

class pcapkit.protocols.internet.hip.schema.RelayToParameter(type=NO_VALUE, len=NO_VALUE, port=NO_VALUE, protocol=NO_VALUE, reserved=NO_VALUE, address=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP RELAY_TO parameters.

port: int = <UInt16Field port>

Port.

protocol: TransType = <EnumField protocol>

Protocol.

reserved: bytes = <PaddingField reserved>

Reserved.

address: IPv6Address = <IPv6AddressField address>

Address.

class pcapkit.protocols.internet.hip.schema.OverlayTTLParameter(type=NO_VALUE, len=NO_VALUE, ttl=NO_VALUE, reserved=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP OVERLAY_TTL parameters.

ttl: int = <UInt16Field ttl>

TTL value.

reserved: bytes = <PaddingField reserved>

Reserved.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.RouteViaParameter(type=NO_VALUE, len=NO_VALUE, flags=NO_VALUE, reserved=NO_VALUE, hit=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP ROUTE_VIA parameters.

flags: RouteFlags = <BitField flags>

Flags.

reserved: bytes = <PaddingField reserved>

Reserved.

hit: list[IPv6Address] = <ListField hit>

HIT addresses.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.FromParameter(type=NO_VALUE, len=NO_VALUE, address=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP FROM parameters.

address: IPv6Address = <IPv6AddressField address>

Address.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.RVSHMACParameter(type=NO_VALUE, len=NO_VALUE, hmac=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP RVS_HMAC parameters.

hmac: bytes = <BytesField hmac>

HMAC value.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.ViaRVSParameter(type=NO_VALUE, len=NO_VALUE, address=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP VIA_RVS parameters.

address: list[IPv6Address] = <ListField address>

Address.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.internet.hip.schema.RelayHMACParameter(type=NO_VALUE, len=NO_VALUE, hmac=NO_VALUE, padding=NO_VALUE, *, __packet__=None, **kwargs)[source]

Bases: Parameter

Header schema for HIP RELAY_HMAC parameters.

hmac: bytes = <BytesField hmac>

HMAC value.

padding: bytes = <PaddingField padding>

Padding.

Type Stubs

class pcapkit.protocols.internet.hip.schema.PacketType[source]

Bases: TypedDict

Packet type.

bit_0: int

Fixed bit, 0 when sent and ignored on receipt.

type: int

Packet type.

class pcapkit.protocols.internet.hip.schema.VersionType[source]

Bases: TypedDict

Version type.

version: int

Version.

reserved: int

Reserved bits.

bit_1: int

Fixed bit, 1 when sent and ignored on receipt.

class pcapkit.protocols.internet.hip.schema.ControlsType[source]

Bases: TypedDict

Controls type.

anonymous: bool

Anonymous.

reserved: int

Reserved bits.

class pcapkit.protocols.internet.hip.schema.LocatorFlags[source]

Bases: TypedDict

Locator flags.

reserved: int

Reserved bits.

preferred: bool

Preferred flag.

class pcapkit.protocols.internet.hip.schema.DIData[source]

Bases: TypedDict

DI type data.

type: DITypes

DI type.

len: int

DI length.

class pcapkit.protocols.internet.hip.schema.RouteFlags[source]

Bases: TypedDict

Route destination flags.

symmetric: int

Symmetric flag.

must_follow: int

Must-follow flag.

reserved: int

Reserved bits.

Auxiliary Functions

pcapkit.protocols.internet.hip.schema.locator_value_selector(pkt)[source]

Selector function for Locator.value field.

Parameters:

pkt (dict[str, Any]) – Packet data.

Return type:

FieldBase

Returns:

The field for the locator, chosen by its type and length.

  • If type is 0 and len is 4, i.e. a 16-octet locator, returns an IPv6AddressField instance.

  • If type is 1 and len is 5, i.e. a 20-octet locator, returns a SchemaField wrapped LocatorData instance.

Raises:

FieldValueError – For any other locator type and length.

pcapkit.protocols.internet.hip.schema.host_id_hi_selector(pkt)[source]

Selector function for HostIDParameter.hi field.

Parameters:

pkt (dict[str, Any]) – Packet data.

Return type:

FieldBase

Returns:

The field for the host identity, chosen by its algorithm.

pcapkit.protocols.internet.hip.schema.registration_type_list_len(pkt)[source]

Return registration type list length.

Used by the reg_request, reg_response and reg_failed fields of RegRequestParameter, RegResponseParameter and RegFailedParameter respectively, each of which follows a single prefix octet (the lifetime of the first two, the failure_type of the last) with a list of registration type octets sized by the remainder of the parameter.

Parameters:

pkt (dict[str, Any]) – Parameter unpacked schema.

Return type:

int

Returns:

Registration type list length.

Raises:

FieldValueError – If the parameter’s Length on the wire is too short to hold the prefix octet already read, which would otherwise underflow the list length below zero.

pcapkit.protocols.internet.hip.schema.reg_info_list_len(pkt)[source]

Return REG_INFO registration type list length.

Used by the reg_info field of RegInfoParameter, which follows a pair of min_lifetime and max_lifetime octets with a list of registration type octets sized by the remainder of the parameter.

Parameters:

pkt (dict[str, Any]) – Parameter unpacked schema.

Return type:

int

Returns:

Registration type list length.

Raises:

FieldValueError – If the parameter’s Length on the wire is too short to hold the min_lifetime and max_lifetime octets already read, which would otherwise underflow the list length below zero.

pcapkit.protocols.internet.hip.schema.two_octet_prefix_list_len(pkt)[source]

Return list length for a parameter with a two-octet prefix.

Used by the modes, suites and mode fields of NATTraversalModeParameter, ESPTransformParameter and HIPTransportModeParameter respectively, each of which follows a two-octet reserved or port field with a list of items sized by the remainder of the parameter.

TransportFormatListParameter is not a call site: see transport_format_list_len() for why it has no such prefix to subtract.

Parameters:

pkt (dict[str, Any]) – Parameter unpacked schema.

Return type:

int

Returns:

List length.

Raises:

FieldValueError – If the parameter’s Length on the wire is too short to hold the two octets already read, which would otherwise underflow the list length below zero.

pcapkit.protocols.internet.hip.schema.transport_format_list_len(pkt)[source]

Return TRANSPORT_FORMAT_LIST transport format list length.

Used by the formats field of TransportFormatListParameter. Unlike two_octet_prefix_list_len()’s call sites, this parameter has no reserved or port field between Length and the list: RFC 7401 Section 5.2.11 defines Length as literally “2x number of TF types” and places the list directly after it –

|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          TF type #1           |           TF type #2          /

– so the list’s byte length is Length, with nothing to subtract. Subtracting 2 anyway, as the genuine two-octet-prefix sites do, would drop the trailing two octets of every non-empty list on parse, and reject the parameter’s own legitimate empty-list encoding (Length = 0, formats = []) as malformed.

“2x number of TF types” also fixes each TF type entry’s own width at two octets – the same width the base Parameter class uses for its own type field, since a TF type is a HIP parameter type number – which is why formats’ item_type is EnumField(length=2, ...), the width of the items at every one of two_octet_prefix_list_len()’s call sites as well. This function only answers how many bytes the list occupies; getting that number right and the item width wrong – one octet instead of two – would still corrupt every non-empty list, just by reading twice as many entries as the wire holds instead of dropping octets.

Parameters:

pkt (dict[str, Any]) – Parameter unpacked schema.

Return type:

int

Returns:

Transport format list length.

Raises:

FieldValueError – If the parameter’s Length on the wire is negative. This cannot happen from real wire bytes – len is an unsigned 16-bit field – but a caller constructing the schema directly, bypassing _make_param_transport_format_list(), could still pass one; this keeps that path to the same floor-and-raise discipline as two_octet_prefix_list_len().

pcapkit.protocols.internet.hip.schema.encrypted_data_len(pkt)[source]

Return ENCRYPTED encrypted-data length.

Used by the data field of EncryptedParameter, which follows a four-octet reserved field and a conditional sixteen-octet iv with the ciphertext, sized by the remainder of the parameter. RFC 7401 Section 5.2.18 puts all three inside Length –

|             Type              |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                              IV                               |
/                                                               /
/                       Encrypted data                          /

– so both have to come off Length to leave the data, and _make_param_encrypted() writes len=4 + len(iv) + len(data) to match.

Parameters:

pkt (dict[str, Any]) – Parameter unpacked schema.

Return type:

int

Returns:

Encrypted data length.

Raises:

FieldValueError – If the parameter’s Length on the wire is too short to hold the reserved octets, and the iv octets where a cipher that carries one was resolved – which would otherwise underflow the data length below zero.

pcapkit.protocols.internet.hip.schema.parameter_total_len(length)[source]

Return the total on-wire length of a HIP parameter.

RFC 7401 Section 5.2.1 states the arithmetic outright, so there is nothing here to infer from the diagram –

All of the encoded TLV parameters have a length (that includes the
Type and Length fields), which is a multiple of 8 bytes.  When
needed, padding MUST be added to the end of the parameter so that the
total length is a multiple of 8 bytes.

Total Length = 11 + Length - (Length + 3) % 8;

– which is 4 + Length, the header and the contents, padded to the next multiple of eight. This function spells it that way, through pad_length(); the two agree at every Length.

The distinction that matters is which quantity gets aligned. Length is “Length of the Contents, in bytes, excluding Type, Length, and Padding”, and it is the total – contents plus the four octets of Type and Length plus padding – that must land on a multiple of eight. Aligning the contents alone would put every parameter at 4 (mod 8) for every possible Length: never a multiple of eight and never the length the RFC gives. It is not even a consistent offset, because the two formulas disagree in both directions – at Length = 4 (a whole SEQ) the contents are already 8-aligned with the header, so the RFC requires no padding at all and aligning the contents would append four octets that must not be there; at Length = 8 the contents are 8-aligned on their own, so aligning them would append nothing and leave the record four octets short.

Parameters:

length (int) – The parameter’s Length field, i.e. its contents length in octets, excluding Type, Length and Padding.

Return type:

int

Returns:

Total length of the parameter in octets, including Type, Length, Contents and Padding. Always a multiple of eight.

Raises:

FieldValueError – If length is negative. This cannot happen from real wire bytes – len is an unsigned 16-bit field – but a caller constructing a schema directly could still pass one, and the RFC formula is meaningless there: it would answer 8 for Length = -1, a “total” smaller than the four-octet header alone. Raising keeps this to the same floor-and-raise discipline as two_octet_prefix_list_len().

pcapkit.protocols.internet.hip.schema.parameter_padding_len(pkt)[source]

Return the number of padding octets a HIP parameter needs.

Used by the padding field of every parameter schema in this module. The count is whatever parameter_total_len() leaves over once the four-octet Type and Length header and the Length octets of contents are accounted for, which RFC 7401 Section 5.2.1 bounds at “0-7 bytes”.

This is one function shared by every parameter rather than a lambda repeated per class, so the RFC’s arithmetic is stated in one place.

Parameters:

pkt (dict[str, Any]) – Parameter unpacked schema.

Return type:

int

Returns:

Padding length in octets, between 0 and 7 inclusive.

Raises:

FieldValueError – If the parameter’s Length on the wire is negative; see parameter_total_len().

pcapkit.protocols.internet.hip.schema.locator_set_len_callback(field, pkt)[source]

Snapshot LOCATOR_SET’s own Length before its locators shadow it.

Installed as the callback of LocatorSetParameter.locators, which ListField.__call__ runs when the field is resolved against the packet – i.e. before any nested Locator has been packed into it. See LOCATOR_SET_LEN for why the snapshot is needed at all.

Parameters:
  • field (ListField) – The field being resolved. Unused; the signature is ListField’s.

  • pkt (dict[str, Any]) – Parameter unpacked schema, modified in place.

pcapkit.protocols.internet.hip.schema.locator_set_padding_len(pkt)[source]

Return the number of padding octets a LOCATOR_SET parameter needs.

The same arithmetic as parameter_padding_len() – it defers to it rather than repeating it – but read off the snapshot locator_set_len_callback() took, for the reason LOCATOR_SET_LEN gives.

Parameters:

pkt (dict[str, Any]) – Parameter unpacked schema.

Return type:

int

Returns:

Padding length in octets, between 0 and 7 inclusive.

Raises:

FieldValueError – If the parameter’s Length on the wire is negative; see parameter_total_len().

pcapkit.protocols.internet.hip.schema.LOCATOR_SET_LEN = '__locator_set_len__'

Packet-context key under which LocatorSetParameter keeps its own Length for the benefit of locator_set_padding_len().

It exists because the contents of LOCATOR_SET are a ListField of nested schemas, and a nested schema packed through one shares the enclosing packet context: Schema.pack opens with packet.update(self.__dict__), and Locator declares a len of its own. So by the time padding is evaluated – after the list, since fields are packed in declaration order – pkt['len'] is the last locator’s len, not the parameter’s – 4 for any IPv6 locator, whatever the locator count.

The shadowing is specific to the packing path. Schema.unpack hands each field packet.copy(), so nested writes do not propagate back and pkt['len'] stays the parameter’s there. Snapshotting under a key no nested schema declares is what makes one callback correct on both paths rather than accidentally correct on one.

Data Models

Removed in version 1.6.0: pcapkit.protocols.data.internet.hip, with no alias: the module moved here (#2534).

class pcapkit.protocols.internet.hip.data.HIP(next, length, type, packet_fixed, version, reserved, version_fixed, chksum, control, shit, rhit)[source]

Bases: Protocol

Data model for HIP header.

Changed in version 1.5.0: New required fields packet_fixed, reserved and version_fixed (#1417, #1459), and parameters is an immutable OrderedMultiInfo rather than an OrderedMultiDict (#1484).

next: TransType

Next header.

length: int

Header length.

type: Packet

Packet type.

packet_fixed: int

Fixed bit – the leading bit of the Packet Type octet, sent as 0 and ignored on receipt (RFC 7401 Section 5.1), carried verbatim so that re-serialising reproduces it.

version: int

Version.

reserved: int

Reserved bits – the three bits between Version and the fixed low-order bit, carried verbatim so that re-serialising reproduces them.

version_fixed: int

Fixed bit – the low-order bit of the Version octet, sent as 1 and ignored on receipt (RFC 7401 Section 5.1), carried verbatim so that re-serialising reproduces it.

chksum: bytes

Checksum.

control: Control

Control.

shit: int

Sender’s host identity tag.

rhit: int

Receiver’s host identity tag.

parameters: OrderedMultiInfo[Parameter, Parameter]

HIP parameters.

class pcapkit.protocols.internet.hip.data.Control(anonymous, reserved)[source]

Bases: Data

Data model for HIP controls.

Changed in version 1.5.0: New required field reserved (#1328).

anonymous: bool

Anonymous flag.

reserved: int

Reserved bits – the 15 high-order bits of Controls, carried verbatim so that re-serialising reproduces them.

class pcapkit.protocols.internet.hip.data.Parameter(*args, **kwargs)[source]

Bases: Data

Data model for HIP parameter data.

type: Parameter

Parameter type.

critical: bool

Critical flag.

length: int

Parameter length, in octets – the whole record, including Type, Length and Padding (RFC 7401 Section 5.2.1).

padding: bytes

Trailing padding octets, as captured; present only when they are not all zeros.

class pcapkit.protocols.internet.hip.data.UnassignedParameter(type, critical, length, contents)[source]

Bases: Parameter

Data model for unassigned parameter.

contents: bytes

Content.

class pcapkit.protocols.internet.hip.data.ESPInfoParameter(type, critical, length, reserved, index, old_spi, new_spi)[source]

Bases: Parameter

Data model for HIP ESP_INFO parameter.

Changed in version 1.5.0: New required field reserved (#1328).

reserved: int

Reserved octets, carried verbatim so that re-serialising reproduces them.

index: int

KEYMAT index.

old_spi: int

Old SPI.

new_spi: int

New SPI.

class pcapkit.protocols.internet.hip.data.R1CounterParameter(type, critical, length, reserved, counter)[source]

Bases: Parameter

Data model for HIP R1_COUNTER parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The four reserved octets, as captured.

counter: int

R1 counter.

class pcapkit.protocols.internet.hip.data.LocatorSetParameter(type, critical, length, locator_set)[source]

Bases: Parameter

Data model for HIP LOCATOR_SET parameter.

locator_set: tuple[Locator, ...]

Locator set.

class pcapkit.protocols.internet.hip.data.Locator(traffic, type, length, preferred, reserved, lifetime, locator)[source]

Bases: Data

Data model for HIP locator.

Changed in version 1.5.0: New required field reserved (#1365).

traffic: int

Traffic.

type: int

Locator type.

length: int

Locator length.

preferred: bool

Preferred flag.

reserved: int

Reserved bits – the 7 high-order bits of the flags octet, carried verbatim so that re-serialising reproduces them.

lifetime: timedelta

Locator lifetime.

locator: LocatorData | IPv6Address

Locator data.

class pcapkit.protocols.internet.hip.data.LocatorData(spi, ip)[source]

Bases: Data

Data model for HIP locator data.

spi: int

SPI.

ip: IPv6Address

IP address.

class pcapkit.protocols.internet.hip.data.PuzzleParameter(type, critical, length, index, lifetime_exponent, lifetime, opaque, random, rhash_len)[source]

Bases: Parameter

Data model for HIP PUZZLE parameter.

Changed in version 1.5.0: New required fields lifetime_exponent and rhash_len (#653, #1323), and lifetime is None past datetime.timedelta.max (#1323).

index: int

Numeric index.

lifetime_exponent: int

The Lifetime octet as it appears on the wire. RFC 7401 Section 5.2.4 defines the lifetime as 2^(value - 32) seconds, and this is value. It is what re-serialising writes back, since most of the 256 octets have no exact timedelta.

lifetime: timedelta | None

Lifetime, derived from lifetime_exponent to timedelta’s microsecond resolution, so octets below 12 read as timedelta(0). None for octets of 79 and above, whose duration exceeds datetime.timedelta.max.

opaque: bytes

Puzzle data.

random: int

Random number.

rhash_len: int

On-wire width of random, in bits – RHASH_len in RFC 7401 Section 2.3 terms, which RFC 7401 Section 5.2.4 makes the exact width of Random #I. Declared rather than recomputed from int.bit_length(), which cannot see a leading zero octet: without it a parameter read with Length = 12 re-serialised as Length = 5. See #653.

class pcapkit.protocols.internet.hip.data.SolutionParameter(type, critical, length, index, reserved, opaque, random, solution, rhash_len)[source]

Bases: Parameter

Data model for HIP SOLUTION parameter.

Changed in version 1.5.0: New required field rhash_len (#653).

Removed in version 1.5.0: lifetime, now reserved: only PUZZLE carries a lifetime (#654).

index: int

Numeric index.

reserved: int

Reserved octet – “zero when sent, ignored when received” (RFC 7401 Section 5.2.5, and RFC 5201 Section 5.2.5 identically). Carried verbatim rather than interpreted, so that re-serialising a parsed parameter reproduces the octet it arrived with. It is not a Lifetime: only PUZZLE has one (RFC 7401 Section 5.2.4), and reading it as one would leave the conformant 0x00 impossible to re-serialise. See #654.

opaque: bytes

Solution data.

random: int

Random number.

solution: int

Puzzle solution.

rhash_len: int

On-wire width of random and of solution – which are equal and each RHASH_len / 8 octets – in bits. RHASH_len in RFC 7401 Section 2.3 terms; RFC 7401 Section 5.2.5 makes it the exact width of both fields. Declared rather than recomputed from int.bit_length(), which cannot see a leading zero octet: without it a parameter read with Length = 20 re-serialised as Length = 6. See #653.

class pcapkit.protocols.internet.hip.data.SEQParameter(type, critical, length, id)[source]

Bases: Parameter

Data model for HIP SEQ parameter.

id: int

Update ID.

class pcapkit.protocols.internet.hip.data.ACKParameter(type, critical, length, update_id)[source]

Bases: Parameter

Data model for HIP ACK parameter.

update_id: tuple[int, ...]

Peer update IDs.

class pcapkit.protocols.internet.hip.data.DHGroupListParameter(type, critical, length, group_id)[source]

Bases: Parameter

Data model for HIP DH_GROUP_LIST parameter.

group_id: tuple[Group, ...]

DH group list.

class pcapkit.protocols.internet.hip.data.DiffieHellmanParameter(type, critical, length, group_id, pub_len, pub_val)[source]

Bases: Parameter

Data model for HIP DIFFIE_HELLMAN parameter.

group_id: Group

Group ID.

pub_len: int

Public value length.

pub_val: int

Public value.

class pcapkit.protocols.internet.hip.data.HIPTransformParameter(type, critical, length, suite_id)[source]

Bases: Parameter

Data model for HIP HIP_TRANSFORM parameter.

suite_id: tuple[Suite, ...]

Suite IDs.

class pcapkit.protocols.internet.hip.data.HIPCipherParameter(type, critical, length, cipher_id)[source]

Bases: Parameter

Data model for HIP HIP_CIPHER parameter.

cipher_id: tuple[Cipher, ...]

Cipher IDs.

class pcapkit.protocols.internet.hip.data.NATTraversalModeParameter(type, critical, length, reserved, mode_id)[source]

Bases: Parameter

Data model for HIP NAT_TRAVERSAL_MODE parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The two reserved octets, as captured.

mode_id: tuple[NATTraversal, ...]

Mode IDs.

class pcapkit.protocols.internet.hip.data.TransactionPacingParameter(type, critical, length, min_ta)[source]

Bases: Parameter

Data model for HIP TRANSACTION_PACING parameter.

min_ta: int

Min TA.

class pcapkit.protocols.internet.hip.data.EncryptedParameter(type, critical, length, reserved, cipher, iv, data)[source]

Bases: Parameter

Data model for HIP ENCRYPTED parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The four reserved octets, as captured.

cipher: Cipher

Cipher ID.

iv: bytes | None

Initialization vector.

data: bytes

Encrypted data.

class pcapkit.protocols.internet.hip.data.HostIDParameter(type, critical, length, hi_len, di_type, di_len, algorithm, hi, di)[source]

Bases: Parameter

Data model for HIP HOST_ID parameter.

hi_len: int

Host identity length.

di_type: DITypes

Domain identifier type.

di_len: int

Domain identifier length.

algorithm: HIAlgorithm

Algorithm type.

hi: HostIdentity | bytes

Host identity.

di: bytes

Domain identifier.

class pcapkit.protocols.internet.hip.data.HostIdentity(curve, pubkey)[source]

Bases: Data

Data model for host identity.

curve: ECDSACurve | ECDSALowCurve | EdDSACurve

Curve type.

pubkey: bytes

Public key.

class pcapkit.protocols.internet.hip.data.HITSuiteListParameter(type, critical, length, suite_id)[source]

Bases: Parameter

Data model for HIP HIT_SUITE_LIST parameter.

suite_id: tuple[HITSuite, ...]

Suite IDs.

class pcapkit.protocols.internet.hip.data.CertParameter(type, critical, length, cert_group, cert_count, cert_id, cert_type, cert)[source]

Bases: Parameter

Data model for HIP CERT parameter.

Changed in version 1.5.0: cert_group is an int rather than a Group (#2283).

cert_group: int

Certificate group – RFC 8002 Section 2’s “Group ID grouping multiple related CERT parameters”. An arbitrary number, since that section leaves the CERT group namespace to each sending host, so no registry stands behind it.

cert_count: int

Certificate count.

cert_id: int

Certificate ID.

cert_type: Certificate

Certificate type.

cert: bytes

Certificate.

class pcapkit.protocols.internet.hip.data.NotificationParameter(type, critical, length, reserved, msg_type, msg)[source]

Bases: Parameter

Data model for HIP NOTIFICATION parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The two reserved octets, as captured.

msg_type: NotifyMessage

Notify message type.

msg: bytes

Notification data.

class pcapkit.protocols.internet.hip.data.EchoRequestSignedParameter(type, critical, length, opaque)[source]

Bases: Parameter

Data model for HIP ECHO_REQUEST_SIGNED parameter.

opaque: bytes

Opaque data.

class pcapkit.protocols.internet.hip.data.RegInfoParameter(type, critical, length, lifetime, reg_type)[source]

Bases: Parameter

Data model for HIP REG_INFO parameter.

Changed in version 1.5.0: lifetime carries the raw octets alongside the durations, and the durations follow RFC 8003 Section 4.1 – see Lifetime (#2281).

lifetime: Lifetime

Registration lifetime.

reg_type: tuple[Registration, ...]

Registration type.

class pcapkit.protocols.internet.hip.data.Lifetime(min_exponent, max_exponent, min, max)[source]

Bases: Data

Data model for registration lifetime.

Changed in version 1.5.0: New required fields min_exponent and max_exponent, and min and max follow RFC 8003 Section 4.1’s exponential encoding rather than reading the octet as a count of seconds (#2281).

min_exponent: int

The Min Lifetime octet as it appears on the wire. It is what re-serialising writes back, since most of the 256 octets have no exact timedelta.

max_exponent: int

The Max Lifetime octet as it appears on the wire.

min: timedelta

Minimum lifetime, decoded from min_exponent per RFC 8003 Section 4.1.

max: timedelta

Maximum lifetime, decoded from max_exponent per RFC 8003 Section 4.1.

class pcapkit.protocols.internet.hip.data.RegRequestParameter(type, critical, length, lifetime_exponent, lifetime, reg_type)[source]

Bases: Parameter

Data model for HIP REG_REQUEST parameter.

Changed in version 1.5.0: New required field lifetime_exponent, and lifetime follows RFC 8003 Section 4.1’s exponential encoding rather than reading the octet as a count of seconds (#2281).

lifetime_exponent: int

The Lifetime octet as it appears on the wire. RFC 8003 Section 4.1 makes a non-zero octet an exponent standing for 2^((lifetime - 64)/8) seconds, and this is that octet. It is what re-serialising writes back, since most of the 256 octets have no exact timedelta.

lifetime: timedelta

Registration lifetime, decoded from lifetime_exponent per RFC 8003 Section 4.1.

reg_type: tuple[Registration, ...]

Registration type.

class pcapkit.protocols.internet.hip.data.RegResponseParameter(type, critical, length, lifetime_exponent, lifetime, reg_type)[source]

Bases: Parameter

Data model for HIP REG_RESPONSE parameter.

Changed in version 1.5.0: New required field lifetime_exponent, and lifetime follows RFC 8003 Section 4.1’s exponential encoding rather than reading the octet as a count of seconds (#2281).

lifetime_exponent: int

The Lifetime octet as it appears on the wire, for the reason RegRequestParameter.lifetime_exponent gives.

lifetime: timedelta

Registration lifetime, decoded from lifetime_exponent per RFC 8003 Section 4.1.

reg_type: tuple[Registration, ...]

Registration type.

class pcapkit.protocols.internet.hip.data.RegFailedParameter(type, critical, length, failure_type, reg_type)[source]

Bases: Parameter

Data model for HIP REG_FAILED parameter.

Changed in version 1.5.0: lifetime is replaced by failure_type, with no alias, and reg_type holds Registration values: REG_FAILED carries a Failure Type octet ahead of its registration types and no lifetime (RFC 8003 Section 4.5, #2309).

failure_type: RegistrationFailure

Registration failure type.

reg_type: tuple[Registration, ...]

Registration types that failed with failure_type.

class pcapkit.protocols.internet.hip.data.RegFromParameter(type, critical, length, reserved, port, protocol, address)[source]

Bases: Parameter

Data model for HIP REG_FROM parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The reserved octet, as captured.

port: int

Port.

protocol: TransType

Protocol.

address: IPv6Address

Address.

class pcapkit.protocols.internet.hip.data.EchoResponseSignedParameter(type, critical, length, opaque)[source]

Bases: Parameter

Data model for HIP ECHO_RESPONSE_SIGNED parameter.

opaque: bytes

Opaque data.

class pcapkit.protocols.internet.hip.data.TransportFormatListParameter(type, critical, length, tf_type)[source]

Bases: Parameter

Data model for HIP TRANSPORT_FORMAT_LIST parameter.

tf_type: tuple[Parameter, ...]

Transport format list.

class pcapkit.protocols.internet.hip.data.ESPTransformParameter(type, critical, length, reserved, suite_id)[source]

Bases: Parameter

Data model for HIP ESP_TRANSFORM parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The two reserved octets, as captured.

suite_id: tuple[ESPTransformSuite, ...]

ESP transform.

class pcapkit.protocols.internet.hip.data.SeqDataParameter(type, critical, length, seq)[source]

Bases: Parameter

Data model for HIP SEQ_DATA parameter.

seq: int

Sequence number.

class pcapkit.protocols.internet.hip.data.AckDataParameter(type, critical, length, ack)[source]

Bases: Parameter

Data model for HIP ACK_DATA parameter.

ack: tuple[int, ...]

Acknowledged sequence number.

class pcapkit.protocols.internet.hip.data.PayloadMICParameter(type, critical, length, reserved, next, payload, mic)[source]

Bases: Parameter

Data model for HIP PAYLOAD_MIC parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The three reserved octets, as captured.

next: TransType

Next header.

payload: bytes

Payload data.

mic: bytes

MIC value.

class pcapkit.protocols.internet.hip.data.TransactionIDParameter(type, critical, length, id, id_len)[source]

Bases: Parameter

Data model for HIP TRANSACTION_ID parameter.

Changed in version 1.5.0: New required field id_len (#2271).

id: int

Identifier.

id_len: int

On-wire width of id, in octets – the parameter’s own Length, which RFC 6078 Section 4.4 gives as the “Length of the Identifier, in octets” for what is otherwise an opaque value. Declared rather than recomputed from int.bit_length(), which cannot see a leading zero octet: without it a parameter read with Length = 4 re-serialised as Length = 1. Same class of bug as #653; see #2271.

class pcapkit.protocols.internet.hip.data.OverlayIDParameter(type, critical, length, id, id_len)[source]

Bases: Parameter

Data model for HIP OVERLAY_ID parameter.

Changed in version 1.5.0: New required field id_len (#2271).

id: int

Identifier.

id_len: int

On-wire width of id, in octets – the parameter’s own Length, which RFC 6079 Section 6.1 gives as the “Length of the Identifier, in octets” for what is otherwise an opaque value. Declared for the reason TransactionIDParameter.id_len gives. See #2271.

class pcapkit.protocols.internet.hip.data.RouteDstParameter(type, critical, length, reserved, flags, hit)[source]

Bases: Parameter

Data model for HIP ROUTE_DST parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The two reserved octets, as captured.

flags: Flags

Flags.

hit: tuple[IPv6Address, ...]

Destination HITs.

class pcapkit.protocols.internet.hip.data.Flags(symmetric, must_follow, reserved)[source]

Bases: Data

Data model for the flags in HIP ROUTE_DST and ROUTE_VIA parameters.

Changed in version 1.5.0: New required field reserved (#1417).

symmetric: bool

Symmetric flag.

must_follow: bool

Must follow flag.

reserved: int

Reserved bits – the 14 low-order bits of Flags, carried verbatim so that re-serialising reproduces them.

class pcapkit.protocols.internet.hip.data.HIPTransportModeParameter(type, critical, length, port, mode_id)[source]

Bases: Parameter

Data model for HIP HIP_TRANSPORT_MODE parameter.

port: int

Port.

mode_id: tuple[Transport, ...]

Mode IDs.

class pcapkit.protocols.internet.hip.data.HIPMACParameter(type, critical, length, hmac)[source]

Bases: Parameter

Data model for HIP HIP_MAC parameter.

hmac: bytes

HMAC value.

class pcapkit.protocols.internet.hip.data.HIPMAC2Parameter(type, critical, length, hmac)[source]

Bases: Parameter

Data model for HIP HIP_MAC_2 parameter.

hmac: bytes

HMAC value.

class pcapkit.protocols.internet.hip.data.HIPSignature2Parameter(type, critical, length, algorithm, signature)[source]

Bases: Parameter

Data model for HIP HIP_SIGNATURE_2 parameter.

algorithm: HIAlgorithm

Signature algorithm.

signature: bytes

Signature value.

class pcapkit.protocols.internet.hip.data.HIPSignatureParameter(type, critical, length, algorithm, signature)[source]

Bases: Parameter

Data model for HIP HIP_SIGNATURE parameter.

algorithm: HIAlgorithm

Signature algorithm.

signature: bytes

Signature value.

class pcapkit.protocols.internet.hip.data.EchoRequestUnsignedParameter(type, critical, length, opaque)[source]

Bases: Parameter

Data model for HIP ECHO_REQUEST_UNSIGNED parameter.

opaque: bytes

Opaque data.

class pcapkit.protocols.internet.hip.data.EchoResponseUnsignedParameter(type, critical, length, opaque)[source]

Bases: Parameter

Data model for HIP ECHO_RESPONSE_UNSIGNED parameter.

opaque: bytes

Opaque data.

class pcapkit.protocols.internet.hip.data.RelayFromParameter(type, critical, length, reserved, port, protocol, address)[source]

Bases: Parameter

Data model for HIP RELAY_FROM parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The reserved octet, as captured.

port: int

Port.

protocol: TransType

Protocol.

address: IPv6Address

Address.

class pcapkit.protocols.internet.hip.data.RelayToParameter(type, critical, length, reserved, port, protocol, address)[source]

Bases: Parameter

Data model for HIP RELAY_TO parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The reserved octet, as captured.

port: int

Port.

protocol: TransType

Protocol.

address: IPv6Address

Address.

class pcapkit.protocols.internet.hip.data.OverlayTTLParameter(type, critical, length, reserved, ttl)[source]

Bases: Parameter

Data model for HIP OVERLAY_TTL parameter.

Changed in version 1.5.0: New required field reserved (#1223), and ttl is an int rather than a timedelta (#2282).

reserved: bytes

The two reserved octets, as captured.

ttl: int

TTL value – “the number of overlay hops this packet has left” (RFC 6079 Section 6.2), decremented by one per overlay hop. A count, not a duration, so it is a plain int: reading it as timedelta(seconds=ttl) reported a 5-hop budget as five seconds. See #2282.

class pcapkit.protocols.internet.hip.data.RouteViaParameter(type, critical, length, reserved, flags, hit)[source]

Bases: Parameter

Data model for HIP ROUTE_VIA parameter.

Changed in version 1.5.0: New required field reserved (#1223).

reserved: bytes

The two reserved octets, as captured.

flags: Flags

Flags.

hit: tuple[IPv6Address, ...]

HIT addresses.

class pcapkit.protocols.internet.hip.data.FromParameter(type, critical, length, address)[source]

Bases: Parameter

Data model for HIP FROM parameter.

address: IPv6Address

Address.

class pcapkit.protocols.internet.hip.data.RVSHMACParameter(type, critical, length, hmac)[source]

Bases: Parameter

Data model for HIP RVS_HMAC parameter.

hmac: bytes

HMAC value.

class pcapkit.protocols.internet.hip.data.ViaRVSParameter(type, critical, length, address)[source]

Bases: Parameter

Data model for HIP VIA_RVS parameter.

address: tuple[IPv6Address, ...]

Addresses.

class pcapkit.protocols.internet.hip.data.RelayHMACParameter(type, critical, length, hmac)[source]

Bases: Parameter

Data model for HIP RELAY_HMAC parameter.

hmac: bytes

HMAC value.

Footnotes