def read_ah(self, length, version, extension):
if length is None:<EOL><INDENT>length = len(self)<EOL><DEDENT>_next = self._read_protos(<NUM_LIT:1>)<EOL>_plen = self._read_unpack(<NUM_LIT:1>)<EOL>_resv = self._read_fileng(<NUM_LIT:2>)<EOL>_scpi = self._read_unpack(<NUM_LIT:4>)<EOL>_dsnf = self._read_unpack(<NUM_LIT:4>)<EOL>_tlen = _plen * <NUM_LIT:4> - <NUM_LIT:2><EOL>_vlen = _tlen - <NUM_LIT:12><EOL>_chkv = self._read_fileng(_vlen)<EOL>ah = dict(<EOL>next=_next,<EOL>length=_tlen,<EOL>spi=_scpi,<EOL>seq=_dsnf,<EOL>icv=_chkv,<EOL>)<EOL>if version == <NUM_LIT:6>:<EOL><INDENT>_plen = <NUM_LIT:8> - (_tlen % <NUM_LIT:8>)<EOL><DEDENT>elif version == <NUM_LIT:4>:<EOL><INDENT>_plen = <NUM_LIT:4> - (_tlen % <NUM_LIT:4>)<EOL><DEDENT>else:<EOL><INDENT>raise VersionError(f'<STR_LIT>')<EOL><DEDENT>if _plen:   <EOL><INDENT>padding = self._read_binary(_plen)<EOL>if any((int(bit, base=<NUM_LIT:2>) for bit in padding)):<EOL><INDENT>raise ProtocolError(f'<STR_LIT>')<EOL><DEDENT><DEDENT>length -= ah['<STR_LIT>']<EOL>ah['<STR_LIT>'] = self._read_packet(header=ah['<STR_LIT>'], payload=length)<EOL>if extension:<EOL><INDENT>self._protos = None<EOL>return ah<EOL><DEDENT>return self._decode_next_layer(ah, _next, length)<EOL>
Read Authentication Header.

        Structure of AH header [RFC 4302]:
             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   |  Payload Len  |          RESERVED             |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |                 Security Parameters Index (SPI)               |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |                    Sequence Number Field                      |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
            |                                                               |
            +                Integrity Check Value-ICV (variable)           |
            |                                                               |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

            Octets      Bits        Name                    Description
              0           0     ah.next                 Next Header
              1           8     ah.length               Payload Length
              2          16     -                       Reserved (must be zero)
              4          32     ah.spi                  Security Parameters Index (SPI)
              8          64     ah.seq                  Sequence Number Field
              12         96     ah.icv                  Integrity Check Value (ICV)