Initial Wii image generation (needs disc header)

This commit is contained in:
Jack Andersen
2016-01-21 16:30:17 -10:00
parent 3fab04ff1a
commit 7403996ed3
12 changed files with 789 additions and 32 deletions

View File

@@ -325,16 +325,14 @@ public:
DiscBuilderBase& m_parent;
Kind m_kind;
uint64_t m_offset;
char m_gameID[6];
std::string m_gameTitle;
uint32_t m_fstMemoryAddr;
uint64_t m_dolOffset = 0;
public:
IPartitionBuilder(DiscBuilderBase& parent, Kind kind, uint64_t offset,
const char gameID[6], const char* gameTitle, uint32_t fstMemoryAddr)
: m_parent(parent), m_kind(kind), m_offset(offset), m_gameTitle(gameTitle), m_fstMemoryAddr(fstMemoryAddr)
IPartitionBuilder(DiscBuilderBase& parent, Kind kind,
const char gameID[6], const char* gameTitle)
: m_parent(parent), m_kind(kind), m_gameTitle(gameTitle)
{
memcpy(m_gameID, gameID, 6);
}
@@ -353,9 +351,6 @@ public:
: m_fileIO(std::move(fio)), m_progressCB(progressCB) {}
IFileIO& getFileIO() {return *m_fileIO;}
virtual bool buildFromDirectory(const SystemChar* dirIn, const SystemChar* dolIn,
const SystemChar* apploaderIn)=0;
};
using Partition = DiscBase::IPartition;

View File

@@ -10,9 +10,16 @@ class DiscWii : public DiscBase
{
public:
DiscWii(std::unique_ptr<IDiscIO>&& dio);
DiscWii(const SystemChar* dataPath, const SystemChar* updatePath,
const SystemChar* outPath, const char gameID[6], const char* gameTitle,
bool korean=false);
};
class DiscBuilderWii : public DiscBuilderBase
{
const SystemChar* m_outPath;
public:
DiscBuilderWii(const SystemChar* outPath, const char gameID[6], const char* gameTitle,
std::function<void(size_t, const SystemString&, size_t)> progressCB);
bool buildFromDirectory(const SystemChar* dirIn, const SystemChar* dolIn,
const SystemChar* apploaderIn, const SystemChar* partHeadIn);
};
}

View File

@@ -22,7 +22,7 @@ public:
virtual uint64_t copyFromDisc(struct IPartReadStream& discio, uint64_t length)=0;
};
virtual std::unique_ptr<IWriteStream> beginWriteStream() const=0;
virtual std::unique_ptr<IWriteStream> beginWriteStream(size_t offset) const=0;
virtual std::unique_ptr<IWriteStream> beginWriteStream(uint64_t offset) const=0;
struct IReadStream
{
@@ -31,7 +31,7 @@ public:
virtual uint64_t copyToDisc(struct IPartWriteStream& discio, uint64_t length)=0;
};
virtual std::unique_ptr<IReadStream> beginReadStream() const=0;
virtual std::unique_ptr<IReadStream> beginReadStream(size_t offset) const=0;
virtual std::unique_ptr<IReadStream> beginReadStream(uint64_t offset) const=0;
};
std::unique_ptr<IFileIO> NewFileIO(const SystemString& path);

45
include/NOD/sha1.h Normal file
View File

@@ -0,0 +1,45 @@
#ifndef __SHA1_H__
#define __SHA1_H__
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SHA1_HASH_LENGTH 20
#define SHA1_BLOCK_LENGTH 64
typedef struct sha1nfo {
uint32_t buffer[SHA1_BLOCK_LENGTH/4];
uint32_t state[SHA1_HASH_LENGTH/4];
uint32_t byteCount;
uint8_t bufferOffset;
uint8_t keyBuffer[SHA1_BLOCK_LENGTH];
uint8_t innerHash[SHA1_HASH_LENGTH];
} sha1nfo;
/**
*/
void sha1_init(sha1nfo *s);
/**
*/
void sha1_writebyte(sha1nfo *s, uint8_t data);
/**
*/
void sha1_write(sha1nfo *s, const char *data, size_t len);
/**
*/
uint8_t* sha1_result(sha1nfo *s);
/**
*/
void sha1_initHmac(sha1nfo *s, const uint8_t* key, int keyLength);
/**
*/
uint8_t* sha1_resultHmac(sha1nfo *s);
#ifdef __cplusplus
}
#endif
#endif // __SHA1_H__