"Fossies" - the Fresh Open Source Software Archive 
Member "hashcat-6.2.6/deps/LZMA-SDK/DOC/7zFormat.txt" (2 Sep 2022, 7579 Bytes) of package /linux/privat/hashcat-6.2.6.tar.gz:
As a special service "Fossies" has tried to format the requested text file into HTML format (style:
standard) with prefixed line numbers.
Alternatively you can here
view or
download the uninterpreted source code file.
1 7z Format description (18.06)
2 ----------------------------
3
4 This file contains description of 7z archive format.
5 7z archive can contain files compressed with any method.
6 See "Methods.txt" for description for defined compressing methods.
7
8
9 Format structure Overview
10 -------------------------
11
12 Some fields can be optional.
13
14 Archive structure
15 ~~~~~~~~~~~~~~~~~
16 SignatureHeader
17 [PackedStreams]
18 [PackedStreamsForHeaders]
19 [
20 Header
21 or
22 {
23 Packed Header
24 HeaderInfo
25 }
26 ]
27
28
29
30 Header structure
31 ~~~~~~~~~~~~~~~~
32 {
33 ArchiveProperties
34 AdditionalStreams
35 {
36 PackInfo
37 {
38 PackPos
39 NumPackStreams
40 Sizes[NumPackStreams]
41 CRCs[NumPackStreams]
42 }
43 CodersInfo
44 {
45 NumFolders
46 Folders[NumFolders]
47 {
48 NumCoders
49 CodersInfo[NumCoders]
50 {
51 ID
52 NumInStreams;
53 NumOutStreams;
54 PropertiesSize
55 Properties[PropertiesSize]
56 }
57 NumBindPairs
58 BindPairsInfo[NumBindPairs]
59 {
60 InIndex;
61 OutIndex;
62 }
63 PackedIndices
64 }
65 UnPackSize[Folders][Folders.NumOutstreams]
66 CRCs[NumFolders]
67 }
68 SubStreamsInfo
69 {
70 NumUnPackStreamsInFolders[NumFolders];
71 UnPackSizes[]
72 CRCs[]
73 }
74 }
75 MainStreamsInfo
76 {
77 (Same as in AdditionalStreams)
78 }
79 FilesInfo
80 {
81 NumFiles
82 Properties[]
83 {
84 ID
85 Size
86 Data
87 }
88 }
89 }
90
91 HeaderInfo structure
92 ~~~~~~~~~~~~~~~~~~~~
93 {
94 (Same as in AdditionalStreams)
95 }
96
97
98
99 Notes about Notation and encoding
100 ---------------------------------
101
102 7z uses little endian encoding.
103
104 7z archive format has optional headers that are marked as
105 []
106 Header
107 []
108
109 REAL_UINT64 means real UINT64.
110
111 UINT64 means real UINT64 encoded with the following scheme:
112
113 Size of encoding sequence depends from first byte:
114 First_Byte Extra_Bytes Value
115 (binary)
116 0xxxxxxx : ( xxxxxxx )
117 10xxxxxx BYTE y[1] : ( xxxxxx << (8 * 1)) + y
118 110xxxxx BYTE y[2] : ( xxxxx << (8 * 2)) + y
119 ...
120 1111110x BYTE y[6] : ( x << (8 * 6)) + y
121 11111110 BYTE y[7] : y
122 11111111 BYTE y[8] : y
123
124
125
126 Property IDs
127 ------------
128
129 0x00 = kEnd
130
131 0x01 = kHeader
132
133 0x02 = kArchiveProperties
134
135 0x03 = kAdditionalStreamsInfo
136 0x04 = kMainStreamsInfo
137 0x05 = kFilesInfo
138
139 0x06 = kPackInfo
140 0x07 = kUnPackInfo
141 0x08 = kSubStreamsInfo
142
143 0x09 = kSize
144 0x0A = kCRC
145
146 0x0B = kFolder
147
148 0x0C = kCodersUnPackSize
149 0x0D = kNumUnPackStream
150
151 0x0E = kEmptyStream
152 0x0F = kEmptyFile
153 0x10 = kAnti
154
155 0x11 = kName
156 0x12 = kCTime
157 0x13 = kATime
158 0x14 = kMTime
159 0x15 = kWinAttributes
160 0x16 = kComment
161
162 0x17 = kEncodedHeader
163
164 0x18 = kStartPos
165 0x19 = kDummy
166
167
168 7z format headers
169 -----------------
170
171 SignatureHeader
172 ~~~~~~~~~~~~~~~
173 BYTE kSignature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C};
174
175 ArchiveVersion
176 {
177 BYTE Major; // now = 0
178 BYTE Minor; // now = 4
179 };
180
181 UINT32 StartHeaderCRC;
182
183 StartHeader
184 {
185 REAL_UINT64 NextHeaderOffset
186 REAL_UINT64 NextHeaderSize
187 UINT32 NextHeaderCRC
188 }
189
190
191 ...........................
192
193
194 ArchiveProperties
195 ~~~~~~~~~~~~~~~~~
196 BYTE NID::kArchiveProperties (0x02)
197 for (;;)
198 {
199 BYTE PropertyType;
200 if (aType == 0)
201 break;
202 UINT64 PropertySize;
203 BYTE PropertyData[PropertySize];
204 }
205
206
207 Digests (NumStreams)
208 ~~~~~~~~~~~~~~~~~~~~~
209 BYTE AllAreDefined
210 if (AllAreDefined == 0)
211 {
212 for(NumStreams)
213 BIT Defined
214 }
215 UINT32 CRCs[NumDefined]
216
217
218 PackInfo
219 ~~~~~~~~~~~~
220 BYTE NID::kPackInfo (0x06)
221 UINT64 PackPos
222 UINT64 NumPackStreams
223
224 []
225 BYTE NID::kSize (0x09)
226 UINT64 PackSizes[NumPackStreams]
227 []
228
229 []
230 BYTE NID::kCRC (0x0A)
231 PackStreamDigests[NumPackStreams]
232 []
233
234 BYTE NID::kEnd
235
236
237 Folder
238 ~~~~~~
239 UINT64 NumCoders;
240 for (NumCoders)
241 {
242 BYTE
243 {
244 0:3 CodecIdSize
245 4: Is Complex Coder
246 5: There Are Attributes
247 6: Reserved
248 7: There are more alternative methods. (Not used anymore, must be 0).
249 }
250 BYTE CodecId[CodecIdSize]
251 if (Is Complex Coder)
252 {
253 UINT64 NumInStreams;
254 UINT64 NumOutStreams;
255 }
256 if (There Are Attributes)
257 {
258 UINT64 PropertiesSize
259 BYTE Properties[PropertiesSize]
260 }
261 }
262
263 NumBindPairs = NumOutStreamsTotal - 1;
264
265 for (NumBindPairs)
266 {
267 UINT64 InIndex;
268 UINT64 OutIndex;
269 }
270
271 NumPackedStreams = NumInStreamsTotal - NumBindPairs;
272 if (NumPackedStreams > 1)
273 for(NumPackedStreams)
274 {
275 UINT64 Index;
276 };
277
278
279
280
281 Coders Info
282 ~~~~~~~~~~~
283
284 BYTE NID::kUnPackInfo (0x07)
285
286
287 BYTE NID::kFolder (0x0B)
288 UINT64 NumFolders
289 BYTE External
290 switch(External)
291 {
292 case 0:
293 Folders[NumFolders]
294 case 1:
295 UINT64 DataStreamIndex
296 }
297
298
299 BYTE ID::kCodersUnPackSize (0x0C)
300 for(Folders)
301 for(Folder.NumOutStreams)
302 UINT64 UnPackSize;
303
304
305 []
306 BYTE NID::kCRC (0x0A)
307 UnPackDigests[NumFolders]
308 []
309
310
311
312 BYTE NID::kEnd
313
314
315
316 SubStreams Info
317 ~~~~~~~~~~~~~~
318 BYTE NID::kSubStreamsInfo; (0x08)
319
320 []
321 BYTE NID::kNumUnPackStream; (0x0D)
322 UINT64 NumUnPackStreamsInFolders[NumFolders];
323 []
324
325
326 []
327 BYTE NID::kSize (0x09)
328 UINT64 UnPackSizes[]
329 []
330
331
332 []
333 BYTE NID::kCRC (0x0A)
334 Digests[Number of streams with unknown CRC]
335 []
336
337
338 BYTE NID::kEnd
339
340
341 Streams Info
342 ~~~~~~~~~~~~
343
344 []
345 PackInfo
346 []
347
348
349 []
350 CodersInfo
351 []
352
353
354 []
355 SubStreamsInfo
356 []
357
358 BYTE NID::kEnd
359
360
361 FilesInfo
362 ~~~~~~~~~
363 BYTE NID::kFilesInfo; (0x05)
364 UINT64 NumFiles
365
366 for (;;)
367 {
368 BYTE PropertyType;
369 if (aType == 0)
370 break;
371
372 UINT64 Size;
373
374 switch(PropertyType)
375 {
376 kEmptyStream: (0x0E)
377 for(NumFiles)
378 BIT IsEmptyStream
379
380 kEmptyFile: (0x0F)
381 for(EmptyStreams)
382 BIT IsEmptyFile
383
384 kAnti: (0x10)
385 for(EmptyStreams)
386 BIT IsAntiFile
387
388 case kCTime: (0x12)
389 case kATime: (0x13)
390 case kMTime: (0x14)
391 BYTE AllAreDefined
392 if (AllAreDefined == 0)
393 {
394 for(NumFiles)
395 BIT TimeDefined
396 }
397 BYTE External;
398 if(External != 0)
399 UINT64 DataIndex
400 []
401 for(Definded Items)
402 REAL_UINT64 Time
403 []
404
405 kNames: (0x11)
406 BYTE External;
407 if(External != 0)
408 UINT64 DataIndex
409 []
410 for(Files)
411 {
412 wchar_t Names[NameSize];
413 wchar_t 0;
414 }
415 []
416
417 kAttributes: (0x15)
418 BYTE AllAreDefined
419 if (AllAreDefined == 0)
420 {
421 for(NumFiles)
422 BIT AttributesAreDefined
423 }
424 BYTE External;
425 if(External != 0)
426 UINT64 DataIndex
427 []
428 for(Definded Attributes)
429 UINT32 Attributes
430 []
431 }
432 }
433
434
435 Header
436 ~~~~~~
437 BYTE NID::kHeader (0x01)
438
439 []
440 ArchiveProperties
441 []
442
443 []
444 BYTE NID::kAdditionalStreamsInfo; (0x03)
445 StreamsInfo
446 []
447
448 []
449 BYTE NID::kMainStreamsInfo; (0x04)
450 StreamsInfo
451 []
452
453 []
454 FilesInfo
455 []
456
457 BYTE NID::kEnd
458
459
460 HeaderInfo
461 ~~~~~~~~~~
462 []
463 BYTE NID::kEncodedHeader; (0x17)
464 StreamsInfo for Encoded Header
465 []
466
467
468 ---
469 End of document