From 143b6ed4f0ab68eec0e348ef93704597cff72ec9 Mon Sep 17 00:00:00 2001 From: purpasmart96 Date: Sun, 26 Oct 2014 17:12:09 -0700 Subject: [PATCH] Added some more stuff --- src/core/CMakeLists.txt | 12 ++++++++++++ src/core/loader/ncch.cpp | 1 - src/core/loader/ncch.h | 31 ++++++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index aefbe3375..6bc185f76 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -46,6 +46,10 @@ set(SRCS loader/elf.cpp loader/loader.cpp loader/ncch.cpp + loader/polarssl/aes.c + loader/polarssl/bignum.c + loader/polarssl/rsa.c + loader/polarssl/sha2.c core.cpp core_timing.cpp mem_map.cpp @@ -105,9 +109,17 @@ set(HEADERS hw/gpu.h hw/hw.h hw/ndma.h + loader/crypto.h loader/elf.h loader/loader.h loader/ncch.h + loader/polarssl/aes.h + loader/polarssl/bignum.h + loader/polarssl/bn_mul.h + loader/polarssl/config.h + loader/polarssl/padlock.h + loader/polarssl/rsa.h + loader/polarssl/sha2.h core.h core_timing.h mem_map.h diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 5ed544679..632cf069e 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -276,7 +276,6 @@ ResultStatus AppLoader_NCCH::Load() { INFO_LOG(LOADER, "ExeFS offset: 0x%08X", exefs_offset); INFO_LOG(LOADER, "ExeFS size: 0x%08X", exefs_size); - file.Seek(exefs_offset + ncch_offset, 0); file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)); diff --git a/src/core/loader/ncch.h b/src/core/loader/ncch.h index f40a258b7..3104076ad 100644 --- a/src/core/loader/ncch.h +++ b/src/core/loader/ncch.h @@ -8,6 +8,7 @@ #include "common/file_util.h" #include "core/loader/loader.h" +#include "core/loader/polarssl/aes.h" //////////////////////////////////////////////////////////////////////////////////////////////////// /// NCCH header (Note: "NCCH" appears to be a publically unknown acronym) @@ -18,7 +19,7 @@ struct NCCH_Header { u32 content_size; u8 partition_id[8]; u16 maker_code; - u16 version; + u8 version[2]; u8 reserved_0[4]; u8 program_id[8]; u8 temp_flag; @@ -139,6 +140,32 @@ struct ExHeader_Header{ } access_desc; }; +struct Cia_Header{ + u32 header_size; + u16 type; + u16 version; + u32 cert_size; + u32 tik_size; + u32 tmd_size; + u32 meta_size; + u64 content_size; + u8 content_idx[0x2000]; +}; + +#define CIA_MAGIC sizeof(Cia_Header) + +enum CTR_NCCH_TYPES{ + NCCHTYPE_EXHEADER = 1, + NCCHTYPE_EXEFS = 2, + NCCHTYPE_ROMFS = 3, +}; + +struct ctr_aes_context{ + u8 ctr[16]; + u8 iv[16]; + aes_context aes; +}; + //////////////////////////////////////////////////////////////////////////////////////////////////// // Loader namespace @@ -211,6 +238,7 @@ private: bool is_loaded; bool is_compressed; + bool is_encrypted; u32 entry_point; u32 ncch_offset; // Offset to NCCH header, can be 0 or after NCSD header @@ -219,6 +247,7 @@ private: NCCH_Header ncch_header; ExeFs_Header exefs_header; ExHeader_Header exheader_header; + ExeFs_SectionHeader exfs_section_header; }; } // namespace Loader