1 | The following are the known types of zipfile extra fields as of this
|
---|
2 | writing. Extra fields are documented in PKWARE's appnote.txt and are
|
---|
3 | intended to allow for backward- and forward-compatible extensions to
|
---|
4 | the zipfile format. Multiple extra-field types may be chained together,
|
---|
5 | provided that the total length of all extra-field data is less than 64KB.
|
---|
6 | (In fact, PKWARE requires that the total length of the entire file header,
|
---|
7 | including timestamp, file attributes, filename, comment, extra field, etc.,
|
---|
8 | be no more than 64KB.)
|
---|
9 |
|
---|
10 | Each extra-field type (or subblock) must contain a four-byte header con-
|
---|
11 | sisting of a two-byte header ID and a two-byte length (little-endian) for
|
---|
12 | the remaining data in the subblock. If there are additional subblocks
|
---|
13 | within the extra field, the header for each one will appear immediately
|
---|
14 | following the data for the previous subblock (i.e., with no padding for
|
---|
15 | alignment).
|
---|
16 |
|
---|
17 | All integer fields in the descriptions below are in little-endian (Intel)
|
---|
18 | format unless otherwise specified. Note that "Short" means two bytes,
|
---|
19 | "Long" means four bytes, and "Long-Long" means eight bytes, regardless
|
---|
20 | of their native sizes. Unless specifically noted, all integer fields should
|
---|
21 | be interpreted as unsigned (non-negative) numbers.
|
---|
22 |
|
---|
23 | Christian Spieler, Ed Gordon, 20080717
|
---|
24 |
|
---|
25 | -------------------------
|
---|
26 |
|
---|
27 | Header ID's of 0 thru 31 are reserved for use by PKWARE.
|
---|
28 | The remaining ID's can be used by third party vendors for
|
---|
29 | proprietary usage.
|
---|
30 |
|
---|
31 | The current Header ID mappings defined by PKWARE are:
|
---|
32 |
|
---|
33 | 0x0001 Zip64 extended information extra field
|
---|
34 | 0x0007 AV Info
|
---|
35 | 0x0008 Reserved for extended language encoding data (PFS)
|
---|
36 | 0x0009 OS/2 extended attributes (also Info-ZIP)
|
---|
37 | 0x000a NTFS (Win9x/WinNT FileTimes)
|
---|
38 | 0x000c OpenVMS (also Info-ZIP)
|
---|
39 | 0x000d UNIX
|
---|
40 | 0x000e Reserved for file stream and fork descriptors
|
---|
41 | 0x000f Patch Descriptor
|
---|
42 | 0x0014 PKCS#7 Store for X.509 Certificates
|
---|
43 | 0x0015 X.509 Certificate ID and Signature for
|
---|
44 | individual file
|
---|
45 | 0x0016 X.509 Certificate ID for Central Directory
|
---|
46 | 0x0017 Strong Encryption Header
|
---|
47 | 0x0018 Record Management Controls
|
---|
48 | 0x0019 PKCS#7 Encryption Recipient Certificate List
|
---|
49 | 0x0065 IBM S/390 (Z390), AS/400 (I400) attributes
|
---|
50 | - uncompressed
|
---|
51 | 0x0066 Reserved for IBM S/390 (Z390), AS/400 (I400)
|
---|
52 | attributes - compressed
|
---|
53 | 0x4690 POSZIP 4690 (reserved)
|
---|
54 |
|
---|
55 | The Header ID mappings defined by Info-ZIP and third parties are:
|
---|
56 |
|
---|
57 | 0x07c8 Info-ZIP Macintosh (old, J. Lee)
|
---|
58 | 0x2605 ZipIt Macintosh (first version)
|
---|
59 | 0x2705 ZipIt Macintosh v 1.3.5 and newer (w/o full filename)
|
---|
60 | 0x2805 ZipIt Macintosh 1.3.5+
|
---|
61 | 0x334d Info-ZIP Macintosh (new, D. Haase's 'Mac3' field)
|
---|
62 | 0x4154 Tandem NSK
|
---|
63 | 0x4341 Acorn/SparkFS (David Pilling)
|
---|
64 | 0x4453 Windows NT security descriptor (binary ACL)
|
---|
65 | 0x4704 VM/CMS
|
---|
66 | 0x470f MVS
|
---|
67 | 0x4854 Theos, old inofficial port
|
---|
68 | 0x4b46 FWKCS MD5 (see below)
|
---|
69 | 0x4c41 OS/2 access control list (text ACL)
|
---|
70 | 0x4d49 Info-ZIP OpenVMS (obsolete)
|
---|
71 | 0x4d63 Macintosh SmartZIP, by Macro Bambini
|
---|
72 | 0x4f4c Xceed original location extra field
|
---|
73 | 0x5356 AOS/VS (binary ACL)
|
---|
74 | 0x5455 extended timestamp
|
---|
75 | 0x554e Xceed unicode extra field
|
---|
76 | 0x5855 Info-ZIP UNIX (original; also OS/2, NT, etc.)
|
---|
77 | 0x6375 Info-ZIP UTF-8 comment field
|
---|
78 | 0x6542 BeOS (BeBox, PowerMac, etc.)
|
---|
79 | 0x6854 Theos
|
---|
80 | 0x7075 Info-ZIP UTF-8 name field
|
---|
81 | 0x7441 AtheOS (AtheOS/Syllable attributes)
|
---|
82 | 0x756e ASi UNIX
|
---|
83 | 0x7855 Info-ZIP UNIX (16-bit UID/GID info)
|
---|
84 | 0x7875 Info-ZIP UNIX 3rd generation (generic UID/GID, ...)
|
---|
85 | 0xa220 Microsoft Open Packaging Growth Hint
|
---|
86 | 0xfb4a SMS/QDOS
|
---|
87 |
|
---|
88 | The following are detailed descriptions of the known extra-field block types:
|
---|
89 |
|
---|
90 | -Zip64 Extended Information Extra Field (0x0001):
|
---|
91 | ===============================================
|
---|
92 |
|
---|
93 | The following is the layout of the zip64 extended
|
---|
94 | information "extra" block. If one of the size or
|
---|
95 | offset fields in the Local or Central directory
|
---|
96 | record is too small to hold the required data,
|
---|
97 | a zip64 extended information record is created.
|
---|
98 | The order of the fields in the zip64 extended
|
---|
99 | information record is fixed, but the fields will
|
---|
100 | only appear if the corresponding Local or Central
|
---|
101 | directory record field is set to 0xFFFF or 0xFFFFFFFF.
|
---|
102 |
|
---|
103 | Note: all fields stored in Intel low-byte/high-byte order.
|
---|
104 |
|
---|
105 | Value Size Description
|
---|
106 | ----- ---- -----------
|
---|
107 | (ZIP64) 0x0001 2 bytes Tag for this "extra" block type
|
---|
108 | Size 2 bytes Size of this "extra" block
|
---|
109 | Original
|
---|
110 | Size 8 bytes Original uncompressed file size
|
---|
111 | Compressed
|
---|
112 | Size 8 bytes Size of compressed data
|
---|
113 | Relative Header
|
---|
114 | Offset 8 bytes Offset of local header record
|
---|
115 | Disk Start
|
---|
116 | Number 4 bytes Number of the disk on which
|
---|
117 | this file starts
|
---|
118 |
|
---|
119 | This entry in the Local header must include BOTH original
|
---|
120 | and compressed file size fields. If encrypting the
|
---|
121 | central directory and bit 13 of the general purpose bit
|
---|
122 | flag is set indicating masking, the value stored in the
|
---|
123 | Local Header for the original file size will be zero.
|
---|
124 |
|
---|
125 |
|
---|
126 | -OS/2 Extended Attributes Extra Field (0x0009):
|
---|
127 | =============================================
|
---|
128 |
|
---|
129 | The following is the layout of the OS/2 extended attributes "extra"
|
---|
130 | block. (Last Revision 19960922)
|
---|
131 |
|
---|
132 | Note: all fields stored in Intel low-byte/high-byte order.
|
---|
133 |
|
---|
134 | Local-header version:
|
---|
135 |
|
---|
136 | Value Size Description
|
---|
137 | ----- ---- -----------
|
---|
138 | (OS/2) 0x0009 Short tag for this extra block type
|
---|
139 | TSize Short total data size for this block
|
---|
140 | BSize Long uncompressed EA data size
|
---|
141 | CType Short compression type
|
---|
142 | EACRC Long CRC value for uncompressed EA data
|
---|
143 | (var.) variable compressed EA data
|
---|
144 |
|
---|
145 | Central-header version:
|
---|
146 |
|
---|
147 | Value Size Description
|
---|
148 | ----- ---- -----------
|
---|
149 | (OS/2) 0x0009 Short tag for this extra block type
|
---|
150 | TSize Short total data size for this block (4)
|
---|
151 | BSize Long size of uncompressed local EA data
|
---|
152 |
|
---|
153 | The value of CType is interpreted according to the "compression
|
---|
154 | method" section above; i.e., 0 for stored, 8 for deflated, etc.
|
---|
155 |
|
---|
156 | The OS/2 extended attribute structure (FEA2LIST) is
|
---|
157 | compressed and then stored in its entirety within this
|
---|
158 | structure. There will only ever be one "block" of data in
|
---|
159 | the variable-length field.
|
---|
160 |
|
---|
161 |
|
---|
162 | -OS/2 Access Control List Extra Field:
|
---|
163 | ====================================
|
---|
164 |
|
---|
165 | The following is the layout of the OS/2 ACL extra block.
|
---|
166 | (Last Revision 19960922)
|
---|
167 |
|
---|
168 | Local-header version:
|
---|
169 |
|
---|
170 | Value Size Description
|
---|
171 | ----- ---- -----------
|
---|
172 | (ACL) 0x4c41 Short tag for this extra block type ("AL")
|
---|
173 | TSize Short total data size for this block
|
---|
174 | BSize Long uncompressed ACL data size
|
---|
175 | CType Short compression type
|
---|
176 | EACRC Long CRC value for uncompressed ACL data
|
---|
177 | (var.) variable compressed ACL data
|
---|
178 |
|
---|
179 | Central-header version:
|
---|
180 |
|
---|
181 | Value Size Description
|
---|
182 | ----- ---- -----------
|
---|
183 | (ACL) 0x4c41 Short tag for this extra block type ("AL")
|
---|
184 | TSize Short total data size for this block (4)
|
---|
185 | BSize Long size of uncompressed local ACL data
|
---|
186 |
|
---|
187 | The value of CType is interpreted according to the "compression
|
---|
188 | method" section above; i.e., 0 for stored, 8 for deflated, etc.
|
---|
189 |
|
---|
190 | The uncompressed ACL data consist of a text header of the form
|
---|
191 | "ACL1:%hX,%hd\n", where the first field is the OS/2 ACCINFO acc_attr
|
---|
192 | member and the second is acc_count, followed by acc_count strings
|
---|
193 | of the form "%s,%hx\n", where the first field is acl_ugname (user
|
---|
194 | group name) and the second acl_access. This block type will be
|
---|
195 | extended for other operating systems as needed.
|
---|
196 |
|
---|
197 |
|
---|
198 | -Windows NT Security Descriptor Extra Field (0x4453):
|
---|
199 | ===================================================
|
---|
200 |
|
---|
201 | The following is the layout of the NT Security Descriptor (another
|
---|
202 | type of ACL) extra block. (Last Revision 19960922)
|
---|
203 |
|
---|
204 | Local-header version:
|
---|
205 |
|
---|
206 | Value Size Description
|
---|
207 | ----- ---- -----------
|
---|
208 | (SD) 0x4453 Short tag for this extra block type ("SD")
|
---|
209 | TSize Short total data size for this block
|
---|
210 | BSize Long uncompressed SD data size
|
---|
211 | Version Byte version of uncompressed SD data format
|
---|
212 | CType Short compression type
|
---|
213 | EACRC Long CRC value for uncompressed SD data
|
---|
214 | (var.) variable compressed SD data
|
---|
215 |
|
---|
216 | Central-header version:
|
---|
217 |
|
---|
218 | Value Size Description
|
---|
219 | ----- ---- -----------
|
---|
220 | (SD) 0x4453 Short tag for this extra block type ("SD")
|
---|
221 | TSize Short total data size for this block (4)
|
---|
222 | BSize Long size of uncompressed local SD data
|
---|
223 |
|
---|
224 | The value of CType is interpreted according to the "compression
|
---|
225 | method" section above; i.e., 0 for stored, 8 for deflated, etc.
|
---|
226 | Version specifies how the compressed data are to be interpreted
|
---|
227 | and allows for future expansion of this extra field type. Currently
|
---|
228 | only version 0 is defined.
|
---|
229 |
|
---|
230 | For version 0, the compressed data are to be interpreted as a single
|
---|
231 | valid Windows NT SECURITY_DESCRIPTOR data structure, in self-relative
|
---|
232 | format.
|
---|
233 |
|
---|
234 |
|
---|
235 | -PKWARE Win95/WinNT Extra Field (0x000a):
|
---|
236 | =======================================
|
---|
237 |
|
---|
238 | The following description covers PKWARE's "NTFS" attributes
|
---|
239 | "extra" block, introduced with the release of PKZIP 2.50 for
|
---|
240 | Windows. (Last Revision 20001118)
|
---|
241 |
|
---|
242 | (Note: At this time the Mtime, Atime and Ctime values may
|
---|
243 | be used on any WIN32 system.)
|
---|
244 | [Info-ZIP note: In the current implementations, this field has
|
---|
245 | a fixed total data size of 32 bytes and is only stored as local
|
---|
246 | extra field.]
|
---|
247 |
|
---|
248 | Value Size Description
|
---|
249 | ----- ---- -----------
|
---|
250 | (NTFS) 0x000a Short Tag for this "extra" block type
|
---|
251 | TSize Short Total Data Size for this block
|
---|
252 | Reserved Long for future use
|
---|
253 | Tag1 Short NTFS attribute tag value #1
|
---|
254 | Size1 Short Size of attribute #1, in bytes
|
---|
255 | (var.) SubSize1 Attribute #1 data
|
---|
256 | .
|
---|
257 | .
|
---|
258 | .
|
---|
259 | TagN Short NTFS attribute tag value #N
|
---|
260 | SizeN Short Size of attribute #N, in bytes
|
---|
261 | (var.) SubSizeN Attribute #N data
|
---|
262 |
|
---|
263 | For NTFS, values for Tag1 through TagN are as follows:
|
---|
264 | (currently only one set of attributes is defined for NTFS)
|
---|
265 |
|
---|
266 | Tag Size Description
|
---|
267 | ----- ---- -----------
|
---|
268 | 0x0001 2 bytes Tag for attribute #1
|
---|
269 | Size1 2 bytes Size of attribute #1, in bytes (24)
|
---|
270 | Mtime 8 bytes 64-bit NTFS file last modification time
|
---|
271 | Atime 8 bytes 64-bit NTFS file last access time
|
---|
272 | Ctime 8 bytes 64-bit NTFS file creation time
|
---|
273 |
|
---|
274 | The total length for this block is 28 bytes, resulting in a
|
---|
275 | fixed size value of 32 for the TSize field of the NTFS block.
|
---|
276 |
|
---|
277 | The NTFS filetimes are 64-bit unsigned integers, stored in Intel
|
---|
278 | (least significant byte first) byte order. They determine the
|
---|
279 | number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch",
|
---|
280 | which is "01-Jan-1601 00:00:00 UTC".
|
---|
281 |
|
---|
282 |
|
---|
283 | -PKWARE OpenVMS Extra Field (0x000c):
|
---|
284 | ===================================
|
---|
285 |
|
---|
286 | The following is the layout of PKWARE's OpenVMS attributes
|
---|
287 | "extra" block. (Last Revision 12/17/91)
|
---|
288 |
|
---|
289 | Note: all fields stored in Intel low-byte/high-byte order.
|
---|
290 |
|
---|
291 | Value Size Description
|
---|
292 | ----- ---- -----------
|
---|
293 | (VMS) 0x000c Short Tag for this "extra" block type
|
---|
294 | TSize Short Total Data Size for this block
|
---|
295 | CRC Long 32-bit CRC for remainder of the block
|
---|
296 | Tag1 Short OpenVMS attribute tag value #1
|
---|
297 | Size1 Short Size of attribute #1, in bytes
|
---|
298 | (var.) Size1 Attribute #1 data
|
---|
299 | .
|
---|
300 | .
|
---|
301 | .
|
---|
302 | TagN Short OpenVMS attribute tag value #N
|
---|
303 | SizeN Short Size of attribute #N, in bytes
|
---|
304 | (var.) SizeN Attribute #N data
|
---|
305 |
|
---|
306 | Rules:
|
---|
307 |
|
---|
308 | 1. There will be one or more of attributes present, which
|
---|
309 | will each be preceded by the above TagX & SizeX values.
|
---|
310 | These values are identical to the ATR$C_XXXX and
|
---|
311 | ATR$S_XXXX constants which are defined in ATR.H under
|
---|
312 | OpenVMS C. Neither of these values will ever be zero.
|
---|
313 |
|
---|
314 | 2. No word alignment or padding is performed.
|
---|
315 |
|
---|
316 | 3. A well-behaved PKZIP/OpenVMS program should never produce
|
---|
317 | more than one sub-block with the same TagX value. Also,
|
---|
318 | there will never be more than one "extra" block of type
|
---|
319 | 0x000c in a particular directory record.
|
---|
320 |
|
---|
321 |
|
---|
322 | -Info-ZIP VMS Extra Field:
|
---|
323 | ========================
|
---|
324 |
|
---|
325 | The following is the layout of Info-ZIP's VMS attributes extra
|
---|
326 | block for VAX or Alpha AXP. The local-header and central-header
|
---|
327 | versions are identical. (Last Revision 19960922)
|
---|
328 |
|
---|
329 | Value Size Description
|
---|
330 | ----- ---- -----------
|
---|
331 | (VMS2) 0x4d49 Short tag for this extra block type ("JM")
|
---|
332 | TSize Short total data size for this block
|
---|
333 | ID Long block ID
|
---|
334 | Flags Short info bytes
|
---|
335 | BSize Short uncompressed block size
|
---|
336 | Reserved Long (reserved)
|
---|
337 | (var.) variable compressed VMS file-attributes block
|
---|
338 |
|
---|
339 | The block ID is one of the following unterminated strings:
|
---|
340 |
|
---|
341 | "VFAB" struct FAB
|
---|
342 | "VALL" struct XABALL
|
---|
343 | "VFHC" struct XABFHC
|
---|
344 | "VDAT" struct XABDAT
|
---|
345 | "VRDT" struct XABRDT
|
---|
346 | "VPRO" struct XABPRO
|
---|
347 | "VKEY" struct XABKEY
|
---|
348 | "VMSV" version (e.g., "V6.1"; truncated at hyphen)
|
---|
349 | "VNAM" reserved
|
---|
350 |
|
---|
351 | The lower three bits of Flags indicate the compression method. The
|
---|
352 | currently defined methods are:
|
---|
353 |
|
---|
354 | 0 stored (not compressed)
|
---|
355 | 1 simple "RLE"
|
---|
356 | 2 deflated
|
---|
357 |
|
---|
358 | The "RLE" method simply replaces zero-valued bytes with zero-valued
|
---|
359 | bits and non-zero-valued bytes with a "1" bit followed by the byte
|
---|
360 | value.
|
---|
361 |
|
---|
362 | The variable-length compressed data contains only the data corre-
|
---|
363 | sponding to the indicated structure or string. Typically multiple
|
---|
364 | VMS2 extra fields are present (each with a unique block type).
|
---|
365 |
|
---|
366 |
|
---|
367 | -Info-ZIP Macintosh Extra Field:
|
---|
368 | ==============================
|
---|
369 |
|
---|
370 | The following is the layout of the (old) Info-ZIP resource-fork extra
|
---|
371 | block for Macintosh. The local-header and central-header versions
|
---|
372 | are identical. (Last Revision 19960922)
|
---|
373 |
|
---|
374 | Value Size Description
|
---|
375 | ----- ---- -----------
|
---|
376 | (Mac) 0x07c8 Short tag for this extra block type
|
---|
377 | TSize Short total data size for this block
|
---|
378 | "JLEE" beLong extra-field signature
|
---|
379 | FInfo 16 bytes Macintosh FInfo structure
|
---|
380 | CrDat beLong HParamBlockRec fileParam.ioFlCrDat
|
---|
381 | MdDat beLong HParamBlockRec fileParam.ioFlMdDat
|
---|
382 | Flags beLong info bits
|
---|
383 | DirID beLong HParamBlockRec fileParam.ioDirID
|
---|
384 | VolName 28 bytes volume name (optional)
|
---|
385 |
|
---|
386 | All fields but the first two are in native Macintosh format
|
---|
387 | (big-endian Motorola order, not little-endian Intel). The least
|
---|
388 | significant bit of Flags is 1 if the file is a data fork, 0 other-
|
---|
389 | wise. In addition, if this extra field is present, the filename
|
---|
390 | has an extra 'd' or 'r' appended to indicate data fork or resource
|
---|
391 | fork. The 28-byte VolName field may be omitted.
|
---|
392 |
|
---|
393 |
|
---|
394 | -ZipIt Macintosh Extra Field (long):
|
---|
395 | ==================================
|
---|
396 |
|
---|
397 | The following is the layout of the ZipIt extra block for Macintosh.
|
---|
398 | The local-header and central-header versions are identical.
|
---|
399 | (Last Revision 19970130)
|
---|
400 |
|
---|
401 | Value Size Description
|
---|
402 | ----- ---- -----------
|
---|
403 | (Mac2) 0x2605 Short tag for this extra block type
|
---|
404 | TSize Short total data size for this block
|
---|
405 | "ZPIT" beLong extra-field signature
|
---|
406 | FnLen Byte length of FileName
|
---|
407 | FileName variable full Macintosh filename
|
---|
408 | FileType Byte[4] four-byte Mac file type string
|
---|
409 | Creator Byte[4] four-byte Mac creator string
|
---|
410 |
|
---|
411 |
|
---|
412 | -ZipIt Macintosh Extra Field (short, for files):
|
---|
413 | ==============================================
|
---|
414 |
|
---|
415 | The following is the layout of a shortened variant of the
|
---|
416 | ZipIt extra block for Macintosh (without "full name" entry).
|
---|
417 | This variant is used by ZipIt 1.3.5 and newer for entries of
|
---|
418 | files (not directories) that do not have a MacBinary encoded
|
---|
419 | file. The local-header and central-header versions are identical.
|
---|
420 | (Last Revision 20030602)
|
---|
421 |
|
---|
422 | Value Size Description
|
---|
423 | ----- ---- -----------
|
---|
424 | (Mac2b) 0x2705 Short tag for this extra block type
|
---|
425 | TSize Short total data size for this block (min. 12)
|
---|
426 | "ZPIT" beLong extra-field signature
|
---|
427 | FileType Byte[4] four-byte Mac file type string
|
---|
428 | Creator Byte[4] four-byte Mac creator string
|
---|
429 | fdFlags beShort attributes from FInfo.frFlags,
|
---|
430 | may be omitted
|
---|
431 | 0x0000 beShort reserved, may be omitted
|
---|
432 |
|
---|
433 |
|
---|
434 | -ZipIt Macintosh Extra Field (short, for directories):
|
---|
435 | ====================================================
|
---|
436 |
|
---|
437 | The following is the layout of a shortened variant of the
|
---|
438 | ZipIt extra block for Macintosh used only for directory
|
---|
439 | entries. This variant is used by ZipIt 1.3.5 and newer to
|
---|
440 | save some optional Mac-specific information about directories.
|
---|
441 | The local-header and central-header versions are identical.
|
---|
442 |
|
---|
443 | Value Size Description
|
---|
444 | ----- ---- -----------
|
---|
445 | (Mac2c) 0x2805 Short tag for this extra block type
|
---|
446 | TSize Short total data size for this block (12)
|
---|
447 | "ZPIT" beLong extra-field signature
|
---|
448 | frFlags beShort attributes from DInfo.frFlags, may
|
---|
449 | be omitted
|
---|
450 | View beShort ZipIt view flag, may be omitted
|
---|
451 |
|
---|
452 |
|
---|
453 | The View field specifies ZipIt-internal settings as follows:
|
---|
454 |
|
---|
455 | Bits of the Flags:
|
---|
456 | bit 0 if set, the folder is shown expanded (open)
|
---|
457 | when the archive contents are viewed in ZipIt.
|
---|
458 | bits 1-15 reserved, zero;
|
---|
459 |
|
---|
460 |
|
---|
461 | -Info-ZIP Macintosh Extra Field (new):
|
---|
462 | ====================================
|
---|
463 |
|
---|
464 | The following is the layout of the (new) Info-ZIP extra
|
---|
465 | block for Macintosh, designed by Dirk Haase.
|
---|
466 | All values are in little-endian.
|
---|
467 | (Last Revision 19981005)
|
---|
468 |
|
---|
469 | Local-header version:
|
---|
470 |
|
---|
471 | Value Size Description
|
---|
472 | ----- ---- -----------
|
---|
473 | (Mac3) 0x334d Short tag for this extra block type ("M3")
|
---|
474 | TSize Short total data size for this block
|
---|
475 | BSize Long uncompressed finder attribute data size
|
---|
476 | Flags Short info bits
|
---|
477 | fdType Byte[4] Type of the File (4-byte string)
|
---|
478 | fdCreator Byte[4] Creator of the File (4-byte string)
|
---|
479 | (CType) Short compression type
|
---|
480 | (CRC) Long CRC value for uncompressed MacOS data
|
---|
481 | Attribs variable finder attribute data (see below)
|
---|
482 |
|
---|
483 |
|
---|
484 | Central-header version:
|
---|
485 |
|
---|
486 | Value Size Description
|
---|
487 | ----- ---- -----------
|
---|
488 | (Mac3) 0x334d Short tag for this extra block type ("M3")
|
---|
489 | TSize Short total data size for this block
|
---|
490 | BSize Long uncompressed finder attribute data size
|
---|
491 | Flags Short info bits
|
---|
492 | fdType Byte[4] Type of the File (4-byte string)
|
---|
493 | fdCreator Byte[4] Creator of the File (4-byte string)
|
---|
494 |
|
---|
495 | The third bit of Flags in both headers indicates whether
|
---|
496 | the LOCAL extra field is uncompressed (and therefore whether CType
|
---|
497 | and CRC are omitted):
|
---|
498 |
|
---|
499 | Bits of the Flags:
|
---|
500 | bit 0 if set, file is a data fork; otherwise unset
|
---|
501 | bit 1 if set, filename will be not changed
|
---|
502 | bit 2 if set, Attribs is uncompressed (no CType, CRC)
|
---|
503 | bit 3 if set, date and times are in 64 bit
|
---|
504 | if zero date and times are in 32 bit.
|
---|
505 | bit 4 if set, timezone offsets fields for the native
|
---|
506 | Mac times are omitted (UTC support deactivated)
|
---|
507 | bits 5-15 reserved;
|
---|
508 |
|
---|
509 |
|
---|
510 | Attributes:
|
---|
511 |
|
---|
512 | Attribs is a Mac-specific block of data in little-endian format with
|
---|
513 | the following structure (if compressed, uncompress it first):
|
---|
514 |
|
---|
515 | Value Size Description
|
---|
516 | ----- ---- -----------
|
---|
517 | fdFlags Short Finder Flags
|
---|
518 | fdLocation.v Short Finder Icon Location
|
---|
519 | fdLocation.h Short Finder Icon Location
|
---|
520 | fdFldr Short Folder containing file
|
---|
521 |
|
---|
522 | FXInfo 16 bytes Macintosh FXInfo structure
|
---|
523 | FXInfo-Structure:
|
---|
524 | fdIconID Short
|
---|
525 | fdUnused[3] Short unused but reserved 6 bytes
|
---|
526 | fdScript Byte Script flag and number
|
---|
527 | fdXFlags Byte More flag bits
|
---|
528 | fdComment Short Comment ID
|
---|
529 | fdPutAway Long Home Dir ID
|
---|
530 |
|
---|
531 | FVersNum Byte file version number
|
---|
532 | may be not used by MacOS
|
---|
533 | ACUser Byte directory access rights
|
---|
534 |
|
---|
535 | FlCrDat ULong date and time of creation
|
---|
536 | FlMdDat ULong date and time of last modification
|
---|
537 | FlBkDat ULong date and time of last backup
|
---|
538 | These time numbers are original Mac FileTime values (local time!).
|
---|
539 | Currently, date-time width is 32-bit, but future version may
|
---|
540 | support be 64-bit times (see flags)
|
---|
541 |
|
---|
542 | CrGMTOffs Long(signed!) difference "local Creat. time - UTC"
|
---|
543 | MdGMTOffs Long(signed!) difference "local Modif. time - UTC"
|
---|
544 | BkGMTOffs Long(signed!) difference "local Backup time - UTC"
|
---|
545 | These "local time - UTC" differences (stored in seconds) may be
|
---|
546 | used to support timestamp adjustment after inter-timezone transfer.
|
---|
547 | These fields are optional; bit 4 of the flags word controls their
|
---|
548 | presence.
|
---|
549 |
|
---|
550 | Charset Short TextEncodingBase (Charset)
|
---|
551 | valid for the following two fields
|
---|
552 |
|
---|
553 | FullPath variable Path of the current file.
|
---|
554 | Zero terminated string (C-String)
|
---|
555 | Currently coded in the native Charset.
|
---|
556 |
|
---|
557 | Comment variable Finder Comment of the current file.
|
---|
558 | Zero terminated string (C-String)
|
---|
559 | Currently coded in the native Charset.
|
---|
560 |
|
---|
561 |
|
---|
562 | -SmartZIP Macintosh Extra Field:
|
---|
563 | ====================================
|
---|
564 |
|
---|
565 | The following is the layout of the SmartZIP extra
|
---|
566 | block for Macintosh, designed by Marco Bambini.
|
---|
567 |
|
---|
568 | Local-header version:
|
---|
569 |
|
---|
570 | Value Size Description
|
---|
571 | ----- ---- -----------
|
---|
572 | 0x4d63 Short tag for this extra block type ("cM")
|
---|
573 | TSize Short total data size for this block (64)
|
---|
574 | "dZip" beLong extra-field signature
|
---|
575 | fdType Byte[4] Type of the File (4-byte string)
|
---|
576 | fdCreator Byte[4] Creator of the File (4-byte string)
|
---|
577 | fdFlags beShort Finder Flags
|
---|
578 | fdLocation.v beShort Finder Icon Location
|
---|
579 | fdLocation.h beShort Finder Icon Location
|
---|
580 | fdFldr beShort Folder containing file
|
---|
581 | CrDat beLong HParamBlockRec fileParam.ioFlCrDat
|
---|
582 | MdDat beLong HParamBlockRec fileParam.ioFlMdDat
|
---|
583 | frScroll.v Byte vertical pos. of folder's scroll bar
|
---|
584 | fdScript Byte Script flag and number
|
---|
585 | frScroll.h Byte horizontal pos. of folder's scroll bar
|
---|
586 | fdXFlags Byte More flag bits
|
---|
587 | FileName Byte[32] full Macintosh filename (pascal string)
|
---|
588 |
|
---|
589 | All fields but the first two are in native Macintosh format
|
---|
590 | (big-endian Motorola order, not little-endian Intel).
|
---|
591 | The extra field size is fixed to 64 bytes.
|
---|
592 | The local-header and central-header versions are identical.
|
---|
593 |
|
---|
594 |
|
---|
595 | -Acorn SparkFS Extra Field:
|
---|
596 | =========================
|
---|
597 |
|
---|
598 | The following is the layout of David Pilling's SparkFS extra block
|
---|
599 | for Acorn RISC OS. The local-header and central-header versions are
|
---|
600 | identical. (Last Revision 19960922)
|
---|
601 |
|
---|
602 | Value Size Description
|
---|
603 | ----- ---- -----------
|
---|
604 | (Acorn) 0x4341 Short tag for this extra block type ("AC")
|
---|
605 | TSize Short total data size for this block (20)
|
---|
606 | "ARC0" Long extra-field signature
|
---|
607 | LoadAddr Long load address or file type
|
---|
608 | ExecAddr Long exec address
|
---|
609 | Attr Long file permissions
|
---|
610 | Zero Long reserved; always zero
|
---|
611 |
|
---|
612 | The following bits of Attr are associated with the given file
|
---|
613 | permissions:
|
---|
614 |
|
---|
615 | bit 0 user-writable ('W')
|
---|
616 | bit 1 user-readable ('R')
|
---|
617 | bit 2 reserved
|
---|
618 | bit 3 locked ('L')
|
---|
619 | bit 4 publicly writable ('w')
|
---|
620 | bit 5 publicly readable ('r')
|
---|
621 | bit 6 reserved
|
---|
622 | bit 7 reserved
|
---|
623 |
|
---|
624 |
|
---|
625 | -VM/CMS Extra Field:
|
---|
626 | ==================
|
---|
627 |
|
---|
628 | The following is the layout of the file-attributes extra block for
|
---|
629 | VM/CMS. The local-header and central-header versions are
|
---|
630 | identical. (Last Revision 19960922)
|
---|
631 |
|
---|
632 | Value Size Description
|
---|
633 | ----- ---- -----------
|
---|
634 | (VM/CMS) 0x4704 Short tag for this extra block type
|
---|
635 | TSize Short total data size for this block
|
---|
636 | flData variable file attributes data
|
---|
637 |
|
---|
638 | flData is an uncompressed fldata_t struct.
|
---|
639 |
|
---|
640 |
|
---|
641 | -MVS Extra Field:
|
---|
642 | ===============
|
---|
643 |
|
---|
644 | The following is the layout of the file-attributes extra block for
|
---|
645 | MVS. The local-header and central-header versions are identical.
|
---|
646 | (Last Revision 19960922)
|
---|
647 |
|
---|
648 | Value Size Description
|
---|
649 | ----- ---- -----------
|
---|
650 | (MVS) 0x470f Short tag for this extra block type
|
---|
651 | TSize Short total data size for this block
|
---|
652 | flData variable file attributes data
|
---|
653 |
|
---|
654 | flData is an uncompressed fldata_t struct.
|
---|
655 |
|
---|
656 |
|
---|
657 | -PKWARE Unix Extra Field (0x000d):
|
---|
658 | ================================
|
---|
659 |
|
---|
660 | The following is the layout of PKWARE's Unix "extra" block.
|
---|
661 | It was introduced with the release of PKZIP for Unix 2.50.
|
---|
662 | Note: all fields are stored in Intel low-byte/high-byte order.
|
---|
663 | (Last Revision 19980901)
|
---|
664 |
|
---|
665 | This field has a minimum data size of 12 bytes and is only stored
|
---|
666 | as local extra field.
|
---|
667 |
|
---|
668 | Value Size Description
|
---|
669 | ----- ---- -----------
|
---|
670 | (Unix0) 0x000d Short Tag for this "extra" block type
|
---|
671 | TSize Short Total Data Size for this block
|
---|
672 | AcTime Long time of last access (UTC/GMT)
|
---|
673 | ModTime Long time of last modification (UTC/GMT)
|
---|
674 | UID Short Unix user ID
|
---|
675 | GID Short Unix group ID
|
---|
676 | (var) variable Variable length data field
|
---|
677 |
|
---|
678 | The variable length data field will contain file type
|
---|
679 | specific data. Currently the only values allowed are
|
---|
680 | the original "linked to" file names for hard or symbolic
|
---|
681 | links, and the major and minor device node numbers for
|
---|
682 | character and block device nodes. Since device nodes
|
---|
683 | cannot be either symbolic or hard links, only one set of
|
---|
684 | variable length data is stored. Link files will have the
|
---|
685 | name of the original file stored. This name is NOT NULL
|
---|
686 | terminated. Its size can be determined by checking TSize -
|
---|
687 | 12. Device entries will have eight bytes stored as two 4
|
---|
688 | byte entries (in little-endian format). The first entry
|
---|
689 | will be the major device number, and the second the minor
|
---|
690 | device number.
|
---|
691 |
|
---|
692 | [Info-ZIP note: The fixed part of this field has the same layout as
|
---|
693 | Info-ZIP's abandoned "Unix1 timestamps & owner ID info" extra field;
|
---|
694 | only the two tag bytes are different.]
|
---|
695 |
|
---|
696 |
|
---|
697 | -PATCH Descriptor Extra Field (0x000f):
|
---|
698 | =====================================
|
---|
699 |
|
---|
700 | The following is the layout of the Patch Descriptor "extra"
|
---|
701 | block.
|
---|
702 |
|
---|
703 | Note: all fields stored in Intel low-byte/high-byte order.
|
---|
704 |
|
---|
705 | Value Size Description
|
---|
706 | ----- ---- -----------
|
---|
707 | (Patch) 0x000f Short Tag for this "extra" block type
|
---|
708 | TSize Short Size of the total "extra" block
|
---|
709 | Version Short Version of the descriptor
|
---|
710 | Flags Long Actions and reactions (see below)
|
---|
711 | OldSize Long Size of the file about to be patched
|
---|
712 | OldCRC Long 32-bit CRC of the file about to be patched
|
---|
713 | NewSize Long Size of the resulting file
|
---|
714 | NewCRC Long 32-bit CRC of the resulting file
|
---|
715 |
|
---|
716 |
|
---|
717 | Actions and reactions
|
---|
718 |
|
---|
719 | Bits Description
|
---|
720 | ---- ----------------
|
---|
721 | 0 Use for auto detection
|
---|
722 | 1 Treat as a self-patch
|
---|
723 | 2-3 RESERVED
|
---|
724 | 4-5 Action (see below)
|
---|
725 | 6-7 RESERVED
|
---|
726 | 8-9 Reaction (see below) to absent file
|
---|
727 | 10-11 Reaction (see below) to newer file
|
---|
728 | 12-13 Reaction (see below) to unknown file
|
---|
729 | 14-15 RESERVED
|
---|
730 | 16-31 RESERVED
|
---|
731 |
|
---|
732 | Actions
|
---|
733 |
|
---|
734 | Action Value
|
---|
735 | ------ -----
|
---|
736 | none 0
|
---|
737 | add 1
|
---|
738 | delete 2
|
---|
739 | patch 3
|
---|
740 |
|
---|
741 | Reactions
|
---|
742 |
|
---|
743 | Reaction Value
|
---|
744 | -------- -----
|
---|
745 | ask 0
|
---|
746 | skip 1
|
---|
747 | ignore 2
|
---|
748 | fail 3
|
---|
749 |
|
---|
750 | Patch support is provided by PKPatchMaker(tm) technology and is
|
---|
751 | covered under U.S. Patents and Patents Pending. The use or
|
---|
752 | implementation in a product of certain technological aspects set
|
---|
753 | forth in the current APPNOTE, including those with regard to
|
---|
754 | strong encryption, patching, or extended tape operations requires
|
---|
755 | a license from PKWARE. Please contact PKWARE with regard to
|
---|
756 | acquiring a license.
|
---|
757 |
|
---|
758 |
|
---|
759 | -PKCS#7 Store for X.509 Certificates (0x0014):
|
---|
760 | ============================================
|
---|
761 |
|
---|
762 | This field contains information about each of the certificates
|
---|
763 | files may be signed with. When the Central Directory Encryption
|
---|
764 | feature is enabled for a ZIP file, this record will appear in
|
---|
765 | the Archive Extra Data Record, otherwise it will appear in the
|
---|
766 | first central directory record and will be ignored in any
|
---|
767 | other record.
|
---|
768 |
|
---|
769 | Note: all fields stored in Intel low-byte/high-byte order.
|
---|
770 |
|
---|
771 | Value Size Description
|
---|
772 | ----- ---- -----------
|
---|
773 | (Store) 0x0014 2 bytes Tag for this "extra" block type
|
---|
774 | TSize 2 bytes Size of the store data
|
---|
775 | SData TSize Data about the store
|
---|
776 |
|
---|
777 | SData
|
---|
778 | Value Size Description
|
---|
779 | ----- ---- -----------
|
---|
780 | Version 2 bytes Version number, 0x0001 for now
|
---|
781 | StoreD (variable) Actual store data
|
---|
782 |
|
---|
783 | The StoreD member is suitable for passing as the pbData
|
---|
784 | member of a CRYPT_DATA_BLOB to the CertOpenStore() function
|
---|
785 | in Microsoft's CryptoAPI. The SSize member above will be
|
---|
786 | cbData + 6, where cbData is the cbData member of the same
|
---|
787 | CRYPT_DATA_BLOB. The encoding type to pass to
|
---|
788 | CertOpenStore() should be
|
---|
789 | PKCS_7_ANS_ENCODING | X509_ASN_ENCODING.
|
---|
790 |
|
---|
791 |
|
---|
792 | -X.509 Certificate ID and Signature for individual file (0x0015):
|
---|
793 | ===============================================================
|
---|
794 |
|
---|
795 | This field contains the information about which certificate in
|
---|
796 | the PKCS#7 store was used to sign a particular file. It also
|
---|
797 | contains the signature data. This field can appear multiple
|
---|
798 | times, but can only appear once per certificate.
|
---|
799 |
|
---|
800 | Note: all fields stored in Intel low-byte/high-byte order.
|
---|
801 |
|
---|
802 | Value Size Description
|
---|
803 | ----- ---- -----------
|
---|
804 | (CID) 0x0015 2 bytes Tag for this "extra" block type
|
---|
805 | CSize 2 bytes Size of Method
|
---|
806 | Method (variable)
|
---|
807 |
|
---|
808 | Method
|
---|
809 | Value Size Description
|
---|
810 | ----- ---- -----------
|
---|
811 | Version 2 bytes Version number, for now 0x0001
|
---|
812 | AlgID 2 bytes Algorithm ID used for signing
|
---|
813 | IDSize 2 bytes Size of Certificate ID data
|
---|
814 | CertID (variable) Certificate ID data
|
---|
815 | SigSize 2 bytes Size of Signature data
|
---|
816 | Sig (variable) Signature data
|
---|
817 |
|
---|
818 | CertID
|
---|
819 | Value Size Description
|
---|
820 | ----- ---- -----------
|
---|
821 | Size1 4 bytes Size of CertID, should be (IDSize - 4)
|
---|
822 | Size1 4 bytes A bug in version one causes this value
|
---|
823 | to appear twice.
|
---|
824 | IssSize 4 bytes Issuer data size
|
---|
825 | Issuer (variable) Issuer data
|
---|
826 | SerSize 4 bytes Serial Number size
|
---|
827 | Serial (variable) Serial Number data
|
---|
828 |
|
---|
829 | The Issuer and IssSize members are suitable for creating a
|
---|
830 | CRYPT_DATA_BLOB to be the Issuer member of a CERT_INFO
|
---|
831 | struct. The Serial and SerSize members would be the
|
---|
832 | SerialNumber member of the same CERT_INFO struct. This
|
---|
833 | struct would be used to find the certificate in the store
|
---|
834 | the file was signed with. Those structures are from the MS
|
---|
835 | CryptoAPI.
|
---|
836 |
|
---|
837 | Sig and SigSize are the actual signature data and size
|
---|
838 | generated by signing the file with the MS CryptoAPI using a
|
---|
839 | hash created with the given AlgID.
|
---|
840 |
|
---|
841 |
|
---|
842 | -X.509 Certificate ID and Signature for central directory (0x0016):
|
---|
843 | =================================================================
|
---|
844 |
|
---|
845 | This field contains the information about which certificate in
|
---|
846 | the PKCS#7 store was used to sign the central directory structure.
|
---|
847 | When the Central Directory Encryption feature is enabled for a
|
---|
848 | ZIP file, this record will appear in the Archive Extra Data Record,
|
---|
849 | otherwise it will appear in the first central directory record,
|
---|
850 | along with the store. The data structure is the
|
---|
851 | same as the CID, except that SigSize will be 0, and there
|
---|
852 | will be no Sig member.
|
---|
853 |
|
---|
854 | This field is also kept after the last central directory
|
---|
855 | record, as the signature data (ID 0x05054b50, it looks like
|
---|
856 | a central directory record of a different type). This
|
---|
857 | second copy of the data is the Signature Data member of the
|
---|
858 | record, and will have a SigSize that is non-zero, and will
|
---|
859 | have Sig data.
|
---|
860 |
|
---|
861 | Note: all fields stored in Intel low-byte/high-byte order.
|
---|
862 |
|
---|
863 | Value Size Description
|
---|
864 | ----- ---- -----------
|
---|
865 | (CDID) 0x0016 2 bytes Tag for this "extra" block type
|
---|
866 | TSize 2 bytes Size of data that follows
|
---|
867 | TData TSize Data
|
---|
868 |
|
---|
869 |
|
---|
870 | -Strong Encryption Header (0x0017):
|
---|
871 | =================================
|
---|
872 |
|
---|
873 | Value Size Description
|
---|
874 | ----- ---- -----------
|
---|
875 | 0x0017 2 bytes Tag for this "extra" block type
|
---|
876 | TSize 2 bytes Size of data that follows
|
---|
877 | Format 2 bytes Format definition for this record
|
---|
878 | AlgID 2 bytes Encryption algorithm identifier
|
---|
879 | Bitlen 2 bytes Bit length of encryption key
|
---|
880 | Flags 2 bytes Processing flags
|
---|
881 | CertData TSize-8 Certificate decryption extra field data
|
---|
882 | (refer to the explanation for CertData
|
---|
883 | in the section describing the
|
---|
884 | Certificate Processing Method under
|
---|
885 | the Strong Encryption Specification)
|
---|
886 |
|
---|
887 |
|
---|
888 | -Record Management Controls (0x0018):
|
---|
889 | ===================================
|
---|
890 |
|
---|
891 | Value Size Description
|
---|
892 | ----- ---- -----------
|
---|
893 | (Rec-CTL) 0x0018 2 bytes Tag for this "extra" block type
|
---|
894 | CSize 2 bytes Size of total extra block data
|
---|
895 | Tag1 2 bytes Record control attribute 1
|
---|
896 | Size1 2 bytes Size of attribute 1, in bytes
|
---|
897 | Data1 Size1 Attribute 1 data
|
---|
898 | .
|
---|
899 | .
|
---|
900 | .
|
---|
901 | TagN 2 bytes Record control attribute N
|
---|
902 | SizeN 2 bytes Size of attribute N, in bytes
|
---|
903 | DataN SizeN Attribute N data
|
---|
904 |
|
---|
905 |
|
---|
906 | -PKCS#7 Encryption Recipient Certificate List (0x0019):
|
---|
907 | =====================================================
|
---|
908 |
|
---|
909 | This field contains information about each of the certificates
|
---|
910 | used in encryption processing and it can be used to identify who is
|
---|
911 | allowed to decrypt encrypted files. This field should only appear
|
---|
912 | in the archive extra data record. This field is not required and
|
---|
913 | serves only to aide archive modifications by preserving public
|
---|
914 | encryption key data. Individual security requirements may dictate
|
---|
915 | that this data be omitted to deter information exposure.
|
---|
916 |
|
---|
917 | Note: all fields stored in Intel low-byte/high-byte order.
|
---|
918 |
|
---|
919 | Value Size Description
|
---|
920 | ----- ---- -----------
|
---|
921 | (CStore) 0x0019 2 bytes Tag for this "extra" block type
|
---|
922 | TSize 2 bytes Size of the store data
|
---|
923 | TData TSize Data about the store
|
---|
924 |
|
---|
925 | TData:
|
---|
926 |
|
---|
927 | Value Size Description
|
---|
928 | ----- ---- -----------
|
---|
929 | Version 2 bytes Format version number - must 0x0001 at this time
|
---|
930 | CStore (var) PKCS#7 data blob
|
---|
931 |
|
---|
932 |
|
---|
933 | -MVS Extra Field (PKWARE, 0x0065):
|
---|
934 | ================================
|
---|
935 |
|
---|
936 | The following is the layout of the MVS "extra" block.
|
---|
937 | Note: Some fields are stored in Big Endian format.
|
---|
938 | All text is in EBCDIC format unless otherwise specified.
|
---|
939 |
|
---|
940 | Value Size Description
|
---|
941 | ----- ---- -----------
|
---|
942 | (MVS) 0x0065 2 bytes Tag for this "extra" block type
|
---|
943 | TSize 2 bytes Size for the following data block
|
---|
944 | ID 4 bytes EBCDIC "Z390" 0xE9F3F9F0 or
|
---|
945 | "T4MV" for TargetFour
|
---|
946 | (var) TSize-4 Attribute data
|
---|
947 |
|
---|
948 |
|
---|
949 | -OS/400 Extra Field (0x0065):
|
---|
950 | ===========================
|
---|
951 |
|
---|
952 | The following is the layout of the OS/400 "extra" block.
|
---|
953 | Note: Some fields are stored in Big Endian format.
|
---|
954 | All text is in EBCDIC format unless otherwise specified.
|
---|
955 |
|
---|
956 | Value Size Description
|
---|
957 | ----- ---- -----------
|
---|
958 | (OS400) 0x0065 2 bytes Tag for this "extra" block type
|
---|
959 | TSize 2 bytes Size for the following data block
|
---|
960 | ID 4 bytes EBCDIC "I400" 0xC9F4F0F0 or
|
---|
961 | "T4MV" for TargetFour
|
---|
962 | (var) TSize-4 Attribute data
|
---|
963 |
|
---|
964 |
|
---|
965 | -Info-ZIP Unicode Path Extra Field:
|
---|
966 | =================================
|
---|
967 |
|
---|
968 | Stores the UTF-8 version of the entry path as stored in the
|
---|
969 | local header and central directory header.
|
---|
970 | (Last Revision 20070912)
|
---|
971 |
|
---|
972 | Value Size Description
|
---|
973 | ----- ---- -----------
|
---|
974 | (UPath) 0x7075 Short tag for this extra block type ("up")
|
---|
975 | TSize Short total data size for this block
|
---|
976 | Version Byte version of this extra field, currently 1
|
---|
977 | NameCRC32 Long CRC-32 checksum of standard name field
|
---|
978 | UnicodeName variable UTF-8 version of the entry file name
|
---|
979 |
|
---|
980 | Currently Version is set to the number 1. If there is a need
|
---|
981 | to change this field, the version will be incremented. Changes
|
---|
982 | may not be backward compatible so this extra field should not be
|
---|
983 | used if the version is not recognized.
|
---|
984 |
|
---|
985 | The NameCRC32 is the standard zip CRC32 checksum of the File Name
|
---|
986 | field in the header. This is used to verify that the header
|
---|
987 | File Name field has not changed since the Unicode Path extra field
|
---|
988 | was created. This can happen if a utility renames the entry but
|
---|
989 | does not update the UTF-8 path extra field. If the CRC check fails,
|
---|
990 | this UTF-8 Path Extra Field should be ignored and the File Name field
|
---|
991 | in the header should be used instead.
|
---|
992 |
|
---|
993 | The UnicodeName is the UTF-8 version of the contents of the File
|
---|
994 | Name field in the header, without any trailing NUL. The standard
|
---|
995 | name field in the Zip entry header remains filled with the entry
|
---|
996 | name coded in the local machine's extended ASCII system charset.
|
---|
997 | As UnicodeName is defined to be UTF-8, no UTF-8 byte order mark
|
---|
998 | (BOM) is used. The length of this field is determined by
|
---|
999 | subtracting the size of the previous fields from TSize.
|
---|
1000 | If both the File Name and Comment fields are UTF-8, the new General
|
---|
1001 | Purpose Bit Flag, bit 11 (Language encoding flag (EFS)), should be
|
---|
1002 | used to indicate that both the header File Name and Comment fields
|
---|
1003 | are UTF-8 and, in this case, the Unicode Path and Unicode Comment
|
---|
1004 | extra fields are not needed and should not be created. Note that,
|
---|
1005 | for backward compatibility, bit 11 should only be used if the native
|
---|
1006 | character set of the paths and comments being zipped up are already
|
---|
1007 | in UTF-8. The same method, either general purpose bit 11 or extra
|
---|
1008 | fields, should be used in both the Local and Central Directory Header
|
---|
1009 | for a file.
|
---|
1010 |
|
---|
1011 | Utilisation rules:
|
---|
1012 | 1. This field shall never be created for names consisting solely of
|
---|
1013 | 7-bit ASCII characters.
|
---|
1014 | 2. On a system that already uses UTF-8 as system charset, this field
|
---|
1015 | shall not repeat the string pattern already stored in the Zip
|
---|
1016 | entry's standard name field. Instead, a field of exactly 9 bytes
|
---|
1017 | (70 75 05 00 01 and 4 bytes CRC) should be created.
|
---|
1018 | In this form with 5 data bytes, the field serves as indicator
|
---|
1019 | for the UTF-8 encoding of the standard Zip header's name field.
|
---|
1020 | 3. This field shall not be used whenever the calculated CRC-32 of
|
---|
1021 | the entry's standard name field does not match the provided
|
---|
1022 | CRC checksum value. A mismatch of the CRC check indicates that
|
---|
1023 | the standard name field was changed by some non-"up"-aware
|
---|
1024 | utility without synchronizing this UTF-8 name e.f. block.
|
---|
1025 |
|
---|
1026 |
|
---|
1027 | -Info-ZIP Unicode Comment Extra Field:
|
---|
1028 | ====================================
|
---|
1029 |
|
---|
1030 | Stores the UTF-8 version of the entry comment as stored in the
|
---|
1031 | central directory header.
|
---|
1032 | (Last Revision 20070912)
|
---|
1033 |
|
---|
1034 | Value Size Description
|
---|
1035 | ----- ---- -----------
|
---|
1036 | (UCom) 0x6375 Short tag for this extra block type ("uc")
|
---|
1037 | TSize Short total data size for this block
|
---|
1038 | Version 1 byte version of this extra field, currently 1
|
---|
1039 | ComCRC32 4 bytes Comment Field CRC32 Checksum
|
---|
1040 | UnicodeCom Variable UTF-8 version of the entry comment
|
---|
1041 |
|
---|
1042 | Currently Version is set to the number 1. If there is a need
|
---|
1043 | to change this field, the version will be incremented. Changes
|
---|
1044 | may not be backward compatible so this extra field should not be
|
---|
1045 | used if the version is not recognized.
|
---|
1046 |
|
---|
1047 | The ComCRC32 is the standard zip CRC32 checksum of the Comment
|
---|
1048 | field in the central directory header. This is used to verify that
|
---|
1049 | the comment field has not changed since the Unicode Comment extra
|
---|
1050 | field was created. This can happen if a utility changes the Comment
|
---|
1051 | field but does not update the UTF-8 Comment extra field. If the CRC
|
---|
1052 | check fails, this Unicode Comment extra field should be ignored and
|
---|
1053 | the Comment field in the header used.
|
---|
1054 |
|
---|
1055 | The UnicodeCom field is the UTF-8 version of the entry comment field
|
---|
1056 | in the header. As UnicodeCom is defined to be UTF-8, no UTF-8 byte
|
---|
1057 | order mark (BOM) is used. The length of this field is determined by
|
---|
1058 | subtracting the size of the previous fields from TSize. If both the
|
---|
1059 | File Name and Comment fields are UTF-8, the new General Purpose Bit
|
---|
1060 | Flag, bit 11 (Language encoding flag (EFS)), can be used to indicate
|
---|
1061 | both the header File Name and Comment fields are UTF-8 and, in this
|
---|
1062 | case, the Unicode Path and Unicode Comment extra fields are not
|
---|
1063 | needed and should not be created. Note that, for backward
|
---|
1064 | compatibility, bit 11 should only be used if the native character set
|
---|
1065 | of the paths and comments being zipped up are already in UTF-8. The
|
---|
1066 | same method, either bit 11 or extra fields, should be used in both
|
---|
1067 | the local and central directory headers.
|
---|
1068 |
|
---|
1069 |
|
---|
1070 | -Extended Timestamp Extra Field:
|
---|
1071 | ==============================
|
---|
1072 |
|
---|
1073 | The following is the layout of the extended-timestamp extra block.
|
---|
1074 | (Last Revision 19970118)
|
---|
1075 |
|
---|
1076 | Local-header version:
|
---|
1077 |
|
---|
1078 | Value Size Description
|
---|
1079 | ----- ---- -----------
|
---|
1080 | (time) 0x5455 Short tag for this extra block type ("UT")
|
---|
1081 | TSize Short total data size for this block
|
---|
1082 | Flags Byte info bits
|
---|
1083 | (ModTime) Long time of last modification (UTC/GMT)
|
---|
1084 | (AcTime) Long time of last access (UTC/GMT)
|
---|
1085 | (CrTime) Long time of original creation (UTC/GMT)
|
---|
1086 |
|
---|
1087 | Central-header version:
|
---|
1088 |
|
---|
1089 | Value Size Description
|
---|
1090 | ----- ---- -----------
|
---|
1091 | (time) 0x5455 Short tag for this extra block type ("UT")
|
---|
1092 | TSize Short total data size for this block
|
---|
1093 | Flags Byte info bits (refers to local header!)
|
---|
1094 | (ModTime) Long time of last modification (UTC/GMT)
|
---|
1095 |
|
---|
1096 | The central-header extra field contains the modification time only,
|
---|
1097 | or no timestamp at all. TSize is used to flag its presence or
|
---|
1098 | absence. But note:
|
---|
1099 |
|
---|
1100 | If "Flags" indicates that Modtime is present in the local header
|
---|
1101 | field, it MUST be present in the central header field, too!
|
---|
1102 | This correspondence is required because the modification time
|
---|
1103 | value may be used to support trans-timezone freshening and
|
---|
1104 | updating operations with zip archives.
|
---|
1105 |
|
---|
1106 | The time values are in standard Unix signed-long format, indicating
|
---|
1107 | the number of seconds since 1 January 1970 00:00:00. The times
|
---|
1108 | are relative to Coordinated Universal Time (UTC), also sometimes
|
---|
1109 | referred to as Greenwich Mean Time (GMT). To convert to local time,
|
---|
1110 | the software must know the local timezone offset from UTC/GMT.
|
---|
1111 |
|
---|
1112 | The lower three bits of Flags in both headers indicate which time-
|
---|
1113 | stamps are present in the LOCAL extra field:
|
---|
1114 |
|
---|
1115 | bit 0 if set, modification time is present
|
---|
1116 | bit 1 if set, access time is present
|
---|
1117 | bit 2 if set, creation time is present
|
---|
1118 | bits 3-7 reserved for additional timestamps; not set
|
---|
1119 |
|
---|
1120 | Those times that are present will appear in the order indicated, but
|
---|
1121 | any combination of times may be omitted. (Creation time may be
|
---|
1122 | present without access time, for example.) TSize should equal
|
---|
1123 | (1 + 4*(number of set bits in Flags)), as the block is currently
|
---|
1124 | defined. Other timestamps may be added in the future.
|
---|
1125 |
|
---|
1126 |
|
---|
1127 | -Info-ZIP Unix Extra Field (type 1):
|
---|
1128 | ==================================
|
---|
1129 |
|
---|
1130 | The following is the layout of the old Info-ZIP extra block for
|
---|
1131 | Unix. It has been replaced by the extended-timestamp extra block
|
---|
1132 | (0x5455) and the Unix type 2 extra block (0x7855).
|
---|
1133 | (Last Revision 19970118)
|
---|
1134 |
|
---|
1135 | Local-header version:
|
---|
1136 |
|
---|
1137 | Value Size Description
|
---|
1138 | ----- ---- -----------
|
---|
1139 | (Unix1) 0x5855 Short tag for this extra block type ("UX")
|
---|
1140 | TSize Short total data size for this block
|
---|
1141 | AcTime Long time of last access (UTC/GMT)
|
---|
1142 | ModTime Long time of last modification (UTC/GMT)
|
---|
1143 | UID Short Unix user ID (optional)
|
---|
1144 | GID Short Unix group ID (optional)
|
---|
1145 |
|
---|
1146 | Central-header version:
|
---|
1147 |
|
---|
1148 | Value Size Description
|
---|
1149 | ----- ---- -----------
|
---|
1150 | (Unix1) 0x5855 Short tag for this extra block type ("UX")
|
---|
1151 | TSize Short total data size for this block
|
---|
1152 | AcTime Long time of last access (GMT/UTC)
|
---|
1153 | ModTime Long time of last modification (GMT/UTC)
|
---|
1154 |
|
---|
1155 | The file access and modification times are in standard Unix signed-
|
---|
1156 | long format, indicating the number of seconds since 1 January 1970
|
---|
1157 | 00:00:00. The times are relative to Coordinated Universal Time
|
---|
1158 | (UTC), also sometimes referred to as Greenwich Mean Time (GMT). To
|
---|
1159 | convert to local time, the software must know the local timezone
|
---|
1160 | offset from UTC/GMT. The modification time may be used by non-Unix
|
---|
1161 | systems to support inter-timezone freshening and updating of zip
|
---|
1162 | archives.
|
---|
1163 |
|
---|
1164 | The local-header extra block may optionally contain UID and GID
|
---|
1165 | info for the file. The local-header TSize value is the only
|
---|
1166 | indication of this. Note that Unix UIDs and GIDs are usually
|
---|
1167 | specific to a particular machine, and they generally require root
|
---|
1168 | access to restore.
|
---|
1169 |
|
---|
1170 | This extra field type is obsolete, but it has been in use since
|
---|
1171 | mid-1994. Therefore future archiving software should continue to
|
---|
1172 | support it. Some guidelines:
|
---|
1173 |
|
---|
1174 | An archive member should either contain the old "Unix1"
|
---|
1175 | extra field block or the new extra field types "time" and/or
|
---|
1176 | "Unix2".
|
---|
1177 |
|
---|
1178 | If both the old "Unix1" block type and one or both of the new
|
---|
1179 | block types "time" and "Unix2" are found, the "Unix1" block
|
---|
1180 | should be considered invalid and ignored.
|
---|
1181 |
|
---|
1182 | Unarchiving software should recognize both old and new extra
|
---|
1183 | field block types, but the info from new types overrides the
|
---|
1184 | old "Unix1" field.
|
---|
1185 |
|
---|
1186 | Archiving software should recognize "Unix1" extra fields for
|
---|
1187 | timestamp comparison but never create it for updated, freshened
|
---|
1188 | or new archive members. When copying existing members to a new
|
---|
1189 | archive, any "Unix1" extra field blocks should be converted to
|
---|
1190 | the new "time" and/or "Unix2" types.
|
---|
1191 |
|
---|
1192 |
|
---|
1193 | -Info-ZIP UNIX Extra Field (type 2):
|
---|
1194 | ==================================
|
---|
1195 |
|
---|
1196 | The following is the layout of the new Info-ZIP extra block for
|
---|
1197 | Unix. (Last Revision 19960922)
|
---|
1198 |
|
---|
1199 | Local-header version:
|
---|
1200 |
|
---|
1201 | Value Size Description
|
---|
1202 | ----- ---- -----------
|
---|
1203 | (Unix2) 0x7855 Short tag for this extra block type ("Ux")
|
---|
1204 | TSize Short total data size for this block (4)
|
---|
1205 | UID Short Unix user ID
|
---|
1206 | GID Short Unix group ID
|
---|
1207 |
|
---|
1208 | Central-header version:
|
---|
1209 |
|
---|
1210 | Value Size Description
|
---|
1211 | ----- ---- -----------
|
---|
1212 | (Unix2) 0x7855 Short tag for this extra block type ("Ux")
|
---|
1213 | TSize Short total data size for this block (0)
|
---|
1214 |
|
---|
1215 | The data size of the central-header version is zero; it is used
|
---|
1216 | solely as a flag that UID/GID info is present in the local-header
|
---|
1217 | extra field. If additional fields are ever added to the local
|
---|
1218 | version, the central version may be extended to indicate this.
|
---|
1219 |
|
---|
1220 | Note that Unix UIDs and GIDs are usually specific to a particular
|
---|
1221 | machine, and they generally require root access to restore.
|
---|
1222 |
|
---|
1223 |
|
---|
1224 | -Info-ZIP New Unix Extra Field:
|
---|
1225 | ====================================
|
---|
1226 |
|
---|
1227 | Currently stores Unix UIDs/GIDs up to 32 bits.
|
---|
1228 | (Last Revision 20080509)
|
---|
1229 |
|
---|
1230 | Value Size Description
|
---|
1231 | ----- ---- -----------
|
---|
1232 | (UnixN) 0x7875 Short tag for this extra block type ("ux")
|
---|
1233 | TSize Short total data size for this block
|
---|
1234 | Version 1 byte version of this extra field, currently 1
|
---|
1235 | UIDSize 1 byte Size of UID field
|
---|
1236 | UID Variable UID for this entry
|
---|
1237 | GIDSize 1 byte Size of GID field
|
---|
1238 | GID Variable GID for this entry
|
---|
1239 |
|
---|
1240 | Currently Version is set to the number 1. If there is a need
|
---|
1241 | to change this field, the version will be incremented. Changes
|
---|
1242 | may not be backward compatible so this extra field should not be
|
---|
1243 | used if the version is not recognized.
|
---|
1244 |
|
---|
1245 | UIDSize is the size of the UID field in bytes. This size should
|
---|
1246 | match the size of the UID field on the target OS.
|
---|
1247 |
|
---|
1248 | UID is the UID for this entry in standard little endian format.
|
---|
1249 |
|
---|
1250 | GIDSize is the size of the GID field in bytes. This size should
|
---|
1251 | match the size of the GID field on the target OS.
|
---|
1252 |
|
---|
1253 | GID is the GID for this entry in standard little endian format.
|
---|
1254 |
|
---|
1255 | If both the old 16-bit Unix extra field (tag 0x7855, Info-ZIP Unix2)
|
---|
1256 | and this extra field are present, the values in this extra field
|
---|
1257 | supercede the values in that extra field.
|
---|
1258 |
|
---|
1259 |
|
---|
1260 | -ASi UNIX Extra Field:
|
---|
1261 | ====================
|
---|
1262 |
|
---|
1263 | The following is the layout of the ASi extra block for Unix. The
|
---|
1264 | local-header and central-header versions are identical.
|
---|
1265 | (Last Revision 19960916)
|
---|
1266 |
|
---|
1267 | Value Size Description
|
---|
1268 | ----- ---- -----------
|
---|
1269 | (Unix3) 0x756e Short tag for this extra block type ("nu")
|
---|
1270 | TSize Short total data size for this block
|
---|
1271 | CRC Long CRC-32 of the remaining data
|
---|
1272 | Mode Short file permissions
|
---|
1273 | SizDev Long symlink'd size OR major/minor dev num
|
---|
1274 | UID Short user ID
|
---|
1275 | GID Short group ID
|
---|
1276 | (var.) variable symbolic link filename
|
---|
1277 |
|
---|
1278 | Mode is the standard Unix st_mode field from struct stat, containing
|
---|
1279 | user/group/other permissions, setuid/setgid and symlink info, etc.
|
---|
1280 |
|
---|
1281 | If Mode indicates that this file is a symbolic link, SizDev is the
|
---|
1282 | size of the file to which the link points. Otherwise, if the file
|
---|
1283 | is a device, SizDev contains the standard Unix st_rdev field from
|
---|
1284 | struct stat (includes the major and minor numbers of the device).
|
---|
1285 | SizDev is undefined in other cases.
|
---|
1286 |
|
---|
1287 | If Mode indicates that the file is a symbolic link, the final field
|
---|
1288 | will be the name of the file to which the link points. The file-
|
---|
1289 | name length can be inferred from TSize.
|
---|
1290 |
|
---|
1291 | [Note that TSize may incorrectly refer to the data size not counting
|
---|
1292 | the CRC; i.e., it may be four bytes too small.]
|
---|
1293 |
|
---|
1294 |
|
---|
1295 | -BeOS Extra Field:
|
---|
1296 | ================
|
---|
1297 |
|
---|
1298 | The following is the layout of the file-attributes extra block for
|
---|
1299 | BeOS. (Last Revision 19970531)
|
---|
1300 |
|
---|
1301 | Local-header version:
|
---|
1302 |
|
---|
1303 | Value Size Description
|
---|
1304 | ----- ---- -----------
|
---|
1305 | (BeOS) 0x6542 Short tag for this extra block type ("Be")
|
---|
1306 | TSize Short total data size for this block
|
---|
1307 | BSize Long uncompressed file attribute data size
|
---|
1308 | Flags Byte info bits
|
---|
1309 | (CType) Short compression type
|
---|
1310 | (CRC) Long CRC value for uncompressed file attribs
|
---|
1311 | Attribs variable file attribute data
|
---|
1312 |
|
---|
1313 | Central-header version:
|
---|
1314 |
|
---|
1315 | Value Size Description
|
---|
1316 | ----- ---- -----------
|
---|
1317 | (BeOS) 0x6542 Short tag for this extra block type ("Be")
|
---|
1318 | TSize Short total data size for this block (5)
|
---|
1319 | BSize Long size of uncompr. local EF block data
|
---|
1320 | Flags Byte info bits
|
---|
1321 |
|
---|
1322 | The least significant bit of Flags in both headers indicates whether
|
---|
1323 | the LOCAL extra field is uncompressed (and therefore whether CType
|
---|
1324 | and CRC are omitted):
|
---|
1325 |
|
---|
1326 | bit 0 if set, Attribs is uncompressed (no CType, CRC)
|
---|
1327 | bits 1-7 reserved; if set, assume error or unknown data
|
---|
1328 |
|
---|
1329 | Currently the only supported compression types are deflated (type 8)
|
---|
1330 | and stored (type 0); the latter is not used by Info-ZIP's Zip but is
|
---|
1331 | supported by UnZip.
|
---|
1332 |
|
---|
1333 | Attribs is a BeOS-specific block of data in big-endian format with
|
---|
1334 | the following structure (if compressed, uncompress it first):
|
---|
1335 |
|
---|
1336 | Value Size Description
|
---|
1337 | ----- ---- -----------
|
---|
1338 | Name variable attribute name (null-terminated string)
|
---|
1339 | Type Long attribute type (32-bit unsigned integer)
|
---|
1340 | Size Long Long data size for this sub-block (64 bits)
|
---|
1341 | Data variable attribute data
|
---|
1342 |
|
---|
1343 | The attribute structure is repeated for every attribute. The Data
|
---|
1344 | field may contain anything--text, flags, bitmaps, etc.
|
---|
1345 |
|
---|
1346 |
|
---|
1347 | -AtheOS Extra Field:
|
---|
1348 | ==================
|
---|
1349 |
|
---|
1350 | The following is the layout of the file-attributes extra block for
|
---|
1351 | AtheOS. This field is a very close spin-off from the BeOS e.f.
|
---|
1352 | The only differences are:
|
---|
1353 | - a new extra field signature
|
---|
1354 | - numeric field in the attributes data are stored in little-endian
|
---|
1355 | format ("i386" was initial hardware for AtheOS)
|
---|
1356 | (Last Revision 20040908)
|
---|
1357 |
|
---|
1358 | Local-header version:
|
---|
1359 |
|
---|
1360 | Value Size Description
|
---|
1361 | ----- ---- -----------
|
---|
1362 | (AtheOS) 0x7441 Short tag for this extra block type ("At")
|
---|
1363 | TSize Short total data size for this block
|
---|
1364 | BSize Long uncompressed file attribute data size
|
---|
1365 | Flags Byte info bits
|
---|
1366 | (CType) Short compression type
|
---|
1367 | (CRC) Long CRC value for uncompressed file attribs
|
---|
1368 | Attribs variable file attribute data
|
---|
1369 |
|
---|
1370 | Central-header version:
|
---|
1371 |
|
---|
1372 | Value Size Description
|
---|
1373 | ----- ---- -----------
|
---|
1374 | (AtheOS) 0x7441 Short tag for this extra block type ("At")
|
---|
1375 | TSize Short total data size for this block (5)
|
---|
1376 | BSize Long size of uncompr. local EF block data
|
---|
1377 | Flags Byte info bits
|
---|
1378 |
|
---|
1379 | The least significant bit of Flags in both headers indicates whether
|
---|
1380 | the LOCAL extra field is uncompressed (and therefore whether CType
|
---|
1381 | and CRC are omitted):
|
---|
1382 |
|
---|
1383 | bit 0 if set, Attribs is uncompressed (no CType, CRC)
|
---|
1384 | bits 1-7 reserved; if set, assume error or unknown data
|
---|
1385 |
|
---|
1386 | Currently the only supported compression types are deflated (type 8)
|
---|
1387 | and stored (type 0); the latter is not used by Info-ZIP's Zip but is
|
---|
1388 | supported by UnZip.
|
---|
1389 |
|
---|
1390 | Attribs is a AtheOS-specific block of data in little-endian format
|
---|
1391 | with the following structure (if compressed, uncompress it first):
|
---|
1392 |
|
---|
1393 | Value Size Description
|
---|
1394 | ----- ---- -----------
|
---|
1395 | Name variable attribute name (null-terminated string)
|
---|
1396 | Type Long attribute type (32-bit unsigned integer)
|
---|
1397 | Size Long Long data size for this sub-block (64 bits)
|
---|
1398 | Data variable attribute data
|
---|
1399 |
|
---|
1400 | The attribute structure is repeated for every attribute. The Data
|
---|
1401 | field may contain anything--text, flags, bitmaps, etc.
|
---|
1402 |
|
---|
1403 |
|
---|
1404 | -SMS/QDOS Extra Field:
|
---|
1405 | ====================
|
---|
1406 |
|
---|
1407 | The following is the layout of the file-attributes extra block for
|
---|
1408 | SMS/QDOS. The local-header and central-header versions are identical.
|
---|
1409 | (Last Revision 19960929)
|
---|
1410 |
|
---|
1411 | Value Size Description
|
---|
1412 | ----- ---- -----------
|
---|
1413 | (QDOS) 0xfb4a Short tag for this extra block type
|
---|
1414 | TSize Short total data size for this block
|
---|
1415 | LongID Long extra-field signature
|
---|
1416 | (ExtraID) Long additional signature/flag bytes
|
---|
1417 | QDirect 64 bytes qdirect structure
|
---|
1418 |
|
---|
1419 | LongID may be "QZHD" or "QDOS". In the latter case, ExtraID will
|
---|
1420 | be present. Its first three bytes are "02\0"; the last byte is
|
---|
1421 | currently undefined.
|
---|
1422 |
|
---|
1423 | QDirect contains the file's uncompressed directory info (qdirect
|
---|
1424 | struct). Its elements are in native (big-endian) format:
|
---|
1425 |
|
---|
1426 | d_length beLong file length
|
---|
1427 | d_access byte file access type
|
---|
1428 | d_type byte file type
|
---|
1429 | d_datalen beLong data length
|
---|
1430 | d_reserved beLong unused
|
---|
1431 | d_szname beShort size of filename
|
---|
1432 | d_name 36 bytes filename
|
---|
1433 | d_update beLong time of last update
|
---|
1434 | d_refdate beLong file version number
|
---|
1435 | d_backup beLong time of last backup (archive date)
|
---|
1436 |
|
---|
1437 |
|
---|
1438 | -AOS/VS Extra Field:
|
---|
1439 | ==================
|
---|
1440 |
|
---|
1441 | The following is the layout of the extra block for Data General
|
---|
1442 | AOS/VS. The local-header and central-header versions are identical.
|
---|
1443 | (Last Revision 19961125)
|
---|
1444 |
|
---|
1445 | Value Size Description
|
---|
1446 | ----- ---- -----------
|
---|
1447 | (AOSVS) 0x5356 Short tag for this extra block type ("VS")
|
---|
1448 | TSize Short total data size for this block
|
---|
1449 | "FCI\0" Long extra-field signature
|
---|
1450 | Version Byte version of AOS/VS extra block (10 = 1.0)
|
---|
1451 | Fstat variable fstat packet
|
---|
1452 | AclBuf variable raw ACL data ($MXACL bytes)
|
---|
1453 |
|
---|
1454 | Fstat contains the file's uncompressed fstat packet, which is one of
|
---|
1455 | the following:
|
---|
1456 |
|
---|
1457 | normal fstat packet (P_FSTAT struct)
|
---|
1458 | DIR/CPD fstat packet (P_FSTAT_DIR struct)
|
---|
1459 | unit (device) fstat packet (P_FSTAT_UNIT struct)
|
---|
1460 | IPC file fstat packet (P_FSTAT_IPC struct)
|
---|
1461 |
|
---|
1462 | AclBuf contains the raw ACL data; its length is $MXACL.
|
---|
1463 |
|
---|
1464 |
|
---|
1465 | -Tandem NSK Extra Field:
|
---|
1466 | ======================
|
---|
1467 |
|
---|
1468 | The following is the layout of the file-attributes extra block for
|
---|
1469 | Tandem NSK. The local-header and central-header versions are
|
---|
1470 | identical. (Last Revision 19981221)
|
---|
1471 |
|
---|
1472 | Value Size Description
|
---|
1473 | ----- ---- -----------
|
---|
1474 | (TA) 0x4154 Short tag for this extra block type ("TA")
|
---|
1475 | TSize Short total data size for this block (20)
|
---|
1476 | NSKattrs 20 Bytes NSK attributes
|
---|
1477 |
|
---|
1478 |
|
---|
1479 | -THEOS Extra Field:
|
---|
1480 | =================
|
---|
1481 |
|
---|
1482 | The following is the layout of the file-attributes extra block for
|
---|
1483 | Theos. The local-header and central-header versions are identical.
|
---|
1484 | (Last Revision 19990206)
|
---|
1485 |
|
---|
1486 | Value Size Description
|
---|
1487 | ----- ---- -----------
|
---|
1488 | (Theos) 0x6854 Short 'Th' signature
|
---|
1489 | size Short size of extra block
|
---|
1490 | flags Byte reserved for future use
|
---|
1491 | filesize Long file size
|
---|
1492 | fileorg Byte type of file (see below)
|
---|
1493 | keylen Short key length for indexed and keyed files,
|
---|
1494 | data segment size for 16 bits programs
|
---|
1495 | reclen Short record length for indexed,keyed and direct,
|
---|
1496 | text segment size for 16 bits programs
|
---|
1497 | filegrow Byte growing factor for indexed,keyed and direct
|
---|
1498 | protect Byte protections (see below)
|
---|
1499 | reserved Short reserved for future use
|
---|
1500 |
|
---|
1501 | File types
|
---|
1502 | ==========
|
---|
1503 |
|
---|
1504 | 0x80 library (keyed access list of files)
|
---|
1505 | 0x40 directory
|
---|
1506 | 0x10 stream file
|
---|
1507 | 0x08 direct file
|
---|
1508 | 0x04 keyed file
|
---|
1509 | 0x02 indexed file
|
---|
1510 | 0x0e reserved
|
---|
1511 | 0x01 16 bits real mode program (obsolete)
|
---|
1512 | 0x21 16 bits protected mode program
|
---|
1513 | 0x41 32 bits protected mode program
|
---|
1514 |
|
---|
1515 | Protection codes
|
---|
1516 | ================
|
---|
1517 |
|
---|
1518 | User protection
|
---|
1519 | ---------------
|
---|
1520 | 0x01 non readable
|
---|
1521 | 0x02 non writable
|
---|
1522 | 0x04 non executable
|
---|
1523 | 0x08 non erasable
|
---|
1524 |
|
---|
1525 | Other protection
|
---|
1526 | ----------------
|
---|
1527 | 0x10 non readable
|
---|
1528 | 0x20 non writable
|
---|
1529 | 0x40 non executable Theos before 4.0
|
---|
1530 | 0x40 modified Theos 4.x
|
---|
1531 | 0x80 not hidden
|
---|
1532 |
|
---|
1533 |
|
---|
1534 | -THEOS old inofficial Extra Field:
|
---|
1535 | ================================
|
---|
1536 |
|
---|
1537 | The following is the layout of an inoffical former version of a
|
---|
1538 | Theos file-attributes extra blocks. This layout was never published
|
---|
1539 | and is no longer created. However, UnZip can optionally support it
|
---|
1540 | when compiling with the option flag OLD_THEOS_EXTRA defined.
|
---|
1541 | Both the local-header and central-header versions are identical.
|
---|
1542 | (Last Revision 19990206)
|
---|
1543 |
|
---|
1544 | Value Size Description
|
---|
1545 | ----- ---- -----------
|
---|
1546 | (THS0) 0x4854 Short 'TH' signature
|
---|
1547 | size Short size of extra block
|
---|
1548 | flags Short reserved for future use
|
---|
1549 | filesize Long file size
|
---|
1550 | reclen Short record length for indexed,keyed and direct,
|
---|
1551 | text segment size for 16 bits programs
|
---|
1552 | keylen Short key length for indexed and keyed files,
|
---|
1553 | data segment size for 16 bits programs
|
---|
1554 | filegrow Byte growing factor for indexed,keyed and direct
|
---|
1555 | reserved 3 Bytes reserved for future use
|
---|
1556 |
|
---|
1557 |
|
---|
1558 | -FWKCS MD5 Extra Field (0x4b46):
|
---|
1559 | ==============================
|
---|
1560 |
|
---|
1561 | The FWKCS Contents_Signature System, used in automatically
|
---|
1562 | identifying files independent of filename, optionally adds
|
---|
1563 | and uses an extra field to support the rapid creation of
|
---|
1564 | an enhanced contents_signature.
|
---|
1565 | There is no local-header version; the following applies
|
---|
1566 | only to the central header. (Last Revision 19961207)
|
---|
1567 |
|
---|
1568 | Central-header version:
|
---|
1569 |
|
---|
1570 | Value Size Description
|
---|
1571 | ----- ---- -----------
|
---|
1572 | (MD5) 0x4b46 Short tag for this extra block type ("FK")
|
---|
1573 | TSize Short total data size for this block (19)
|
---|
1574 | "MD5" 3 bytes extra-field signature
|
---|
1575 | MD5hash 16 bytes 128-bit MD5 hash of uncompressed data
|
---|
1576 | (low byte first)
|
---|
1577 |
|
---|
1578 | When FWKCS revises a .ZIP file central directory to add
|
---|
1579 | this extra field for a file, it also replaces the
|
---|
1580 | central directory entry for that file's uncompressed
|
---|
1581 | file length with a measured value.
|
---|
1582 |
|
---|
1583 | FWKCS provides an option to strip this extra field, if
|
---|
1584 | present, from a .ZIP file central directory. In adding
|
---|
1585 | this extra field, FWKCS preserves .ZIP file Authenticity
|
---|
1586 | Verification; if stripping this extra field, FWKCS
|
---|
1587 | preserves all versions of AV through PKZIP version 2.04g.
|
---|
1588 |
|
---|
1589 | FWKCS, and FWKCS Contents_Signature System, are
|
---|
1590 | trademarks of Frederick W. Kantor.
|
---|
1591 |
|
---|
1592 | (1) R. Rivest, RFC1321.TXT, MIT Laboratory for Computer
|
---|
1593 | Science and RSA Data Security, Inc., April 1992.
|
---|
1594 | ll.76-77: "The MD5 algorithm is being placed in the
|
---|
1595 | public domain for review and possible adoption as a
|
---|
1596 | standard."
|
---|
1597 |
|
---|
1598 |
|
---|
1599 | -Microsoft Open Packaging Growth Hint (0xa220):
|
---|
1600 | =============================================
|
---|
1601 |
|
---|
1602 | Value Size Description
|
---|
1603 | ----- ---- -----------
|
---|
1604 | 0xa220 Short tag for this extra block type
|
---|
1605 | TSize Short size of Sig + PadVal + Padding
|
---|
1606 | Sig Short verification signature (A028)
|
---|
1607 | PadVal Short Initial padding value
|
---|
1608 | Padding variable filled with NULL characters
|
---|