diff --git a/lib/libnx/include/nx/NcaHeader.h b/lib/libnx/include/nx/NcaHeader.h index 43688ed..e40f813 100644 --- a/lib/libnx/include/nx/NcaHeader.h +++ b/lib/libnx/include/nx/NcaHeader.h @@ -92,15 +92,6 @@ namespace nx private: const std::string kModuleName = "NCA_HEADER"; - - //static const uint32_t kDefaultSdkAddonVersion = 721920; - - enum ProgramPartitionId - { - PARTITION_CODE, - PARTITION_DATA, - PARTITION_LOGO, - }; // binary fnd::MemoryBlob mBinaryBlob; diff --git a/lib/libnx/include/nx/ivfc.h b/lib/libnx/include/nx/ivfc.h new file mode 100644 index 0000000..475f833 --- /dev/null +++ b/lib/libnx/include/nx/ivfc.h @@ -0,0 +1,36 @@ +#pragma once +#include +#include +#include +#include +#include + +namespace nx +{ + // Also known as HierarchicalIntegrity + namespace ivfc + { + const std::string kIvfcSig = "IVFC"; + static const size_t kMaxIvfcLevel = 4; + static const uint32_t kIvfcId = 0x20000; + } + +#pragma pack(push,1) + struct sIvfcHeader + { + char signature[4]; + le_uint32_t id; + le_uint32_t master_hash_size; + le_uint32_t level_num; + struct sIvfcLevelHeader + { + uint64_t logical_offset; + uint64_t hash_data_size; + uint32_t block_size; + byte_t reserved[4]; + } level_header[ivfc::kMaxIvfcLevel]; + byte_t unk_0xA0[0x20]; + byte_t master_hash[0x20]; + }; +#pragma pack(pop) +} diff --git a/lib/libnx/include/nx/nca.h b/lib/libnx/include/nx/nca.h index 07595fd..04f9036 100644 --- a/lib/libnx/include/nx/nca.h +++ b/lib/libnx/include/nx/nca.h @@ -1,8 +1,10 @@ +#pragma once #include #include #include #include #include +#include namespace nx { @@ -16,6 +18,14 @@ namespace nx static const size_t kHeaderSize = kSectorSize * kHeaderSectorNum; static const size_t kAesKeyNum = 16; static const size_t kRightsIdLen = 0x10; + static const size_t kKeyAreaEncryptionKeyNum = 3; + + enum ProgramPartitionId + { + PARTITION_CODE, + PARTITION_DATA, + PARTITION_LOGO, + }; enum DistributionType { @@ -59,7 +69,7 @@ namespace nx HASH_AUTO, HASH_UNK1, HASH_HIERARCHICAL_SHA256, - HASH_HIERARCHICAL_INTERGRITY + HASH_HIERARCHICAL_INTERGRITY // IVFC }; enum EncryptionType @@ -107,7 +117,7 @@ namespace nx byte_t reserved[3]; }; - struct sPfsSuperBlock + struct sHierarchicalSha256Header { byte_t master_hash[0x20]; le_uint32_t hash_block_size; @@ -119,23 +129,5 @@ namespace nx } hash_data, hash_target; }; - static const size_t kMaxIvfcLevel = 4; - - struct sIvfcHeader - { - le_uint32_t magic; - le_uint32_t id; - le_uint32_t master_hash_size; - le_uint32_t level_num; - struct sIvfcLevelHeader - { - uint64_t logical_offset; - uint64_t hash_data_size; - uint32_t block_size; - byte_t reserved[4]; - } level_header[kMaxIvfcLevel]; - byte_t unk_0xA0[0x20]; - byte_t master_hash[0x20]; - }; #pragma pack(pop) }