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 causewiiu_endpoint
to be ignored. Note that at this time, there is no validation done for provided override URLs. - Added
get_content_size()
andget_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 kwargabsolute
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()
andget_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()
andvalidate_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()
andset_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.