• v2.5 3e159f2ed1

    archiver-bot released this 2026-07-13 14:29:19 -05:00 | 5 commits to main since this release

    Fixes

    • Outer-filesystem mount key: the build path derived the mount key with the wrong hash (SHA-256 instead of SHA3-256). All build and signing paths now use SHA3-256.
    • Image key: the IMAGE_KEY entry is now filled with RSA-3072 key wrapping instead of a partial random tail.
    • Package layout descriptor (naps_pkg_layout.dat): two run/flush cadence errors fixed so the descriptor matches the expected on-disk structure. Every raw file opens a run; metadata opens a run on its first block only.
    • Streaming chunk counts: playgo-ficm.dat and playgo-hash-table.dat now count all inner file inodes, including the internal tables, not only user files.
    • Supplemental archive: the general-purpose ZIP writer was replaced with a format-exact writer that the console accepts.
    • Reader: a raw file flagged as compressed no longer throws. The reader only decodes a compressed container when the payload actually carries the container magic.
    • Reader entry ids: inspection labels corrected to the real writer ids (param.json, the streaming descriptors, imagedigs, and so on).
    • ProsperoPackageExtractor.ListFiles: now lists files from data-first packages and from compressed inner images. It previously failed on the primary package format even though full extraction of the same package succeeded.
    • Launch-readiness: a package whose eboot.bin is present but is not a loadable module is no longer reported as ready to launch.
    • Buffered reader: a read that starts at offset 0 is no longer skipped.
    • Package merge: file handles are no longer leaked when one input piece fails to open partway through.

    Additions

    • Installable finalized image: the builder writes the full container image header (mount and package sizes across the whole finalized image, filesystem flags, region locators, the image seed, and the per-region descriptor digests) and the per-block install-metadata tables.
    • Content key wrapping: RSA-3072 wrapping for the container key entries, with deterministic supplemental framing.
    • Native library exports: additional C entry points for key availability, a full validation report, launch-readiness issues, and backup conversion with options.

    Improvements

    • Inner image is always the data-first layout: a raw concatenation of per-file payloads described by a generated naps_pkg_layout.dat.
    • Documentation and code comments reduced to accurate technical descriptions. The API overview, implementation status, format notes, and README updated to match the current code.

    Optimizations

    • Compressor: fixed a quadratic-time hang when compressing the large repetitive metadata region of a small homebrew package. The fix is a lossless early exit; the compressed output is unchanged.
    • Inner metadata is compressed once and reused instead of twice, roughly halving the compression work for a homebrew build.
    • The inner assembler compresses each file once. It previously compressed every compressible file twice; the output is identical.

    Removals and cleanup

    • Inner-compression codec selection removed (the enum, the options, and the helper methods). The raw / zlib / Kraken inner paths are gone. The low-level Kraken and PFSC encoders remain, used by the metadata path and the standalone PFSC tool.
    • Earlier-generation code removed: legacy key-check and key-derivation routines, RSA-2048 helpers and key sets, the Mersenne Twister generator, and the old keystone keys. The keystone builder is now single-path.
    • Dead and legacy code removed: an unused bit reader, an unused shuffle class, unused and incorrect outer-image encrypt/decrypt overloads, and several unused helpers and constants.

    Downloads

    Two kinds of release archive are available. All builds are self-contained.

    GUI application:

    • win-x64.zip
    • win-arm64.zip
    • linux-x64.zip
    • linux-arm64.zip
    • osx-arm64.zip

    Library only:

    • libprosperopkg-win-x64.zip
    • libprosperopkg-win-arm64.zip
    • libprosperopkg-linux-x64.zip
    • libprosperopkg-linux-arm64.zip
    • libprosperopkg-osx-arm64.zip

    Starting the GUI

    Download the archive that matches your system and extract it.

    Windows (win-x64.zip or win-arm64.zip):

    • Run the LibProsperoPkg.Gui executable from the extracted folder.

    Linux (linux-x64.zip or linux-arm64.zip) and macOS (osx-arm64.zip):

    • Open a terminal in the extracted folder.

    • Start the GUI with:

      dotnet LibProsperoPkg.Gui.dll
      

    Creating a homebrew package with the GUI

    1. Start the GUI.
    2. Open the "Homebrew package" page.
    3. Fill in the fields:
      • Homebrew folder: the folder that holds your compiled main module and, optionally, a sce_sys/ metadata tree (param.json, icon0.png, and so on).
      • Output folder: where the finished .pkg is written.
      • Content id: optional. A 36-character id in the form XXYYYY-XXXXYYYYY_00-ZZZZZZZZZZZZZZZZ, for example UP9000-PPSA00000_00-PROSPERO00000000. Left blank, it is taken from param.json, or a default is used.
      • Title: optional display name.
      • Version: the content/master version as NN.NN (default 01.00).
      • Passcode: 32 characters. Left blank, the all-zero debug passcode is used.
      • Main module: the module file name inside the homebrew folder. Defaults to eboot.bin.
    4. Click "Build".
    5. The log shows the output package path and a launch-readiness report: whether the main module and param.json are present and whether the package is ready to install on a console, followed by any warnings/messages.

    Minimum contents of the homebrew folder:

    • The main module (eboot.bin by default).
    • sce_sys/param.json. An icon0.png and other sce_sys assets are optional.
    Downloads