HIP - Host Identity Protocol

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

Octets

Bits

Name

Description

0

0

hip.next

Next Header

1

8

hip.length

Header Length

2

16

Reserved (\x00)

2

17

hip.type

Packet Type

3

24

hip.version

Version

3

28

Reserved

3

31

Reserved (\x01)

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.HIP(file=None, length=None, **kwargs)[source]

Bases: Internet[HIP, HIP]

This class implements Host Identity Protocol.

This class currently supports parsing of 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()

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()

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

Return type:

pcapkit.protocols.protocol.Protocol

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

classmethod register_parameter(code, meth)[source]

Register a parameter parser.

Parameters:
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: 17>, next_default=None, next_namespace=None, next_reversed=False, packet=<Packet.HIP_DATA: 32>, packet_default=None, packet_namespace=None, packet_reversed=False, version=2, checksum=b'\\x00\\x00', controls_anonymous=False, shit=0, rhit=0, parameters=None, payload=b'', **kwargs)[source]

Make (construct) packet data.

Parameters:
Return type:

HIP

Returns:

Constructed packet data.

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

_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 NOT used in HIPv1.

_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 – The parameter is ONLY supported in HIPv1.

_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 – The parameter is ONLY supported in HIPv1.

_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 4 modulo.

_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.

_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 – The parameter is ONLY supported in HIPv1.

_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 schema.len is NOT a 2 modulo.

_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 2 modulo.

_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.

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

Read HIP CERT parameter.

Structure of HIP CERT 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            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  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            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Lifetime    |  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 schema.len is NOT 2 modulo.

_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 2 modulo.

_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 4 modulo.

_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 2 modulo.

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

ViaRVSParameter

Returns:

Parsed parameter data.

Raises:

ProtocolError – If schema.len is NOT 16 modulo.

_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_hip_param(parameters, *, version)[source]

Make HIP parameter.

Parameters:
Return type:

tuple[list[Parameter | bytes], int]

Returns:

HIP parameters and total length.

_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, index=0, old_spi=0, new_spi=0, **kwargs)[source]

Make HIP ESP_INFO parameter.

Parameters:
  • code (Parameter) – parameter code

  • param (ESPInfoParameter | None) – parameter data

  • version (int) – HIP protocol version

  • index (int) – KEYMAT index

  • old_spi (int) – old SPI

  • new_spi (int) – new SPI

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

ESPInfoParameter

Returns:

HIP parameter schema.

_make_param_r1_counter(code, param=None, *, version, counter=0, **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

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

R1CounterParameter

Returns:

HIP parameter schema.

_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, opaque=b'', 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

  • 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.

_make_param_solution(code, param=None, *, version, index=0, reserved=None, opaque=b'', 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 Data_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.

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

Make HIP SEQ parameter.

Parameters:
Return type:

SEQParameter

Returns:

HIP parameter schema.

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

Make HIP ACK parameter.

Parameters:
Return type:

ACKParameter

Returns:

HIP parameter schema.

_make_param_dh_group_list(code, param=None, *, version, groups=None, group_default=None, group_namespace=None, group_reversed=False, **kwargs)[source]

Make HIP DH_GROUP_LIST parameter.

Parameters:
Return type:

DHGroupListParameter

Returns:

HIP parameter schema.

_make_param_diffie_hellman(code, param=None, *, version, group=<Group.NIST_P_256: 7>, group_default=None, group_namespace=None, group_reversed=False, pub_val=0, **kwargs)[source]

Make HIP DIFFIE_HELLMAN parameter.

Parameters:
Return type:

DiffieHellmanParameter

Returns:

HIP parameter schema.

_make_param_hip_transform(code, param=None, *, version, suites=None, suite_default=None, suite_namespace=None, suite_reversed=False, **kwargs)[source]

Make HIP HIP_TRANSFORM parameter.

Parameters:
Return type:

HIPTransformParameter

Returns:

HIP parameter schema.

_make_param_hip_cipher(code, param=None, *, version, ciphers=None, cipher_default=None, cipher_namespace=None, cipher_reversed=False, **kwargs)[source]

Make HIP HIP_CIPHER parameter.

Parameters:
Return type:

HIPCipherParameter

Returns:

HIP parameter schema.

_make_param_nat_traversal_mode(code, param=None, *, version, modes=None, mode_default=None, mode_namespace=None, mode_reversed=False, **kwargs)[source]

Make HIP NAT_TRAVERSAL_MODE parameter.

Parameters:
Return type:

NATTraversalModeParameter

Returns:

HIP parameter schema.

_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.

_make_param_encrypted(code, param=None, *, version, cipher=<Cipher.NULL_ENCRYPT: 1>, cipher_default=None, cipher_namespace=None, cipher_reversed=False, iv=None, data=b'', **kwargs)[source]

Make HIP ENCRYPTED parameter.

Parameters:
Return type:

EncryptedParameter

Returns:

HIP parameter schema.

_make_param_host_id(code, param=None, *, version, hi=None, hi_curve=None, hi_pub_key=b'', hi_algorithm=<HIAlgorithm.NULL_ENCRYPT: 1>, hi_algorithm_default=None, hi_algorithm_namespace=None, hi_algorithm_reversed=False, di=b'', di_type=<DITypes.none_included: 0>, di_type_default=None, di_type_namespace=None, di_type_reversed=False, **kwargs)[source]

Make HIP HOST_ID parameter.

Parameters:
Return type:

HostIDParameter

Returns:

HIP parameter schema.

_make_param_hit_suite_list(code, param=None, *, version, suites=None, suite_default=None, suite_namespace=None, suite_reversed=False, **kwargs)[source]

Make HIP HIT_SUITE_LIST parameter.

Parameters:
Return type:

HITSuiteListParameter

Returns:

HIP parameter schema.

_make_param_cert(code, param=None, *, version, cert_group=<Group.NIST_P_256: 7>, cert_group_default=None, cert_group_namespace=None, cert_group_reversed=False, cert_count=0, cert_id=0, cert_type=<Certificate.X_509_v3: 1>, cert_type_default=None, cert_type_namespace=None, cert_type_reversed=False, 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 (Group | IntEnum | IntEnum | str | int) – certificate group

  • cert_group_default (int | None) – default certificate group

  • cert_group_namespace (dict[str, int] | dict[int, str] | Type[IntEnum] | Type[IntEnum] | None) – certificate group namespace

  • cert_group_reversed (bool) – reverse certificate group namespace

  • cert_count (int) – certificate count

  • cert_id (int) – certificate ID

  • cert_type (Certificate | IntEnum | IntEnum | str | int) – certificate type

  • cert_type_default (int | None) – default certificate type

  • cert_type_namespace (dict[str, int] | dict[int, str] | Type[IntEnum] | Type[IntEnum] | None) – certificate type namespace

  • cert_type_reversed (bool) – reverse certificate type namespace

  • cert (bytes) – certificate data

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

CertParameter

Returns:

HIP parameter schema.

_make_param_notification(code, param=None, *, version, msg_type=<NotifyMessage.I2_ACKNOWLEDGEMENT: 16384>, msg_type_default=None, msg_type_namespace=None, msg_type_reversed=False, msg=b'', **kwargs)[source]

Make HIP NOTIFICATION parameter.

Parameters:
Return type:

NotificationParameter

Returns:

HIP parameter schema.

_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=15, reg_info=None, reg_info_default=None, reg_info_namespace=None, reg_info_reversed=False, **kwargs)[source]

Make HIP REG_INFO parameter.

Parameters:
Return type:

RegInfoParameter

Returns:

HIP parameter schema.

_make_param_reg_request(code, param=None, *, version, lifetime=0, reg_request=None, reg_request_default=None, reg_request_namespace=None, reg_request_reversed=False, **kwargs)[source]

Make HIP REG_REQUEST parameter.

Parameters:
Return type:

RegRequestParameter

Returns:

HIP parameter schema.

_make_param_reg_response(code, param=None, *, version, lifetime=0, reg_response=None, reg_response_default=None, reg_response_namespace=None, reg_response_reversed=False, **kwargs)[source]

Make HIP REG_RESPONSE parameter.

Parameters:
Return type:

RegResponseParameter

Returns:

HIP parameter schema.

_make_param_reg_failed(code, param=None, *, version, lifetime=0, reg_failed=None, reg_failed_default=None, reg_failed_namespace=None, reg_failed_reversed=False, **kwargs)[source]

Make HIP REG_FAILED parameter.

Parameters:
Return type:

RegFailedParameter

Returns:

HIP parameter schema.

_make_param_reg_from(code, param=None, *, version, port=0, protocol=<TransType.UDP: 17>, protocol_default=None, protocol_namespace=None, protocol_reversed=False, address='::', **kwargs)[source]

Make HIP REG_FROM parameter.

Parameters:
Return type:

RegFromParameter

Returns:

HIP parameter schema.

_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, format_default=None, format_namespace=None, format_reversed=False, **kwargs)[source]

Make HIP TRANSPORT_FORMAT_LIST parameter.

Parameters:
Return type:

TransportFormatListParameter

Returns:

HIP parameter schema.

_make_param_esp_transform(code, param=None, *, version, suites=None, suite_default=None, suite_namespace=None, suite_reversed=False, **kwargs)[source]

Make HIP ESP_TRANSFORM parameter.

Parameters:
Return type:

ESPTransformParameter

Returns:

HIP parameter schema.

_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.

_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.

_make_param_payload_mic(code, param=None, *, version, next=<TransType.UDP: 17>, next_default=None, next_namespace=None, next_reversed=False, payload=b'', mic=b'', **kwargs)[source]

Make HIP PAYLOAD_MIC parameter.

Parameters:
Return type:

PayloadMICParameter

Returns:

HIP parameter schema.

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

Make HIP TRANSACTION_ID parameter.

Parameters:
Return type:

TransactionIDParameter

Returns:

HIP parameter schema.

_make_param_overlay_id(code, param=None, *, version, id=0, **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

  • **kwargs (Any) – arbitrary keyword arguments

Return type:

OverlayIDParameter

Returns:

HIP parameter schema.

_make_param_route_dst(code, param=None, *, version, symmetric=False, must_follow=False, hit=None, **kwargs)[source]

Make HIP ROUTE_DST parameter.

Parameters:
Return type:

RouteDstParameter

Returns:

HIP parameter schema.

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

Make HIP HIP_TRANSPORT_MODE parameter.

Parameters:
Return type:

HIPTransportModeParameter

Returns:

HIP parameter schema.

_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: 1>, algorithm_default=None, algorithm_namespace=None, algorithm_reversed=False, signature=b'', **kwargs)[source]

Make HIP HIP_SIGNATURE_2 parameter.

Parameters:
Return type:

HIPSignature2Parameter

Returns:

HIP parameter schema.

_make_param_hip_signature(code, param=None, *, version, algorithm=<HIAlgorithm.NULL_ENCRYPT: 1>, algorithm_default=None, algorithm_namespace=None, algorithm_reversed=False, signature=b'', **kwargs)[source]

Make HIP HIP_SIGNATURE parameter.

Parameters:
Return type:

HIPSignatureParameter

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_echo_response_unsigned(code, param=None, *, version, opaque=b'', **kwargs)[source]

Make HIP ECHO_RESPONSE_UNSIGNED parameter.

Parameters:
Return type:

EchoRequestUnsignedParameter

Returns:

HIP parameter schema.

_make_param_relay_from(code, param=None, *, version, port=0, protocol=<TransType.UDP: 17>, protocol_default=None, protocol_namespace=None, protocol_reversed=False, address='::', **kwargs)[source]

Make HIP RELAY_FROM parameter.

Parameters:
Return type:

RelayFromParameter

Returns:

HIP parameter schema.

_make_param_relay_to(code, param=None, *, version, port=0, protocol=<TransType.UDP: 17>, protocol_default=None, protocol_namespace=None, protocol_reversed=False, address='::', **kwargs)[source]

Make HIP RELAY_TO parameter.

Parameters:
Return type:

RelayToParameter

Returns:

HIP parameter schema.

_make_param_overlay_ttl(code, param=None, *, version, ttl=0, **kwargs)[source]

Make HIP OVERLAY_TTL parameter.

Parameters:
Return type:

OverlayTTLParameter

Returns:

HIP parameter schema.

_make_param_route_via(code, param=None, *, version, symmetric=False, must_follow=False, hit=None, **kwargs)[source]

Make HIP ROUTE_VIA parameter.

Parameters:
Return type:

RouteViaParameter

Returns:

HIP parameter schema.

_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.

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

DefaultDict[Enum_Parameter, str | tuple[ParameterParser, ParameterConstructor]]: Parameter code to method mapping, c.f. _read_hip_param() and/or _make_hip_param(). Method names are expected to be referred to the class by _read_param_${name} and/or _make_param_${name}, and if such name not found, the value should then be a method that can parse the parameter by itself.

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

Post initialisation hook.

Overloads:
  • self, file (IO[bytes] | bytes), length (Optional[int]), extension (bool), kwargs (Any) → None

  • self, kwargs (Any) → None

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

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

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

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

See also

For construction argument, please refer to self.make.

classmethod __index__()[source]

Numeral registry index of the protocol.

Return type:

TransType

Returns:

Numeral registry index of the protocol in IANA.

Type Stubs

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

Bases: TypedDict

Locator dictionary type.

traffic: int

Traffic type.

type: int

Locator type.

preferred: bool

Preferred flag.

lifetime: timedelta | int

Lifetime.

ip: IPv6Address | bytes | int | str

IP address.

spi: NotRequired[int]

SPI.

Header Schemas

class pcapkit.protocols.schema.internet.hip.HIP(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.Parameter(dict_=None, **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.schema.internet.hip.UnassignedParameter(*args: _VT, **kwargs: _VT)[source]

Bases: Parameter

Header schema for HIP unsigned parameters.

value: bytes = <BytesField value>

Parameter value.

padding: bytes = <PaddingField padding>

Padding.

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

Bases: Parameter

Header schema for HIP ESP_INFO parameters.

reserved: bytes = <PaddingField reserved>

Reserved.

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.schema.internet.hip.R1CounterParameter(*args: _VT, **kwargs: _VT)[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, since #696 widened counter to eight octets. __parameter__ already carries two hand-written entries – not a name-normalisation rule; R1_Counter and R1_COUNTER differ only in case, and each needed its own line – mapping both codes to the same _read_param_r1_counter, and _make_param_r1_counter already built this class for 128; it was only the schema lookup this class’s own code= feeds – consulted on the parse path by OptionField – that fell back to UnassignedParameter for 128, since a single-code code= registered 129 alone and left 128 unclaimed. See #690.

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) – are affected. It was a UInt32Field until #672: the parameter declared the correct len=12 and packed 12 octets in total where RFC 7401 Section 5.2.1’s arithmetic makes the record 16, leaving it four short at 4 (mod 8). Measured before the fix, at counter=1: 00 80 00 0c 00 00 00 00 00 00 00 01 for code 128 and the same twelve octets under 00 81 for code 129.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.schema.internet.hip.LocatorSetParameter(*args: _VT, **kwargs: _VT)[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 was wrong until #679 is the quantity it was being handed: _make_param_locator_set() wrote Length as sum(Locator.len), in the 4-octet units RFC 8046 Section 4 gives Locator Length, where RFC 7401 Section 5.2.1’s Length is a byte count. Schema.unpack reads exactly field.length octets off the stream and hands only those to ListField.unpack, so a set of n plain IPv6 locators offered 4n octets of a 24n-octet contents: measured on f0999858e, n = 2 and n = 5 both parsed one truncated locator and left the rest of the record unconsumed, with SchemaWarning for the negative remainder and a repack that did not match the octets read. With Length a byte count the budget is the contents, each locator bills the 8 + Locator Length * 4 octets it actually consumed, and the count comes out exact.

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.

This is the site #651 deliberately left alone and #664 documented as an exclusion, because two defects in this parameter cancelled at the shape its tests sampled and correcting either alone made the wire output worse. The shadowed len is 4 for any IPv6 locator, so the old expression appended exactly four octets whatever the locator count; and the wrong Length unit above made the declared Length 4n where the contents were 24n. 4 + 24n + 4 is 24n + 8, and since 24n is a multiple of eight the RFC total for a byte-count Length of 24n is 11 + 24n - 3, the same 24n + 8. Hence 32, 56 and 128 octets at n = 1, 2, 5 – conformant, by two wrongs.

That cancellation was never general, which is why the pair had to move together rather than one at a time. It needs every locator to be 24 octets and there to be at least one, and measured on f0999858e the shapes that break it were non-conformant before this fix: an empty set packed 4 octets where RFC 7401 Section 5.2.1 wants 8, one SPI-bearing locator packed 35, two packed 63, and a mixed plain-and-SPI pair packed 59 or 60 depending on order. Afterwards all seven shapes are the RFC’s own total: 8, 32, 56, 128, 32, 64, 56 and 56 respectively, with the three plain figures unchanged.

class pcapkit.protocols.schema.internet.hip.Locator(*args: _VT, **kwargs: _VT)[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.

value: IPv6Address | LocatorData = <SwitchField value>

Locator value.

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

Bases: Schema

Header schema for HIP locator data.

spi: int = <UInt32Field spi>

SPI.

ip: IPv6Address = <IPv6AddressField ip>

Locator.

class pcapkit.protocols.schema.internet.hip.PuzzleParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.SolutionParameter(*args: _VT, **kwargs: _VT)[source]

Bases: Parameter

Header schema for HIP SOLUTION parameters.

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 RFC 7401 Section 5.2.4 defines the 2^(value - 32) seconds encoding that goes in it. See #654.

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.schema.internet.hip.SEQParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.ACKParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.DHGroupListParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.DiffieHellmanParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.HIPTransformParameter(*args: _VT, **kwargs: _VT)[source]

Bases: Parameter

Header schema for HIP TRANSFORM parameters.

suites: list[Suite] = <ListField suites>

Suite IDs.

padding: bytes = <PaddingField padding>

Padding.

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

Bases: Parameter

Header schema for HIP CIPHER parameters.

ciphers: list[Cipher] = <ListField ciphers>

Cipher IDs.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.schema.internet.hip.NATTraversalModeParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.TransactionPacingParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.EncryptedParameter(*args: _VT, **kwargs: _VT)[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 sibling lookup below, which a parameter packed on its own has no options list for. See #556.

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__. See #556.

class pcapkit.protocols.schema.internet.hip.HostIDParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.HostIdentity(dict_=None, **kwargs)[source]

Bases: EnumSchema[HIAlgorithm]

Host identity schema.

class pcapkit.protocols.schema.internet.hip.ECDSACurveHostIdentity(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.ECDSALowCurveHostIdentity(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.EdDSACurveHostIdentity(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.HITSuiteListParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.CertParameter(*args: _VT, **kwargs: _VT)[source]

Bases: Parameter

Header schema for HIP CERT parameters.

cert_group: Group = <EnumField cert_group>

Certificate group.

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.schema.internet.hip.NotificationParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.EchoRequestSignedParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.RegInfoParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.RegRequestParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.RegResponseParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.RegFailedParameter(*args: _VT, **kwargs: _VT)[source]

Bases: Parameter

Header schema for HIP REG_FAILED parameters.

lifetime: int = <UInt8Field lifetime>

Lifetime.

reg_failed: list[RegistrationFailure] = <ListField reg_failed>

Registration types.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.schema.internet.hip.RegFromParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.EchoResponseSignedParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.TransportFormatListParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.ESPTransformParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.SeqDataParameter(*args: _VT, **kwargs: _VT)[source]

Bases: Parameter

Header schema for HIP SEQ_DATA parameters.

seq: int = <UInt32Field seq>

Sequence number.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.schema.internet.hip.AckDataParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.PayloadMICParameter(*args: _VT, **kwargs: _VT)[source]

Bases: Parameter

Header schema for HIP PAYLOAD_MIC parameters.

next: TransType = <EnumField next>

Next header.

reserved: bytes = <PaddingField reserved>

Reversed.

payload: bytes = <BytesField payload>

Payload data.

mic: bytes = <BytesField mic>

MIC value.

padding: bytes = <PaddingField padding>

Padding.

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

Bases: Parameter

Header schema for HIP TRANSACTION_ID parameters.

id: int = <NumberField id>

Transaction ID.

padding: bytes = <PaddingField padding>

Padding.

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

Bases: Parameter

Header schema for HIP OVERLAY_ID parameters.

id: int = <NumberField id>

Overlay ID.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.schema.internet.hip.RouteDstParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.HIPTransportModeParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.HIPMACParameter(*args: _VT, **kwargs: _VT)[source]

Bases: Parameter

Header schema for HIP HIP_MAC parameters.

hmac: bytes = <BytesField hmac>

HMAC value.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.schema.internet.hip.HIPMAC2Parameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.HIPSignature2Parameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.HIPSignatureParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.EchoRequestUnsignedParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.EchoResponseUnsignedParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.RelayFromParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.RelayToParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.OverlayTTLParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.RouteViaParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.FromParameter(*args: _VT, **kwargs: _VT)[source]

Bases: Parameter

Header schema for HIP FROM parameters.

address: IPv6Address = <IPv6AddressField address>

Address.

padding: bytes = <PaddingField padding>

Padding.

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

Bases: Parameter

Header schema for HIP RVS_HMAC parameters.

hmac: bytes = <BytesField hmac>

HMAC value.

padding: bytes = <PaddingField padding>

Padding.

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

Bases: Parameter

Header schema for HIP VIA_RVS parameters.

address: list[IPv6Address] = <ListField address>

Address.

padding: bytes = <PaddingField padding>

Padding.

class pcapkit.protocols.schema.internet.hip.RelayHMACParameter(*args: _VT, **kwargs: _VT)[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.schema.internet.hip.PacketType[source]

Bases: TypedDict

Packet type.

bit_0: Literal[0]

Reversed bit.

type: int

Packet type.

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

Bases: TypedDict

Version type.

version: int

Version.

bit_1: Literal[1]

Reversed bit.

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

Bases: TypedDict

Controls type.

anonymous: bool

Anonymous.

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

Bases: TypedDict

Locator flags.

preferred: bool

Preferred flag.

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

Bases: TypedDict

DI type data.

type: DITypes

DI type.

len: int

DI length.

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

Bases: TypedDict

Route destination flags.

symmetric: int

Symmetric flag.

must_follow: int

Must-follow flag.

Auxiliary Functions

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

Selector function for Locator.value field.

Parameters:

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

Return type:

FieldBase

Returns:

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

Selector function for HostIDParameter.hi field.

Parameters:

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

Return type:

FieldBase

Returns:

pcapkit.protocols.schema.internet.hip.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 lifetime octet 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 lifetime octet already read, which would otherwise underflow the list length below zero.

pcapkit.protocols.schema.internet.hip.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.schema.internet.hip.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 looked like a fourth call site – same pkt['len'] - 2 expression – but is not: 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.schema.internet.hip.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 three 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 a since-corrected revision of this module once did, mirroring the three genuine two-octet-prefix sites) silently dropped the trailing two octets of every non-empty list on parse, and rejected 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, ...), matching HIPTransportModeParameter’s mode rather than the one-octet items of two_octet_prefix_list_len()’s other two call sites. This function only answers how many bytes the list occupies; getting that number right and the item width wrong (as a still-earlier revision did, at one octet) still corrupts 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.schema.internet.hip.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.

This subtracted the iv but not the reserved, so the field claimed four octets more than the parameter holds: on unpack it read four octets of the next parameter into data, and on pack it zero-extended the ciphertext by four. That was recorded as the second half of hip-parameter/ENCRYPTED in the round-trip suite’s expected-failure table, and left alone – because while the padding rule was also four octets out (#651), the two errors cancelled at some residues of Length and not others. Measured by packing through the public maker at every residue, the old record total agreed with RFC 7401 Section 5.2.1 at Length % 8 in {0, 5, 6, 7} and was eight octets over at {1, 2, 3, 4} – so Length = 8, which the unit suite happened to use, is one of the four where the module emitted RFC-conformant ENCRYPTED octets while getting both halves wrong.

Fixing the padding without fixing this would therefore have regressed ENCRYPTED, from right-by-accident at four of the eight residues to four octets too long at all eight: with only the padding corrected the total becomes 8 + Length + pad against a correct 4 + Length + pad, which is a uniform four-octet surplus with no residue left where it cancels. So the two go together.

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.schema.internet.hip.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;

– and this function is that formula, spelled the way the RFC spells it.

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 instead, as every padding site in this module and in pcapkit.protocols.internet.hip did before #651, puts 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 appends four octets that must not be there; at Length = 8 the contents are 8-aligned on their own, so aligning them appends nothing and the record is left 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.schema.internet.hip.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 because it was previously the latter – 46 copies of the same wrong expression here and 49 of its counterpart in pcapkit.protocols.internet.hip, which is 95 places for the arithmetic to be wrong in and one place too few to state the RFC’s reason for it.

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.schema.internet.hip.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.schema.internet.hip.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.schema.internet.hip.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 LOCATOR_SET is the one parameter in this module whose contents 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. That is 4 for any IPv6 locator whatever the locator count, which is how the pre-#679 padding expression came to append exactly four octets to every LOCATOR_SET regardless of size.

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

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

Bases: Protocol

Data model for HIP header.

next: TransType

Next header.

length: int

Header length.

type: Packet

Packet type.

version: int

Version.

chksum: bytes

Checksum.

control: Control

Control

shit: int

Sender’s host identity tag.

rhit: int

Receiver’s host identity tag.

parameters: OrderedMultiDict[Parameter, Parameter]

HIP parameters.

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

Bases: Data

Data model for HIP controls.

anonymous: bool

Anonymous flag.

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

Bases: Data

Data model for HIP parameter data.

type: Parameter

Parameter type.

critical: bool

Critical flag.

length: int

Content length.

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

Bases: Parameter

Data model for unassigned parameter.

contents: bytes

Content.

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

Bases: Parameter

Data model for HIP ESP_INFO parameter.

index: int

KEYMAT index.

old_spi: int

Old SDI.

new_spi: int

New SDI.

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

Bases: Parameter

Data model for HIP R1_COUNTER parameter.

counter: int

R1 counter.

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

Bases: Parameter

Data model for HIP LOCATOR_SET parameter.

locator_set: tuple[Locator, ...]

Locator set.

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

Bases: Data

Data model for HIP locator.

traffic: int

Traffic.

type: int

Locator type.

length: int

Locator length.

preferred: bool

Preferred flag.

lifetime: timedelta

Locator lifetime.

locator: LocatorData | IPv6Address

Locator data.

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

Bases: Data

Data model for HIP locator data.

spi: int

SPI.

ip: IPv6Address

IP address.

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

Bases: Parameter

Data model for HIP PUZZLE parameter.

index: int

Numeric index.

lifetime: timedelta

Lifetime.

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.data.internet.hip.SolutionParameter(*args: VT, **kwargs: VT)[source]

Bases: Parameter

Data model for HIP SOLUTION parameter.

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 used to be read as a PUZZLE Lifetime, which only RFC 7401 Section 5.2.4 defines, and the conformant 0x00 then could not be re-serialised at all. 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.data.internet.hip.SEQParameter(*args: VT, **kwargs: VT)[source]

Bases: Parameter

Data model for HIP SEQ parameter.

id: int

Unique ID.

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

Bases: Parameter

Data model for HIP ACK parameter.

update_id: tuple[int, ...]

Peer update IDs.

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

Bases: Parameter

Data model for HIP DH_GROUP_LIST parameter.

group_id: tuple[Group, ...]

DH group list.

class pcapkit.protocols.data.internet.hip.DiffieHellmanParameter(*args: VT, **kwargs: VT)[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.data.internet.hip.HIPTransformParameter(*args: VT, **kwargs: VT)[source]

Bases: Parameter

Data model for HIP HIP_TRANSFORM parameter.

suite_id: tuple[Suite, ...]

Suite IDs.

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

Bases: Parameter

Data model for HIP HIP_CIPHER parameter.

cipher_id: tuple[Cipher, ...]

Cipher IDs.

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

Bases: Parameter

Data model for HIP NAT_TRAVERSAL_MODE parameter.

mode_id: tuple[NATTraversal, ...]

Mode IDs

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

Bases: Parameter

Data model for HIP TRANSACTION_PACING parameter.

min_ta: int

Min TA.

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

Bases: Parameter

Data model for HIP ENCRYPTED parameter.

cipher: Cipher

Cipher ID.

iv: bytes | None

Initialization vector.

data: bytes

Encrypted data.

class pcapkit.protocols.data.internet.hip.HostIDParameter(*args: VT, **kwargs: VT)[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.data.internet.hip.HostIdentity(*args: VT, **kwargs: VT)[source]

Bases: Data

Data model for host identity.

curve: ECDSACurve | ECDSALowCurve | EdDSACurve

Curve type.

pubkey: bytes

Public key.

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

Bases: Parameter

Data model for HIP HIST_SUITE_LIST parameter.

suite_id: tuple[HITSuite, ...]

Suite IDs.

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

Bases: Parameter

Data model for HIP CERT parameter.

cert_group: Group

Certificate group.

cert_count: int

Certificate count.

cert_id: int

Certificate ID.

cert_type: Certificate

Certificate type.

cert: bytes

Certificate.

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

Bases: Parameter

Data model for HIP NOTIFICATION parameter.

msg_type: NotifyMessage

Notify message type.

msg: bytes

Notification data.

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

Bases: Parameter

Data model for HIP ECHO_REQUEST_SIGNED parameter.

opaque: bytes

Opaque data.

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

Bases: Parameter

Data model for HIP REG_INFO parameter.

lifetime: Lifetime

Registration lifetime.

reg_type: tuple[Registration, ...]

Registration type.

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

Bases: Data

Data model for registration lifetime.

min: timedelta

Minimum lifetime.

max: timedelta

Maximum lifetime.

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

Bases: Parameter

Data model for HIP REG_REQUEST parameter.

lifetime: timedelta

Registration lifetime.

reg_type: tuple[Registration, ...]

Registration type.

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

Bases: Parameter

Data model for HIP REG_RESPONSE parameter.

lifetime: timedelta

Registration lifetime.

reg_type: tuple[Registration, ...]

Registration type.

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

Bases: Parameter

Data model for HIP REG_FAILED parameter.

lifetime: timedelta

Registration lifetime.

reg_type: tuple[RegistrationFailure, ...]

Registration failure type.

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

Bases: Parameter

Data model for HIP REG_FROM parameter.

port: int

Port.

protocol: TransType

Protocol.

address: IPv6Address

Address.

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

Bases: Parameter

Data model for HIP ECHO_RESPONSE_SIGNED parameter.

opaque: bytes

Opaque data.

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

Bases: Parameter

Data model for HIP TRANSPORT_FORMAT_LIST parameter.

tf_type: tuple[Parameter, ...]

Transport format list.

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

Bases: Parameter

Data model for HIP ESP_TRANSFORM parameter.

suite_id: tuple[ESPTransformSuite, ...]

ESP transform.

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

Bases: Parameter

Data model for HIP SEQ_DATA parameter.

seq: int

Sequence number.

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

Bases: Parameter

Data model for HIP ACK_DATA parameter.

ack: tuple[int, ...]

Acknowledged sequence number.

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

Bases: Parameter

Data model for HIP PAYLOAD_MIC parameter.

next: TransType

Next header

payload: bytes

Payload data.

mic: bytes

MIC value.

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

Bases: Parameter

Data model for HIP TRANSACTION_ID parameter.

id: int

Identifier.

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

Bases: Parameter

Data mode HIP OVERLAY_ID parameter.

id: int

Identifier.

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

Bases: Parameter

Data model for HIP ROUTE_DST parameter.

flags: Flags

Flags.

hit: tuple[IPv6Address, ...]

Destination address.

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

Bases: Data

Data model for flags in HIP HIP_PARAMETER_FLAGS parameter.

symmetric: bool

Symmetric flag.

must_follow: bool

Must follow flag.

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

Bases: Parameter

Data model for HIP HIP_TRANSPORT_MODE parameter.

port: int

Port.

mode_id: tuple[Transport, ...]

Mode IDs.

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

Bases: Parameter

Data model for HIP HIP_MAC parameter.

hmac: bytes

HMAC value.

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

Bases: Parameter

Data model for HIP HIP_MAC_2 parameter.

hmac: bytes

HMAC value.

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

Bases: Parameter

Data model for HIP HIP_SIGNATURE_2 parameter.

algorithm: HIAlgorithm

Signature algorithm.

signature: bytes

Signature value.

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

Bases: Parameter

Data model for HIP HIP_SIGNATURE parameter.

algorithm: HIAlgorithm

Signature algorithm.

signature: bytes

Signature value.

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

Bases: Parameter

Data model for HIP ECHO_REQUEST_UNSIGNED parameter.

opaque: bytes

Opaque data.

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

Bases: Parameter

Data model for HIP ECHO_RESPONSE_UNSIGNED parameter.

opaque: bytes

Opaque data.

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

Bases: Parameter

Data model for HIP RELAY_FROM parameter.

port: int

Port.

protocol: TransType

Protocol.

address: IPv6Address

Address.

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

Bases: Parameter

Data model for HIP RELAY_TO parameter.

port: int

Port.

protocol: TransType

Protocol.

address: IPv6Address

Address.

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

Bases: Parameter

Data model for HIP OVERLAY_TTL parameter.

ttl: timedelta

TTL value.

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

Bases: Parameter

Data model for HIP ROUTE_VIA parameter.

flags: Flags

Flags.

hit: tuple[IPv6Address, ...]

HIT addresses.

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

Bases: Parameter

Data model for HIP FROM parameter.

address: IPv6Address

HIT address.

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

Bases: Parameter

Data model for HIP RVS_HMAC parameter.

hmac: bytes

HMAC value.

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

Bases: Parameter

Data model for HIP VIA_RVS parameter.

address: tuple[IPv6Address, ...]

Addresses.

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

Bases: Parameter

Data model for HIP RELAY_HMAC parameter.

hmac: bytes

HMAC value.

Footnotes