xref: /openbmc/linux/lib/xz/xz_stream.h (revision d89775fc)
124fa0402SLasse Collin /*
224fa0402SLasse Collin  * Definitions for handling the .xz file format
324fa0402SLasse Collin  *
424fa0402SLasse Collin  * Author: Lasse Collin <lasse.collin@tukaani.org>
524fa0402SLasse Collin  *
624fa0402SLasse Collin  * This file has been put into the public domain.
724fa0402SLasse Collin  * You can do whatever you want with this file.
824fa0402SLasse Collin  */
924fa0402SLasse Collin 
1024fa0402SLasse Collin #ifndef XZ_STREAM_H
1124fa0402SLasse Collin #define XZ_STREAM_H
1224fa0402SLasse Collin 
1324fa0402SLasse Collin #if defined(__KERNEL__) && !XZ_INTERNAL_CRC32
1424fa0402SLasse Collin #	include <linux/crc32.h>
1524fa0402SLasse Collin #	undef crc32
1624fa0402SLasse Collin #	define xz_crc32(buf, size, crc) \
1724fa0402SLasse Collin 		(~crc32_le(~(uint32_t)(crc), buf, size))
1824fa0402SLasse Collin #endif
1924fa0402SLasse Collin 
2024fa0402SLasse Collin /*
2124fa0402SLasse Collin  * See the .xz file format specification at
22d89775fcSAlexander A. Klimov  * https://tukaani.org/xz/xz-file-format.txt
2324fa0402SLasse Collin  * to understand the container format.
2424fa0402SLasse Collin  */
2524fa0402SLasse Collin 
2624fa0402SLasse Collin #define STREAM_HEADER_SIZE 12
2724fa0402SLasse Collin 
2824fa0402SLasse Collin #define HEADER_MAGIC "\3757zXZ"
2924fa0402SLasse Collin #define HEADER_MAGIC_SIZE 6
3024fa0402SLasse Collin 
3124fa0402SLasse Collin #define FOOTER_MAGIC "YZ"
3224fa0402SLasse Collin #define FOOTER_MAGIC_SIZE 2
3324fa0402SLasse Collin 
3424fa0402SLasse Collin /*
3524fa0402SLasse Collin  * Variable-length integer can hold a 63-bit unsigned integer or a special
3624fa0402SLasse Collin  * value indicating that the value is unknown.
3724fa0402SLasse Collin  *
3824fa0402SLasse Collin  * Experimental: vli_type can be defined to uint32_t to save a few bytes
3924fa0402SLasse Collin  * in code size (no effect on speed). Doing so limits the uncompressed and
4024fa0402SLasse Collin  * compressed size of the file to less than 256 MiB and may also weaken
4124fa0402SLasse Collin  * error detection slightly.
4224fa0402SLasse Collin  */
4324fa0402SLasse Collin typedef uint64_t vli_type;
4424fa0402SLasse Collin 
4524fa0402SLasse Collin #define VLI_MAX ((vli_type)-1 / 2)
4624fa0402SLasse Collin #define VLI_UNKNOWN ((vli_type)-1)
4724fa0402SLasse Collin 
4824fa0402SLasse Collin /* Maximum encoded size of a VLI */
4924fa0402SLasse Collin #define VLI_BYTES_MAX (sizeof(vli_type) * 8 / 7)
5024fa0402SLasse Collin 
5124fa0402SLasse Collin /* Integrity Check types */
5224fa0402SLasse Collin enum xz_check {
5324fa0402SLasse Collin 	XZ_CHECK_NONE = 0,
5424fa0402SLasse Collin 	XZ_CHECK_CRC32 = 1,
5524fa0402SLasse Collin 	XZ_CHECK_CRC64 = 4,
5624fa0402SLasse Collin 	XZ_CHECK_SHA256 = 10
5724fa0402SLasse Collin };
5824fa0402SLasse Collin 
5924fa0402SLasse Collin /* Maximum possible Check ID */
6024fa0402SLasse Collin #define XZ_CHECK_MAX 15
6124fa0402SLasse Collin 
6224fa0402SLasse Collin #endif
63