Module: Omnizip::Formats::Xar::Constants

Included in:
Entry, Entry::ExtendedAttribute, Header, Reader, Toc, Writer
Defined in:
lib/omnizip/formats/xar/constants.rb

Overview

XAR format constants

XAR (eXtensible ARchive) format is used primarily on macOS for software distribution (pkg files, etc.)

Format structure:

- Header (28 bytes)
- Compressed TOC (Table of Contents, XML)
- TOC Checksum
- Heap (file data)

Constant Summary collapse

MAGIC =

XAR magic number: "xar!" in big-endian

0x78617221
MAGIC_BYTES =
"xar!".b
HEADER_SIZE =

Header size (bytes)

28
HEADER_SIZE_EX =

Extended header size (with custom checksum name)

28 + 36
XAR_VERSION =

Format version

1
CKSUM_NONE =

Checksum algorithms

0
CKSUM_SHA1 =
1
CKSUM_MD5 =
2
CKSUM_OTHER =

Custom checksum (name in header)

3
CHECKSUM_NAMES =

Checksum names mapping

{
  CKSUM_NONE => "none",
  CKSUM_SHA1 => "sha1",
  CKSUM_MD5 => "md5",
}.freeze
CHECKSUM_ALGORITHMS =
{
  "none" => CKSUM_NONE,
  "sha1" => CKSUM_SHA1,
  "md5" => CKSUM_MD5,
  "sha224" => CKSUM_OTHER,
  "sha256" => CKSUM_OTHER,
  "sha384" => CKSUM_OTHER,
  "sha512" => CKSUM_OTHER,
}.freeze
CHECKSUM_SIZES =

Checksum sizes (bytes)

{
  "md5" => 16,
  "sha1" => 20,
  "sha224" => 28,
  "sha256" => 32,
  "sha384" => 48,
  "sha512" => 64,
}.freeze
COMPRESSION_NONE =

Compression types (used in TOC XML)

"none"
COMPRESSION_GZIP =
"gzip"
COMPRESSION_BZIP2 =
"bzip2"
COMPRESSION_LZMA =
"lzma"
COMPRESSION_XZ =
"xz"
COMPRESSION_MIME_TYPES =

Compression MIME types (as appear in TOC)

{
  COMPRESSION_NONE => "application/octet-stream",
  COMPRESSION_GZIP => "application/x-gzip",
  COMPRESSION_BZIP2 => "application/x-bzip2",
  COMPRESSION_LZMA => "application/x-lzma",
  COMPRESSION_XZ => "application/x-xz",
}.freeze
MIME_TYPE_TO_COMPRESSION =
{
  "application/octet-stream" => COMPRESSION_NONE,
  "application/x-gzip" => COMPRESSION_GZIP,
  "application/x-bzip2" => COMPRESSION_BZIP2,
  "application/x-lzma" => COMPRESSION_LZMA,
  "application/x-xz" => COMPRESSION_XZ,
}.freeze
TYPE_FILE =

File types (in TOC XML)

"file"
TYPE_DIRECTORY =
"directory"
"symlink"
"hardlink"
TYPE_FIFO =
"fifo"
TYPE_BLOCK =
"block"
TYPE_CHAR =
"character"
TYPE_SOCKET =
"socket"
HEADER_MAGIC_OFFSET =

Header field offsets

0
HEADER_SIZE_OFFSET =
4
HEADER_VERSION_OFFSET =
6
HEADER_TOC_COMPRESSED_OFFSET =
8
HEADER_TOC_UNCOMPRESSED_OFFSET =
16
HEADER_CKSUM_ALG_OFFSET =
24
DEFAULT_COMPRESSION =

Default options for XAR archives

COMPRESSION_GZIP
DEFAULT_TOC_CHECKSUM =
"sha1"
DEFAULT_FILE_CHECKSUM =
"sha1"
DEFAULT_COMPRESSION_LEVEL =
6
TOC_XML_DECLARATION =

TOC XML namespaces

'<?xml version="1.0" encoding="UTF-8"?>'
MAX_PATH_LENGTH =

Maximum path length

1024