^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * Definitions for handling the .xz file format
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Author: Lasse Collin <lasse.collin@tukaani.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * This file has been put into the public domain.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * You can do whatever you want with this file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #ifndef XZ_STREAM_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define XZ_STREAM_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #if defined(__KERNEL__) && !XZ_INTERNAL_CRC32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) # include <linux/crc32.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) # undef crc32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) # define xz_crc32(buf, size, crc) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) (~crc32_le(~(uint32_t)(crc), buf, size))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * See the .xz file format specification at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * https://tukaani.org/xz/xz-file-format.txt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * to understand the container format.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define STREAM_HEADER_SIZE 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define HEADER_MAGIC "\3757zXZ"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define HEADER_MAGIC_SIZE 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define FOOTER_MAGIC "YZ"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define FOOTER_MAGIC_SIZE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * Variable-length integer can hold a 63-bit unsigned integer or a special
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * value indicating that the value is unknown.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) * Experimental: vli_type can be defined to uint32_t to save a few bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) * in code size (no effect on speed). Doing so limits the uncompressed and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * compressed size of the file to less than 256 MiB and may also weaken
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) * error detection slightly.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) typedef uint64_t vli_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define VLI_MAX ((vli_type)-1 / 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define VLI_UNKNOWN ((vli_type)-1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) /* Maximum encoded size of a VLI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define VLI_BYTES_MAX (sizeof(vli_type) * 8 / 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) /* Integrity Check types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) enum xz_check {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) XZ_CHECK_NONE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) XZ_CHECK_CRC32 = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) XZ_CHECK_CRC64 = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) XZ_CHECK_SHA256 = 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) /* Maximum possible Check ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define XZ_CHECK_MAX 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #endif