mirror of
https://github.com/jakcron/nstool
synced 2024-12-25 14:11:14 +00:00
[nstool] Integrate HashTreeMeta into NcaProcess
This commit is contained in:
parent
1f3865c979
commit
bd991a25e1
2 changed files with 45 additions and 42 deletions
|
@ -197,29 +197,6 @@ void NcaProcess::generatePartitionConfiguration()
|
|||
throw fnd::Exception(kModuleName, error.str());
|
||||
}
|
||||
|
||||
// filter out unrecognised hash types, and get data offsets
|
||||
switch (info.hash_type)
|
||||
{
|
||||
case (nx::nca::HASH_NONE):
|
||||
info.data_offset = info.offset;
|
||||
info.data_size = info.size;
|
||||
break;
|
||||
case (nx::nca::HASH_HIERARCHICAL_SHA256):
|
||||
info.hash_sha256_header.importBinary(fs_header.hash_superblock, nx::nca::kFsHeaderHashSuperblockLen);
|
||||
info.data_offset = info.hash_sha256_header.getLayerInfo().atBack().offset;
|
||||
info.data_size = info.hash_sha256_header.getLayerInfo().atBack().size;
|
||||
break;
|
||||
case (nx::nca::HASH_HIERARCHICAL_INTERGRITY):
|
||||
info.hash_integ_header.importBinary(fs_header.hash_superblock, nx::nca::kFsHeaderHashSuperblockLen);
|
||||
info.data_offset = info.hash_integ_header.getLayerInfo().atBack().offset;
|
||||
info.data_size = info.hash_integ_header.getLayerInfo().atBack().size;
|
||||
break;
|
||||
default:
|
||||
error.clear();
|
||||
error << "NCA FS Header [" << partition.index << "] HashType(" << info.hash_type << "): UNKNOWN \n";
|
||||
throw fnd::Exception(kModuleName, error.str());
|
||||
}
|
||||
|
||||
// create reader based on encryption type0
|
||||
switch(info.enc_type)
|
||||
{
|
||||
|
@ -238,6 +215,29 @@ void NcaProcess::generatePartitionConfiguration()
|
|||
error << "NCA FS Header [" << partition.index << "] EncryptionType(" << info.enc_type << "): UNKNOWN \n";
|
||||
throw fnd::Exception(kModuleName, error.str());
|
||||
}
|
||||
|
||||
// filter out unrecognised hash types, and get data offsets
|
||||
switch (info.hash_type)
|
||||
{
|
||||
case (nx::nca::HASH_NONE):
|
||||
info.data_offset = info.offset;
|
||||
info.data_size = info.size;
|
||||
break;
|
||||
case (nx::nca::HASH_HIERARCHICAL_SHA256):
|
||||
info.hash_tree_meta.importHierarchicalSha256Header(nx::HierarchicalSha256Header(fs_header.hash_superblock, nx::nca::kFsHeaderHashSuperblockLen));
|
||||
info.data_offset = info.hash_tree_meta.getDataLayer().offset;
|
||||
info.data_size = info.hash_tree_meta.getDataLayer().size;
|
||||
break;
|
||||
case (nx::nca::HASH_HIERARCHICAL_INTERGRITY):
|
||||
info.hash_tree_meta.importHierarchicalIntergityHeader(nx::HierarchicalIntegrityHeader(fs_header.hash_superblock, nx::nca::kFsHeaderHashSuperblockLen));
|
||||
info.data_offset = info.hash_tree_meta.getDataLayer().offset;
|
||||
info.data_size = info.hash_tree_meta.getDataLayer().size;
|
||||
break;
|
||||
default:
|
||||
error.clear();
|
||||
error << "NCA FS Header [" << partition.index << "] HashType(" << info.hash_type << "): UNKNOWN \n";
|
||||
throw fnd::Exception(kModuleName, error.str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -367,18 +367,23 @@ void NcaProcess::displayHeader()
|
|||
}
|
||||
if (info.hash_type == nx::nca::HASH_HIERARCHICAL_INTERGRITY)
|
||||
{
|
||||
nx::HierarchicalIntegrityHeader& hash_hdr = info.hash_integ_header;
|
||||
HashTreeMeta& hash_hdr = info.hash_tree_meta;
|
||||
printf(" HierarchicalIntegrity Header:\n");
|
||||
//printf(" TypeId: 0x%x\n", hash_hdr.type_id.get());
|
||||
//printf(" MasterHashSize: 0x%x\n", hash_hdr.master_hash_size.get());
|
||||
//printf(" LayerNum: %d\n", hash_hdr.getLayerInfo().getSize());
|
||||
for (size_t j = 0; j < hash_hdr.getLayerInfo().getSize(); j++)
|
||||
for (size_t j = 0; j < hash_hdr.getHashLayerInfo().getSize(); j++)
|
||||
{
|
||||
printf(" Layer %d:\n", j);
|
||||
printf(" Offset: 0x%" PRIx64 "\n", hash_hdr.getLayerInfo()[j].offset);
|
||||
printf(" Size: 0x%" PRIx64 "\n", hash_hdr.getLayerInfo()[j].size);
|
||||
printf(" BlockSize: 0x%" PRIx32 "\n", hash_hdr.getLayerInfo()[j].block_size);
|
||||
printf(" Hash Layer %d:\n", j);
|
||||
printf(" Offset: 0x%" PRIx64 "\n", hash_hdr.getHashLayerInfo()[j].offset);
|
||||
printf(" Size: 0x%" PRIx64 "\n", hash_hdr.getHashLayerInfo()[j].size);
|
||||
printf(" BlockSize: 0x%" PRIx32 "\n", hash_hdr.getHashLayerInfo()[j].block_size);
|
||||
}
|
||||
|
||||
printf(" Data Layer:\n");
|
||||
printf(" Offset: 0x%" PRIx64 "\n", hash_hdr.getDataLayer().offset);
|
||||
printf(" Size: 0x%" PRIx64 "\n", hash_hdr.getDataLayer().size);
|
||||
printf(" BlockSize: 0x%" PRIx32 "\n", hash_hdr.getDataLayer().block_size);
|
||||
for (size_t j = 0; j < hash_hdr.getMasterHashList().getSize(); j++)
|
||||
{
|
||||
printf(" Master Hash %d: ", j);
|
||||
|
@ -387,18 +392,18 @@ void NcaProcess::displayHeader()
|
|||
}
|
||||
else if (info.hash_type == nx::nca::HASH_HIERARCHICAL_SHA256)
|
||||
{
|
||||
nx::HierarchicalSha256Header& hash_hdr = info.hash_sha256_header;
|
||||
HashTreeMeta& hash_hdr = info.hash_tree_meta;
|
||||
printf(" HierarchicalSha256 Header:\n");
|
||||
printf(" Master Hash: ");
|
||||
fnd::SimpleTextOutput::hexDump(hash_hdr.getMasterHash().bytes, sizeof(crypto::sha::sSha256Hash));
|
||||
printf(" HashBlockSize: 0x%x\n", hash_hdr.getHashBlockSize());
|
||||
fnd::SimpleTextOutput::hexDump(hash_hdr.getMasterHashList()[0].bytes, sizeof(crypto::sha::sSha256Hash));
|
||||
printf(" HashBlockSize: 0x%x\n", hash_hdr.getDataLayer().block_size);
|
||||
//printf(" LayerNum: %d\n", hash_hdr.getLayerInfo().getSize());
|
||||
for (size_t i = 0; i < hash_hdr.getLayerInfo().getSize(); i++)
|
||||
{
|
||||
printf(" Layer %d:\n", i);
|
||||
printf(" Offset: 0x%" PRIx64 "\n", hash_hdr.getLayerInfo()[i].offset);
|
||||
printf(" Size: 0x%" PRIx64 "\n", hash_hdr.getLayerInfo()[i].size);
|
||||
}
|
||||
printf(" Hash Layer:\n");
|
||||
printf(" Offset: 0x%" PRIx64 "\n", hash_hdr.getHashLayerInfo()[0].offset);
|
||||
printf(" Size: 0x%" PRIx64 "\n", hash_hdr.getHashLayerInfo()[0].size);
|
||||
printf(" Data Layer:\n");
|
||||
printf(" Offset: 0x%" PRIx64 "\n", hash_hdr.getDataLayer().offset);
|
||||
printf(" Size: 0x%" PRIx64 "\n", hash_hdr.getDataLayer().size);
|
||||
}
|
||||
//else
|
||||
//{
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
#include <fnd/types.h>
|
||||
#include <fnd/SimpleFile.h>
|
||||
#include <nx/NcaHeader.h>
|
||||
#include <nx/HierarchicalSha256Header.h>
|
||||
#include <nx/HierarchicalIntegrityHeader.h>
|
||||
#include "HashTreeMeta.h"
|
||||
|
||||
|
||||
#include "nstool.h"
|
||||
|
@ -72,8 +71,7 @@ private:
|
|||
nx::nca::FormatType format_type;
|
||||
nx::nca::HashType hash_type;
|
||||
nx::nca::EncryptionType enc_type;
|
||||
nx::HierarchicalSha256Header hash_sha256_header;
|
||||
nx::HierarchicalIntegrityHeader hash_integ_header;
|
||||
HashTreeMeta hash_tree_meta;
|
||||
crypto::aes::sAesIvCtr aes_ctr;
|
||||
} mPartitions[nx::nca::kPartitionNum];
|
||||
|
||||
|
|
Loading…
Reference in a new issue