Skip to content

v0.6.0: Banner Parsing and LZ77 Support

Latest
Compare
Choose a tag to compare
@NinjaCheetah NinjaCheetah released this 10 Feb 22:01
8adbef2

It's been a couple of months since the last release, and some new features were pretty much ready to go, so I figured I'd get them out.

Changelog:

General Title Changes

  • The Title ID of a TMD and Ticket no longer have to match their data to be successfully loaded into a Title. This configuration is still invalid, but loading this data may be required to correct it.
  • When downloading anything from the NUS, you can now specify a value for the kwarg endpoint_override, which will allow using an external endpoint. Setting this value will cause wiiu_endpoint to be ignored. Note that at this time, there is no validation done for provided override URLs.
  • Added get_content_size() and get_content_size_blocks() to the TMD class, allowing you to get the size of the content listed in its content records. Like the related methods for getting a Title's size, these methods accept the kwarg absolute that determines whether shared content should be included in the totals or not.
  • The title_id property of a Ticket will now be stored as raw bytes instead of ASCII bytes, which is a more appropriate format. This may cause issues if you read this property directly, however this change will have no effect on library functions.

EmuNAND

  • Added get_installed_titles() to get an index of all titles currently installed to an EmuNAND.
  • Added get_title_tmd() and get_title_ticket() to get the TMD and Ticket of an installed title, respectively.
  • Title objects passed to install_title() will now install properly if they were created from individual components rather than directly from a WAD.

New Module: cert

  • Contains a new Certificate class used to store the various certificates used by the Wii for content validation.
  • Contains a new CertificateChain class used to store the entire chain of certificates needed a validate an entire Wii title.
  • Adds the function validate_ca_cert() for validating a retail or development CA certificate.
  • Adds the function validate_cert_sig() for validating any TMD or Ticket certificate using a CA certificate.
  • Adds the functions validate_tmd_sig() and validate_ticket_sig() for validating a TMD or Ticket using the appropriate certificates.

New Module: lz77

  • Adds the function decompress_lz77() to decompress any file that was compressed using the Wii's flavor of the LZ77 compression algorithm.
  • Adds the function compress_lz77() to compress any file using the Wii's flavor of the LZ77 compression algorithm. Supports two levels of compression, labeled as just 1 or 2, with 1 being the default. This function is currently very slow when run on files greater than a couple hundred kilobytes.

New Class: IMETHeader

  • New class for handling the IMET header that precedes the data of a banner in a Wii channel. This header stores the name of the channel for every applicable region, as well as the sizes of the banner's files.
  • This class is mostly just for parsing right now, but in the future when more banner support is added, you'll be able to use it for other banner-creation functionality.
  • Provides the methods get_channel_names() and set_channel_names() to get or set the channel name for the specified region(s).

New Class: IMD5Header

  • New class for storing the information stored in an IMD5 header. This is currently only a data class, as the banner parsing functionality required to extend it doesn't exist yet.

The API documentation has been totally redone since the previous release. You can see our fancy new documentation right here.

This release is also on PyPI.