1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609 |
- The following are the known types of zipfile extra fields as of this
- writing. Extra fields are documented in PKWARE's appnote.txt and are
- intended to allow for backward- and forward-compatible extensions to
- the zipfile format. Multiple extra-field types may be chained together,
- provided that the total length of all extra-field data is less than 64KB.
- (In fact, PKWARE requires that the total length of the entire file header,
- including timestamp, file attributes, filename, comment, extra field, etc.,
- be no more than 64KB.)
- Each extra-field type (or subblock) must contain a four-byte header con-
- sisting of a two-byte header ID and a two-byte length (little-endian) for
- the remaining data in the subblock. If there are additional subblocks
- within the extra field, the header for each one will appear immediately
- following the data for the previous subblock (i.e., with no padding for
- alignment).
- All integer fields in the descriptions below are in little-endian (Intel)
- format unless otherwise specified. Note that "Short" means two bytes,
- "Long" means four bytes, and "Long-Long" means eight bytes, regardless
- of their native sizes. Unless specifically noted, all integer fields should
- be interpreted as unsigned (non-negative) numbers.
- Christian Spieler, Ed Gordon, 20080717
- -------------------------
- Header ID's of 0 thru 31 are reserved for use by PKWARE.
- The remaining ID's can be used by third party vendors for
- proprietary usage.
- The current Header ID mappings defined by PKWARE are:
- 0x0001 Zip64 extended information extra field
- 0x0007 AV Info
- 0x0008 Reserved for extended language encoding data (PFS)
- 0x0009 OS/2 extended attributes (also Info-ZIP)
- 0x000a NTFS (Win9x/WinNT FileTimes)
- 0x000c OpenVMS (also Info-ZIP)
- 0x000d UNIX
- 0x000e Reserved for file stream and fork descriptors
- 0x000f Patch Descriptor
- 0x0014 PKCS#7 Store for X.509 Certificates
- 0x0015 X.509 Certificate ID and Signature for
- individual file
- 0x0016 X.509 Certificate ID for Central Directory
- 0x0017 Strong Encryption Header
- 0x0018 Record Management Controls
- 0x0019 PKCS#7 Encryption Recipient Certificate List
- 0x0065 IBM S/390 (Z390), AS/400 (I400) attributes
- - uncompressed
- 0x0066 Reserved for IBM S/390 (Z390), AS/400 (I400)
- attributes - compressed
- 0x4690 POSZIP 4690 (reserved)
- The Header ID mappings defined by Info-ZIP and third parties are:
- 0x07c8 Info-ZIP Macintosh (old, J. Lee)
- 0x2605 ZipIt Macintosh (first version)
- 0x2705 ZipIt Macintosh v 1.3.5 and newer (w/o full filename)
- 0x2805 ZipIt Macintosh 1.3.5+
- 0x334d Info-ZIP Macintosh (new, D. Haase's 'Mac3' field)
- 0x4154 Tandem NSK
- 0x4341 Acorn/SparkFS (David Pilling)
- 0x4453 Windows NT security descriptor (binary ACL)
- 0x4704 VM/CMS
- 0x470f MVS
- 0x4854 Theos, old inofficial port
- 0x4b46 FWKCS MD5 (see below)
- 0x4c41 OS/2 access control list (text ACL)
- 0x4d49 Info-ZIP OpenVMS (obsolete)
- 0x4d63 Macintosh SmartZIP, by Macro Bambini
- 0x4f4c Xceed original location extra field
- 0x5356 AOS/VS (binary ACL)
- 0x5455 extended timestamp
- 0x554e Xceed unicode extra field
- 0x5855 Info-ZIP UNIX (original; also OS/2, NT, etc.)
- 0x6375 Info-ZIP UTF-8 comment field
- 0x6542 BeOS (BeBox, PowerMac, etc.)
- 0x6854 Theos
- 0x7075 Info-ZIP UTF-8 name field
- 0x7441 AtheOS (AtheOS/Syllable attributes)
- 0x756e ASi UNIX
- 0x7855 Info-ZIP UNIX (16-bit UID/GID info)
- 0x7875 Info-ZIP UNIX 3rd generation (generic UID/GID, ...)
- 0xa220 Microsoft Open Packaging Growth Hint
- 0xfb4a SMS/QDOS
- The following are detailed descriptions of the known extra-field block types:
- -Zip64 Extended Information Extra Field (0x0001):
- ===============================================
- The following is the layout of the zip64 extended
- information "extra" block. If one of the size or
- offset fields in the Local or Central directory
- record is too small to hold the required data,
- a zip64 extended information record is created.
- The order of the fields in the zip64 extended
- information record is fixed, but the fields will
- only appear if the corresponding Local or Central
- directory record field is set to 0xFFFF or 0xFFFFFFFF.
- Note: all fields stored in Intel low-byte/high-byte order.
- Value Size Description
- ----- ---- -----------
- (ZIP64) 0x0001 2 bytes Tag for this "extra" block type
- Size 2 bytes Size of this "extra" block
- Original
- Size 8 bytes Original uncompressed file size
- Compressed
- Size 8 bytes Size of compressed data
- Relative Header
- Offset 8 bytes Offset of local header record
- Disk Start
- Number 4 bytes Number of the disk on which
- this file starts
- This entry in the Local header must include BOTH original
- and compressed file size fields. If encrypting the
- central directory and bit 13 of the general purpose bit
- flag is set indicating masking, the value stored in the
- Local Header for the original file size will be zero.
- -OS/2 Extended Attributes Extra Field (0x0009):
- =============================================
- The following is the layout of the OS/2 extended attributes "extra"
- block. (Last Revision 19960922)
- Note: all fields stored in Intel low-byte/high-byte order.
- Local-header version:
- Value Size Description
- ----- ---- -----------
- (OS/2) 0x0009 Short tag for this extra block type
- TSize Short total data size for this block
- BSize Long uncompressed EA data size
- CType Short compression type
- EACRC Long CRC value for uncompressed EA data
- (var.) variable compressed EA data
- Central-header version:
- Value Size Description
- ----- ---- -----------
- (OS/2) 0x0009 Short tag for this extra block type
- TSize Short total data size for this block (4)
- BSize Long size of uncompressed local EA data
- The value of CType is interpreted according to the "compression
- method" section above; i.e., 0 for stored, 8 for deflated, etc.
- The OS/2 extended attribute structure (FEA2LIST) is
- compressed and then stored in its entirety within this
- structure. There will only ever be one "block" of data in
- the variable-length field.
- -OS/2 Access Control List Extra Field:
- ====================================
- The following is the layout of the OS/2 ACL extra block.
- (Last Revision 19960922)
- Local-header version:
- Value Size Description
- ----- ---- -----------
- (ACL) 0x4c41 Short tag for this extra block type ("AL")
- TSize Short total data size for this block
- BSize Long uncompressed ACL data size
- CType Short compression type
- EACRC Long CRC value for uncompressed ACL data
- (var.) variable compressed ACL data
- Central-header version:
- Value Size Description
- ----- ---- -----------
- (ACL) 0x4c41 Short tag for this extra block type ("AL")
- TSize Short total data size for this block (4)
- BSize Long size of uncompressed local ACL data
- The value of CType is interpreted according to the "compression
- method" section above; i.e., 0 for stored, 8 for deflated, etc.
- The uncompressed ACL data consist of a text header of the form
- "ACL1:%hX,%hd\n", where the first field is the OS/2 ACCINFO acc_attr
- member and the second is acc_count, followed by acc_count strings
- of the form "%s,%hx\n", where the first field is acl_ugname (user
- group name) and the second acl_access. This block type will be
- extended for other operating systems as needed.
- -Windows NT Security Descriptor Extra Field (0x4453):
- ===================================================
- The following is the layout of the NT Security Descriptor (another
- type of ACL) extra block. (Last Revision 19960922)
- Local-header version:
- Value Size Description
- ----- ---- -----------
- (SD) 0x4453 Short tag for this extra block type ("SD")
- TSize Short total data size for this block
- BSize Long uncompressed SD data size
- Version Byte version of uncompressed SD data format
- CType Short compression type
- EACRC Long CRC value for uncompressed SD data
- (var.) variable compressed SD data
- Central-header version:
- Value Size Description
- ----- ---- -----------
- (SD) 0x4453 Short tag for this extra block type ("SD")
- TSize Short total data size for this block (4)
- BSize Long size of uncompressed local SD data
- The value of CType is interpreted according to the "compression
- method" section above; i.e., 0 for stored, 8 for deflated, etc.
- Version specifies how the compressed data are to be interpreted
- and allows for future expansion of this extra field type. Currently
- only version 0 is defined.
- For version 0, the compressed data are to be interpreted as a single
- valid Windows NT SECURITY_DESCRIPTOR data structure, in self-relative
- format.
- -PKWARE Win95/WinNT Extra Field (0x000a):
- =======================================
- The following description covers PKWARE's "NTFS" attributes
- "extra" block, introduced with the release of PKZIP 2.50 for
- Windows. (Last Revision 20001118)
- (Note: At this time the Mtime, Atime and Ctime values may
- be used on any WIN32 system.)
- [Info-ZIP note: In the current implementations, this field has
- a fixed total data size of 32 bytes and is only stored as local
- extra field.]
- Value Size Description
- ----- ---- -----------
- (NTFS) 0x000a Short Tag for this "extra" block type
- TSize Short Total Data Size for this block
- Reserved Long for future use
- Tag1 Short NTFS attribute tag value #1
- Size1 Short Size of attribute #1, in bytes
- (var.) SubSize1 Attribute #1 data
- .
- .
- .
- TagN Short NTFS attribute tag value #N
- SizeN Short Size of attribute #N, in bytes
- (var.) SubSizeN Attribute #N data
- For NTFS, values for Tag1 through TagN are as follows:
- (currently only one set of attributes is defined for NTFS)
- Tag Size Description
- ----- ---- -----------
- 0x0001 2 bytes Tag for attribute #1
- Size1 2 bytes Size of attribute #1, in bytes (24)
- Mtime 8 bytes 64-bit NTFS file last modification time
- Atime 8 bytes 64-bit NTFS file last access time
- Ctime 8 bytes 64-bit NTFS file creation time
- The total length for this block is 28 bytes, resulting in a
- fixed size value of 32 for the TSize field of the NTFS block.
- The NTFS filetimes are 64-bit unsigned integers, stored in Intel
- (least significant byte first) byte order. They determine the
- number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch",
- which is "01-Jan-1601 00:00:00 UTC".
- -PKWARE OpenVMS Extra Field (0x000c):
- ===================================
- The following is the layout of PKWARE's OpenVMS attributes
- "extra" block. (Last Revision 12/17/91)
- Note: all fields stored in Intel low-byte/high-byte order.
- Value Size Description
- ----- ---- -----------
- (VMS) 0x000c Short Tag for this "extra" block type
- TSize Short Total Data Size for this block
- CRC Long 32-bit CRC for remainder of the block
- Tag1 Short OpenVMS attribute tag value #1
- Size1 Short Size of attribute #1, in bytes
- (var.) Size1 Attribute #1 data
- .
- .
- .
- TagN Short OpenVMS attribute tag value #N
- SizeN Short Size of attribute #N, in bytes
- (var.) SizeN Attribute #N data
- Rules:
- 1. There will be one or more of attributes present, which
- will each be preceded by the above TagX & SizeX values.
- These values are identical to the ATR$C_XXXX and
- ATR$S_XXXX constants which are defined in ATR.H under
- OpenVMS C. Neither of these values will ever be zero.
- 2. No word alignment or padding is performed.
- 3. A well-behaved PKZIP/OpenVMS program should never produce
- more than one sub-block with the same TagX value. Also,
- there will never be more than one "extra" block of type
- 0x000c in a particular directory record.
- -Info-ZIP VMS Extra Field:
- ========================
- The following is the layout of Info-ZIP's VMS attributes extra
- block for VAX or Alpha AXP. The local-header and central-header
- versions are identical. (Last Revision 19960922)
- Value Size Description
- ----- ---- -----------
- (VMS2) 0x4d49 Short tag for this extra block type ("JM")
- TSize Short total data size for this block
- ID Long block ID
- Flags Short info bytes
- BSize Short uncompressed block size
- Reserved Long (reserved)
- (var.) variable compressed VMS file-attributes block
- The block ID is one of the following unterminated strings:
- "VFAB" struct FAB
- "VALL" struct XABALL
- "VFHC" struct XABFHC
- "VDAT" struct XABDAT
- "VRDT" struct XABRDT
- "VPRO" struct XABPRO
- "VKEY" struct XABKEY
- "VMSV" version (e.g., "V6.1"; truncated at hyphen)
- "VNAM" reserved
- The lower three bits of Flags indicate the compression method. The
- currently defined methods are:
- 0 stored (not compressed)
- 1 simple "RLE"
- 2 deflated
- The "RLE" method simply replaces zero-valued bytes with zero-valued
- bits and non-zero-valued bytes with a "1" bit followed by the byte
- value.
- The variable-length compressed data contains only the data corre-
- sponding to the indicated structure or string. Typically multiple
- VMS2 extra fields are present (each with a unique block type).
- -Info-ZIP Macintosh Extra Field:
- ==============================
- The following is the layout of the (old) Info-ZIP resource-fork extra
- block for Macintosh. The local-header and central-header versions
- are identical. (Last Revision 19960922)
- Value Size Description
- ----- ---- -----------
- (Mac) 0x07c8 Short tag for this extra block type
- TSize Short total data size for this block
- "JLEE" beLong extra-field signature
- FInfo 16 bytes Macintosh FInfo structure
- CrDat beLong HParamBlockRec fileParam.ioFlCrDat
- MdDat beLong HParamBlockRec fileParam.ioFlMdDat
- Flags beLong info bits
- DirID beLong HParamBlockRec fileParam.ioDirID
- VolName 28 bytes volume name (optional)
- All fields but the first two are in native Macintosh format
- (big-endian Motorola order, not little-endian Intel). The least
- significant bit of Flags is 1 if the file is a data fork, 0 other-
- wise. In addition, if this extra field is present, the filename
- has an extra 'd' or 'r' appended to indicate data fork or resource
- fork. The 28-byte VolName field may be omitted.
- -ZipIt Macintosh Extra Field (long):
- ==================================
- The following is the layout of the ZipIt extra block for Macintosh.
- The local-header and central-header versions are identical.
- (Last Revision 19970130)
- Value Size Description
- ----- ---- -----------
- (Mac2) 0x2605 Short tag for this extra block type
- TSize Short total data size for this block
- "ZPIT" beLong extra-field signature
- FnLen Byte length of FileName
- FileName variable full Macintosh filename
- FileType Byte[4] four-byte Mac file type string
- Creator Byte[4] four-byte Mac creator string
- -ZipIt Macintosh Extra Field (short, for files):
- ==============================================
- The following is the layout of a shortened variant of the
- ZipIt extra block for Macintosh (without "full name" entry).
- This variant is used by ZipIt 1.3.5 and newer for entries of
- files (not directories) that do not have a MacBinary encoded
- file. The local-header and central-header versions are identical.
- (Last Revision 20030602)
- Value Size Description
- ----- ---- -----------
- (Mac2b) 0x2705 Short tag for this extra block type
- TSize Short total data size for this block (min. 12)
- "ZPIT" beLong extra-field signature
- FileType Byte[4] four-byte Mac file type string
- Creator Byte[4] four-byte Mac creator string
- fdFlags beShort attributes from FInfo.frFlags,
- may be omitted
- 0x0000 beShort reserved, may be omitted
- -ZipIt Macintosh Extra Field (short, for directories):
- ====================================================
- The following is the layout of a shortened variant of the
- ZipIt extra block for Macintosh used only for directory
- entries. This variant is used by ZipIt 1.3.5 and newer to
- save some optional Mac-specific information about directories.
- The local-header and central-header versions are identical.
- Value Size Description
- ----- ---- -----------
- (Mac2c) 0x2805 Short tag for this extra block type
- TSize Short total data size for this block (12)
- "ZPIT" beLong extra-field signature
- frFlags beShort attributes from DInfo.frFlags, may
- be omitted
- View beShort ZipIt view flag, may be omitted
- The View field specifies ZipIt-internal settings as follows:
- Bits of the Flags:
- bit 0 if set, the folder is shown expanded (open)
- when the archive contents are viewed in ZipIt.
- bits 1-15 reserved, zero;
- -Info-ZIP Macintosh Extra Field (new):
- ====================================
- The following is the layout of the (new) Info-ZIP extra
- block for Macintosh, designed by Dirk Haase.
- All values are in little-endian.
- (Last Revision 19981005)
- Local-header version:
- Value Size Description
- ----- ---- -----------
- (Mac3) 0x334d Short tag for this extra block type ("M3")
- TSize Short total data size for this block
- BSize Long uncompressed finder attribute data size
- Flags Short info bits
- fdType Byte[4] Type of the File (4-byte string)
- fdCreator Byte[4] Creator of the File (4-byte string)
- (CType) Short compression type
- (CRC) Long CRC value for uncompressed MacOS data
- Attribs variable finder attribute data (see below)
- Central-header version:
- Value Size Description
- ----- ---- -----------
- (Mac3) 0x334d Short tag for this extra block type ("M3")
- TSize Short total data size for this block
- BSize Long uncompressed finder attribute data size
- Flags Short info bits
- fdType Byte[4] Type of the File (4-byte string)
- fdCreator Byte[4] Creator of the File (4-byte string)
- The third bit of Flags in both headers indicates whether
- the LOCAL extra field is uncompressed (and therefore whether CType
- and CRC are omitted):
- Bits of the Flags:
- bit 0 if set, file is a data fork; otherwise unset
- bit 1 if set, filename will be not changed
- bit 2 if set, Attribs is uncompressed (no CType, CRC)
- bit 3 if set, date and times are in 64 bit
- if zero date and times are in 32 bit.
- bit 4 if set, timezone offsets fields for the native
- Mac times are omitted (UTC support deactivated)
- bits 5-15 reserved;
- Attributes:
- Attribs is a Mac-specific block of data in little-endian format with
- the following structure (if compressed, uncompress it first):
- Value Size Description
- ----- ---- -----------
- fdFlags Short Finder Flags
- fdLocation.v Short Finder Icon Location
- fdLocation.h Short Finder Icon Location
- fdFldr Short Folder containing file
- FXInfo 16 bytes Macintosh FXInfo structure
- FXInfo-Structure:
- fdIconID Short
- fdUnused[3] Short unused but reserved 6 bytes
- fdScript Byte Script flag and number
- fdXFlags Byte More flag bits
- fdComment Short Comment ID
- fdPutAway Long Home Dir ID
- FVersNum Byte file version number
- may be not used by MacOS
- ACUser Byte directory access rights
- FlCrDat ULong date and time of creation
- FlMdDat ULong date and time of last modification
- FlBkDat ULong date and time of last backup
- These time numbers are original Mac FileTime values (local time!).
- Currently, date-time width is 32-bit, but future version may
- support be 64-bit times (see flags)
- CrGMTOffs Long(signed!) difference "local Creat. time - UTC"
- MdGMTOffs Long(signed!) difference "local Modif. time - UTC"
- BkGMTOffs Long(signed!) difference "local Backup time - UTC"
- These "local time - UTC" differences (stored in seconds) may be
- used to support timestamp adjustment after inter-timezone transfer.
- These fields are optional; bit 4 of the flags word controls their
- presence.
- Charset Short TextEncodingBase (Charset)
- valid for the following two fields
- FullPath variable Path of the current file.
- Zero terminated string (C-String)
- Currently coded in the native Charset.
- Comment variable Finder Comment of the current file.
- Zero terminated string (C-String)
- Currently coded in the native Charset.
- -SmartZIP Macintosh Extra Field:
- ====================================
- The following is the layout of the SmartZIP extra
- block for Macintosh, designed by Marco Bambini.
- Local-header version:
- Value Size Description
- ----- ---- -----------
- 0x4d63 Short tag for this extra block type ("cM")
- TSize Short total data size for this block (64)
- "dZip" beLong extra-field signature
- fdType Byte[4] Type of the File (4-byte string)
- fdCreator Byte[4] Creator of the File (4-byte string)
- fdFlags beShort Finder Flags
- fdLocation.v beShort Finder Icon Location
- fdLocation.h beShort Finder Icon Location
- fdFldr beShort Folder containing file
- CrDat beLong HParamBlockRec fileParam.ioFlCrDat
- MdDat beLong HParamBlockRec fileParam.ioFlMdDat
- frScroll.v Byte vertical pos. of folder's scroll bar
- fdScript Byte Script flag and number
- frScroll.h Byte horizontal pos. of folder's scroll bar
- fdXFlags Byte More flag bits
- FileName Byte[32] full Macintosh filename (pascal string)
- All fields but the first two are in native Macintosh format
- (big-endian Motorola order, not little-endian Intel).
- The extra field size is fixed to 64 bytes.
- The local-header and central-header versions are identical.
- -Acorn SparkFS Extra Field:
- =========================
- The following is the layout of David Pilling's SparkFS extra block
- for Acorn RISC OS. The local-header and central-header versions are
- identical. (Last Revision 19960922)
- Value Size Description
- ----- ---- -----------
- (Acorn) 0x4341 Short tag for this extra block type ("AC")
- TSize Short total data size for this block (20)
- "ARC0" Long extra-field signature
- LoadAddr Long load address or file type
- ExecAddr Long exec address
- Attr Long file permissions
- Zero Long reserved; always zero
- The following bits of Attr are associated with the given file
- permissions:
- bit 0 user-writable ('W')
- bit 1 user-readable ('R')
- bit 2 reserved
- bit 3 locked ('L')
- bit 4 publicly writable ('w')
- bit 5 publicly readable ('r')
- bit 6 reserved
- bit 7 reserved
- -VM/CMS Extra Field:
- ==================
- The following is the layout of the file-attributes extra block for
- VM/CMS. The local-header and central-header versions are
- identical. (Last Revision 19960922)
- Value Size Description
- ----- ---- -----------
- (VM/CMS) 0x4704 Short tag for this extra block type
- TSize Short total data size for this block
- flData variable file attributes data
- flData is an uncompressed fldata_t struct.
- -MVS Extra Field:
- ===============
- The following is the layout of the file-attributes extra block for
- MVS. The local-header and central-header versions are identical.
- (Last Revision 19960922)
- Value Size Description
- ----- ---- -----------
- (MVS) 0x470f Short tag for this extra block type
- TSize Short total data size for this block
- flData variable file attributes data
- flData is an uncompressed fldata_t struct.
- -PKWARE Unix Extra Field (0x000d):
- ================================
- The following is the layout of PKWARE's Unix "extra" block.
- It was introduced with the release of PKZIP for Unix 2.50.
- Note: all fields are stored in Intel low-byte/high-byte order.
- (Last Revision 19980901)
- This field has a minimum data size of 12 bytes and is only stored
- as local extra field.
- Value Size Description
- ----- ---- -----------
- (Unix0) 0x000d Short Tag for this "extra" block type
- TSize Short Total Data Size for this block
- AcTime Long time of last access (UTC/GMT)
- ModTime Long time of last modification (UTC/GMT)
- UID Short Unix user ID
- GID Short Unix group ID
- (var) variable Variable length data field
- The variable length data field will contain file type
- specific data. Currently the only values allowed are
- the original "linked to" file names for hard or symbolic
- links, and the major and minor device node numbers for
- character and block device nodes. Since device nodes
- cannot be either symbolic or hard links, only one set of
- variable length data is stored. Link files will have the
- name of the original file stored. This name is NOT NULL
- terminated. Its size can be determined by checking TSize -
- 12. Device entries will have eight bytes stored as two 4
- byte entries (in little-endian format). The first entry
- will be the major device number, and the second the minor
- device number.
- [Info-ZIP note: The fixed part of this field has the same layout as
- Info-ZIP's abandoned "Unix1 timestamps & owner ID info" extra field;
- only the two tag bytes are different.]
- -PATCH Descriptor Extra Field (0x000f):
- =====================================
- The following is the layout of the Patch Descriptor "extra"
- block.
- Note: all fields stored in Intel low-byte/high-byte order.
- Value Size Description
- ----- ---- -----------
- (Patch) 0x000f Short Tag for this "extra" block type
- TSize Short Size of the total "extra" block
- Version Short Version of the descriptor
- Flags Long Actions and reactions (see below)
- OldSize Long Size of the file about to be patched
- OldCRC Long 32-bit CRC of the file about to be patched
- NewSize Long Size of the resulting file
- NewCRC Long 32-bit CRC of the resulting file
- Actions and reactions
- Bits Description
- ---- ----------------
- 0 Use for auto detection
- 1 Treat as a self-patch
- 2-3 RESERVED
- 4-5 Action (see below)
- 6-7 RESERVED
- 8-9 Reaction (see below) to absent file
- 10-11 Reaction (see below) to newer file
- 12-13 Reaction (see below) to unknown file
- 14-15 RESERVED
- 16-31 RESERVED
- Actions
- Action Value
- ------ -----
- none 0
- add 1
- delete 2
- patch 3
- Reactions
- Reaction Value
- -------- -----
- ask 0
- skip 1
- ignore 2
- fail 3
- Patch support is provided by PKPatchMaker(tm) technology and is
- covered under U.S. Patents and Patents Pending. The use or
- implementation in a product of certain technological aspects set
- forth in the current APPNOTE, including those with regard to
- strong encryption, patching, or extended tape operations requires
- a license from PKWARE. Please contact PKWARE with regard to
- acquiring a license.
- -PKCS#7 Store for X.509 Certificates (0x0014):
- ============================================
- This field contains information about each of the certificates
- files may be signed with. When the Central Directory Encryption
- feature is enabled for a ZIP file, this record will appear in
- the Archive Extra Data Record, otherwise it will appear in the
- first central directory record and will be ignored in any
- other record.
- Note: all fields stored in Intel low-byte/high-byte order.
- Value Size Description
- ----- ---- -----------
- (Store) 0x0014 2 bytes Tag for this "extra" block type
- TSize 2 bytes Size of the store data
- SData TSize Data about the store
- SData
- Value Size Description
- ----- ---- -----------
- Version 2 bytes Version number, 0x0001 for now
- StoreD (variable) Actual store data
- The StoreD member is suitable for passing as the pbData
- member of a CRYPT_DATA_BLOB to the CertOpenStore() function
- in Microsoft's CryptoAPI. The SSize member above will be
- cbData + 6, where cbData is the cbData member of the same
- CRYPT_DATA_BLOB. The encoding type to pass to
- CertOpenStore() should be
- PKCS_7_ANS_ENCODING | X509_ASN_ENCODING.
- -X.509 Certificate ID and Signature for individual file (0x0015):
- ===============================================================
- This field contains the information about which certificate in
- the PKCS#7 store was used to sign a particular file. It also
- contains the signature data. This field can appear multiple
- times, but can only appear once per certificate.
- Note: all fields stored in Intel low-byte/high-byte order.
- Value Size Description
- ----- ---- -----------
- (CID) 0x0015 2 bytes Tag for this "extra" block type
- CSize 2 bytes Size of Method
- Method (variable)
- Method
- Value Size Description
- ----- ---- -----------
- Version 2 bytes Version number, for now 0x0001
- AlgID 2 bytes Algorithm ID used for signing
- IDSize 2 bytes Size of Certificate ID data
- CertID (variable) Certificate ID data
- SigSize 2 bytes Size of Signature data
- Sig (variable) Signature data
- CertID
- Value Size Description
- ----- ---- -----------
- Size1 4 bytes Size of CertID, should be (IDSize - 4)
- Size1 4 bytes A bug in version one causes this value
- to appear twice.
- IssSize 4 bytes Issuer data size
- Issuer (variable) Issuer data
- SerSize 4 bytes Serial Number size
- Serial (variable) Serial Number data
- The Issuer and IssSize members are suitable for creating a
- CRYPT_DATA_BLOB to be the Issuer member of a CERT_INFO
- struct. The Serial and SerSize members would be the
- SerialNumber member of the same CERT_INFO struct. This
- struct would be used to find the certificate in the store
- the file was signed with. Those structures are from the MS
- CryptoAPI.
- Sig and SigSize are the actual signature data and size
- generated by signing the file with the MS CryptoAPI using a
- hash created with the given AlgID.
- -X.509 Certificate ID and Signature for central directory (0x0016):
- =================================================================
- This field contains the information about which certificate in
- the PKCS#7 store was used to sign the central directory structure.
- When the Central Directory Encryption feature is enabled for a
- ZIP file, this record will appear in the Archive Extra Data Record,
- otherwise it will appear in the first central directory record,
- along with the store. The data structure is the
- same as the CID, except that SigSize will be 0, and there
- will be no Sig member.
- This field is also kept after the last central directory
- record, as the signature data (ID 0x05054b50, it looks like
- a central directory record of a different type). This
- second copy of the data is the Signature Data member of the
- record, and will have a SigSize that is non-zero, and will
- have Sig data.
- Note: all fields stored in Intel low-byte/high-byte order.
- Value Size Description
- ----- ---- -----------
- (CDID) 0x0016 2 bytes Tag for this "extra" block type
- TSize 2 bytes Size of data that follows
- TData TSize Data
- -Strong Encryption Header (0x0017):
- =================================
- Value Size Description
- ----- ---- -----------
- 0x0017 2 bytes Tag for this "extra" block type
- TSize 2 bytes Size of data that follows
- Format 2 bytes Format definition for this record
- AlgID 2 bytes Encryption algorithm identifier
- Bitlen 2 bytes Bit length of encryption key
- Flags 2 bytes Processing flags
- CertData TSize-8 Certificate decryption extra field data
- (refer to the explanation for CertData
- in the section describing the
- Certificate Processing Method under
- the Strong Encryption Specification)
- -Record Management Controls (0x0018):
- ===================================
- Value Size Description
- ----- ---- -----------
- (Rec-CTL) 0x0018 2 bytes Tag for this "extra" block type
- CSize 2 bytes Size of total extra block data
- Tag1 2 bytes Record control attribute 1
- Size1 2 bytes Size of attribute 1, in bytes
- Data1 Size1 Attribute 1 data
- .
- .
- .
- TagN 2 bytes Record control attribute N
- SizeN 2 bytes Size of attribute N, in bytes
- DataN SizeN Attribute N data
- -PKCS#7 Encryption Recipient Certificate List (0x0019):
- =====================================================
- This field contains information about each of the certificates
- used in encryption processing and it can be used to identify who is
- allowed to decrypt encrypted files. This field should only appear
- in the archive extra data record. This field is not required and
- serves only to aide archive modifications by preserving public
- encryption key data. Individual security requirements may dictate
- that this data be omitted to deter information exposure.
- Note: all fields stored in Intel low-byte/high-byte order.
- Value Size Description
- ----- ---- -----------
- (CStore) 0x0019 2 bytes Tag for this "extra" block type
- TSize 2 bytes Size of the store data
- TData TSize Data about the store
- TData:
- Value Size Description
- ----- ---- -----------
- Version 2 bytes Format version number - must 0x0001 at this time
- CStore (var) PKCS#7 data blob
- -MVS Extra Field (PKWARE, 0x0065):
- ================================
- The following is the layout of the MVS "extra" block.
- Note: Some fields are stored in Big Endian format.
- All text is in EBCDIC format unless otherwise specified.
- Value Size Description
- ----- ---- -----------
- (MVS) 0x0065 2 bytes Tag for this "extra" block type
- TSize 2 bytes Size for the following data block
- ID 4 bytes EBCDIC "Z390" 0xE9F3F9F0 or
- "T4MV" for TargetFour
- (var) TSize-4 Attribute data
- -OS/400 Extra Field (0x0065):
- ===========================
- The following is the layout of the OS/400 "extra" block.
- Note: Some fields are stored in Big Endian format.
- All text is in EBCDIC format unless otherwise specified.
- Value Size Description
- ----- ---- -----------
- (OS400) 0x0065 2 bytes Tag for this "extra" block type
- TSize 2 bytes Size for the following data block
- ID 4 bytes EBCDIC "I400" 0xC9F4F0F0 or
- "T4MV" for TargetFour
- (var) TSize-4 Attribute data
- -Info-ZIP Unicode Path Extra Field:
- =================================
- Stores the UTF-8 version of the entry path as stored in the
- local header and central directory header.
- (Last Revision 20070912)
- Value Size Description
- ----- ---- -----------
- (UPath) 0x7075 Short tag for this extra block type ("up")
- TSize Short total data size for this block
- Version Byte version of this extra field, currently 1
- NameCRC32 Long CRC-32 checksum of standard name field
- UnicodeName variable UTF-8 version of the entry file name
- Currently Version is set to the number 1. If there is a need
- to change this field, the version will be incremented. Changes
- may not be backward compatible so this extra field should not be
- used if the version is not recognized.
- The NameCRC32 is the standard zip CRC32 checksum of the File Name
- field in the header. This is used to verify that the header
- File Name field has not changed since the Unicode Path extra field
- was created. This can happen if a utility renames the entry but
- does not update the UTF-8 path extra field. If the CRC check fails,
- this UTF-8 Path Extra Field should be ignored and the File Name field
- in the header should be used instead.
- The UnicodeName is the UTF-8 version of the contents of the File
- Name field in the header, without any trailing NUL. The standard
- name field in the Zip entry header remains filled with the entry
- name coded in the local machine's extended ASCII system charset.
- As UnicodeName is defined to be UTF-8, no UTF-8 byte order mark
- (BOM) is used. The length of this field is determined by
- subtracting the size of the previous fields from TSize.
- If both the File Name and Comment fields are UTF-8, the new General
- Purpose Bit Flag, bit 11 (Language encoding flag (EFS)), should be
- used to indicate that both the header File Name and Comment fields
- are UTF-8 and, in this case, the Unicode Path and Unicode Comment
- extra fields are not needed and should not be created. Note that,
- for backward compatibility, bit 11 should only be used if the native
- character set of the paths and comments being zipped up are already
- in UTF-8. The same method, either general purpose bit 11 or extra
- fields, should be used in both the Local and Central Directory Header
- for a file.
- Utilisation rules:
- 1. This field shall never be created for names consisting solely of
- 7-bit ASCII characters.
- 2. On a system that already uses UTF-8 as system charset, this field
- shall not repeat the string pattern already stored in the Zip
- entry's standard name field. Instead, a field of exactly 9 bytes
- (70 75 05 00 01 and 4 bytes CRC) should be created.
- In this form with 5 data bytes, the field serves as indicator
- for the UTF-8 encoding of the standard Zip header's name field.
- 3. This field shall not be used whenever the calculated CRC-32 of
- the entry's standard name field does not match the provided
- CRC checksum value. A mismatch of the CRC check indicates that
- the standard name field was changed by some non-"up"-aware
- utility without synchronizing this UTF-8 name e.f. block.
- -Info-ZIP Unicode Comment Extra Field:
- ====================================
- Stores the UTF-8 version of the entry comment as stored in the
- central directory header.
- (Last Revision 20070912)
- Value Size Description
- ----- ---- -----------
- (UCom) 0x6375 Short tag for this extra block type ("uc")
- TSize Short total data size for this block
- Version 1 byte version of this extra field, currently 1
- ComCRC32 4 bytes Comment Field CRC32 Checksum
- UnicodeCom Variable UTF-8 version of the entry comment
- Currently Version is set to the number 1. If there is a need
- to change this field, the version will be incremented. Changes
- may not be backward compatible so this extra field should not be
- used if the version is not recognized.
- The ComCRC32 is the standard zip CRC32 checksum of the Comment
- field in the central directory header. This is used to verify that
- the comment field has not changed since the Unicode Comment extra
- field was created. This can happen if a utility changes the Comment
- field but does not update the UTF-8 Comment extra field. If the CRC
- check fails, this Unicode Comment extra field should be ignored and
- the Comment field in the header used.
- The UnicodeCom field is the UTF-8 version of the entry comment field
- in the header. As UnicodeCom is defined to be UTF-8, no UTF-8 byte
- order mark (BOM) is used. The length of this field is determined by
- subtracting the size of the previous fields from TSize. If both the
- File Name and Comment fields are UTF-8, the new General Purpose Bit
- Flag, bit 11 (Language encoding flag (EFS)), can be used to indicate
- both the header File Name and Comment fields are UTF-8 and, in this
- case, the Unicode Path and Unicode Comment extra fields are not
- needed and should not be created. Note that, for backward
- compatibility, bit 11 should only be used if the native character set
- of the paths and comments being zipped up are already in UTF-8. The
- same method, either bit 11 or extra fields, should be used in both
- the local and central directory headers.
- -Extended Timestamp Extra Field:
- ==============================
- The following is the layout of the extended-timestamp extra block.
- (Last Revision 19970118)
- Local-header version:
- Value Size Description
- ----- ---- -----------
- (time) 0x5455 Short tag for this extra block type ("UT")
- TSize Short total data size for this block
- Flags Byte info bits
- (ModTime) Long time of last modification (UTC/GMT)
- (AcTime) Long time of last access (UTC/GMT)
- (CrTime) Long time of original creation (UTC/GMT)
- Central-header version:
- Value Size Description
- ----- ---- -----------
- (time) 0x5455 Short tag for this extra block type ("UT")
- TSize Short total data size for this block
- Flags Byte info bits (refers to local header!)
- (ModTime) Long time of last modification (UTC/GMT)
- The central-header extra field contains the modification time only,
- or no timestamp at all. TSize is used to flag its presence or
- absence. But note:
- If "Flags" indicates that Modtime is present in the local header
- field, it MUST be present in the central header field, too!
- This correspondence is required because the modification time
- value may be used to support trans-timezone freshening and
- updating operations with zip archives.
- The time values are in standard Unix signed-long format, indicating
- the number of seconds since 1 January 1970 00:00:00. The times
- are relative to Coordinated Universal Time (UTC), also sometimes
- referred to as Greenwich Mean Time (GMT). To convert to local time,
- the software must know the local timezone offset from UTC/GMT.
- The lower three bits of Flags in both headers indicate which time-
- stamps are present in the LOCAL extra field:
- bit 0 if set, modification time is present
- bit 1 if set, access time is present
- bit 2 if set, creation time is present
- bits 3-7 reserved for additional timestamps; not set
- Those times that are present will appear in the order indicated, but
- any combination of times may be omitted. (Creation time may be
- present without access time, for example.) TSize should equal
- (1 + 4*(number of set bits in Flags)), as the block is currently
- defined. Other timestamps may be added in the future.
- -Info-ZIP Unix Extra Field (type 1):
- ==================================
- The following is the layout of the old Info-ZIP extra block for
- Unix. It has been replaced by the extended-timestamp extra block
- (0x5455) and the Unix type 2 extra block (0x7855).
- (Last Revision 19970118)
- Local-header version:
- Value Size Description
- ----- ---- -----------
- (Unix1) 0x5855 Short tag for this extra block type ("UX")
- TSize Short total data size for this block
- AcTime Long time of last access (UTC/GMT)
- ModTime Long time of last modification (UTC/GMT)
- UID Short Unix user ID (optional)
- GID Short Unix group ID (optional)
- Central-header version:
- Value Size Description
- ----- ---- -----------
- (Unix1) 0x5855 Short tag for this extra block type ("UX")
- TSize Short total data size for this block
- AcTime Long time of last access (GMT/UTC)
- ModTime Long time of last modification (GMT/UTC)
- The file access and modification times are in standard Unix signed-
- long format, indicating the number of seconds since 1 January 1970
- 00:00:00. The times are relative to Coordinated Universal Time
- (UTC), also sometimes referred to as Greenwich Mean Time (GMT). To
- convert to local time, the software must know the local timezone
- offset from UTC/GMT. The modification time may be used by non-Unix
- systems to support inter-timezone freshening and updating of zip
- archives.
- The local-header extra block may optionally contain UID and GID
- info for the file. The local-header TSize value is the only
- indication of this. Note that Unix UIDs and GIDs are usually
- specific to a particular machine, and they generally require root
- access to restore.
- This extra field type is obsolete, but it has been in use since
- mid-1994. Therefore future archiving software should continue to
- support it. Some guidelines:
- An archive member should either contain the old "Unix1"
- extra field block or the new extra field types "time" and/or
- "Unix2".
- If both the old "Unix1" block type and one or both of the new
- block types "time" and "Unix2" are found, the "Unix1" block
- should be considered invalid and ignored.
- Unarchiving software should recognize both old and new extra
- field block types, but the info from new types overrides the
- old "Unix1" field.
- Archiving software should recognize "Unix1" extra fields for
- timestamp comparison but never create it for updated, freshened
- or new archive members. When copying existing members to a new
- archive, any "Unix1" extra field blocks should be converted to
- the new "time" and/or "Unix2" types.
- -Info-ZIP UNIX Extra Field (type 2):
- ==================================
- The following is the layout of the new Info-ZIP extra block for
- Unix. (Last Revision 19960922)
- Local-header version:
- Value Size Description
- ----- ---- -----------
- (Unix2) 0x7855 Short tag for this extra block type ("Ux")
- TSize Short total data size for this block (4)
- UID Short Unix user ID
- GID Short Unix group ID
- Central-header version:
- Value Size Description
- ----- ---- -----------
- (Unix2) 0x7855 Short tag for this extra block type ("Ux")
- TSize Short total data size for this block (0)
- The data size of the central-header version is zero; it is used
- solely as a flag that UID/GID info is present in the local-header
- extra field. If additional fields are ever added to the local
- version, the central version may be extended to indicate this.
- Note that Unix UIDs and GIDs are usually specific to a particular
- machine, and they generally require root access to restore.
- -Info-ZIP New Unix Extra Field:
- ====================================
- Currently stores Unix UIDs/GIDs up to 32 bits.
- (Last Revision 20080509)
- Value Size Description
- ----- ---- -----------
- (UnixN) 0x7875 Short tag for this extra block type ("ux")
- TSize Short total data size for this block
- Version 1 byte version of this extra field, currently 1
- UIDSize 1 byte Size of UID field
- UID Variable UID for this entry
- GIDSize 1 byte Size of GID field
- GID Variable GID for this entry
- Currently Version is set to the number 1. If there is a need
- to change this field, the version will be incremented. Changes
- may not be backward compatible so this extra field should not be
- used if the version is not recognized.
- UIDSize is the size of the UID field in bytes. This size should
- match the size of the UID field on the target OS.
- UID is the UID for this entry in standard little endian format.
- GIDSize is the size of the GID field in bytes. This size should
- match the size of the GID field on the target OS.
- GID is the GID for this entry in standard little endian format.
- If both the old 16-bit Unix extra field (tag 0x7855, Info-ZIP Unix2)
- and this extra field are present, the values in this extra field
- supercede the values in that extra field.
- -ASi UNIX Extra Field:
- ====================
- The following is the layout of the ASi extra block for Unix. The
- local-header and central-header versions are identical.
- (Last Revision 19960916)
- Value Size Description
- ----- ---- -----------
- (Unix3) 0x756e Short tag for this extra block type ("nu")
- TSize Short total data size for this block
- CRC Long CRC-32 of the remaining data
- Mode Short file permissions
- SizDev Long symlink'd size OR major/minor dev num
- UID Short user ID
- GID Short group ID
- (var.) variable symbolic link filename
- Mode is the standard Unix st_mode field from struct stat, containing
- user/group/other permissions, setuid/setgid and symlink info, etc.
- If Mode indicates that this file is a symbolic link, SizDev is the
- size of the file to which the link points. Otherwise, if the file
- is a device, SizDev contains the standard Unix st_rdev field from
- struct stat (includes the major and minor numbers of the device).
- SizDev is undefined in other cases.
- If Mode indicates that the file is a symbolic link, the final field
- will be the name of the file to which the link points. The file-
- name length can be inferred from TSize.
- [Note that TSize may incorrectly refer to the data size not counting
- the CRC; i.e., it may be four bytes too small.]
- -BeOS Extra Field:
- ================
- The following is the layout of the file-attributes extra block for
- BeOS. (Last Revision 19970531)
- Local-header version:
- Value Size Description
- ----- ---- -----------
- (BeOS) 0x6542 Short tag for this extra block type ("Be")
- TSize Short total data size for this block
- BSize Long uncompressed file attribute data size
- Flags Byte info bits
- (CType) Short compression type
- (CRC) Long CRC value for uncompressed file attribs
- Attribs variable file attribute data
- Central-header version:
- Value Size Description
- ----- ---- -----------
- (BeOS) 0x6542 Short tag for this extra block type ("Be")
- TSize Short total data size for this block (5)
- BSize Long size of uncompr. local EF block data
- Flags Byte info bits
- The least significant bit of Flags in both headers indicates whether
- the LOCAL extra field is uncompressed (and therefore whether CType
- and CRC are omitted):
- bit 0 if set, Attribs is uncompressed (no CType, CRC)
- bits 1-7 reserved; if set, assume error or unknown data
- Currently the only supported compression types are deflated (type 8)
- and stored (type 0); the latter is not used by Info-ZIP's Zip but is
- supported by UnZip.
- Attribs is a BeOS-specific block of data in big-endian format with
- the following structure (if compressed, uncompress it first):
- Value Size Description
- ----- ---- -----------
- Name variable attribute name (null-terminated string)
- Type Long attribute type (32-bit unsigned integer)
- Size Long Long data size for this sub-block (64 bits)
- Data variable attribute data
- The attribute structure is repeated for every attribute. The Data
- field may contain anything--text, flags, bitmaps, etc.
- -AtheOS Extra Field:
- ==================
- The following is the layout of the file-attributes extra block for
- AtheOS. This field is a very close spin-off from the BeOS e.f.
- The only differences are:
- - a new extra field signature
- - numeric field in the attributes data are stored in little-endian
- format ("i386" was initial hardware for AtheOS)
- (Last Revision 20040908)
- Local-header version:
- Value Size Description
- ----- ---- -----------
- (AtheOS) 0x7441 Short tag for this extra block type ("At")
- TSize Short total data size for this block
- BSize Long uncompressed file attribute data size
- Flags Byte info bits
- (CType) Short compression type
- (CRC) Long CRC value for uncompressed file attribs
- Attribs variable file attribute data
- Central-header version:
- Value Size Description
- ----- ---- -----------
- (AtheOS) 0x7441 Short tag for this extra block type ("At")
- TSize Short total data size for this block (5)
- BSize Long size of uncompr. local EF block data
- Flags Byte info bits
- The least significant bit of Flags in both headers indicates whether
- the LOCAL extra field is uncompressed (and therefore whether CType
- and CRC are omitted):
- bit 0 if set, Attribs is uncompressed (no CType, CRC)
- bits 1-7 reserved; if set, assume error or unknown data
- Currently the only supported compression types are deflated (type 8)
- and stored (type 0); the latter is not used by Info-ZIP's Zip but is
- supported by UnZip.
- Attribs is a AtheOS-specific block of data in little-endian format
- with the following structure (if compressed, uncompress it first):
- Value Size Description
- ----- ---- -----------
- Name variable attribute name (null-terminated string)
- Type Long attribute type (32-bit unsigned integer)
- Size Long Long data size for this sub-block (64 bits)
- Data variable attribute data
- The attribute structure is repeated for every attribute. The Data
- field may contain anything--text, flags, bitmaps, etc.
- -SMS/QDOS Extra Field:
- ====================
- The following is the layout of the file-attributes extra block for
- SMS/QDOS. The local-header and central-header versions are identical.
- (Last Revision 19960929)
- Value Size Description
- ----- ---- -----------
- (QDOS) 0xfb4a Short tag for this extra block type
- TSize Short total data size for this block
- LongID Long extra-field signature
- (ExtraID) Long additional signature/flag bytes
- QDirect 64 bytes qdirect structure
- LongID may be "QZHD" or "QDOS". In the latter case, ExtraID will
- be present. Its first three bytes are "02\0"; the last byte is
- currently undefined.
- QDirect contains the file's uncompressed directory info (qdirect
- struct). Its elements are in native (big-endian) format:
- d_length beLong file length
- d_access byte file access type
- d_type byte file type
- d_datalen beLong data length
- d_reserved beLong unused
- d_szname beShort size of filename
- d_name 36 bytes filename
- d_update beLong time of last update
- d_refdate beLong file version number
- d_backup beLong time of last backup (archive date)
- -AOS/VS Extra Field:
- ==================
- The following is the layout of the extra block for Data General
- AOS/VS. The local-header and central-header versions are identical.
- (Last Revision 19961125)
- Value Size Description
- ----- ---- -----------
- (AOSVS) 0x5356 Short tag for this extra block type ("VS")
- TSize Short total data size for this block
- "FCI\0" Long extra-field signature
- Version Byte version of AOS/VS extra block (10 = 1.0)
- Fstat variable fstat packet
- AclBuf variable raw ACL data ($MXACL bytes)
- Fstat contains the file's uncompressed fstat packet, which is one of
- the following:
- normal fstat packet (P_FSTAT struct)
- DIR/CPD fstat packet (P_FSTAT_DIR struct)
- unit (device) fstat packet (P_FSTAT_UNIT struct)
- IPC file fstat packet (P_FSTAT_IPC struct)
- AclBuf contains the raw ACL data; its length is $MXACL.
- -Tandem NSK Extra Field:
- ======================
- The following is the layout of the file-attributes extra block for
- Tandem NSK. The local-header and central-header versions are
- identical. (Last Revision 19981221)
- Value Size Description
- ----- ---- -----------
- (TA) 0x4154 Short tag for this extra block type ("TA")
- TSize Short total data size for this block (20)
- NSKattrs 20 Bytes NSK attributes
- -THEOS Extra Field:
- =================
- The following is the layout of the file-attributes extra block for
- Theos. The local-header and central-header versions are identical.
- (Last Revision 19990206)
- Value Size Description
- ----- ---- -----------
- (Theos) 0x6854 Short 'Th' signature
- size Short size of extra block
- flags Byte reserved for future use
- filesize Long file size
- fileorg Byte type of file (see below)
- keylen Short key length for indexed and keyed files,
- data segment size for 16 bits programs
- reclen Short record length for indexed,keyed and direct,
- text segment size for 16 bits programs
- filegrow Byte growing factor for indexed,keyed and direct
- protect Byte protections (see below)
- reserved Short reserved for future use
- File types
- ==========
- 0x80 library (keyed access list of files)
- 0x40 directory
- 0x10 stream file
- 0x08 direct file
- 0x04 keyed file
- 0x02 indexed file
- 0x0e reserved
- 0x01 16 bits real mode program (obsolete)
- 0x21 16 bits protected mode program
- 0x41 32 bits protected mode program
- Protection codes
- ================
- User protection
- ---------------
- 0x01 non readable
- 0x02 non writable
- 0x04 non executable
- 0x08 non erasable
- Other protection
- ----------------
- 0x10 non readable
- 0x20 non writable
- 0x40 non executable Theos before 4.0
- 0x40 modified Theos 4.x
- 0x80 not hidden
- -THEOS old inofficial Extra Field:
- ================================
- The following is the layout of an inoffical former version of a
- Theos file-attributes extra blocks. This layout was never published
- and is no longer created. However, UnZip can optionally support it
- when compiling with the option flag OLD_THEOS_EXTRA defined.
- Both the local-header and central-header versions are identical.
- (Last Revision 19990206)
- Value Size Description
- ----- ---- -----------
- (THS0) 0x4854 Short 'TH' signature
- size Short size of extra block
- flags Short reserved for future use
- filesize Long file size
- reclen Short record length for indexed,keyed and direct,
- text segment size for 16 bits programs
- keylen Short key length for indexed and keyed files,
- data segment size for 16 bits programs
- filegrow Byte growing factor for indexed,keyed and direct
- reserved 3 Bytes reserved for future use
- -FWKCS MD5 Extra Field (0x4b46):
- ==============================
- The FWKCS Contents_Signature System, used in automatically
- identifying files independent of filename, optionally adds
- and uses an extra field to support the rapid creation of
- an enhanced contents_signature.
- There is no local-header version; the following applies
- only to the central header. (Last Revision 19961207)
- Central-header version:
- Value Size Description
- ----- ---- -----------
- (MD5) 0x4b46 Short tag for this extra block type ("FK")
- TSize Short total data size for this block (19)
- "MD5" 3 bytes extra-field signature
- MD5hash 16 bytes 128-bit MD5 hash of uncompressed data
- (low byte first)
- When FWKCS revises a .ZIP file central directory to add
- this extra field for a file, it also replaces the
- central directory entry for that file's uncompressed
- file length with a measured value.
- FWKCS provides an option to strip this extra field, if
- present, from a .ZIP file central directory. In adding
- this extra field, FWKCS preserves .ZIP file Authenticity
- Verification; if stripping this extra field, FWKCS
- preserves all versions of AV through PKZIP version 2.04g.
- FWKCS, and FWKCS Contents_Signature System, are
- trademarks of Frederick W. Kantor.
- (1) R. Rivest, RFC1321.TXT, MIT Laboratory for Computer
- Science and RSA Data Security, Inc., April 1992.
- ll.76-77: "The MD5 algorithm is being placed in the
- public domain for review and possible adoption as a
- standard."
- -Microsoft Open Packaging Growth Hint (0xa220):
- =============================================
- Value Size Description
- ----- ---- -----------
- 0xa220 Short tag for this extra block type
- TSize Short size of Sig + PadVal + Padding
- Sig Short verification signature (A028)
- PadVal Short Initial padding value
- Padding variable filled with NULL characters
|