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