# Stuffit 5 format All intergers are big-endians. ## Archive header | **Offset** | **Length** | **Contents** | |:-----------|:-----------|:-------------| | 000 | 80 bytes | Magic string (always `StuffIt (c)1997-???? Aladdin Systems, Inc., http://www.aladdinsys.com/StuffIt/` followed by `0x0D` `0x0A`, where characters marked `?` can vary) | | 080 | Half | Unknown | | 082 | Byte | Version (always `5`) | | 083 | Byte | Flags (`0x80` = encrypted) | | 084 | Word | Total size of archive | | 088 | Word | Unknown | | 092 | Half | Number of entries in root directory | | 094 | Word | Offset of first entry in root directory | | 098 | Half | Header CRC-16? | | 100 | ? | Unknown data until first entry | ## Entry header ### Base header for file and folder Both file and folder headers start with the following header. | **Offset** | **Length** | **Contents** | |:-----------|:-----------|:-------------| | 00 | Word | Magic number (always `0xA5A5A5A5`) | | 04 | Byte | Version | | 05 | Byte | Unknown (but certainly `0x00`) | | 06 | Half | Header size | | 08 | Byte | Unknown | | 09 | Byte | Entry flags/type | | 10 | Word | Creation date (Mac OS format) | | 14 | Word | Modification date (Mac OS format) | | 18 | Word | Offset of previous entry | | 22 | Word | Offset of next entry | | 26 | Word | Offset of directory entry | | 30 | Half | Name size (called **N** after) | | 32 | Half | Header CRC-16 | ### File specific header A file (when `flags` doesn't contain `0x40`) continues with the following header. | **Offset** | **Length** | **Contents** | |:-----------|:-----------|:-------------| | 34 | Word | Data fork uncompressed length | | 38 | Word | Data fork compressed length | | 42 | Half | Data fork CRC-16 (Set to zero for method 15) | | 44 | Half | Unknown | | 46 | Byte | Data fork compression method (only `0`, `13` or `15`) | | 47 | Byte | Password data lenght (called **M** after) | | 48 | **M** | Password information | | 48+**M** | **N** | Filename | | 48+**M**+**N** | **K** | Comment size (called **K** after) | | 48 | **N** | Filename | | 48 | **N** | Filename | ### Folder specific header A folder (when `flags` contains `0x40`) continues with the following header. | **Offset** | **Length** | **Contents** | |:-----------|:-----------|:-------------| | 34 | Word | Offset of first entry in folder | | 38 | Word | Size of complete directory | | 42 | Word | Unknown | | 46 | Half | Number of files in folder | | 48 | **N** | Folder name | | 48+**N** | ? | Unknown data until next entry | Note: if the offset of first entry is `0xFFFFFFFF`, this folder must be skiped after reading 48 bytes of header (the usefulness of these folders is unclear). --------------------------- **Sources** https://github.com/mietek/theunarchiver/wiki/StuffIt5Format https://github.com/mietek/theunarchiver/blob/master/XADMaster/XADStuffIt5Parser.m#L29