xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/Rar/RarHeader.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Archive/RarHeader.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_ARCHIVE_RAR_HEADER_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_ARCHIVE_RAR_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 NRar {
10*f6dc9357SAndroid Build Coastguard Worker namespace NHeader {
11*f6dc9357SAndroid Build Coastguard Worker 
12*f6dc9357SAndroid Build Coastguard Worker const unsigned kMarkerSize = 7;
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker const unsigned kArchiveSolid = 0x1;
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker namespace NBlockType
17*f6dc9357SAndroid Build Coastguard Worker {
18*f6dc9357SAndroid Build Coastguard Worker   enum EBlockType
19*f6dc9357SAndroid Build Coastguard Worker   {
20*f6dc9357SAndroid Build Coastguard Worker     kMarker = 0x72,
21*f6dc9357SAndroid Build Coastguard Worker     kArchiveHeader,
22*f6dc9357SAndroid Build Coastguard Worker     kFileHeader,
23*f6dc9357SAndroid Build Coastguard Worker     kCommentHeader,
24*f6dc9357SAndroid Build Coastguard Worker     kOldAuthenticity,
25*f6dc9357SAndroid Build Coastguard Worker     kOldSubBlock,
26*f6dc9357SAndroid Build Coastguard Worker     kRecoveryRecord,
27*f6dc9357SAndroid Build Coastguard Worker     kAuthenticity,
28*f6dc9357SAndroid Build Coastguard Worker     kSubBlock,
29*f6dc9357SAndroid Build Coastguard Worker     kEndOfArchive
30*f6dc9357SAndroid Build Coastguard Worker   };
31*f6dc9357SAndroid Build Coastguard Worker }
32*f6dc9357SAndroid Build Coastguard Worker 
33*f6dc9357SAndroid Build Coastguard Worker namespace NArchive
34*f6dc9357SAndroid Build Coastguard Worker {
35*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kVolume  = 1;
36*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kComment = 2;
37*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kLock    = 4;
38*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kSolid   = 8;
39*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kNewVolName = 0x10; // ('volname.partN.rar')
40*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kAuthenticity  = 0x20;
41*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kRecovery = 0x40;
42*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kBlockEncryption  = 0x80;
43*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kFirstVolume = 0x100; // (set only by RAR 3.0 and later)
44*f6dc9357SAndroid Build Coastguard Worker 
45*f6dc9357SAndroid Build Coastguard Worker   // const UInt16 kEncryptVer = 0x200; // RAR 3.6 : that feature was discarded by origial RAR
46*f6dc9357SAndroid Build Coastguard Worker 
47*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kEndOfArc_Flags_NextVol   = 1;
48*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kEndOfArc_Flags_DataCRC   = 2;
49*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kEndOfArc_Flags_RevSpace  = 4;
50*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kEndOfArc_Flags_VolNumber = 8;
51*f6dc9357SAndroid Build Coastguard Worker 
52*f6dc9357SAndroid Build Coastguard Worker   const unsigned kHeaderSizeMin = 7;
53*f6dc9357SAndroid Build Coastguard Worker 
54*f6dc9357SAndroid Build Coastguard Worker   const unsigned kArchiveHeaderSize = 13;
55*f6dc9357SAndroid Build Coastguard Worker 
56*f6dc9357SAndroid Build Coastguard Worker   const unsigned kBlockHeadersAreEncrypted = 0x80;
57*f6dc9357SAndroid Build Coastguard Worker }
58*f6dc9357SAndroid Build Coastguard Worker 
59*f6dc9357SAndroid Build Coastguard Worker namespace NFile
60*f6dc9357SAndroid Build Coastguard Worker {
61*f6dc9357SAndroid Build Coastguard Worker   const unsigned kSplitBefore = 1 << 0;
62*f6dc9357SAndroid Build Coastguard Worker   const unsigned kSplitAfter  = 1 << 1;
63*f6dc9357SAndroid Build Coastguard Worker   const unsigned kEncrypted   = 1 << 2;
64*f6dc9357SAndroid Build Coastguard Worker   const unsigned kComment     = 1 << 3;
65*f6dc9357SAndroid Build Coastguard Worker   const unsigned kSolid       = 1 << 4;
66*f6dc9357SAndroid Build Coastguard Worker 
67*f6dc9357SAndroid Build Coastguard Worker   const unsigned kDictBitStart     = 5;
68*f6dc9357SAndroid Build Coastguard Worker   const unsigned kNumDictBits  = 3;
69*f6dc9357SAndroid Build Coastguard Worker   const unsigned kDictMask         = (1 << kNumDictBits) - 1;
70*f6dc9357SAndroid Build Coastguard Worker   const unsigned kDictDirectoryValue  = 0x7;
71*f6dc9357SAndroid Build Coastguard Worker 
72*f6dc9357SAndroid Build Coastguard Worker   const unsigned kSize64Bits    = 1 << 8;
73*f6dc9357SAndroid Build Coastguard Worker   const unsigned kUnicodeName   = 1 << 9;
74*f6dc9357SAndroid Build Coastguard Worker   const unsigned kSalt          = 1 << 10;
75*f6dc9357SAndroid Build Coastguard Worker   const unsigned kOldVersion    = 1 << 11;
76*f6dc9357SAndroid Build Coastguard Worker   const unsigned kExtTime       = 1 << 12;
77*f6dc9357SAndroid Build Coastguard Worker   // const unsigned kExtFlags      = 1 << 13;
78*f6dc9357SAndroid Build Coastguard Worker   // const unsigned kSkipIfUnknown = 1 << 14;
79*f6dc9357SAndroid Build Coastguard Worker 
80*f6dc9357SAndroid Build Coastguard Worker   const unsigned kLongBlock    = 1 << 15;
81*f6dc9357SAndroid Build Coastguard Worker 
82*f6dc9357SAndroid Build Coastguard Worker   /*
83*f6dc9357SAndroid Build Coastguard Worker   struct CBlock
84*f6dc9357SAndroid Build Coastguard Worker   {
85*f6dc9357SAndroid Build Coastguard Worker     // UInt16 HeadCRC;
86*f6dc9357SAndroid Build Coastguard Worker     // Byte Type;
87*f6dc9357SAndroid Build Coastguard Worker     // UInt16 Flags;
88*f6dc9357SAndroid Build Coastguard Worker     // UInt16 HeadSize;
89*f6dc9357SAndroid Build Coastguard Worker     UInt32 PackSize;
90*f6dc9357SAndroid Build Coastguard Worker     UInt32 UnPackSize;
91*f6dc9357SAndroid Build Coastguard Worker     Byte HostOS;
92*f6dc9357SAndroid Build Coastguard Worker     UInt32 FileCRC;
93*f6dc9357SAndroid Build Coastguard Worker     UInt32 Time;
94*f6dc9357SAndroid Build Coastguard Worker     Byte UnPackVersion;
95*f6dc9357SAndroid Build Coastguard Worker     Byte Method;
96*f6dc9357SAndroid Build Coastguard Worker     UInt16 NameSize;
97*f6dc9357SAndroid Build Coastguard Worker     UInt32 Attributes;
98*f6dc9357SAndroid Build Coastguard Worker   };
99*f6dc9357SAndroid Build Coastguard Worker   */
100*f6dc9357SAndroid Build Coastguard Worker 
101*f6dc9357SAndroid Build Coastguard Worker   /*
102*f6dc9357SAndroid Build Coastguard Worker   struct CBlock32
103*f6dc9357SAndroid Build Coastguard Worker   {
104*f6dc9357SAndroid Build Coastguard Worker     UInt16 HeadCRC;
105*f6dc9357SAndroid Build Coastguard Worker     Byte Type;
106*f6dc9357SAndroid Build Coastguard Worker     UInt16 Flags;
107*f6dc9357SAndroid Build Coastguard Worker     UInt16 HeadSize;
108*f6dc9357SAndroid Build Coastguard Worker     UInt32 PackSize;
109*f6dc9357SAndroid Build Coastguard Worker     UInt32 UnPackSize;
110*f6dc9357SAndroid Build Coastguard Worker     Byte HostOS;
111*f6dc9357SAndroid Build Coastguard Worker     UInt32 FileCRC;
112*f6dc9357SAndroid Build Coastguard Worker     UInt32 Time;
113*f6dc9357SAndroid Build Coastguard Worker     Byte UnPackVersion;
114*f6dc9357SAndroid Build Coastguard Worker     Byte Method;
115*f6dc9357SAndroid Build Coastguard Worker     UInt16 NameSize;
116*f6dc9357SAndroid Build Coastguard Worker     UInt32 Attributes;
117*f6dc9357SAndroid Build Coastguard Worker     UInt16 GetRealCRC(const void *aName, UInt32 aNameSize,
118*f6dc9357SAndroid Build Coastguard Worker         bool anExtraDataDefined = false, Byte *anExtraData = 0) const;
119*f6dc9357SAndroid Build Coastguard Worker   };
120*f6dc9357SAndroid Build Coastguard Worker   struct CBlock64
121*f6dc9357SAndroid Build Coastguard Worker   {
122*f6dc9357SAndroid Build Coastguard Worker     UInt16 HeadCRC;
123*f6dc9357SAndroid Build Coastguard Worker     Byte Type;
124*f6dc9357SAndroid Build Coastguard Worker     UInt16 Flags;
125*f6dc9357SAndroid Build Coastguard Worker     UInt16 HeadSize;
126*f6dc9357SAndroid Build Coastguard Worker     UInt32 PackSizeLow;
127*f6dc9357SAndroid Build Coastguard Worker     UInt32 UnPackSizeLow;
128*f6dc9357SAndroid Build Coastguard Worker     Byte HostOS;
129*f6dc9357SAndroid Build Coastguard Worker     UInt32 FileCRC;
130*f6dc9357SAndroid Build Coastguard Worker     UInt32 Time;
131*f6dc9357SAndroid Build Coastguard Worker     Byte UnPackVersion;
132*f6dc9357SAndroid Build Coastguard Worker     Byte Method;
133*f6dc9357SAndroid Build Coastguard Worker     UInt16 NameSize;
134*f6dc9357SAndroid Build Coastguard Worker     UInt32 Attributes;
135*f6dc9357SAndroid Build Coastguard Worker     UInt32 PackSizeHigh;
136*f6dc9357SAndroid Build Coastguard Worker     UInt32 UnPackSizeHigh;
137*f6dc9357SAndroid Build Coastguard Worker     UInt16 GetRealCRC(const void *aName, UInt32 aNameSize) const;
138*f6dc9357SAndroid Build Coastguard Worker   };
139*f6dc9357SAndroid Build Coastguard Worker   */
140*f6dc9357SAndroid Build Coastguard Worker 
141*f6dc9357SAndroid Build Coastguard Worker   const unsigned kLabelFileAttribute            = 0x08;
142*f6dc9357SAndroid Build Coastguard Worker   const unsigned kWinFileDirectoryAttributeMask = 0x10;
143*f6dc9357SAndroid Build Coastguard Worker 
144*f6dc9357SAndroid Build Coastguard Worker   enum CHostOS
145*f6dc9357SAndroid Build Coastguard Worker   {
146*f6dc9357SAndroid Build Coastguard Worker     kHostMSDOS = 0,
147*f6dc9357SAndroid Build Coastguard Worker     kHostOS2   = 1,
148*f6dc9357SAndroid Build Coastguard Worker     kHostWin32 = 2,
149*f6dc9357SAndroid Build Coastguard Worker     kHostUnix  = 3,
150*f6dc9357SAndroid Build Coastguard Worker     kHostMacOS = 4,
151*f6dc9357SAndroid Build Coastguard Worker     kHostBeOS  = 5
152*f6dc9357SAndroid Build Coastguard Worker   };
153*f6dc9357SAndroid Build Coastguard Worker }
154*f6dc9357SAndroid Build Coastguard Worker 
155*f6dc9357SAndroid Build Coastguard Worker namespace NBlock
156*f6dc9357SAndroid Build Coastguard Worker {
157*f6dc9357SAndroid Build Coastguard Worker   const UInt16 kLongBlock = 1 << 15;
158*f6dc9357SAndroid Build Coastguard Worker   struct CBlock
159*f6dc9357SAndroid Build Coastguard Worker   {
160*f6dc9357SAndroid Build Coastguard Worker     UInt16 CRC;
161*f6dc9357SAndroid Build Coastguard Worker     Byte Type;
162*f6dc9357SAndroid Build Coastguard Worker     UInt16 Flags;
163*f6dc9357SAndroid Build Coastguard Worker     UInt16 HeadSize;
164*f6dc9357SAndroid Build Coastguard Worker     //  UInt32 DataSize;
165*f6dc9357SAndroid Build Coastguard Worker   };
166*f6dc9357SAndroid Build Coastguard Worker }
167*f6dc9357SAndroid Build Coastguard Worker 
168*f6dc9357SAndroid Build Coastguard Worker /*
169*f6dc9357SAndroid Build Coastguard Worker struct CSubBlock
170*f6dc9357SAndroid Build Coastguard Worker {
171*f6dc9357SAndroid Build Coastguard Worker   UInt16 HeadCRC;
172*f6dc9357SAndroid Build Coastguard Worker   Byte HeadType;
173*f6dc9357SAndroid Build Coastguard Worker   UInt16 Flags;
174*f6dc9357SAndroid Build Coastguard Worker   UInt16 HeadSize;
175*f6dc9357SAndroid Build Coastguard Worker   UInt32 DataSize;
176*f6dc9357SAndroid Build Coastguard Worker   UInt16 SubType;
177*f6dc9357SAndroid Build Coastguard Worker   Byte Level; // Reserved : Must be 0
178*f6dc9357SAndroid Build Coastguard Worker };
179*f6dc9357SAndroid Build Coastguard Worker 
180*f6dc9357SAndroid Build Coastguard Worker struct CCommentBlock
181*f6dc9357SAndroid Build Coastguard Worker {
182*f6dc9357SAndroid Build Coastguard Worker   UInt16 HeadCRC;
183*f6dc9357SAndroid Build Coastguard Worker   Byte HeadType;
184*f6dc9357SAndroid Build Coastguard Worker   UInt16 Flags;
185*f6dc9357SAndroid Build Coastguard Worker   UInt16 HeadSize;
186*f6dc9357SAndroid Build Coastguard Worker   UInt16 UnpSize;
187*f6dc9357SAndroid Build Coastguard Worker   Byte UnpVer;
188*f6dc9357SAndroid Build Coastguard Worker   Byte Method;
189*f6dc9357SAndroid Build Coastguard Worker   UInt16 CommCRC;
190*f6dc9357SAndroid Build Coastguard Worker };
191*f6dc9357SAndroid Build Coastguard Worker 
192*f6dc9357SAndroid Build Coastguard Worker 
193*f6dc9357SAndroid Build Coastguard Worker struct CProtectHeader
194*f6dc9357SAndroid Build Coastguard Worker {
195*f6dc9357SAndroid Build Coastguard Worker   UInt16 HeadCRC;
196*f6dc9357SAndroid Build Coastguard Worker   Byte HeadType;
197*f6dc9357SAndroid Build Coastguard Worker   UInt16 Flags;
198*f6dc9357SAndroid Build Coastguard Worker   UInt16 HeadSize;
199*f6dc9357SAndroid Build Coastguard Worker   UInt32 DataSize;
200*f6dc9357SAndroid Build Coastguard Worker   Byte Version;
201*f6dc9357SAndroid Build Coastguard Worker   UInt16 RecSectors;
202*f6dc9357SAndroid Build Coastguard Worker   UInt32 TotalBlocks;
203*f6dc9357SAndroid Build Coastguard Worker   Byte Mark[8];
204*f6dc9357SAndroid Build Coastguard Worker };
205*f6dc9357SAndroid Build Coastguard Worker */
206*f6dc9357SAndroid Build Coastguard Worker 
207*f6dc9357SAndroid Build Coastguard Worker }}}
208*f6dc9357SAndroid Build Coastguard Worker 
209*f6dc9357SAndroid Build Coastguard Worker #endif
210