xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/Zip/ZipHeader.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // ZipHeader.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_ARCHIVE_ZIP_HEADER_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_ARCHIVE_ZIP_HEADER_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyTypes.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker namespace NArchive {
9*f6dc9357SAndroid Build Coastguard Worker namespace NZip {
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker const unsigned kMarkerSize = 4;
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker namespace NSignature
14*f6dc9357SAndroid Build Coastguard Worker {
15*f6dc9357SAndroid Build Coastguard Worker   const UInt32 kLocalFileHeader   = 0x04034B50;
16*f6dc9357SAndroid Build Coastguard Worker   const UInt32 kDataDescriptor    = 0x08074B50;
17*f6dc9357SAndroid Build Coastguard Worker   const UInt32 kCentralFileHeader = 0x02014B50;
18*f6dc9357SAndroid Build Coastguard Worker   const UInt32 kEcd               = 0x06054B50;
19*f6dc9357SAndroid Build Coastguard Worker   const UInt32 kEcd64             = 0x06064B50;
20*f6dc9357SAndroid Build Coastguard Worker   const UInt32 kEcd64Locator      = 0x07064B50;
21*f6dc9357SAndroid Build Coastguard Worker   const UInt32 kSpan              = 0x08074B50;
22*f6dc9357SAndroid Build Coastguard Worker   const UInt32 kNoSpan            = 0x30304B50; // PK00, replaces kSpan, if there is only 1 segment
23*f6dc9357SAndroid Build Coastguard Worker }
24*f6dc9357SAndroid Build Coastguard Worker 
25*f6dc9357SAndroid Build Coastguard Worker const unsigned kLocalHeaderSize = 4 + 26; // including signature
26*f6dc9357SAndroid Build Coastguard Worker const unsigned kDataDescriptorSize32 = 4 + 4 + 4 * 2;  // including signature
27*f6dc9357SAndroid Build Coastguard Worker const unsigned kDataDescriptorSize64 = 4 + 4 + 8 * 2;  // including signature
28*f6dc9357SAndroid Build Coastguard Worker const unsigned kCentralHeaderSize = 4 + 42; // including signature
29*f6dc9357SAndroid Build Coastguard Worker 
30*f6dc9357SAndroid Build Coastguard Worker const unsigned kEcdSize = 22; // including signature
31*f6dc9357SAndroid Build Coastguard Worker const unsigned kEcd64_MainSize = 44;
32*f6dc9357SAndroid Build Coastguard Worker const unsigned kEcd64_FullSize = 12 + kEcd64_MainSize;
33*f6dc9357SAndroid Build Coastguard Worker const unsigned kEcd64Locator_Size = 20;
34*f6dc9357SAndroid Build Coastguard Worker 
35*f6dc9357SAndroid Build Coastguard Worker namespace NFileHeader
36*f6dc9357SAndroid Build Coastguard Worker {
37*f6dc9357SAndroid Build Coastguard Worker   namespace NCompressionMethod
38*f6dc9357SAndroid Build Coastguard Worker   {
39*f6dc9357SAndroid Build Coastguard Worker     enum EType
40*f6dc9357SAndroid Build Coastguard Worker     {
41*f6dc9357SAndroid Build Coastguard Worker       kStore = 0,
42*f6dc9357SAndroid Build Coastguard Worker       kShrink = 1,
43*f6dc9357SAndroid Build Coastguard Worker       kReduce1 = 2,
44*f6dc9357SAndroid Build Coastguard Worker       kReduce2 = 3,
45*f6dc9357SAndroid Build Coastguard Worker       kReduce3 = 4,
46*f6dc9357SAndroid Build Coastguard Worker       kReduce4 = 5,
47*f6dc9357SAndroid Build Coastguard Worker       kImplode = 6,
48*f6dc9357SAndroid Build Coastguard Worker       kTokenize = 7,
49*f6dc9357SAndroid Build Coastguard Worker       kDeflate = 8,
50*f6dc9357SAndroid Build Coastguard Worker       kDeflate64 = 9,
51*f6dc9357SAndroid Build Coastguard Worker       kPKImploding = 10,
52*f6dc9357SAndroid Build Coastguard Worker 
53*f6dc9357SAndroid Build Coastguard Worker       kBZip2 = 12,
54*f6dc9357SAndroid Build Coastguard Worker 
55*f6dc9357SAndroid Build Coastguard Worker       kLZMA = 14,
56*f6dc9357SAndroid Build Coastguard Worker 
57*f6dc9357SAndroid Build Coastguard Worker       kTerse = 18,
58*f6dc9357SAndroid Build Coastguard Worker       kLz77 = 19,
59*f6dc9357SAndroid Build Coastguard Worker       kZstdPk = 20,
60*f6dc9357SAndroid Build Coastguard Worker 
61*f6dc9357SAndroid Build Coastguard Worker       kZstdWz = 93,
62*f6dc9357SAndroid Build Coastguard Worker       kMP3 = 94,
63*f6dc9357SAndroid Build Coastguard Worker       kXz = 95,
64*f6dc9357SAndroid Build Coastguard Worker       kJpeg = 96,
65*f6dc9357SAndroid Build Coastguard Worker       kWavPack = 97,
66*f6dc9357SAndroid Build Coastguard Worker       kPPMd = 98,
67*f6dc9357SAndroid Build Coastguard Worker       kWzAES = 99
68*f6dc9357SAndroid Build Coastguard Worker     };
69*f6dc9357SAndroid Build Coastguard Worker 
70*f6dc9357SAndroid Build Coastguard Worker     const Byte kMadeByProgramVersion = 63;
71*f6dc9357SAndroid Build Coastguard Worker 
72*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_Default = 10;
73*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_Dir = 20;
74*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_ZipCrypto = 20;
75*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_Deflate = 20;
76*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_Deflate64 = 21;
77*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_Zip64 = 45;
78*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_BZip2 = 46;
79*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_Aes = 51;
80*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_LZMA = 63;
81*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_PPMd = 63;
82*f6dc9357SAndroid Build Coastguard Worker     const Byte kExtractVersion_Xz = 20; // test it
83*f6dc9357SAndroid Build Coastguard Worker   }
84*f6dc9357SAndroid Build Coastguard Worker 
85*f6dc9357SAndroid Build Coastguard Worker   namespace NExtraID
86*f6dc9357SAndroid Build Coastguard Worker   {
87*f6dc9357SAndroid Build Coastguard Worker     enum
88*f6dc9357SAndroid Build Coastguard Worker     {
89*f6dc9357SAndroid Build Coastguard Worker       kZip64 = 0x01,
90*f6dc9357SAndroid Build Coastguard Worker       kNTFS = 0x0A,
91*f6dc9357SAndroid Build Coastguard Worker       kUnix0 = 0x0D,                // Info-ZIP : (UNIX) PK
92*f6dc9357SAndroid Build Coastguard Worker       kStrongEncrypt = 0x17,
93*f6dc9357SAndroid Build Coastguard Worker       kIzNtSecurityDescriptor = 0x4453,
94*f6dc9357SAndroid Build Coastguard Worker       kUnixTime = 0x5455,           // "UT" (time) Info-ZIP
95*f6dc9357SAndroid Build Coastguard Worker       kUnix1 = 0x5855,              // Info-ZIP
96*f6dc9357SAndroid Build Coastguard Worker       kIzUnicodeComment = 0x6375,
97*f6dc9357SAndroid Build Coastguard Worker       kIzUnicodeName = 0x7075,
98*f6dc9357SAndroid Build Coastguard Worker       kUnix2 = 0x7855,              // Info-ZIP
99*f6dc9357SAndroid Build Coastguard Worker       kUnixN = 0x7875,              // Info-ZIP
100*f6dc9357SAndroid Build Coastguard Worker       kWzAES = 0x9901,
101*f6dc9357SAndroid Build Coastguard Worker       kApkAlign = 0xD935
102*f6dc9357SAndroid Build Coastguard Worker     };
103*f6dc9357SAndroid Build Coastguard Worker   }
104*f6dc9357SAndroid Build Coastguard Worker 
105*f6dc9357SAndroid Build Coastguard Worker   namespace NNtfsExtra
106*f6dc9357SAndroid Build Coastguard Worker   {
107*f6dc9357SAndroid Build Coastguard Worker     const UInt16 kTagTime = 1;
108*f6dc9357SAndroid Build Coastguard Worker     enum
109*f6dc9357SAndroid Build Coastguard Worker     {
110*f6dc9357SAndroid Build Coastguard Worker       kMTime = 0,
111*f6dc9357SAndroid Build Coastguard Worker       kATime,
112*f6dc9357SAndroid Build Coastguard Worker       kCTime
113*f6dc9357SAndroid Build Coastguard Worker     };
114*f6dc9357SAndroid Build Coastguard Worker   }
115*f6dc9357SAndroid Build Coastguard Worker 
116*f6dc9357SAndroid Build Coastguard Worker   namespace NUnixTime
117*f6dc9357SAndroid Build Coastguard Worker   {
118*f6dc9357SAndroid Build Coastguard Worker     enum
119*f6dc9357SAndroid Build Coastguard Worker     {
120*f6dc9357SAndroid Build Coastguard Worker       kMTime = 0,
121*f6dc9357SAndroid Build Coastguard Worker       kATime,
122*f6dc9357SAndroid Build Coastguard Worker       kCTime
123*f6dc9357SAndroid Build Coastguard Worker     };
124*f6dc9357SAndroid Build Coastguard Worker   }
125*f6dc9357SAndroid Build Coastguard Worker 
126*f6dc9357SAndroid Build Coastguard Worker   namespace NUnixExtra
127*f6dc9357SAndroid Build Coastguard Worker   {
128*f6dc9357SAndroid Build Coastguard Worker     enum
129*f6dc9357SAndroid Build Coastguard Worker     {
130*f6dc9357SAndroid Build Coastguard Worker       kATime = 0,
131*f6dc9357SAndroid Build Coastguard Worker       kMTime
132*f6dc9357SAndroid Build Coastguard Worker     };
133*f6dc9357SAndroid Build Coastguard Worker   }
134*f6dc9357SAndroid Build Coastguard Worker 
135*f6dc9357SAndroid Build Coastguard Worker   namespace NFlags
136*f6dc9357SAndroid Build Coastguard Worker   {
137*f6dc9357SAndroid Build Coastguard Worker     const unsigned kEncrypted = 1 << 0;
138*f6dc9357SAndroid Build Coastguard Worker     const unsigned kLzmaEOS = 1 << 1;
139*f6dc9357SAndroid Build Coastguard Worker     const unsigned kDescriptorUsedMask = 1 << 3;
140*f6dc9357SAndroid Build Coastguard Worker     const unsigned kStrongEncrypted = 1 << 6;
141*f6dc9357SAndroid Build Coastguard Worker     const unsigned kUtf8 = 1 << 11;
142*f6dc9357SAndroid Build Coastguard Worker     const unsigned kAltStream = 1 << 14;
143*f6dc9357SAndroid Build Coastguard Worker 
144*f6dc9357SAndroid Build Coastguard Worker     const unsigned kImplodeDictionarySizeMask = 1 << 1;
145*f6dc9357SAndroid Build Coastguard Worker     const unsigned kImplodeLiteralsOnMask     = 1 << 2;
146*f6dc9357SAndroid Build Coastguard Worker 
147*f6dc9357SAndroid Build Coastguard Worker     /*
148*f6dc9357SAndroid Build Coastguard Worker     const unsigned kDeflateTypeBitStart = 1;
149*f6dc9357SAndroid Build Coastguard Worker     const unsigned kNumDeflateTypeBits = 2;
150*f6dc9357SAndroid Build Coastguard Worker     const unsigned kNumDeflateTypes = (1 << kNumDeflateTypeBits);
151*f6dc9357SAndroid Build Coastguard Worker     const unsigned kDeflateTypeMask = (1 << kNumDeflateTypeBits) - 1;
152*f6dc9357SAndroid Build Coastguard Worker     */
153*f6dc9357SAndroid Build Coastguard Worker   }
154*f6dc9357SAndroid Build Coastguard Worker 
155*f6dc9357SAndroid Build Coastguard Worker   namespace NHostOS
156*f6dc9357SAndroid Build Coastguard Worker   {
157*f6dc9357SAndroid Build Coastguard Worker     enum EEnum
158*f6dc9357SAndroid Build Coastguard Worker     {
159*f6dc9357SAndroid Build Coastguard Worker       kFAT      =  0,
160*f6dc9357SAndroid Build Coastguard Worker       kAMIGA    =  1,
161*f6dc9357SAndroid Build Coastguard Worker       kVMS      =  2,  // VAX/VMS
162*f6dc9357SAndroid Build Coastguard Worker       kUnix     =  3,
163*f6dc9357SAndroid Build Coastguard Worker       kVM_CMS   =  4,
164*f6dc9357SAndroid Build Coastguard Worker       kAtari    =  5,  // what if it's a minix filesystem? [cjh]
165*f6dc9357SAndroid Build Coastguard Worker       kHPFS     =  6,  // filesystem used by OS/2 (and NT 3.x)
166*f6dc9357SAndroid Build Coastguard Worker       kMac      =  7,
167*f6dc9357SAndroid Build Coastguard Worker       kZ_System =  8,
168*f6dc9357SAndroid Build Coastguard Worker       kCPM      =  9,
169*f6dc9357SAndroid Build Coastguard Worker       kTOPS20   = 10,  // pkzip 2.50 NTFS
170*f6dc9357SAndroid Build Coastguard Worker       kNTFS     = 11,  // filesystem used by Windows NT
171*f6dc9357SAndroid Build Coastguard Worker       kQDOS     = 12,  // SMS/QDOS
172*f6dc9357SAndroid Build Coastguard Worker       kAcorn    = 13,  // Archimedes Acorn RISC OS
173*f6dc9357SAndroid Build Coastguard Worker       kVFAT     = 14,  // filesystem used by Windows 95, NT
174*f6dc9357SAndroid Build Coastguard Worker       kMVS      = 15,
175*f6dc9357SAndroid Build Coastguard Worker       kBeOS     = 16,  // hybrid POSIX/database filesystem
176*f6dc9357SAndroid Build Coastguard Worker       kTandem   = 17,
177*f6dc9357SAndroid Build Coastguard Worker       kOS400    = 18,
178*f6dc9357SAndroid Build Coastguard Worker       kOSX      = 19
179*f6dc9357SAndroid Build Coastguard Worker     };
180*f6dc9357SAndroid Build Coastguard Worker   }
181*f6dc9357SAndroid Build Coastguard Worker 
182*f6dc9357SAndroid Build Coastguard Worker 
183*f6dc9357SAndroid Build Coastguard Worker   namespace NAmigaAttrib
184*f6dc9357SAndroid Build Coastguard Worker   {
185*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kIFMT     = 06000;    // Amiga file type mask
186*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kIFDIR    = 04000;    // Amiga directory
187*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kIFREG    = 02000;    // Amiga regular file
188*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kIHIDDEN  = 00200;    // to be supported in AmigaDOS 3.x
189*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kISCRIPT  = 00100;    // executable script (text command file)
190*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kIPURE    = 00040;    // allow loading into resident memory
191*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kIARCHIVE = 00020;    // not modified since bit was last set
192*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kIREAD    = 00010;    // can be opened for reading
193*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kIWRITE   = 00004;    // can be opened for writing
194*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kIEXECUTE = 00002;    // executable image, a loadable runfile
195*f6dc9357SAndroid Build Coastguard Worker     const UInt32 kIDELETE  = 00001;    // can be deleted
196*f6dc9357SAndroid Build Coastguard Worker   }
197*f6dc9357SAndroid Build Coastguard Worker }
198*f6dc9357SAndroid Build Coastguard Worker 
199*f6dc9357SAndroid Build Coastguard Worker }}
200*f6dc9357SAndroid Build Coastguard Worker 
201*f6dc9357SAndroid Build Coastguard Worker #endif
202