def _read_para_host_id(self, code, cbit, clen, *, desc, length, version):
def _read_host_identifier(length, code):<EOL><INDENT>algorithm = _HI_ALGORITHM.get(code, '<STR_LIT>')<EOL>if algorithm == '<STR_LIT>':<EOL><INDENT>host_id = dict(<EOL>curve=_ECDSA_CURVE.get(self._read_unpack(<NUM_LIT:2>)),<EOL>pubkey=self._read_fileng(length-<NUM_LIT:2>),<EOL>)<EOL><DEDENT>elif algorithm == '<STR_LIT>':<EOL><INDENT>host_id = dict(<EOL>curve=_ECDSA_LOW_CURVE.get(self._read_unpack(<NUM_LIT:2>)),<EOL>pubkey=self._read_fileng(length-<NUM_LIT:2>),<EOL>)<EOL><DEDENT>else:<EOL><INDENT>host_id = self._read_fileng(length)<EOL><DEDENT>return algorithm, host_id<EOL><DEDENT>def _read_domain_identifier(di_data):<EOL><INDENT>di_type = _DI_TYPE.get(int(di_data[:<NUM_LIT:4>], base=<NUM_LIT:2>), '<STR_LIT>')<EOL>di_len = int(di_data[<NUM_LIT:4>:], base=<NUM_LIT:2>)<EOL>domain_id = self._read_fileng(di_len)<EOL>return di_type, di_len, domain_id<EOL><DEDENT>_hlen = self._read_unpack(<NUM_LIT:2>)<EOL>_didt = self._read_binary(<NUM_LIT:2>)<EOL>_algo = self._read_unpack(<NUM_LIT:2>)<EOL>_hidf = _read_host_identifier(_hlen, _algo)<EOL>_didf = _read_domain_identifier(_didt)<EOL>host_id = dict(<EOL>type=desc,<EOL>critical=cbit,<EOL>length=clen,<EOL>id_len=_hlen,<EOL>di_type=_didf[<NUM_LIT:0>],<EOL>di_len=_didf[<NUM_LIT:1>],<EOL>algorithm=_hidf[<NUM_LIT:0>],<EOL>host_id=_hidf[<NUM_LIT:1>],<EOL>domain_id=_didf[<NUM_LIT:2>],<EOL>)<EOL>_plen = length - clen<EOL>if _plen:<EOL><INDENT>self._read_fileng(_plen)<EOL><DEDENT>return host_id<EOL>
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    |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            Octets      Bits        Name                Description
              0           0     host_id.type        Parameter Type
              1          15     host_id.critical    Critical Bit
              2          16     host_id.length      Length of Contents
              4          32     host_id.id_len      Host Identity Length
              6          48     host_id.di_type     Domain Identifier Type
              6          52     host_id.di_len      Domain Identifier Length
              8          64     host_id.algorithm   Algorithm
              10         80     host_id.host_id     Host Identity
              ?           ?     host_id.domain_id   Domain Identifier
              ?           ?     -                   Padding