Maconv/docs/stuffit/Stuffit_v5.md

87 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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