wiiqt6/nand_dump/wad.h
giantpune@gmail.com ea71bb3f9a * fix bugs in the nand extractor that caused it not to be able to find the keys.bin
* add fakesigning stuff to the tmd & ticket classes
* add functions for changing the tmd & ticket classes ( size, hash, tid... )
* allow replacing contents in wads ( untested )
* other little bug fixes i forgot

git-svn-id: http://wiiqt.googlecode.com/svn/trunk@10 389f4c8b-5dfe-645f-db0e-df882bc27289
2010-12-09 11:30:25 +00:00

82 lines
3.0 KiB
C++

#ifndef WAD_H
#define WAD_H
#include "includes.h"
class Wad
{
public:
//create a wad instance from a bytearray containing a wad
Wad( const QByteArray stuff = QByteArray() );
//create a wad object from a list of byteArrays.
//the first one should be the tmd, the second one the ticket, and the rest are the contents, in order
//it will use the global cert unless one is given with SetCert
Wad( QList< QByteArray > stuff, bool isEncrypted = true );
//check if this wad is valid
bool IsOk(){ return ok; }
//set the cert for this wad
void SetCert( const QByteArray stuff );
//returns the tid of the tmd of this wad( which may be different than the one in the ticket if somebody did something stupid )
quint64 Tid();
//set the tid in the ticket&tmd and fakesign the wad
bool SetTid( quint64 tid );
//replace a content of this wad, update the size & hash in the tmd and sign it
//ba should be decrypted
bool ReplaceContent( quint16 idx, const QByteArray ba );
//add a new content to this wad and fakesign
//if the data is encrypted, set that arguement to true
//index is the index used for the new entry, default is after all the others
//void AddContent( const QByteArray &stuff, quint16 type, bool isEncrypted = false, quint16 index = 0xffff );
//remove a content from this wad
//void RemoveContent( quint16 index );
//set the global cert that will be used for all created
static void SetGlobalCert( const QByteArray &stuff );
//pack a wad from the given directory
static QByteArray FromDirectory( QDir dir );
//get a assembled wad from the list of parts
//the first one should be the tmd, the second one the ticket, and the rest are the contents, in order
//it will use the global cert
static QByteArray FromPartList( QList< QByteArray > stuff, bool isEncrypted = true );
//get all the parts of this wad put together in a wad ready for writing to disc or whatever
const QByteArray Data( quint32 magicWord = 0x49730000, const QByteArray footer = QByteArray() );
//get the decrypted data from a content
const QByteArray Content( quint16 i );
//get the last error encountered while trying to do something
const QString LastError(){ return errStr; }
//get a name for a wad as it would be seen in a wii disc update partition
//if a path is given, it will check that path for existing wads with the name and append a number to the end "(1)" to avoid duplicate files
//returns an empty string if it cant guess the title based on TID
static QString WadName( quint64 tid, quint16 version, QString path = QString() );
//get this Wad's name as it would appear on a disc update partition
QString WadName( QString path = QString() );
private:
bool ok;
QString errStr;
//keep encrypted parts here
QList< QByteArray > partsEnc;
QByteArray tmdData;
QByteArray tikData;
QByteArray certData;
void Err( QString str );
};
#endif // WAD_H