source: unzip/vendor/current/proginfo/extrafld.txt@ 200

Last change on this file since 200 was 200, checked in by Yuri Dario, 14 years ago

zip: initial unzip 6.0 import.

File size: 73.0 KB
Line 
1The following are the known types of zipfile extra fields as of this
2writing. Extra fields are documented in PKWARE's appnote.txt and are
3intended to allow for backward- and forward-compatible extensions to
4the zipfile format. Multiple extra-field types may be chained together,
5provided 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,
7including timestamp, file attributes, filename, comment, extra field, etc.,
8be no more than 64KB.)
9
10Each extra-field type (or subblock) must contain a four-byte header con-
11sisting of a two-byte header ID and a two-byte length (little-endian) for
12the remaining data in the subblock. If there are additional subblocks
13within the extra field, the header for each one will appear immediately
14following the data for the previous subblock (i.e., with no padding for
15alignment).
16
17All integer fields in the descriptions below are in little-endian (Intel)
18format unless otherwise specified. Note that "Short" means two bytes,
19"Long" means four bytes, and "Long-Long" means eight bytes, regardless
20of their native sizes. Unless specifically noted, all integer fields should
21be interpreted as unsigned (non-negative) numbers.
22
23Christian 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
88The 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
Note: See TracBrowser for help on using the repository browser.