Skip to main content

Appendix B. Huffman Code

The following Huffman code is used when encoding string literals with Huffman coding. This table has been generated using a tool that can be found at ````https://github.com/nmathewson/hpack-huffman-gen\````.

The table is organized as follows:

  • sym: The symbol (byte value)
  • code as bits: The binary code for the symbol
  • code as hex: The hexadecimal representation of the code
  • len: The bit length of the code

The Huffman code used for encoding string literals uses the following table:

      sym         code as bits                 code as hex    len
                                                                 (bits)
    (  0)  |11111111|11000                             1ff8  [13]
    (  1)  |11111111|11111111|1011000                7fffd8  [23]
    (  2)  |11111111|11111111|11111110|0010         fffffe2  [28]
    (  3)  |11111111|11111111|11111110|0011         fffffe3  [28]
    (  4)  |11111111|11111111|11111110|0100         fffffe4  [28]
    (  5)  |11111111|11111111|11111110|0101         fffffe5  [28]
    (  6)  |11111111|11111111|11111110|0110         fffffe6  [28]
    (  7)  |11111111|11111111|11111110|0111         fffffe7  [28]
    (  8)  |11111111|11111111|11111110|1000         fffffe8  [28]
    (  9)  |11111111|11111111|11101010               ffffea  [24]
    ( 10)  |11111111|11111111|11111111|111100      3ffffffc  [30]
    ( 11)  |11111111|11111111|11111110|1001         fffffe9  [28]
    ( 12)  |11111111|11111111|11111110|1010         fffffea  [28]
    ( 13)  |11111111|11111111|11111111|111101      3ffffffd  [30]
    ( 14)  |11111111|11111111|11111110|1011         fffffeb  [28]
    ( 15)  |11111111|11111111|11111110|1100         fffffec  [28]
    ( 16)  |11111111|11111111|11111110|1101         fffffed  [28]
    ( 17)  |11111111|11111111|11111110|1110         fffffee  [28]
    ( 18)  |11111111|11111111|11111110|1111         fffffef  [28]
    ( 19)  |11111111|11111111|11111111|0000         ffffff0  [28]
    ( 20)  |11111111|11111111|11111111|0001         ffffff1  [28]
    ( 21)  |11111111|11111111|11111111|0010         ffffff2  [28]
    ( 22)  |11111111|11111111|11111111|111110      3ffffffe  [30]
    ( 23)  |11111111|11111111|11111111|0011         ffffff3  [28]
    ( 24)  |11111111|11111111|11111111|0100         ffffff4  [28]
    ( 25)  |11111111|11111111|11111111|0101         ffffff5  [28]
    ( 26)  |11111111|11111111|11111111|0110         ffffff6  [28]
    ( 27)  |11111111|11111111|11111111|0111         ffffff7  [28]
    ( 28)  |11111111|11111111|11111111|1000         ffffff8  [28]
    ( 29)  |11111111|11111111|11111111|1001         ffffff9  [28]
    ( 30)  |11111111|11111111|11111111|1010         ffffffa  [28]
    ( 31)  |11111111|11111111|11111111|1011         ffffffb  [28]
' ' ( 32)  |010100                                       14  [ 6]
'!' ( 33)  |11111110|00                                 3f8  [10]
'"' ( 34)  |11111110|01                                 3f9  [10]
'#' ( 35)  |11111111|1010                               ffa  [12]
'$' ( 36)  |11111111|11001                             1ff9  [13]

Note: The complete Huffman code table contains 257 entries (symbols 0-255 plus EOS). Due to space constraints, only a portion is shown here. For the complete table, please refer to the official RFC 7541 document at ````https://www.rfc-editor.org/rfc/rfc7541.txt\````.

The Huffman code is a canonical Huffman code with code lengths defined above. For decoding efficiency, implementations should use a table-based decoder or a tree-based decoder optimized for this specific code.

An End-of-String (EOS) symbol is included in the Huffman code to enable bit-aligned encoding. If the bit length of the encoded string does not fall on an octet boundary, the EOS symbol is used to pad the encoded string to the next octet boundary. Padding longer than 7 bits MUST be treated as a decoding error. A padding strictly longer than 7 bits MUST be treated as a decoding error. A padding not corresponding to the most-significant bits of EOS MUST be treated as a decoding error.