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 22*d89775fcSAlexander 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