25#define DEFLATE_HEADER_BITS 3
28#define DEFLATE_HEADER_BFINAL_BIT 0
31#define DEFLATE_HEADER_BTYPE_LSB 1
34#define DEFLATE_HEADER_BTYPE_MASK 0x03
37#define DEFLATE_HEADER_BTYPE_LITERAL 0
40#define DEFLATE_HEADER_BTYPE_STATIC 1
43#define DEFLATE_HEADER_BTYPE_DYNAMIC 2
46#define DEFLATE_LITERAL_LEN_BITS 16
49#define DEFLATE_DYNAMIC_BITS 14
52#define DEFLATE_DYNAMIC_HLIT_LSB 0
55#define DEFLATE_DYNAMIC_HLIT_MASK 0x1f
58#define DEFLATE_DYNAMIC_HDIST_LSB 5
61#define DEFLATE_DYNAMIC_HDIST_MASK 0x1f
64#define DEFLATE_DYNAMIC_HCLEN_LSB 10
67#define DEFLATE_DYNAMIC_HCLEN_MASK 0x0f
70#define DEFLATE_CODELEN_BITS 3
73#define DEFLATE_HUFFMAN_BITS 15
79#define DEFLATE_HUFFMAN_QL_BITS 7
82#define DEFLATE_HUFFMAN_QL_SHIFT ( 16 - DEFLATE_HUFFMAN_QL_BITS )
85#define DEFLATE_LITLEN_END 256
88#define DEFLATE_LITLEN_MAX_CODE 287
91#define DEFLATE_DISTANCE_MAX_CODE 31
94#define DEFLATE_CODELEN_MAX_CODE 18
97#define ZLIB_HEADER_BITS 16
100#define ZLIB_HEADER_CM_LSB 0
103#define ZLIB_HEADER_CM_MASK 0x0f
106#define ZLIB_HEADER_CM_DEFLATE 8
109#define ZLIB_HEADER_FDICT_BIT 13
112#define ZLIB_ADLER32_BITS 32
#define NULL
NULL pointer (VOID *)
uint16_t offset
Offset to command line.
#define DEFLATE_LITLEN_MAX_CODE
Maximum value of a literal/length code.
void deflate_init(struct deflate *deflate, enum deflate_format format)
Initialise decompressor.
#define DEFLATE_DISTANCE_MAX_CODE
Maximum value of a distance code.
int deflate_inflate(struct deflate *deflate, const void *data, size_t len, struct deflate_chunk *out)
Inflate compressed data.
static int deflate_finished(struct deflate *deflate)
Check if decompression has finished.
#define DEFLATE_HUFFMAN_QL_BITS
Quick lookup length for a Huffman symbol (in bits)
#define DEFLATE_HUFFMAN_BITS
Maximum length of a Huffman symbol (in bits)
deflate_format
Compression formats.
@ DEFLATE_ZLIB
ZLIB header and footer.
@ DEFLATE_RAW
Raw DEFLATE data (no header or footer)
uint8_t data[48]
Additional event data.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
struct deflate __attribute__
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
A Huffman-coded alphabet.
uint16_t raw[0]
Raw symbols.
uint8_t lookup[1<< DEFLATE_HUFFMAN_QL_BITS]
Quick lookup table.
struct deflate_huf_symbols huf[DEFLATE_HUFFMAN_BITS]
Huffman-coded symbol set for each length.
size_t offset
Current offset.
size_t len
Length of data.
A Huffman-coded set of symbols of a given length.
uint16_t freq
Number of Huffman-coded symbols having this length.
uint16_t * raw
Raw symbols having this length.
uint8_t bits
Length of Huffman-coded symbols.
uint32_t start
First symbol of this length (normalised to 16 bits)
uint8_t shift
Shift to normalise symbols of this length to 16 bits.
A static Huffman alphabet length pattern.
uint8_t count
Repetition count.
unsigned int distance_count
Number of symbols in the distance Huffman alphabet.
uint16_t litlen_raw[DEFLATE_LITLEN_MAX_CODE+1]
Literal/length raw symbols.
unsigned int header
Current block header.
uint32_t rotalumucca
Bit-reversed accumulator.
unsigned int bits
Number of bits within the accumulator.
enum deflate_format format
Format.
size_t dup_distance
Distance of a duplicated string.
unsigned int length
Current length within a set of code lengths.
uint16_t distance_codelen_raw[DEFLATE_DISTANCE_MAX_CODE+1]
Distance and code length raw symbols.
unsigned int length_target
Target length index within a set of code lengths.
size_t remaining
Remaining length of data (e.g.
void * resume
Resume point.
uint8_t lengths[((DEFLATE_LITLEN_MAX_CODE+1)+(DEFLATE_DISTANCE_MAX_CODE+1)+1)/2]
Huffman code lengths.
const uint8_t * end
End of input data pointer.
unsigned int length_index
Current length index within a set of code lengths.
struct deflate_alphabet distance_codelen
Distance and code length Huffman alphabet.
size_t dup_len
Length of a duplicated string.
unsigned int litlen_count
Number of symbols in the literal/length Huffman alphabet.
const uint8_t * in
Current input data pointer.
struct deflate_alphabet litlen
Literal/length Huffman alphabet.
unsigned int extra_bits
Number of extra bits required.
uint32_t accumulator
Accumulator.