* Refactored keydata handling.
* Sealed NCA KAEKs are now generated at startup, and NCA key area entries are now decrypted by keysDecryptNcaKeyAreaEntry(), reducing the number of calls to spl functions.
* The eTicket RSA device key is now retrieved and decrypted at startup. RSA-OAEP wrapped titlekeys are now decrypted by keysDecryptRsaOaepWrappedTitleKey().
* Renamed titlekek -> ticket common key throughout the codebase.
* Added NcaKeyAreaEncryptionKeyIndex_Count and NcaKeyGeneration_Max enum values to nca.h.
* Proper usage of strcasecmp() in some functions.
* Moved syscall hint checks from keys.c to mem.c.
* Define illegal FS characters as an array rather than a char pointer.
* Services are now initialized before the CFW type checks.
* Fixed pcv/clkrst service initialization.
* Implemented additional thread safety and logfile output to service functions.
* Slightly tweaked running service checks.
* Added proper Markdown documentation for the USB ABI.
* Avoid performing any crypto operations on null NCA key area entries.
* Added commented out code to handle the aes_ctr_ex NCA key area entry, just in case we end up needing it at some point.
These files will be modified to slowly add features from the nxdumptool rewrite codebase.
This commit effectively makes it impossible to build the previous PoC. The code from each PoC will be reused, though, so it hasn't been removed.
* Remove references to the secondary Nintendo Extended BFTTF because it's identical to the first one.
* Use format attribute in functions that need it (and fixed errors I made in the past).
* Placed C++ extern "C" blocks inside include guards.
* Added a "clean_all" rule to the Makefile to avoid recompiling libusbhsfs after each time "clean" is used.
* Added static asserts for all structs that may need it throughout the code.
* Preprocessor macros are now used to generate certificate and ticket structs.
* Added text files with required module information, which can be used with pip.
* Added a batch file to build a ZIP archive with a standalone copy of the script, which can be used to run it under Windows systems without Python.
* Further tweaked the way the progress bar window works.
* Debug messages are no longer printed to the log.
* Rearranged some parts of the code.
* Use Python keywords in conditional blocks.
* Use one-liners whenever possible.
* Removed unused code.
* Only use a progress bar if the overall file size is greater than the hardcoded threshold value.
* Added functions to deal with title info and application metadata reallocations, greatly reducing the number of references to realloc() throughout the code.
* Tweaked gamecardGetHashFileSystemContext() to not return a pointer to a dynamic context.
* Added a type field to Hash FS contexts.
* Ported the logfile handler from libusbhsfs, with some slight modifications.
* Rewrote hash file system handling from scratch. I had been wanting to do this for some months now, it's a lot better now.
* Code cleanup.
This extension was already being used - however, smRegisterService() was also being used as a fallback method.
More than a year and a half has already passed since this feature was introduced, and both SX OS and ReiNX apparently support it now, so it's a justified change.
* Renamed titleRetrieveContentMetaKeysFromDatabase() to titleGenerateTitleInfoFromStorage().
* Moved linked lists generation from titleRetrieveContentMetaKeysFromDatabase() into its own function: titleUpdateTitleInfoLinkedLists().
* Adjusted orphan title checks. It is now explicitly verified if application metadata is available before treating a title as orphan, instead of checking if the parent user application is available.
* Code cleanup in titleRefreshGameCardTitleInfo().
* titleRefreshGameCardTitleInfo() now attempts to update the application metadata pointer in orphan title entries if new application metadata was retrieved after a gamecard was inserted *and* if the orphan title count is currently non-zero.
* Updated titleRemoveGameCardTitleInfoEntries() to make it use titleUpdateTitleInfoLinkedLists().