Added theming command to rustwii CLI

This version is more capable than the version in WiiPy, and supports extracted and repacking containers as part of theme application. This was not implemented in WiiPy because the LZ77 compression required was far too slow to make it feasible, but here in Rust the compression is totally reasonable to actually use.
This commit is contained in:
2026-02-26 16:42:35 -05:00
parent 23699a518d
commit 02db260138
8 changed files with 508 additions and 45 deletions

View File

@@ -7,40 +7,40 @@ use rustwii::archive::u8;
// use rustii::title::content;
fn main() {
// let data = fs::read("sm.wad").unwrap();
// let title = title::Title::from_bytes(&data).unwrap();
// println!("Title ID from WAD via Title object: {}", hex::encode(title.tmd.title_id()));
//
// let wad = wad::WAD::from_bytes(&data).unwrap();
// println!("size of tmd: {:?}", wad.tmd().len());
// println!("num content records: {:?}", title.tmd.content_records().len());
// println!("first record data: {:?}", title.tmd.content_records().first().unwrap());
// println!("TMD is fakesigned: {:?}",title.tmd.is_fakesigned());
//
// println!("title version from ticket is: {:?}", title.ticket.title_version());
// println!("title key (enc): {:?}", title.ticket.title_key());
// println!("title key (dec): {:?}", title.ticket.title_key_dec());
// println!("ticket is fakesigned: {:?}", title.ticket.is_fakesigned());
//
// println!("title is fakesigned: {:?}", title.is_fakesigned());
//
// let cert_chain = &title.cert_chain;
// println!("cert chain OK");
// let result = cert::verify_ca_cert(&cert_chain.ca_cert()).unwrap();
// println!("CA cert {} verified successfully: {}", cert_chain.ca_cert().child_cert_identity(), result);
//
// let result = cert::verify_child_cert(&cert_chain.ca_cert(), &cert_chain.tmd_cert()).unwrap();
// println!("TMD cert {} verified successfully: {}", cert_chain.tmd_cert().child_cert_identity(), result);
// let result = cert::verify_tmd(&cert_chain.tmd_cert(), &title.tmd).unwrap();
// println!("TMD verified successfully: {}", result);
//
// let result = cert::verify_child_cert(&cert_chain.ca_cert(), &cert_chain.ticket_cert()).unwrap();
// println!("Ticket cert {} verified successfully: {}", cert_chain.ticket_cert().child_cert_identity(), result);
// let result = cert::verify_ticket(&cert_chain.ticket_cert(), &title.ticket).unwrap();
// println!("Ticket verified successfully: {}", result);
//
// let result = title.verify().unwrap();
// println!("full title verified successfully: {}", result);
let data = fs::read("sm.wad").unwrap();
let title = title::Title::from_bytes(&data).unwrap();
println!("Title ID from WAD via Title object: {}", hex::encode(title.tmd.title_id()));
let wad = wad::WAD::from_bytes(&data).unwrap();
println!("size of tmd: {:?}", wad.tmd().len());
println!("num content records: {:?}", title.tmd.content_records().len());
println!("first record data: {:?}", title.tmd.content_records().first().unwrap());
println!("TMD is fakesigned: {:?}",title.tmd.is_fakesigned());
println!("title version from ticket is: {:?}", title.ticket.title_version());
println!("title key (enc): {:?}", title.ticket.title_key());
println!("title key (dec): {:?}", title.ticket.title_key_dec());
println!("ticket is fakesigned: {:?}", title.ticket.is_fakesigned());
println!("title is fakesigned: {:?}", title.is_fakesigned());
let cert_chain = &title.cert_chain;
println!("cert chain OK");
let result = cert::verify_ca_cert(&cert_chain.ca_cert()).unwrap();
println!("CA cert {} verified successfully: {}", cert_chain.ca_cert().child_cert_identity(), result);
let result = cert::verify_child_cert(&cert_chain.ca_cert(), &cert_chain.tmd_cert()).unwrap();
println!("TMD cert {} verified successfully: {}", cert_chain.tmd_cert().child_cert_identity(), result);
let result = cert::verify_tmd(&cert_chain.tmd_cert(), &title.tmd).unwrap();
println!("TMD verified successfully: {}", result);
let result = cert::verify_child_cert(&cert_chain.ca_cert(), &cert_chain.ticket_cert()).unwrap();
println!("Ticket cert {} verified successfully: {}", cert_chain.ticket_cert().child_cert_identity(), result);
let result = cert::verify_ticket(&cert_chain.ticket_cert(), &title.ticket).unwrap();
println!("Ticket verified successfully: {}", result);
let result = title.verify().unwrap();
println!("full title verified successfully: {}", result);