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