正本はmochiOSリポジトリのdocs/mpkg.md、docs/packages.md、docs/certificates.mdです。
.mpkgは32-byte headerの直後に非圧縮ustar streamを連結した形式です。gzipではありません。
offset size 内容
0 4 "MPKG"
4 2 major = 1 (u16 LE)
6 2 minor = 0 (u16 LE)
8 2 header size = 32 (u16 LE)
10 1 compression = 0
11 1 flags = 0
12 8 tar stream length (u64 LE)
20 12 reserved = all zero
manifest.toml
signatures/manifest.sig
signatures/developer.cert
payload/root/...
# または payload/bundle/...
manifest.sigはraw 64-byte Ed25519署名、developer.certはraw MCER v1です。signatures/chain/、未知のsignature entry、絶対path、..、重複path、link、device、FIFOは拒否します。
Manifestはformat = 1、[package]、[[file]]、[[binary]]で構成します。各[[file]]はpayload fileのID、path、size、SHA-256、modeを宣言し、各[[binary]]は対象file IDとrequires Capabilityを宣言します。未宣言payload、存在しないfile ID、hash/size不一致は拒否します。
署名メッセージは次のとおりです。
"mochios-mpkg-manifest-v1\0" || SHA256(manifest.toml raw bytes)
ReviewerはMCER v1を組み込みRoot公開鍵で検証し、Package ID scopeと全binary.requiresが証明書の許可範囲内であることを確認します。さらに登録時のCertificate serialとsubject公開鍵が、MPKG内の証明書と一致することを確認します。
AppStoreはMPKG本体を保存せず、固定GitHub Release asset URL、外側のSHA-256、Certificate情報、審査状態だけを保持します。releases/latest/download/...は使いません。