Skip to content

LibProsperoPKG v2.5

Latest

Choose a tag to compare

@SvenGDK SvenGDK released this 13 Jul 19:48

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.