From e5b9ac8a9bc6561106f09822245bb21806bf9128 Mon Sep 17 00:00:00 2001 From: Sorvigolova Date: Thu, 30 Oct 2014 01:22:20 +0300 Subject: [PATCH] Updated to v. 0.2.10 - Added ECDSA Signature parsing and validation. - Added klicensee parsing for raw mode. - Fixed metadata info IV parsing. - Fixed Makefile. - Enabled Individuals seed functions for configuration. --- sce_inlines.h | 201 ----------------- scetool.sln | 22 ++ scetool.vcxproj | 128 +++++++++++ scetool.vcxproj.filters | 153 +++++++++++++ scetool.vcxproj.user | 8 + Makefile => src/Makefile | 2 +- README => src/README | 5 + aes.c => src/aes.cpp | 0 aes.h => src/aes.h | 0 aes_omac.cpp => src/aes_omac.cpp | 0 aes_omac.h => src/aes_omac.h | 0 bn.cpp => src/bn.cpp | 0 config.h => src/config.h | 6 +- ec.cpp => src/ec.cpp | 0 ecdsa.cpp => src/ecdsa.cpp | 0 ecdsa.h => src/ecdsa.h | 0 elf.h => src/elf.h | 0 elf_inlines.h => src/elf_inlines.h | 0 frontend.cpp => src/frontend.cpp | 44 ++-- frontend.h => src/frontend.h | 0 getopt.c => src/getopt.cpp | 0 getopt.h => src/getopt.h | 0 keys.cpp => src/keys.cpp | 16 +- keys.h => src/keys.h | 0 list.cpp => src/list.cpp | 0 list.h => src/list.h | 0 main.cpp => src/main.cpp | 3 +- mt19937.cpp => src/mt19937.cpp | 0 mt19937.h => src/mt19937.h | 0 np.cpp => src/np.cpp | 35 +-- np.h => src/np.h | 0 pkg.cpp => src/pkg.cpp | 0 pkg.h => src/pkg.h | 0 rvk.cpp => src/rvk.cpp | 6 +- rvk.h => src/rvk.h | 0 sce.cpp => src/sce.cpp | 315 ++++++++++++++------------ sce.h => src/sce.h | 2 +- src/sce_inlines.h | 57 +++++ self.cpp => src/self.cpp | 222 +++++++++---------- self.h => src/self.h | 0 sha1.c => src/sha1.cpp | 0 sha1.h => src/sha1.h | 0 spp.cpp => src/spp.cpp | 4 +- spp.h => src/spp.h | 0 tables.cpp => src/tables.cpp | 0 tables.h => src/tables.h | 0 types.h => src/types.h | 0 util.cpp => src/util.cpp | 0 util.h => src/util.h | 0 zconf.h => src/zconf.h | 201 ++++++++++++----- zlib.h => src/zlib.h | 343 +++++++++++++++++++++-------- zlib/Readme | 2 + zlib/zlib.lib | Bin 0 -> 237420 bytes zlib/zlibd.lib | Bin 0 -> 241622 bytes 54 files changed, 1108 insertions(+), 667 deletions(-) delete mode 100644 sce_inlines.h create mode 100644 scetool.sln create mode 100644 scetool.vcxproj create mode 100644 scetool.vcxproj.filters create mode 100644 scetool.vcxproj.user rename Makefile => src/Makefile (99%) rename README => src/README (96%) rename aes.c => src/aes.cpp (100%) rename aes.h => src/aes.h (100%) rename aes_omac.cpp => src/aes_omac.cpp (100%) rename aes_omac.h => src/aes_omac.h (100%) rename bn.cpp => src/bn.cpp (100%) rename config.h => src/config.h (96%) rename ec.cpp => src/ec.cpp (100%) rename ecdsa.cpp => src/ecdsa.cpp (100%) rename ecdsa.h => src/ecdsa.h (100%) rename elf.h => src/elf.h (100%) rename elf_inlines.h => src/elf_inlines.h (100%) rename frontend.cpp => src/frontend.cpp (89%) rename frontend.h => src/frontend.h (100%) rename getopt.c => src/getopt.cpp (100%) rename getopt.h => src/getopt.h (100%) rename keys.cpp => src/keys.cpp (96%) rename keys.h => src/keys.h (100%) rename list.cpp => src/list.cpp (100%) rename list.h => src/list.h (100%) rename main.cpp => src/main.cpp (99%) rename mt19937.cpp => src/mt19937.cpp (100%) rename mt19937.h => src/mt19937.h (100%) rename np.cpp => src/np.cpp (90%) rename np.h => src/np.h (100%) rename pkg.cpp => src/pkg.cpp (100%) rename pkg.h => src/pkg.h (100%) rename rvk.cpp => src/rvk.cpp (89%) rename rvk.h => src/rvk.h (100%) rename sce.cpp => src/sce.cpp (65%) rename sce.h => src/sce.h (99%) create mode 100644 src/sce_inlines.h rename self.cpp => src/self.cpp (78%) rename self.h => src/self.h (100%) rename sha1.c => src/sha1.cpp (100%) rename sha1.h => src/sha1.h (100%) rename spp.cpp => src/spp.cpp (92%) rename spp.h => src/spp.h (100%) rename tables.cpp => src/tables.cpp (100%) rename tables.h => src/tables.h (100%) rename types.h => src/types.h (100%) rename util.cpp => src/util.cpp (100%) rename util.h => src/util.h (100%) rename zconf.h => src/zconf.h (72%) rename zlib.h => src/zlib.h (84%) create mode 100644 zlib/Readme create mode 100644 zlib/zlib.lib create mode 100644 zlib/zlibd.lib diff --git a/sce_inlines.h b/sce_inlines.h deleted file mode 100644 index 26a6763..0000000 --- a/sce_inlines.h +++ /dev/null @@ -1,201 +0,0 @@ -/* -* Copyright (c) 2011-2013 by naehrwert -* This file is released under the GPLv2. -*/ - -#ifndef _SCE_INLINES_H_ -#define _SCE_INLINES_H_ - -#include - -#include "types.h" -#include "sce.h" - -static inline void _es_sce_header(sce_header_t *h) -{ - h->magic = _ES32(h->magic); - h->version = _ES32(h->version); - h->key_revision = _ES16(h->key_revision); - h->header_type = _ES16(h->header_type); - h->metadata_offset = _ES32(h->metadata_offset); - h->header_len = _ES64(h->header_len); - h->data_len = _ES64(h->data_len); -} - -static inline void _copy_es_sce_header(sce_header_t *dst, sce_header_t *src) -{ - memcpy(dst, src, sizeof(sce_header_t)); - _es_sce_header(dst); -} - -static inline void _es_metadata_header(metadata_header_t *h) -{ - h->sig_input_length = _ES64(h->sig_input_length); - h->unknown_0 = _ES32(h->unknown_0); - h->section_count = _ES32(h->section_count); - h->key_count = _ES32(h->key_count); - h->opt_header_size = _ES32(h->opt_header_size); - h->unknown_1 = _ES32(h->unknown_1); - h->unknown_2 = _ES32(h->unknown_2); -} - -static inline void _copy_es_metadata_header(metadata_header_t *dst, metadata_header_t *src) -{ - memcpy(dst, src, sizeof(metadata_header_t)); - _es_metadata_header(dst); -} - -static inline void _es_metadata_section_header(metadata_section_header_t *h) -{ - h->data_offset = _ES64(h->data_offset); - h->data_size = _ES64(h->data_size); - h->type = _ES32(h->type); - h->index = _ES32(h->index); - h->hashed = _ES32(h->hashed); - h->sha1_index = _ES32(h->sha1_index); - h->encrypted = _ES32(h->encrypted); - h->key_index = _ES32(h->key_index); - h->iv_index = _ES32(h->iv_index); - h->compressed = _ES32(h->compressed); -} - -static inline void _copy_es_metadata_section_header(metadata_section_header_t *dst, metadata_section_header_t *src) -{ - memcpy(dst, src, sizeof(metadata_section_header_t)); - _es_metadata_section_header(dst); -} - -static inline void _es_self_header(self_header_t *h) -{ - h->header_type = _ES64(h->header_type); - h->app_info_offset = _ES64(h->app_info_offset); - h->elf_offset = _ES64(h->elf_offset); - h->phdr_offset = _ES64(h->phdr_offset); - h->shdr_offset = _ES64(h->shdr_offset); - h->section_info_offset = _ES64(h->section_info_offset); - h->sce_version_offset = _ES64(h->sce_version_offset); - h->control_info_offset = _ES64(h->control_info_offset); - h->control_info_size = _ES64(h->control_info_size); - h->padding = _ES64(h->padding); -} - -static inline void _copy_es_self_header(self_header_t *dst, self_header_t *src) -{ - memcpy(dst, src, sizeof(self_header_t)); - _es_self_header(dst); -} - -static inline void _es_section_info(section_info_t *si) -{ - si->offset = _ES64(si->offset); - si->size = _ES64(si->size); - si->compressed = _ES32(si->compressed); - si->unknown_0 = _ES32(si->unknown_0); - si->unknown_1 = _ES32(si->unknown_1); - si->encrypted = _ES32(si->encrypted); -} - -static inline void _copy_es_section_info(section_info_t *dst, section_info_t *src) -{ - memcpy(dst, src, sizeof(section_info_t)); - _es_section_info(dst); -} - -static inline void _es_sce_version(sce_version_t *sv) -{ - sv->header_type = _ES32(sv->header_type); - sv->present = _ES32(sv->present); - sv->size = _ES32(sv->size); - sv->unknown_3 = _ES32(sv->unknown_3); -} - -static inline void _copy_es_sce_version(sce_version_t *dst, sce_version_t *src) -{ - memcpy(dst, src, sizeof(sce_version_t)); - _es_sce_version(dst); -} - -static inline void _es_app_info(app_info_t *ai) -{ - ai->auth_id = _ES64(ai->auth_id); - ai->vendor_id = _ES32(ai->vendor_id); - ai->self_type = _ES32(ai->self_type); - ai->version = _ES64(ai->version); - ai->padding = _ES64(ai->padding); -} - -static inline void _copy_es_app_info(app_info_t *dst, app_info_t *src) -{ - memcpy(dst, src, sizeof(app_info_t)); - _es_app_info(dst); -} - -static inline void _es_control_info(control_info_t *ci) -{ - ci->type = _ES32(ci->type); - ci->size = _ES32(ci->size); - ci->next = _ES64(ci->next); -} - -static inline void _copy_es_control_info(control_info_t *dst, control_info_t *src) -{ - memcpy(dst, src, sizeof(control_info_t)); - _es_control_info(dst); -} - -static inline void _es_ci_data_digest_40(ci_data_digest_40_t *dig) -{ - dig->fw_version = _ES64(dig->fw_version); -} - -static inline void _copy_es_ci_data_digest_40(ci_data_digest_40_t *dst, ci_data_digest_40_t *src) -{ - memcpy(dst, src, sizeof(ci_data_digest_40_t)); - _es_ci_data_digest_40(dst); -} - -static inline void _es_ci_data_npdrm(ci_data_npdrm_t *np) -{ - np->magic = _ES32(np->magic); - np->unknown_0 = _ES32(np->unknown_0); - np->license_type = _ES32(np->license_type); - np->app_type = _ES32(np->app_type); - np->unknown_1 = _ES64(np->unknown_1); - np->unknown_2 = _ES64(np->unknown_2); -} - -static inline void _copy_es_ci_data_npdrm(ci_data_npdrm_t *dst, ci_data_npdrm_t *src) -{ - memcpy(dst, src, sizeof(ci_data_npdrm_t)); - _es_ci_data_npdrm(dst); -} - -static inline void _es_opt_header(opt_header_t *oh) -{ - oh->type = _ES32(oh->type); - oh->size = _ES32(oh->size); - oh->next = _ES64(oh->next); -} - -static inline void _copy_es_opt_header(opt_header_t *dst, opt_header_t *src) -{ - memcpy(dst, src, sizeof(opt_header_t)); - _es_opt_header(dst); -} - -static inline void _es_oh_data_cap_flags(oh_data_cap_flags_t *cf) -{ - cf->unk3 = _ES64(cf->unk3); - cf->unk4 = _ES64(cf->unk4); - cf->flags = _ES64(cf->flags); - cf->unk6 = _ES32(cf->unk6); - cf->unk7 = _ES32(cf->unk7); -} - -static inline void _copy_es_cap_flags(oh_data_cap_flags_t *dst, oh_data_cap_flags_t *src) -{ - memcpy(dst, src, sizeof(oh_data_cap_flags_t)); - _es_oh_data_cap_flags(dst); -} - -#endif diff --git a/scetool.sln b/scetool.sln new file mode 100644 index 0000000..cb566c5 --- /dev/null +++ b/scetool.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.30723.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scetool", "scetool.vcxproj", "{39DC2066-1E3C-488C-8A76-1BB64ABF6C99}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {39DC2066-1E3C-488C-8A76-1BB64ABF6C99}.Debug|Win32.ActiveCfg = Debug|Win32 + {39DC2066-1E3C-488C-8A76-1BB64ABF6C99}.Debug|Win32.Build.0 = Debug|Win32 + {39DC2066-1E3C-488C-8A76-1BB64ABF6C99}.Release|Win32.ActiveCfg = Release|Win32 + {39DC2066-1E3C-488C-8A76-1BB64ABF6C99}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/scetool.vcxproj b/scetool.vcxproj new file mode 100644 index 0000000..743ed60 --- /dev/null +++ b/scetool.vcxproj @@ -0,0 +1,128 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {39DC2066-1E3C-488C-8A76-1BB64ABF6C99} + Win32Proj + + + + Application + true + v120_xp + + + Application + false + v120_xp + + + + + + + + + + + + + false + + + false + + + + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + Level3 + ProgramDatabase + Disabled + + + MachineX86 + true + Console + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;zlibd.lib;%(AdditionalDependencies) + /SUBSYSTEM:CONSOLE,5.01 %(AdditionalOptions) + + + + + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDLL + Level3 + ProgramDatabase + + + MachineX86 + true + Console + true + true + kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;zlib.lib;%(AdditionalDependencies) + /SUBSYSTEM:CONSOLE,5.01 %(AdditionalOptions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/scetool.vcxproj.filters b/scetool.vcxproj.filters new file mode 100644 index 0000000..0b74b5d --- /dev/null +++ b/scetool.vcxproj.filters @@ -0,0 +1,153 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/scetool.vcxproj.user b/scetool.vcxproj.user new file mode 100644 index 0000000..ff5921c --- /dev/null +++ b/scetool.vcxproj.user @@ -0,0 +1,8 @@ + + + + + + WindowsLocalDebugger + + \ No newline at end of file diff --git a/Makefile b/src/Makefile similarity index 99% rename from Makefile rename to src/Makefile index d9734a1..b2a1b0e 100644 --- a/Makefile +++ b/src/Makefile @@ -1,4 +1,4 @@ -CC=gcc +CC=g++ CFLAGS=-g -O0 -Wall OS_TARGET=scetool LDFLAGS=-lz diff --git a/README b/src/README similarity index 96% rename from README rename to src/README index e082320..855c5ae 100644 --- a/README +++ b/src/README @@ -84,6 +84,11 @@ OPTIONS Possible Values Explanation -j, --np-add-sig TRUE/FALSE(default) Whether to add a NP sig. or not. ==> History <== +Version 0.2.10 + - Added ECDSA Signature parsing and validation. + - Added klicensee parsing. + - Fixed metadata info IV parsing. + - Enabled Individuals seed functions for configuration. Version 0.2.9 - Plaintext sections will now take less space in metadata header keys array. - Added option to specifiy a template SELF to take configuration values from. diff --git a/aes.c b/src/aes.cpp similarity index 100% rename from aes.c rename to src/aes.cpp diff --git a/aes.h b/src/aes.h similarity index 100% rename from aes.h rename to src/aes.h diff --git a/aes_omac.cpp b/src/aes_omac.cpp similarity index 100% rename from aes_omac.cpp rename to src/aes_omac.cpp diff --git a/aes_omac.h b/src/aes_omac.h similarity index 100% rename from aes_omac.h rename to src/aes_omac.h diff --git a/bn.cpp b/src/bn.cpp similarity index 100% rename from bn.cpp rename to src/bn.cpp diff --git a/config.h b/src/config.h similarity index 96% rename from config.h rename to src/config.h index d2469af..7a3b166 100644 --- a/config.h +++ b/src/config.h @@ -7,7 +7,7 @@ #define _CONFIG_H_ /*! scetool base version. */ -#define SCETOOL_VERSION_BASE "0.2.9" +#define SCETOOL_VERSION_BASE "0.2.10" /*! Private build. */ //#define CONFIG_PRIVATE_BUILD @@ -26,10 +26,10 @@ #endif /*! Private build options. */ -#ifdef CONFIG_PRIVATE_BUILD +//#ifdef CONFIG_PRIVATE_BUILD #define CONFIG_CUSTOM_INDIV_SEED #define CONFIG_DUMP_INDIV_SEED -#endif +//#endif #if 0 /*! scetool API. */ diff --git a/ec.cpp b/src/ec.cpp similarity index 100% rename from ec.cpp rename to src/ec.cpp diff --git a/ecdsa.cpp b/src/ecdsa.cpp similarity index 100% rename from ecdsa.cpp rename to src/ecdsa.cpp diff --git a/ecdsa.h b/src/ecdsa.h similarity index 100% rename from ecdsa.h rename to src/ecdsa.h diff --git a/elf.h b/src/elf.h similarity index 100% rename from elf.h rename to src/elf.h diff --git a/elf_inlines.h b/src/elf_inlines.h similarity index 100% rename from elf_inlines.h rename to src/elf_inlines.h diff --git a/frontend.cpp b/src/frontend.cpp similarity index 89% rename from frontend.cpp rename to src/frontend.cpp index b06949e..0a9d7ba 100644 --- a/frontend.cpp +++ b/src/frontend.cpp @@ -74,15 +74,15 @@ static BOOL _fill_self_config_template(s8 *file, self_config_t *sconf) _LOG_VERBOSE("Template header decrypted.\n"); _LOG_VERBOSE("Using:\n"); - sconf->key_revision = ctxt->sceh->key_revision; + sconf->key_revision = _ES16(ctxt->sceh->key_revision); _IF_VERBOSE(printf(" Key Revision 0x%04X\n", sconf->key_revision)); - sconf->auth_id = ctxt->self.ai->auth_id; + sconf->auth_id = _ES64(ctxt->self.ai->auth_id); _IF_VERBOSE(printf(" Auth-ID 0x%016llX\n", sconf->auth_id)); - sconf->vendor_id = ctxt->self.ai->vendor_id; + sconf->vendor_id = _ES32(ctxt->self.ai->vendor_id); _IF_VERBOSE(printf(" Vendor-ID 0x%08X\n", sconf->vendor_id)); - sconf->self_type = ctxt->self.ai->self_type; + sconf->self_type = _ES32(ctxt->self.ai->self_type); _IF_VERBOSE(printf(" SELF-Type 0x%08X\n", sconf->self_type)); - sconf->app_version = ctxt->self.ai->version; + sconf->app_version = _ES64(ctxt->self.ai->version); _IF_VERBOSE(printf(" APP Version 0x%016llX\n", sconf->app_version)); control_info_t *ci = sce_get_ctrl_info(ctxt, CONTROL_INFO_TYPE_DIGEST); @@ -102,11 +102,11 @@ static BOOL _fill_self_config_template(s8 *file, self_config_t *sconf) #ifdef CONFIG_CUSTOM_INDIV_SEED sconf->indiv_seed = NULL; - if(ctxt->self.ai->self_type == SELF_TYPE_ISO) + if(_ES32(ctxt->self.ai->self_type) == SELF_TYPE_ISO) { oh = sce_get_opt_header(ctxt, OPT_HEADER_TYPE_INDIV_SEED); - sconf->indiv_seed = (u8 *)_memdup(((u8 *)oh) + sizeof(opt_header_t), oh->size - sizeof(opt_header_t)); - sconf->indiv_seed_size = oh->size - sizeof(opt_header_t); + sconf->indiv_seed = (u8 *)_memdup(((u8 *)oh) + sizeof(opt_header_t), _ES32(oh->size) - sizeof(opt_header_t)); + sconf->indiv_seed_size = _ES32(oh->size) - sizeof(opt_header_t); _IF_VERBOSE(_hexdump(stdout, " Individuals Seed", 0, sconf->indiv_seed, sconf->indiv_seed_size, 0)); } #endif @@ -334,12 +334,12 @@ void frontend_print_infos(s8 *file) } else printf("[*] Warning: Could not decrypt header.\n"); - sce_print_info(stdout, ctxt); - if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SELF) + sce_print_info(stdout, ctxt, keyset); + if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SELF) self_print_info(stdout, ctxt); - else if(ctxt->sceh->header_type == SCE_HEADER_TYPE_RVK && ctxt->mdec == TRUE) + else if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_RVK && ctxt->mdec == TRUE) rvk_print(stdout, ctxt); - else if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SPP && ctxt->mdec == TRUE) + else if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SPP && ctxt->mdec == TRUE) spp_print(stdout, ctxt); free(ctxt); } @@ -387,34 +387,34 @@ void frontend_decrypt(s8 *file_in, s8 *file_out) if(sce_decrypt_data(ctxt)) { _LOG_VERBOSE("Data decrypted.\n"); - if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SELF) + if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SELF) { if(self_write_to_elf(ctxt, file_out) == TRUE) printf("[*] ELF written to %s.\n", file_out); else printf("[*] Error: Could not write ELF.\n"); } - else if(ctxt->sceh->header_type == SCE_HEADER_TYPE_RVK) + else if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_RVK) { - if(_write_buffer(file_out, ctxt->scebuffer + ctxt->metash[0].data_offset, - ctxt->metash[0].data_size + ctxt->metash[1].data_size)) + if(_write_buffer(file_out, ctxt->scebuffer + _ES64(ctxt->metash[0].data_offset), + _ES64(ctxt->metash[0].data_size) + _ES64(ctxt->metash[1].data_size))) printf("[*] RVK written to %s.\n", file_out); else printf("[*] Error: Could not write RVK.\n"); } - else if(ctxt->sceh->header_type == SCE_HEADER_TYPE_PKG) + else if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_PKG) { - /*if(_write_buffer(file_out, ctxt->scebuffer + ctxt->metash[0].data_offset, - ctxt->metash[0].data_size + ctxt->metash[1].data_size + ctxt->metash[2].data_size)) + /*if(_write_buffer(file_out, ctxt->scebuffer + _ES64(ctxt->metash[0].data_offset), + _ES64(ctxt->metash[0].data_size) + _ES64(ctxt->metash[1].data_size) + _ES64(ctxt->metash[2].data_size))) printf("[*] PKG written to %s.\n", file_out); else printf("[*] Error: Could not write PKG.\n");*/ printf("soon...\n"); } - else if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SPP) + else if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SPP) { - if(_write_buffer(file_out, ctxt->scebuffer + ctxt->metash[0].data_offset, - ctxt->metash[0].data_size + ctxt->metash[1].data_size)) + if(_write_buffer(file_out, ctxt->scebuffer + _ES64(ctxt->metash[0].data_offset), + _ES64(ctxt->metash[0].data_size) + _ES64(ctxt->metash[1].data_size))) printf("[*] SPP written to %s.\n", file_out); else printf("[*] Error: Could not write SPP.\n"); diff --git a/frontend.h b/src/frontend.h similarity index 100% rename from frontend.h rename to src/frontend.h diff --git a/getopt.c b/src/getopt.cpp similarity index 100% rename from getopt.c rename to src/getopt.cpp diff --git a/getopt.h b/src/getopt.h similarity index 100% rename from getopt.h rename to src/getopt.h diff --git a/keys.cpp b/src/keys.cpp similarity index 96% rename from keys.cpp rename to src/keys.cpp index 43cb6f9..76d4213 100644 --- a/keys.cpp +++ b/src/keys.cpp @@ -351,24 +351,24 @@ keyset_t *keyset_find(sce_buffer_ctxt_t *ctxt) { keyset_t *res = NULL; - switch(ctxt->sceh->header_type) + switch(_ES16(ctxt->sceh->header_type)) { case SCE_HEADER_TYPE_SELF: - res = _keyset_find_for_self(ctxt->self.ai->self_type, ctxt->sceh->key_revision, ctxt->self.ai->version); + res = _keyset_find_for_self(_ES32(ctxt->self.ai->self_type), _ES16(ctxt->sceh->key_revision), _ES64(ctxt->self.ai->version)); break; case SCE_HEADER_TYPE_RVK: - res = _keyset_find_for_rvk(ctxt->sceh->key_revision); + res = _keyset_find_for_rvk(_ES16(ctxt->sceh->key_revision)); break; case SCE_HEADER_TYPE_PKG: - res = _keyset_find_for_pkg(ctxt->sceh->key_revision); + res = _keyset_find_for_pkg(_ES16(ctxt->sceh->key_revision)); break; case SCE_HEADER_TYPE_SPP: - res = _keyset_find_for_spp(ctxt->sceh->key_revision); + res = _keyset_find_for_spp(_ES16(ctxt->sceh->key_revision)); break; } if(res == NULL) - printf("[*] Error: Could not find keyset for %s.\n", _get_name(_sce_header_types, ctxt->sceh->header_type)); + printf("[*] Error: Could not find keyset for %s.\n", _get_name(_sce_header_types, _ES16(ctxt->sceh->header_type))); return res; } @@ -698,10 +698,10 @@ BOOL klicensee_by_content_id(const s8 *content_id, u8 *klicensee) free(rif); - _LOG_VERBOSE("klicensee decrypted.\n"); + _LOG_VERBOSE("Klicensee decrypted.\n"); } else - _LOG_VERBOSE("klicensee converted from %s.rap.\n", content_id); + _LOG_VERBOSE("Klicensee converted from %s.rap.\n", content_id); return TRUE; } diff --git a/keys.h b/src/keys.h similarity index 100% rename from keys.h rename to src/keys.h diff --git a/list.cpp b/src/list.cpp similarity index 100% rename from list.cpp rename to src/list.cpp diff --git a/list.h b/src/list.h similarity index 100% rename from list.h rename to src/list.h diff --git a/main.cpp b/src/main.cpp similarity index 99% rename from main.cpp rename to src/main.cpp index 44266c3..c804247 100644 --- a/main.cpp +++ b/src/main.cpp @@ -348,7 +348,6 @@ static void parse_args(int argc, char **argv) } } -#ifndef _DEBUG int main(int argc, char **argv) { s8 *ps3 = NULL, path[256]; @@ -447,4 +446,4 @@ int main(int argc, char **argv) return 0; } -#endif + diff --git a/mt19937.cpp b/src/mt19937.cpp similarity index 100% rename from mt19937.cpp rename to src/mt19937.cpp diff --git a/mt19937.h b/src/mt19937.h similarity index 100% rename from mt19937.h rename to src/mt19937.h diff --git a/np.cpp b/src/np.cpp similarity index 90% rename from np.cpp rename to src/np.cpp index e5387f2..6dc425e 100644 --- a/np.cpp +++ b/src/np.cpp @@ -30,11 +30,9 @@ static ci_data_npdrm_t *_sce_find_ci_npdrm(sce_buffer_ctxt_t *ctxt) { control_info_t *ci = (control_info_t *)iter->value; - if(ci->type == CONTROL_INFO_TYPE_NPDRM) + if(_ES32(ci->type) == CONTROL_INFO_TYPE_NPDRM) { ci_data_npdrm_t *np = (ci_data_npdrm_t *)((u8 *)ci + sizeof(control_info_t)); - //Fixup. - _es_ci_data_npdrm(np); return np; } } @@ -65,14 +63,14 @@ BOOL np_decrypt_npdrm(sce_buffer_ctxt_t *ctxt) return FALSE; if(_klicensee_key != NULL) memcpy(npdrm_key, _klicensee_key, 0x10); - else if(np->license_type == NP_LICENSE_FREE) + else if(_ES32(np->license_type) == NP_LICENSE_FREE) { ks_np_klic_free = keyset_find_by_name(CONFIG_NP_KLIC_FREE_KNAME); if(ks_np_klic_free == NULL) return FALSE; memcpy(npdrm_key, ks_np_klic_free->erk, 0x10); } - else if(np->license_type == NP_LICENSE_LOCAL) + else if(_ES32(np->license_type) == NP_LICENSE_LOCAL) { if ((klicensee_by_content_id((s8 *)np->content_id, npdrm_key)) == FALSE) return FALSE; @@ -80,6 +78,14 @@ BOOL np_decrypt_npdrm(sce_buffer_ctxt_t *ctxt) else return FALSE; + if(_raw == TRUE) + { + printf("[*] Klicensee: "); + int i; + for(i = 0; i < 0x10; i++) + printf("%02X ", npdrm_key[i]); + printf("\n"); + } aes_setkey_dec(&aes_ctxt, ks_klic_key->erk, METADATA_INFO_KEYBITS); aes_crypt_ecb(&aes_ctxt, AES_DECRYPT, npdrm_key, npdrm_key); @@ -107,14 +113,14 @@ BOOL np_encrypt_npdrm(sce_buffer_ctxt_t *ctxt) return FALSE; if(_klicensee_key != NULL) memcpy(npdrm_key, _klicensee_key, 0x10); - else if(np->license_type == NP_LICENSE_FREE) + else if(_ES32(np->license_type) == NP_LICENSE_FREE) { ks_np_klic_free = keyset_find_by_name(CONFIG_NP_KLIC_FREE_KNAME); if(ks_np_klic_free == NULL) return FALSE; memcpy(npdrm_key, ks_np_klic_free->erk, 0x10); } - else if(np->license_type == NP_LICENSE_LOCAL) + else if(_ES32(np->license_type) == NP_LICENSE_LOCAL) { if ((klicensee_by_content_id((s8 *)np->content_id, npdrm_key)) == FALSE) return FALSE; @@ -163,10 +169,10 @@ BOOL np_create_ci(npdrm_config_t *npconf, ci_data_npdrm_t *cinp) else return FALSE; - cinp->magic = NP_CI_MAGIC; - cinp->unknown_0 = 1; - cinp->license_type = npconf->license_type; - cinp->app_type = npconf->app_type; + cinp->magic = _ES32(NP_CI_MAGIC); + cinp->unknown_0 = _ES32(1); + cinp->license_type = _ES32(npconf->license_type); + cinp->app_type = _ES32(npconf->app_type); memcpy(cinp->content_id, npconf->content_id, 0x30); #ifdef CONFIG_PRIVATE_BUILD _fill_rand_bytes(cinp->rndpad, 0x10); @@ -174,11 +180,8 @@ BOOL np_create_ci(npdrm_config_t *npconf, ci_data_npdrm_t *cinp) //Better than boring random bytes! memcpy(cinp->rndpad, CONFIG_NPDRM_WATERMARK, 0x10); #endif - cinp->unknown_1 = 0; - cinp->unknown_2 = 0; - - //Fixup before hashing. - _es_ci_data_npdrm(cinp); + cinp->unknown_1 = _ES64(0); + cinp->unknown_2 = _ES64(0); //Generate control info hash key. for(i = 0; i < 0x10; i++) diff --git a/np.h b/src/np.h similarity index 100% rename from np.h rename to src/np.h diff --git a/pkg.cpp b/src/pkg.cpp similarity index 100% rename from pkg.cpp rename to src/pkg.cpp diff --git a/pkg.h b/src/pkg.h similarity index 100% rename from pkg.h rename to src/pkg.h diff --git a/rvk.cpp b/src/rvk.cpp similarity index 89% rename from rvk.cpp rename to src/rvk.cpp index 8d1e75a..e0516ec 100644 --- a/rvk.cpp +++ b/src/rvk.cpp @@ -94,7 +94,7 @@ void rvk_print(FILE *fp, sce_buffer_ctxt_t *ctxt) { u32 i; - rvk_header_t *rvkh = (rvk_header_t *)(ctxt->scebuffer + ctxt->metash[0].data_offset); + rvk_header_t *rvkh = (rvk_header_t *)(ctxt->scebuffer + _ES64(ctxt->metash[0].data_offset)); _es_rvk_header(rvkh); _print_rvk_header(fp, rvkh); @@ -102,7 +102,7 @@ void rvk_print(FILE *fp, sce_buffer_ctxt_t *ctxt) //Program revoke. if(rvkh->type_0 == 4) { - prg_rvk_entry_t *ent = (prg_rvk_entry_t *)(ctxt->scebuffer + ctxt->metash[1].data_offset); + prg_rvk_entry_t *ent = (prg_rvk_entry_t *)(ctxt->scebuffer + _ES64(ctxt->metash[1].data_offset)); _print_prg_rvk_entry_header(fp); for(i = 0; i < rvkh->entcnt; i++) { @@ -113,7 +113,7 @@ void rvk_print(FILE *fp, sce_buffer_ctxt_t *ctxt) else if(rvkh->type_0 == 3) { fprintf(fp, "[*] Package Revoke List Entries:\n"); - u8 *ent = (u8 *)(ctxt->scebuffer + ctxt->metash[1].data_offset); + u8 *ent = (u8 *)(ctxt->scebuffer + _ES64(ctxt->metash[1].data_offset)); for(i = 0; i < rvkh->entcnt; i++) { _hexdump(fp, " ent", i*0x20, ent, 0x20, TRUE); diff --git a/rvk.h b/src/rvk.h similarity index 100% rename from rvk.h rename to src/rvk.h diff --git a/sce.cpp b/src/sce.cpp similarity index 65% rename from sce.cpp rename to src/sce.cpp index dd647cf..359b497 100644 --- a/sce.cpp +++ b/src/sce.cpp @@ -29,23 +29,23 @@ void _print_sce_header(FILE *fp, sce_header_t *h) const s8 *key_revision; fprintf(fp, "[*] SCE Header:\n"); - fprintf(fp, " Magic 0x%08X [%s]\n", h->magic, (h->magic == SCE_HEADER_MAGIC ? "OK" : "ERROR")); - fprintf(fp, " Version 0x%08X\n", h->version); + fprintf(fp, " Magic 0x%08X [%s]\n", _ES32(h->magic), (_ES32(h->magic) == SCE_HEADER_MAGIC ? "OK" : "ERROR")); + fprintf(fp, " Version 0x%08X\n", _ES32(h->version)); - if(h->key_revision == KEY_REVISION_DEBUG) + if(_ES16(h->key_revision) == KEY_REVISION_DEBUG) fprintf(fp, " Key Revision [DEBUG]\n"); else - fprintf(fp, " Key Revision 0x%04X\n", h->key_revision); + fprintf(fp, " Key Revision 0x%04X\n", _ES16(h->key_revision)); - name = _get_name(_sce_header_types, h->header_type); + name = _get_name(_sce_header_types, _ES16(h->header_type)); if(name != NULL) fprintf(fp, " Header Type [%s]\n", name); else - fprintf(fp, " Header Type 0x%04X\n", h->header_type); + fprintf(fp, " Header Type 0x%04X\n", _ES16(h->header_type)); - fprintf(fp, " Metadata Offset 0x%08X\n", h->metadata_offset); - fprintf(fp, " Header Length 0x%016llX\n", h->header_len); - fprintf(fp, " Data Length 0x%016llX\n", h->data_len); + fprintf(fp, " Metadata Offset 0x%08X\n", _ES32(h->metadata_offset)); + fprintf(fp, " Header Length 0x%016llX\n", _ES64(h->header_len)); + fprintf(fp, " Data Length 0x%016llX\n", _ES64(h->data_len)); } void _print_metadata_info(FILE *fp, metadata_info_t *mi) @@ -58,13 +58,13 @@ void _print_metadata_info(FILE *fp, metadata_info_t *mi) void _print_metadata_header(FILE *fp, metadata_header_t *mh) { fprintf(fp, "[*] Metadata Header:\n"); - fprintf(fp, " Signature Input Length 0x%016llX\n", mh->sig_input_length); - fprintf(fp, " unknown_0 0x%08X\n", mh->unknown_0); - fprintf(fp, " Section Count 0x%08X\n", mh->section_count); - fprintf(fp, " Key Count 0x%08X\n", mh->key_count); - fprintf(fp, " Optional Header Size 0x%08X\n", mh->opt_header_size); - fprintf(fp, " unknown_1 0x%08X\n", mh->unknown_1); - fprintf(fp, " unknown_2 0x%08X\n", mh->unknown_2); + fprintf(fp, " Signature Input Length 0x%016llX\n", _ES64(mh->sig_input_length)); + fprintf(fp, " unknown_0 0x%08X\n", _ES32(mh->unknown_0)); + fprintf(fp, " Section Count 0x%08X\n", _ES32(mh->section_count)); + fprintf(fp, " Key Count 0x%08X\n", _ES32(mh->key_count)); + fprintf(fp, " Optional Header Size 0x%08X\n", _ES32(mh->opt_header_size)); + fprintf(fp, " unknown_1 0x%08X\n", _ES32(mh->unknown_1)); + fprintf(fp, " unknown_2 0x%08X\n", _ES32(mh->unknown_2)); } static void _print_metadata_section_header_header(FILE *fp) @@ -76,19 +76,19 @@ static void _print_metadata_section_header_header(FILE *fp) void _print_metadata_section_header(FILE *fp, metadata_section_header_t *msh, u32 idx) { fprintf(fp, " %03d %08llX %08llX %02X %02X ", - idx, msh->data_offset, msh->data_size, msh->type, msh->index); + idx, _ES64(msh->data_offset), _ES64(msh->data_size), _ES32(msh->type), _ES32(msh->index)); - if(msh->hashed == METADATA_SECTION_HASHED) - fprintf(fp, "[YES] %02X ", msh->sha1_index); + if(_ES32(msh->hashed) == METADATA_SECTION_HASHED) + fprintf(fp, "[YES] %02X ", _ES32(msh->sha1_index)); else fprintf(fp, "[NO ] -- "); - if(msh->encrypted == METADATA_SECTION_ENCRYPTED) - fprintf(fp, "[YES] %02X %02X ", msh->key_index, msh->iv_index); + if(_ES32(msh->encrypted) == METADATA_SECTION_ENCRYPTED) + fprintf(fp, "[YES] %02X %02X ", _ES32(msh->key_index), _ES32(msh->iv_index)); else fprintf(fp, "[NO ] -- -- "); - if(msh->compressed == METADATA_SECTION_COMPRESSED) + if(_ES32(msh->compressed) == METADATA_SECTION_COMPRESSED) fprintf(fp, "[YES]\n"); else fprintf(fp, "[NO ]\n"); @@ -99,16 +99,48 @@ void _print_sce_file_keys(FILE *fp, sce_buffer_ctxt_t *ctxt) u32 i; //Get start of keys. - u8 *keys = (u8 *)ctxt->metash + sizeof(metadata_section_header_t) * ctxt->metah->section_count; + u8 *keys = (u8 *)ctxt->metash + sizeof(metadata_section_header_t) * _ES32(ctxt->metah->section_count); fprintf(fp, "[*] SCE File Keys:\n"); - for(i = 0; i < ctxt->metah->key_count; i++) + for(i = 0; i < _ES32(ctxt->metah->key_count); i++) { fprintf(fp, " %02X:", i); _hexdump(fp, "", i, keys+i*0x10, 0x10, FALSE); } } +void _print_sce_signature(FILE *fp, signature_t *sig) +{ + fprintf(fp, "[*] Signature:\n"); + _hexdump(fp, " R", 0, sig->r, SIGNATURE_R_SIZE, FALSE); + _hexdump(fp, " S", 0, sig->s, SIGNATURE_S_SIZE, FALSE); +} + +void _print_sce_signature_status(FILE *fp, sce_buffer_ctxt_t *ctxt, u8 *keyset) +{ + u8 hash[0x14]; + keyset_t *ks; + + //Check if a keyset is provided. + if(keyset == NULL) + { + //Try to find keyset. + ks = keyset_find(ctxt); + } + else + { + //Use the provided keyset. + ks = keyset_from_buffer(keyset); + } + //Generate header hash. + sha1(ctxt->scebuffer, _ES64(ctxt->metah->sig_input_length), hash); + + //Validate the signature. + ecdsa_set_curve(ks->ctype); + ecdsa_set_pub(ks->pub); + fprintf(fp, "[*] Signature status: %s\n", (ecdsa_verify(hash, ctxt->sig->r, ctxt->sig->s) == TRUE ? "OK" : "FAIL")); +} + static sce_buffer_ctxt_t *_sce_create_ctxt() { sce_buffer_ctxt_t *res; @@ -156,46 +188,41 @@ sce_buffer_ctxt_t *sce_create_ctxt_from_buffer(u8 *scebuffer) //Set pointer to SCE header. res->sceh = (sce_header_t *)scebuffer; - _es_sce_header(res->sceh); //Set pointers to file type specific headers. - switch(res->sceh->header_type) + switch(_ES16(res->sceh->header_type)) { case SCE_HEADER_TYPE_SELF: { //SELF header. res->self.selfh = (self_header_t *)(res->scebuffer + sizeof(sce_header_t)); - _es_self_header(res->self.selfh); //Application info. - res->self.ai = (app_info_t *)(res->scebuffer + res->self.selfh->app_info_offset); - _es_app_info(res->self.ai); + res->self.ai = (app_info_t *)(res->scebuffer + _ES64(res->self.selfh->app_info_offset)); //Section infos. - res->self.si = (section_info_t *)(res->scebuffer + res->self.selfh->section_info_offset); + res->self.si = (section_info_t *)(res->scebuffer + _ES64(res->self.selfh->section_info_offset)); //SCE version. - if(res->self.selfh->sce_version_offset != NULL) + if(_ES64(res->self.selfh->sce_version_offset) != NULL) { - res->self.sv = (sce_version_t *)(res->scebuffer + res->self.selfh->sce_version_offset); - _es_sce_version(res->self.sv); + res->self.sv = (sce_version_t *)(res->scebuffer + _ES64(res->self.selfh->sce_version_offset)); } else res->self.sv = 0; //Get pointers to all control infos. - u32 len = (u32)res->self.selfh->control_info_size; + u32 len = (u32)(_ES64(res->self.selfh->control_info_size)); if(len > 0) { - u8 *ptr = res->scebuffer + res->self.selfh->control_info_offset; + u8 *ptr = res->scebuffer + _ES64(res->self.selfh->control_info_offset); res->self.cis = list_create(); while(len > 0) { control_info_t *tci = (control_info_t *)ptr; - _es_control_info(tci); - ptr += tci->size; - len -= tci->size; + ptr += _ES32(tci->size); + len -= _ES32(tci->size); list_add_back(res->self.cis, tci); } } @@ -219,7 +246,7 @@ sce_buffer_ctxt_t *sce_create_ctxt_from_buffer(u8 *scebuffer) } //Set pointers to metadata headers. - res->metai = (metadata_info_t *)(scebuffer + sizeof(sce_header_t) + res->sceh->metadata_offset); + res->metai = (metadata_info_t *)(scebuffer + sizeof(sce_header_t) + _ES32(res->sceh->metadata_offset)); res->metah = (metadata_header_t *)((u8 *)res->metai + sizeof(metadata_info_t)); res->metash = (metadata_section_header_t *)((u8 *)res->metah + sizeof(metadata_header_t)); @@ -233,14 +260,14 @@ sce_buffer_ctxt_t *sce_create_ctxt_build_self(u8 *elf, u32 elf_len) if((res = _sce_create_ctxt()) == NULL) return NULL; - res->sceh->magic = SCE_HEADER_MAGIC; - res->sceh->version = SCE_HEADER_VERSION_2; - res->sceh->header_type = SCE_HEADER_TYPE_SELF; + res->sceh->magic = _ES32(SCE_HEADER_MAGIC); + res->sceh->version = _ES32(SCE_HEADER_VERSION_2); + res->sceh->header_type = _ES16(SCE_HEADER_TYPE_SELF); //Allocate SELF header. res->self.selfh = (self_header_t *)malloc(sizeof(self_header_t)); memset(res->self.selfh, 0, sizeof(self_header_t)); - res->self.selfh->header_type = SUB_HEADER_TYPE_SELF; + res->self.selfh->header_type = _ES64(SUB_HEADER_TYPE_SELF); //Allocate application info. res->self.ai = (app_info_t *)malloc(sizeof(app_info_t)); memset(res->self.ai, 0, sizeof(app_info_t)); @@ -275,11 +302,11 @@ void sce_add_data_section(sce_buffer_ctxt_t *ctxt, void *buffer, u32 size, BOOL void sce_set_metash(sce_buffer_ctxt_t *ctxt, u32 type, BOOL encrypted, u32 idx) { - ctxt->metash[idx].type = type; - ctxt->metash[idx].index = (type == METADATA_SECTION_TYPE_PHDR ? idx : type == METADATA_SECTION_TYPE_SHDR ? idx + 1 : idx); - ctxt->metash[idx].hashed = METADATA_SECTION_HASHED; - ctxt->metash[idx].encrypted = (encrypted == TRUE ? METADATA_SECTION_ENCRYPTED : METADATA_SECTION_NOT_ENCRYPTED); - ctxt->metash[idx].compressed = METADATA_SECTION_NOT_COMPRESSED; + ctxt->metash[idx].type = _ES32(type); + ctxt->metash[idx].index = _ES32(_ES32(type) == METADATA_SECTION_TYPE_PHDR ? idx : _ES32(type) == METADATA_SECTION_TYPE_SHDR ? idx + 1 : idx); + ctxt->metash[idx].hashed = _ES32(METADATA_SECTION_HASHED); + ctxt->metash[idx].encrypted = _ES32(encrypted == TRUE ? METADATA_SECTION_ENCRYPTED : METADATA_SECTION_NOT_ENCRYPTED); + ctxt->metash[idx].compressed = _ES32(METADATA_SECTION_NOT_COMPRESSED); } void sce_compress_data(sce_buffer_ctxt_t *ctxt) @@ -307,15 +334,15 @@ void sce_compress_data(sce_buffer_ctxt_t *ctxt) sec->size = size_comp; //Set compression in section info. - if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SELF && i < ctxt->makeself->si_sec_cnt) + if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SELF && i < ctxt->makeself->si_sec_cnt) { ctxt->self.si[i].compressed = SECTION_INFO_COMPRESSED; //Update size too. ctxt->self.si[i].size = size_comp; } - //Set compression in maetadata section header. - ctxt->metash[i].compressed = METADATA_SECTION_COMPRESSED; + //Set compression in metadata section header. + ctxt->metash[i].compressed = _ES32(METADATA_SECTION_COMPRESSED); } else { @@ -336,7 +363,7 @@ static u32 _sce_get_ci_len(sce_buffer_ctxt_t *ctxt) u32 res = 0; LIST_FOREACH(iter, ctxt->self.cis) - res += ((control_info_t *)iter->value)->size; + res += _ES32(((control_info_t *)iter->value)->size); return res; } @@ -346,7 +373,7 @@ static u32 _sce_get_oh_len(sce_buffer_ctxt_t *ctxt) u32 res = 0; LIST_FOREACH(iter, ctxt->self.ohs) - res += ((opt_header_t *)iter->value)->size; + res += _ES32(((opt_header_t *)iter->value)->size); return res; } @@ -356,7 +383,7 @@ void _sce_fixup_ctxt(sce_buffer_ctxt_t *ctxt) u32 i = 0, base_off, last_off; //Set section info data. - base_off = ctxt->sceh->header_len; + base_off = _ES64(ctxt->sceh->header_len); LIST_FOREACH(iter, ctxt->secs) { //Save last offset. @@ -367,52 +394,52 @@ void _sce_fixup_ctxt(sce_buffer_ctxt_t *ctxt) sec->offset = base_off; //Section infos for SELF (that are present as data sections). - if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SELF && i < ctxt->makeself->si_sec_cnt) + if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SELF && i < ctxt->makeself->si_sec_cnt) //{ ctxt->self.si[i].offset = base_off; // ctxt->self.si[i].size = sec->size; //} //Metadata section headers. - ctxt->metash[i].data_offset = base_off; - ctxt->metash[i].data_size = sec->size; + ctxt->metash[i].data_offset = _ES64(base_off); + ctxt->metash[i].data_size = _ES64(sec->size); //Update offset and data length. base_off += sec->size; - ctxt->sceh->data_len = base_off - ctxt->sceh->header_len; + ctxt->sceh->data_len = _ES64(base_off - _ES64(ctxt->sceh->header_len)); base_off = ALIGN(base_off, SCE_ALIGN); i++; } //Set metadata offset (counted from after SCE header). - ctxt->sceh->metadata_offset = ctxt->off_metai - sizeof(sce_header_t); + ctxt->sceh->metadata_offset = _ES32(ctxt->off_metai - sizeof(sce_header_t)); //Set metadata header values. - ctxt->metah->sig_input_length = ctxt->off_sig; - ctxt->metah->unknown_0 = 1; - ctxt->metah->opt_header_size = _sce_get_oh_len(ctxt); - ctxt->metah->unknown_1 = 0; - ctxt->metah->unknown_2 = 0; + ctxt->metah->sig_input_length = _ES64(ctxt->off_sig); + ctxt->metah->unknown_0 = _ES32(1); + ctxt->metah->opt_header_size = _ES32(_sce_get_oh_len(ctxt)); + ctxt->metah->unknown_1 = _ES32(0); + ctxt->metah->unknown_2 = _ES32(0); - switch(ctxt->sceh->header_type) + switch(_ES16(ctxt->sceh->header_type)) { case SCE_HEADER_TYPE_SELF: { //Set header offsets. - ctxt->self.selfh->app_info_offset = ctxt->off_self.off_ai; - ctxt->self.selfh->elf_offset = ctxt->off_self.off_ehdr; - ctxt->self.selfh->phdr_offset = ctxt->off_self.off_phdr; - ctxt->self.selfh->section_info_offset = ctxt->off_self.off_si; - ctxt->self.selfh->sce_version_offset = ctxt->off_self.off_sv; - ctxt->self.selfh->control_info_offset = ctxt->off_self.off_cis; - ctxt->self.selfh->control_info_size = _sce_get_ci_len(ctxt); + ctxt->self.selfh->app_info_offset = _ES64(ctxt->off_self.off_ai); + ctxt->self.selfh->elf_offset = _ES64(ctxt->off_self.off_ehdr); + ctxt->self.selfh->phdr_offset = _ES64(ctxt->off_self.off_phdr); + ctxt->self.selfh->section_info_offset = _ES64(ctxt->off_self.off_si); + ctxt->self.selfh->sce_version_offset = _ES64(ctxt->off_self.off_sv); + ctxt->self.selfh->control_info_offset = _ES64(ctxt->off_self.off_cis); + ctxt->self.selfh->control_info_size = _ES64(_sce_get_ci_len(ctxt)); //Set section headers offset in SELF header (last data section) if available. if(ctxt->makeself->shdrs != NULL) - ctxt->self.selfh->shdr_offset = last_off; + ctxt->self.selfh->shdr_offset = _ES64(last_off); else - ctxt->self.selfh->shdr_offset = 0; + ctxt->self.selfh->shdr_offset = _ES64(0); } break; case SCE_HEADER_TYPE_RVK: @@ -436,24 +463,24 @@ void _sce_fixup_keys(sce_buffer_ctxt_t *ctxt) //Build keys array. ctxt->keys_len = 0; - ctxt->metah->key_count = 0; - for(i = 0; i < ctxt->metah->section_count; i++) + ctxt->metah->key_count = _ES32(0); + for(i = 0; i < _ES32(ctxt->metah->section_count); i++) { - if(ctxt->metash[i].encrypted == METADATA_SECTION_ENCRYPTED) + if(_ES32(ctxt->metash[i].encrypted) == METADATA_SECTION_ENCRYPTED) { ctxt->keys_len += 0x80; //0x60 HMAC, 0x20 key/iv - ctxt->metah->key_count += 8; - ctxt->metash[i].sha1_index = ctxt->metah->key_count - 8; - ctxt->metash[i].key_index = ctxt->metah->key_count - 2; - ctxt->metash[i].iv_index = ctxt->metah->key_count - 1; + ctxt->metah->key_count += _ES32(8); + ctxt->metash[i].sha1_index = _ES32(_ES32(ctxt->metah->key_count) - 8); + ctxt->metash[i].key_index = _ES32(_ES32(ctxt->metah->key_count) - 2); + ctxt->metash[i].iv_index = _ES32(_ES32(ctxt->metah->key_count) - 1); } else { ctxt->keys_len += 0x60; //0x60 HMAC - ctxt->metah->key_count += 6; - ctxt->metash[i].sha1_index = ctxt->metah->key_count - 6; - ctxt->metash[i].key_index = 0xFFFFFFFF; - ctxt->metash[i].iv_index = 0xFFFFFFFF; + ctxt->metah->key_count += _ES32(6); + ctxt->metash[i].sha1_index = _ES32(_ES32(ctxt->metah->key_count) - 6); + ctxt->metash[i].key_index = _ES32(0xFFFFFFFF); + ctxt->metash[i].iv_index = _ES32(0xFFFFFFFF); } } @@ -495,7 +522,7 @@ void sce_layout_ctxt(sce_buffer_ctxt_t *ctxt) //SCE header. ctxt->off_sceh = _INC_OFF_TYPE(coff, sce_header_t); - switch(ctxt->sceh->header_type) + switch(_ES16(ctxt->sceh->header_type)) { case SCE_HEADER_TYPE_SELF: { @@ -534,13 +561,13 @@ void sce_layout_ctxt(sce_buffer_ctxt_t *ctxt) //Metadata header. ctxt->off_metah = _INC_OFF_TYPE(coff, metadata_header_t); //Metadata section headers. - ctxt->off_metash = _INC_OFF_SIZE(coff, ctxt->metah->section_count * sizeof(metadata_section_header_t)); + ctxt->off_metash = _INC_OFF_SIZE(coff, _ES32(ctxt->metah->section_count) * sizeof(metadata_section_header_t)); //Keys. _sce_fixup_keys(ctxt); ctxt->off_keys = _INC_OFF_SIZE(coff, ctxt->keys_len); //SELF only headers. - if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SELF) + if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SELF) { //Optional headers. ctxt->off_self.off_ohs = _INC_OFF_SIZE(coff, _sce_get_oh_len(ctxt)); @@ -554,7 +581,7 @@ void sce_layout_ctxt(sce_buffer_ctxt_t *ctxt) coff = ALIGN(coff, HEADER_ALIGN); //Set header length. - ctxt->sceh->header_len = coff; + ctxt->sceh->header_len = _ES64(coff); //Set missing values, etc. _sce_fixup_ctxt(ctxt); @@ -565,21 +592,21 @@ static void _sce_build_header(sce_buffer_ctxt_t *ctxt) u32 i; //Allocate header buffer. - ctxt->scebuffer = (u8*)malloc(sizeof(u8) * ctxt->sceh->header_len); - memset(ctxt->scebuffer, 0, sizeof(u8) * ctxt->sceh->header_len); + ctxt->scebuffer = (u8*)malloc(sizeof(u8) * _ES64(ctxt->sceh->header_len)); + memset(ctxt->scebuffer, 0, sizeof(u8) * _ES64(ctxt->sceh->header_len)); //SCE header. - _copy_es_sce_header((sce_header_t *)(ctxt->scebuffer + ctxt->off_sceh), ctxt->sceh); + memcpy((sce_header_t *)(ctxt->scebuffer + ctxt->off_sceh), ctxt->sceh, sizeof(sce_header_t)); //File type dependent headers. - switch(ctxt->sceh->header_type) + switch(_ES16(ctxt->sceh->header_type)) { case SCE_HEADER_TYPE_SELF: { //SELF header. - _copy_es_self_header((self_header_t *)(ctxt->scebuffer + ctxt->off_self.off_selfh), ctxt->self.selfh); + memcpy((self_header_t *)(ctxt->scebuffer + ctxt->off_self.off_selfh), ctxt->self.selfh, sizeof(self_header_t)); //Application info. - _copy_es_app_info((app_info_t *)(ctxt->scebuffer + ctxt->off_self.off_ai), ctxt->self.ai); + memcpy((app_info_t *)(ctxt->scebuffer + ctxt->off_self.off_ai), ctxt->self.ai, sizeof(app_info_t)); //ELF header. memcpy(ctxt->scebuffer + ctxt->off_self.off_ehdr, ctxt->makeself->ehdr, ctxt->makeself->ehsize); //ELF program headers. @@ -591,7 +618,7 @@ static void _sce_build_header(sce_buffer_ctxt_t *ctxt) _copy_es_section_info((section_info_t *)(ctxt->scebuffer + ctxt->off_self.off_si + sizeof(section_info_t) * i), &ctxt->self.si[i]); //SCE version. - _copy_es_sce_version((sce_version_t *)(ctxt->scebuffer + ctxt->off_self.off_sv), ctxt->self.sv); + memcpy((sce_version_t *)(ctxt->scebuffer + ctxt->off_self.off_sv), ctxt->self.sv, sizeof(sce_version_t)); //Control infos. u32 ci_base = ctxt->off_self.off_cis; @@ -600,11 +627,11 @@ static void _sce_build_header(sce_buffer_ctxt_t *ctxt) control_info_t *ci = (control_info_t *)iter->value; //Copy control info header. - _copy_es_control_info((control_info_t *)(ctxt->scebuffer + ci_base), ci); + memcpy((control_info_t *)(ctxt->scebuffer + ci_base), ci, sizeof(control_info_t)); //Copy data. - memcpy(ctxt->scebuffer + ci_base + sizeof(control_info_t), ((u8 *)ci) + sizeof(control_info_t), ci->size - sizeof(control_info_t)); + memcpy(ctxt->scebuffer + ci_base + sizeof(control_info_t), ((u8 *)ci) + sizeof(control_info_t), _ES32(ci->size) - sizeof(control_info_t)); - ci_base += ci->size; + ci_base += _ES32(ci->size); } } break; @@ -625,16 +652,16 @@ static void _sce_build_header(sce_buffer_ctxt_t *ctxt) //Metadata info. memcpy(ctxt->scebuffer + ctxt->off_metai, ctxt->metai, sizeof(metadata_info_t)); //Metadata header. - _copy_es_metadata_header((metadata_header_t *)(ctxt->scebuffer + ctxt->off_metah), ctxt->metah); + memcpy((metadata_header_t *)(ctxt->scebuffer + ctxt->off_metah), ctxt->metah, sizeof(metadata_header_t)); //Metadata section headers. - for(i = 0; i < ctxt->metah->section_count; i++) - _copy_es_metadata_section_header((metadata_section_header_t *)(ctxt->scebuffer + ctxt->off_metash + sizeof(metadata_section_header_t) * i), &ctxt->metash[i]); + for(i = 0; i < _ES32(ctxt->metah->section_count); i++) + memcpy((metadata_section_header_t *)(ctxt->scebuffer + ctxt->off_metash + sizeof(metadata_section_header_t) * i), &ctxt->metash[i], sizeof(metadata_section_header_t)); //Keys. //memcpy(ctxt->scebuffer + ctxt->off_keys, ctxt->keys, ctxt->keys_len); //SELF only headers. - if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SELF) + if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SELF) { //Optional headers. u32 oh_base = ctxt->off_self.off_ohs; @@ -643,11 +670,11 @@ static void _sce_build_header(sce_buffer_ctxt_t *ctxt) opt_header_t *oh = (opt_header_t *)iter->value; //Copy optional header. - _copy_es_opt_header((opt_header_t *)(ctxt->scebuffer + oh_base), oh); + memcpy((opt_header_t *)(ctxt->scebuffer + oh_base), oh, sizeof(opt_header_t)); //Copy data. - memcpy(ctxt->scebuffer + oh_base + sizeof(opt_header_t), ((u8 *)oh) + sizeof(opt_header_t), oh->size - sizeof(opt_header_t)); + memcpy(ctxt->scebuffer + oh_base + sizeof(opt_header_t), ((u8 *)oh) + sizeof(opt_header_t), _ES32(oh->size) - sizeof(opt_header_t)); - oh_base += oh->size; + oh_base += _ES32(oh->size); } } } @@ -661,7 +688,7 @@ static BOOL _sce_sign_header(sce_buffer_ctxt_t *ctxt, keyset_t *ks) return FALSE; //Generate header hash. - sha1(ctxt->scebuffer, ctxt->metah->sig_input_length, hash); + sha1(ctxt->scebuffer, _ES64(ctxt->metah->sig_input_length), hash); //Generate signature. ecdsa_set_curve(ks->ctype); @@ -683,7 +710,7 @@ static void _sce_calculate_hashes(sce_buffer_ctxt_t *ctxt) { sce_section_ctxt_t *sec = (sce_section_ctxt_t *)iter->value; - sha1_idx = ctxt->metash[i].sha1_index; + sha1_idx = _ES32(ctxt->metash[i].sha1_index); memset(ctxt->keys + sha1_idx * 0x10, 0, 0x20); sha1_hmac(ctxt->keys + (sha1_idx + 2) * 0x10, 0x40, (u8 *)sec->buffer, sec->size, ctxt->keys + sha1_idx * 0x10); @@ -727,7 +754,7 @@ static BOOL _sce_encrypt_header(sce_buffer_ctxt_t *ctxt, u8 *keyset) aes_setkey_enc(&aes_ctxt, ctxt->metai->key, METADATA_INFO_KEYBITS); memcpy(iv, ctxt->metai->iv, 0x10); aes_crypt_ctr(&aes_ctxt, - ctxt->sceh->header_len - (sizeof(sce_header_t) + ctxt->sceh->metadata_offset + sizeof(metadata_info_t)), + _ES64(ctxt->sceh->header_len) - (sizeof(sce_header_t) + _ES32(ctxt->sceh->metadata_offset) + sizeof(metadata_info_t)), &nc_off, iv, sblk, ptr, ptr); //Encrypt metadata info. @@ -736,7 +763,7 @@ static BOOL _sce_encrypt_header(sce_buffer_ctxt_t *ctxt, u8 *keyset) aes_crypt_cbc(&aes_ctxt, AES_ENCRYPT, sizeof(metadata_info_t), ks->riv, ptr, ptr); //Add NPDRM layer. - if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SELF && ctxt->self.ai->self_type == SELF_TYPE_NPDRM) + if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SELF && _ES32(ctxt->self.ai->self_type) == SELF_TYPE_NPDRM) if(np_encrypt_npdrm(ctxt) == FALSE) return FALSE; @@ -756,10 +783,10 @@ static void _sce_encrypt_data(sce_buffer_ctxt_t *ctxt) u8 buf[16]; u8 iv[16]; - if(ctxt->metash[i].encrypted == METADATA_SECTION_ENCRYPTED) + if(_ES32(ctxt->metash[i].encrypted) == METADATA_SECTION_ENCRYPTED) { - memcpy(iv, ctxt->keys + ctxt->metash[i].iv_index * 0x10, 0x10); - aes_setkey_enc(&aes_ctxt, ctxt->keys + ctxt->metash[i].key_index * 0x10, 128); + memcpy(iv, ctxt->keys + _ES32(ctxt->metash[i].iv_index) * 0x10, 0x10); + aes_setkey_enc(&aes_ctxt, ctxt->keys + _ES32(ctxt->metash[i].key_index) * 0x10, 128); aes_crypt_ctr(&aes_ctxt, sec->size, &nc_off, iv, buf, (u8 *)sec->buffer, (u8 *)sec->buffer); } @@ -790,7 +817,7 @@ BOOL sce_write_ctxt(sce_buffer_ctxt_t *ctxt, s8 *fname) return FALSE; //Write SCE file header. - fwrite(ctxt->scebuffer, sizeof(u8), ctxt->sceh->header_len, fp); + fwrite(ctxt->scebuffer, sizeof(u8), _ES64(ctxt->sceh->header_len), fp); //Write SCE file sections. LIST_FOREACH(iter, ctxt->secs) @@ -809,7 +836,7 @@ BOOL sce_decrypt_header(sce_buffer_ctxt_t *ctxt, u8 *metadata_info, u8 *keyset) { u32 i; size_t nc_off; - u8 sblk[0x10], iv[0x10]; + u8 sblk[0x10], iv[0x10], ctr_iv[0x10]; keyset_t *ks; aes_context aes_ctxt; @@ -832,7 +859,7 @@ BOOL sce_decrypt_header(sce_buffer_ctxt_t *ctxt, u8 *metadata_info, u8 *keyset) } //Remove NPDRM layer. - if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SELF && ctxt->self.ai->self_type == SELF_TYPE_NPDRM) + if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SELF && _ES32(ctxt->self.ai->self_type) == SELF_TYPE_NPDRM) if(np_decrypt_npdrm(ctxt) == FALSE) return FALSE; @@ -852,43 +879,37 @@ BOOL sce_decrypt_header(sce_buffer_ctxt_t *ctxt, u8 *metadata_info, u8 *keyset) //Decrypt metadata header, metadata section headers and keys. nc_off = 0; + memcpy (ctr_iv, ctxt->metai->iv ,0x10); aes_setkey_enc(&aes_ctxt, ctxt->metai->key, METADATA_INFO_KEYBITS); aes_crypt_ctr(&aes_ctxt, - ctxt->sceh->header_len - (sizeof(sce_header_t) + ctxt->sceh->metadata_offset + sizeof(metadata_info_t)), - &nc_off, ctxt->metai->iv, sblk, (u8 *)ctxt->metah, (u8 *)ctxt->metah); - - //Fixup headers. - _es_metadata_header(ctxt->metah); - for(i = 0; i < ctxt->metah->section_count; i++) - _es_metadata_section_header(&ctxt->metash[i]); + _ES64(ctxt->sceh->header_len) - (sizeof(sce_header_t) + _ES32(ctxt->sceh->metadata_offset) + sizeof(metadata_info_t)), + &nc_off, ctr_iv, sblk, (u8 *)ctxt->metah, (u8 *)ctxt->metah); //Metadata decrypted. ctxt->mdec = TRUE; //Set start of SCE file keys. - ctxt->keys = (u8 *)ctxt->metash + sizeof(metadata_section_header_t) * ctxt->metah->section_count; - ctxt->keys_len = ctxt->metah->key_count * 0x10; + ctxt->keys = (u8 *)ctxt->metash + sizeof(metadata_section_header_t) * _ES32(ctxt->metah->section_count); + ctxt->keys_len = _ES32(ctxt->metah->key_count) * 0x10; //Set SELF only headers. - if(ctxt->sceh->header_type == SCE_HEADER_TYPE_SELF) + if(_ES16(ctxt->sceh->header_type) == SCE_HEADER_TYPE_SELF) { //Get pointers to all optional headers. ctxt->self.ohs = list_create(); - opt_header_t *oh = (opt_header_t *)(ctxt->keys + ctxt->metah->key_count * 0x10); - _es_opt_header(oh); + opt_header_t *oh = (opt_header_t *)(ctxt->keys + _ES32(ctxt->metah->key_count) * 0x10); list_add_back(ctxt->self.ohs, oh); - while(oh->next != 0) + while(_ES64(oh->next) != 0) { - oh = (opt_header_t *)((u8 *)oh + oh->size); - _es_opt_header(oh); + oh = (opt_header_t *)((u8 *)oh + _ES32(oh->size)); list_add_back(ctxt->self.ohs, oh); } //Signature. - ctxt->sig = (signature_t *)((u8 *)oh + oh->size); + ctxt->sig = (signature_t *)((u8 *)oh + _ES32(oh->size)); } else - ctxt->sig = (signature_t *)(ctxt->keys + ctxt->metah->key_count * 0x10); + ctxt->sig = (signature_t *)(ctxt->keys + _ES32(ctxt->metah->key_count) * 0x10); return TRUE; } @@ -899,23 +920,23 @@ BOOL sce_decrypt_data(sce_buffer_ctxt_t *ctxt) aes_context aes_ctxt; //Decrypt sections. - for(i = 0; i < ctxt->metah->section_count; i++) + for(i = 0; i < _ES32(ctxt->metah->section_count); i++) { size_t nc_off = 0; u8 buf[16]; u8 iv[16]; //Only decrypt encrypted sections. - if(ctxt->metash[i].encrypted == METADATA_SECTION_ENCRYPTED) + if(_ES32(ctxt->metash[i].encrypted) == METADATA_SECTION_ENCRYPTED) { - if(ctxt->metash[i].key_index > ctxt->metah->key_count - 1 || ctxt->metash[i].iv_index > ctxt->metah->key_count) + if(_ES32(ctxt->metash[i].key_index) > _ES32(ctxt->metah->key_count) - 1 || _ES32(ctxt->metash[i].iv_index) > _ES32(ctxt->metah->key_count)) printf("[*] Warning: Skipped decryption of section %03d (marked encrypted but key/iv index out of range)\n", i); else { - memcpy(iv, ctxt->keys + ctxt->metash[i].iv_index * 0x10, 0x10); - aes_setkey_enc(&aes_ctxt, ctxt->keys + ctxt->metash[i].key_index * 0x10, 128); - u8 *ptr = ctxt->scebuffer + ctxt->metash[i].data_offset; - aes_crypt_ctr(&aes_ctxt, ctxt->metash[i].data_size, &nc_off, iv, buf, ptr, ptr); + memcpy(iv, ctxt->keys + _ES32(ctxt->metash[i].iv_index) * 0x10, 0x10); + aes_setkey_enc(&aes_ctxt, ctxt->keys + _ES32(ctxt->metash[i].key_index) * 0x10, 128); + u8 *ptr = ctxt->scebuffer + _ES64(ctxt->metash[i].data_offset); + aes_crypt_ctr(&aes_ctxt, _ES64(ctxt->metash[i].data_size), &nc_off, iv, buf, ptr, ptr); } } } @@ -923,7 +944,7 @@ BOOL sce_decrypt_data(sce_buffer_ctxt_t *ctxt) return TRUE; } -void sce_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt) +void sce_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt, u8 *keyset) { u32 i; @@ -940,11 +961,17 @@ void sce_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt) //Print section infos. _print_metadata_section_header_header(fp); - for(i = 0; i < ctxt->metah->section_count; i++) + for(i = 0; i < _ES32(ctxt->metah->section_count); i++) _print_metadata_section_header(fp, &ctxt->metash[i], i); //Print keys. _print_sce_file_keys(fp, ctxt); + + //Print signature. + _print_sce_signature(fp, ctxt->sig); + + //Print signature status. + _print_sce_signature_status(fp, ctxt, keyset); } static s8 _sce_tmp_vstr[16]; @@ -981,7 +1008,7 @@ control_info_t *sce_get_ctrl_info(sce_buffer_ctxt_t *ctxt, u32 type) LIST_FOREACH(iter, ctxt->self.cis) { control_info_t *ci = (control_info_t *)iter->value; - if(ci->type == type) + if(_ES32(ci->type) == type) return ci; } @@ -993,7 +1020,7 @@ opt_header_t *sce_get_opt_header(sce_buffer_ctxt_t *ctxt, u32 type) LIST_FOREACH(iter, ctxt->self.ohs) { opt_header_t *oh = (opt_header_t *)iter->value; - if(oh->type == type) + if(_ES32(oh->type) == type) return oh; } diff --git a/sce.h b/src/sce.h similarity index 99% rename from sce.h rename to src/sce.h index 5d5a889..e889ccc 100644 --- a/sce.h +++ b/src/sce.h @@ -596,7 +596,7 @@ BOOL sce_decrypt_header(sce_buffer_ctxt_t *ctxt, u8 *metadata_info, u8 *keyset); BOOL sce_decrypt_data(sce_buffer_ctxt_t *ctxt); /*! Print SCE file info. */ -void sce_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt); +void sce_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt, u8 *keyset); /*! Get version string from version. */ s8 *sce_version_to_str(u64 version); diff --git a/src/sce_inlines.h b/src/sce_inlines.h new file mode 100644 index 0000000..4017ec2 --- /dev/null +++ b/src/sce_inlines.h @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2011-2013 by naehrwert +* This file is released under the GPLv2. +*/ + +#ifndef _SCE_INLINES_H_ +#define _SCE_INLINES_H_ + +#include + +#include "types.h" +#include "sce.h" + + +static inline void _es_section_info(section_info_t *si) +{ + si->offset = _ES64(si->offset); + si->size = _ES64(si->size); + si->compressed = _ES32(si->compressed); + si->unknown_0 = _ES32(si->unknown_0); + si->unknown_1 = _ES32(si->unknown_1); + si->encrypted = _ES32(si->encrypted); +} + +static inline void _copy_es_section_info(section_info_t *dst, section_info_t *src) +{ + memcpy(dst, src, sizeof(section_info_t)); + _es_section_info(dst); +} + +static inline void _es_ci_data_digest_40(ci_data_digest_40_t *dig) +{ + dig->fw_version = _ES64(dig->fw_version); +} + +static inline void _copy_es_ci_data_digest_40(ci_data_digest_40_t *dst, ci_data_digest_40_t *src) +{ + memcpy(dst, src, sizeof(ci_data_digest_40_t)); + _es_ci_data_digest_40(dst); +} + +static inline void _es_oh_data_cap_flags(oh_data_cap_flags_t *cf) +{ + cf->unk3 = _ES64(cf->unk3); + cf->unk4 = _ES64(cf->unk4); + cf->flags = _ES64(cf->flags); + cf->unk6 = _ES32(cf->unk6); + cf->unk7 = _ES32(cf->unk7); +} + +static inline void _copy_es_cap_flags(oh_data_cap_flags_t *dst, oh_data_cap_flags_t *src) +{ + memcpy(dst, src, sizeof(oh_data_cap_flags_t)); + _es_oh_data_cap_flags(dst); +} + +#endif diff --git a/self.cpp b/src/self.cpp similarity index 78% rename from self.cpp rename to src/self.cpp index 8caea0b..3f12a37 100644 --- a/self.cpp +++ b/src/self.cpp @@ -47,16 +47,16 @@ static void _get_phdr_flags(s8 *str, u64 flags) void _print_self_header(FILE *fp, self_header_t *h) { fprintf(fp, "[*] SELF Header:\n"); - fprintf(fp, " Header Type 0x%016llX\n", h->header_type); - fprintf(fp, " App Info Offset 0x%016llX\n", h->app_info_offset); - fprintf(fp, " ELF Offset 0x%016llX\n", h->elf_offset); - fprintf(fp, " PH Offset 0x%016llX\n", h->phdr_offset); - fprintf(fp, " SH Offset 0x%016llX\n", h->shdr_offset); - fprintf(fp, " Section Info Offset 0x%016llX\n", h->section_info_offset); - fprintf(fp, " SCE Version Offset 0x%016llX\n", h->sce_version_offset); - fprintf(fp, " Control Info Offset 0x%016llX\n", h->control_info_offset); - fprintf(fp, " Control Info Size 0x%016llX\n", h->control_info_size); - //fprintf(fp, " padding 0x%016llX\n", h->padding); + fprintf(fp, " Header Type 0x%016llX\n", _ES64(h->header_type)); + fprintf(fp, " App Info Offset 0x%016llX\n", _ES64(h->app_info_offset)); + fprintf(fp, " ELF Offset 0x%016llX\n", _ES64(h->elf_offset)); + fprintf(fp, " PH Offset 0x%016llX\n", _ES64(h->phdr_offset)); + fprintf(fp, " SH Offset 0x%016llX\n", _ES64(h->shdr_offset)); + fprintf(fp, " Section Info Offset 0x%016llX\n", _ES64(h->section_info_offset)); + fprintf(fp, " SCE Version Offset 0x%016llX\n", _ES64(h->sce_version_offset)); + fprintf(fp, " Control Info Offset 0x%016llX\n", _ES64(h->control_info_offset)); + fprintf(fp, " Control Info Size 0x%016llX\n", _ES64(h->control_info_size)); + //fprintf(fp, " padding 0x%016llX\n", _ES64(h->padding)); } void _print_app_info(FILE *fp, app_info_t *ai) @@ -65,34 +65,34 @@ void _print_app_info(FILE *fp, app_info_t *ai) fprintf(fp, "[*] Application Info:\n"); - name = _get_name(_auth_ids, ai->auth_id); + name = _get_name(_auth_ids, _ES64(ai->auth_id)); if(name != NULL) { fprintf(fp, " Auth-ID "); - _PRINT_RAW(fp, "0x%016llX ", ai->auth_id); + _PRINT_RAW(fp, "0x%016llX ", _ES64(ai->auth_id)); fprintf(fp, "[%s]\n", name); } else - fprintf(fp, " Auth-ID 0x%016llX\n", ai->auth_id); + fprintf(fp, " Auth-ID 0x%016llX\n", _ES64(ai->auth_id)); - name = _get_name(_vendor_ids, ai->vendor_id); + name = _get_name(_vendor_ids, _ES32(ai->vendor_id)); if(name != NULL) { fprintf(fp, " Vendor-ID "); - _PRINT_RAW(fp, "0x%08X ", ai->vendor_id); + _PRINT_RAW(fp, "0x%08X ", _ES32(ai->vendor_id)); fprintf(fp, "[%s]\n", name); } else - fprintf(fp, " Vendor-ID 0x%08X\n", ai->vendor_id); + fprintf(fp, " Vendor-ID 0x%08X\n", _ES32(ai->vendor_id)); - name = _get_name(_self_types, ai->self_type); + name = _get_name(_self_types, _ES32(ai->self_type)); if(name != NULL) fprintf(fp, " SELF-Type [%s]\n", name); else - fprintf(fp, " SELF-Type 0x%08X\n", ai->self_type); + fprintf(fp, " SELF-Type 0x%08X\n", _ES32(ai->self_type)); - fprintf(fp, " Version %s\n", sce_version_to_str(ai->version)); - //fprintf(fp, " padding 0x%016llX\n", ai->padding); + fprintf(fp, " Version %s\n", sce_version_to_str(_ES64(ai->version))); + //fprintf(fp, " padding 0x%016llX\n", _ES64(ai->padding)); } void _print_section_info_header(FILE *fp) @@ -111,10 +111,10 @@ void _print_section_info(FILE *fp, section_info_t *si, u32 idx) void _print_sce_version(FILE *fp, sce_version_t *sv) { fprintf(fp, "[*] SCE Version:\n"); - fprintf(fp, " Header Type 0x%08X\n", sv->header_type); - fprintf(fp, " Present [%s]\n", sv->present == SCE_VERSION_PRESENT ? "TRUE" : "FALSE"); - fprintf(fp, " Size 0x%08X\n", sv->size); - fprintf(fp, " unknown_3 0x%08X\n", sv->unknown_3); + fprintf(fp, " Header Type 0x%08X\n", _ES32(sv->header_type)); + fprintf(fp, " Present [%s]\n", _ES32(sv->present) == SCE_VERSION_PRESENT ? "TRUE" : "FALSE"); + fprintf(fp, " Size 0x%08X\n", _ES32(sv->size)); + fprintf(fp, " unknown_3 0x%08X\n", _ES32(sv->unknown_3)); } void _print_control_info(FILE *fp, control_info_t *ci) @@ -123,27 +123,27 @@ void _print_control_info(FILE *fp, control_info_t *ci) fprintf(fp, "[*] Control Info\n"); - name = _get_name(_control_info_types, ci->type); + name = _get_name(_control_info_types, _ES32(ci->type)); if(name != NULL) fprintf(fp, " Type %s\n", name); else - fprintf(fp, " Type 0x%08X\n", ci->type); + fprintf(fp, " Type 0x%08X\n", _ES32(ci->type)); - fprintf(fp, " Size 0x%08X\n", ci->size); - fprintf(fp, " Next [%s]\n", ci->next == 1 ? "TRUE" : "FALSE"); + fprintf(fp, " Size 0x%08X\n", _ES32(ci->size)); + fprintf(fp, " Next [%s]\n", _ES64(ci->next) == 1 ? "TRUE" : "FALSE"); - switch(ci->type) + switch(_ES32(ci->type)) { case CONTROL_INFO_TYPE_FLAGS: - _hexdump(fp, " Flags", 0, (u8 *)ci + sizeof(control_info_t), ci->size - sizeof(control_info_t), FALSE); + _hexdump(fp, " Flags", 0, (u8 *)ci + sizeof(control_info_t), _ES32(ci->size) - sizeof(control_info_t), FALSE); break; case CONTROL_INFO_TYPE_DIGEST: - if(ci->size == 0x30) + if(_ES32(ci->size) == 0x30) { ci_data_digest_30_t *dig = (ci_data_digest_30_t *)((u8 *)ci + sizeof(control_info_t)); _hexdump(fp, " Digest", 0, dig->digest, 20, FALSE); } - else if(ci->size == 0x40) + else if(_ES32(ci->size) == 0x40) { ci_data_digest_40_t *dig = (ci_data_digest_40_t *)((u8 *)ci + sizeof(control_info_t)); _es_ci_data_digest_40(dig); @@ -158,16 +158,16 @@ void _print_control_info(FILE *fp, control_info_t *ci) ci_data_npdrm_t *np = (ci_data_npdrm_t *)((u8 *)ci + sizeof(control_info_t)); //Was already fixed in decrypt_header. //_es_ci_data_npdrm(np); - fprintf(fp, " Magic 0x%08X [%s]\n", np->magic, (np->magic == NP_CI_MAGIC ? "OK" : "ERROR")); - fprintf(fp, " unknown_0 0x%08X\n", np->unknown_0); - fprintf(fp, " Licence Type 0x%08X\n", np->license_type); - fprintf(fp, " App Type 0x%08X\n", np->app_type); + fprintf(fp, " Magic 0x%08X [%s]\n", _ES32(np->magic), (_ES32(np->magic) == NP_CI_MAGIC ? "OK" : "ERROR")); + fprintf(fp, " unknown_0 0x%08X\n", _ES32(np->unknown_0)); + fprintf(fp, " Licence Type 0x%08X\n", _ES32(np->license_type)); + fprintf(fp, " App Type 0x%08X\n", _ES32(np->app_type)); fprintf(fp, " ContentID %s\n", np->content_id); _hexdump(fp, " Random Pad ", 0, np->rndpad, 0x10, FALSE); _hexdump(fp, " CID_FN Hash ", 0, np->hash_cid_fname, 0x10, FALSE); _hexdump(fp, " CI Hash ", 0, np->hash_ci, 0x10, FALSE); - fprintf(fp, " unknown_1 0x%016llX\n", np->unknown_1); - fprintf(fp, " unknown_2 0x%016llX\n", np->unknown_2); + fprintf(fp, " unknown_1 0x%016llX\n", _ES64(np->unknown_1)); + fprintf(fp, " unknown_2 0x%016llX\n", _ES64(np->unknown_2)); } break; } @@ -197,16 +197,16 @@ void _print_opt_header(FILE *fp, opt_header_t *oh) fprintf(fp, "[*] Optional Header\n"); - name = _get_name(_optional_header_types, oh->type); + name = _get_name(_optional_header_types, _ES32(oh->type)); if(name != NULL) fprintf(fp, " Type %s\n", name); else - fprintf(fp, " Type 0x%08X\n", oh->type); + fprintf(fp, " Type 0x%08X\n", _ES32(oh->type)); - fprintf(fp, " Size 0x%08X\n", oh->size); - fprintf(fp, " Next [%s]\n", oh->next == 1 ? "TRUE" : "FALSE"); + fprintf(fp, " Size 0x%08X\n", _ES32(oh->size)); + fprintf(fp, " Next [%s]\n", _ES64(oh->next) == 1 ? "TRUE" : "FALSE"); - switch(oh->type) + switch(_ES32(oh->type)) { case OPT_HEADER_TYPE_CAP_FLAGS: { @@ -231,7 +231,7 @@ void _print_opt_header(FILE *fp, opt_header_t *oh) case OPT_HEADER_TYPE_INDIV_SEED: { u8 *is = (u8 *)oh + sizeof(opt_header_t); - _hexdump(fp, " Seed", 0, is, oh->size - sizeof(opt_header_t), TRUE); + _hexdump(fp, " Seed", 0, is, _ES32(oh->size) - sizeof(opt_header_t), TRUE); } break; #endif @@ -404,7 +404,7 @@ BOOL self_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt) const u8 *eident; //Check for SELF. - if(ctxt->sceh->header_type != SCE_HEADER_TYPE_SELF) + if(_ES16(ctxt->sceh->header_type) != SCE_HEADER_TYPE_SELF) return FALSE; //Print SELF infos. @@ -424,7 +424,7 @@ BOOL self_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt) LIST_FOREACH(iter, ctxt->self.ohs) { #ifndef CONFIG_DUMP_INDIV_SEED - if(((opt_header_t *)iter->value)->type != OPT_HEADER_TYPE_INDIV_SEED) + if(_ES32(((opt_header_t *)iter->value)->type) != OPT_HEADER_TYPE_INDIV_SEED) _print_opt_header(fp, (opt_header_t *)iter->value); #else _print_opt_header(fp, (opt_header_t *)iter->value); @@ -432,14 +432,14 @@ BOOL self_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt) } } - self_type = ctxt->self.ai->self_type; - eident = ctxt->scebuffer + ctxt->self.selfh->elf_offset; + self_type = _ES32(ctxt->self.ai->self_type); + eident = ctxt->scebuffer + _ES64(ctxt->self.selfh->elf_offset); //SPU is 32 bit. if(self_type == SELF_TYPE_LDR || self_type == SELF_TYPE_ISO || eident[EI_CLASS] == ELFCLASS32) { //32 bit ELF. - Elf32_Ehdr *eh = (Elf32_Ehdr *)(ctxt->scebuffer + ctxt->self.selfh->elf_offset); + Elf32_Ehdr *eh = (Elf32_Ehdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->elf_offset)); _es_elf32_ehdr(eh); //Print section infos. @@ -453,7 +453,7 @@ BOOL self_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt) //Print ELF header. _print_elf32_ehdr(fp, eh); - Elf32_Phdr *ph = (Elf32_Phdr *)(ctxt->scebuffer + ctxt->self.selfh->phdr_offset); + Elf32_Phdr *ph = (Elf32_Phdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->phdr_offset)); //Print program headers. _print_elf32_phdr_header(fp); @@ -465,7 +465,7 @@ BOOL self_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt) if(eh->e_shnum > 0) { - Elf32_Shdr *sh = (Elf32_Shdr *)(ctxt->scebuffer + ctxt->self.selfh->shdr_offset); + Elf32_Shdr *sh = (Elf32_Shdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->shdr_offset)); //Print section headers. _print_elf32_shdr_header(fp); @@ -479,7 +479,7 @@ BOOL self_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt) else { //64 bit ELF. - Elf64_Ehdr *eh = (Elf64_Ehdr *)(ctxt->scebuffer + ctxt->self.selfh->elf_offset); + Elf64_Ehdr *eh = (Elf64_Ehdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->elf_offset)); _es_elf64_ehdr(eh); //Print section infos. @@ -493,7 +493,7 @@ BOOL self_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt) //Print ELF header. _print_elf64_ehdr(stdout, eh); - Elf64_Phdr *ph = (Elf64_Phdr *)(ctxt->scebuffer + ctxt->self.selfh->phdr_offset); + Elf64_Phdr *ph = (Elf64_Phdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->phdr_offset)); //Print program headers. _print_elf64_phdr_header(fp); @@ -505,7 +505,7 @@ BOOL self_print_info(FILE *fp, sce_buffer_ctxt_t *ctxt) if(eh->e_shnum > 0) { - Elf64_Shdr *sh = (Elf64_Shdr *)(ctxt->scebuffer + ctxt->self.selfh->shdr_offset); + Elf64_Shdr *sh = (Elf64_Shdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->shdr_offset)); //Print section headers. _print_elf64_shdr_header(fp); @@ -529,14 +529,14 @@ BOOL self_write_to_elf(sce_buffer_ctxt_t *ctxt, const s8 *elf_out) const u8 *eident; //Check for SELF. - if(ctxt->sceh->header_type != SCE_HEADER_TYPE_SELF) + if(_ES16(ctxt->sceh->header_type) != SCE_HEADER_TYPE_SELF) return FALSE; if((fp = fopen(elf_out, "wb")) == NULL) return FALSE; - self_type = ctxt->self.ai->self_type; - eident = ctxt->scebuffer + ctxt->self.selfh->elf_offset; + self_type = _ES32(ctxt->self.ai->self_type); + eident = ctxt->scebuffer + _ES64(ctxt->self.selfh->elf_offset); //SPU is 32 bit. if(self_type == SELF_TYPE_LDR || self_type == SELF_TYPE_ISO || eident[EI_CLASS] == ELFCLASS32) @@ -557,32 +557,32 @@ BOOL self_write_to_elf(sce_buffer_ctxt_t *ctxt, const s8 *elf_out) #endif //32 bit ELF. - Elf32_Ehdr ceh, *eh = (Elf32_Ehdr *)(ctxt->scebuffer + ctxt->self.selfh->elf_offset); + Elf32_Ehdr ceh, *eh = (Elf32_Ehdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->elf_offset)); _copy_es_elf32_ehdr(&ceh, eh); //Write ELF header. fwrite(eh, sizeof(Elf32_Ehdr), 1, fp); //Write program headers. - Elf32_Phdr *ph = (Elf32_Phdr *)(ctxt->scebuffer + ctxt->self.selfh->phdr_offset); + Elf32_Phdr *ph = (Elf32_Phdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->phdr_offset)); fwrite(ph, sizeof(Elf32_Phdr), ceh.e_phnum, fp); //Write program data. metadata_section_header_t *msh = ctxt->metash; - for(i = 0; i < ctxt->metah->section_count; i++) + for(i = 0; i < _ES32(ctxt->metah->section_count); i++) { - if(msh[i].type == METADATA_SECTION_TYPE_PHDR) + if(_ES32(msh[i].type) == METADATA_SECTION_TYPE_PHDR) { - _es_elf32_phdr(&ph[msh[i].index]); - fseek(fp, ph[msh[i].index].p_offset, SEEK_SET); - fwrite(ctxt->scebuffer + msh[i].data_offset, sizeof(u8), msh[i].data_size, fp); + _es_elf32_phdr(&ph[_ES32(msh[i].index)]); + fseek(fp, ph[_ES32(msh[i].index)].p_offset, SEEK_SET); + fwrite(ctxt->scebuffer + _ES64(msh[i].data_offset), sizeof(u8), _ES64(msh[i].data_size), fp); } } //Write section headers. - if(ctxt->self.selfh->shdr_offset != 0) + if(_ES64(ctxt->self.selfh->shdr_offset) != 0) { - Elf32_Shdr *sh = (Elf32_Shdr *)(ctxt->scebuffer + ctxt->self.selfh->shdr_offset); + Elf32_Shdr *sh = (Elf32_Shdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->shdr_offset)); fseek(fp, ceh.e_shoff, SEEK_SET); fwrite(sh, sizeof(Elf32_Shdr), ceh.e_shnum, fp); } @@ -590,46 +590,46 @@ BOOL self_write_to_elf(sce_buffer_ctxt_t *ctxt, const s8 *elf_out) else { //64 bit ELF. - Elf64_Ehdr ceh, *eh = (Elf64_Ehdr *)(ctxt->scebuffer + ctxt->self.selfh->elf_offset); + Elf64_Ehdr ceh, *eh = (Elf64_Ehdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->elf_offset)); _copy_es_elf64_ehdr(&ceh, eh); //Write ELF header. fwrite(eh, sizeof(Elf64_Ehdr), 1, fp); //Write program headers. - Elf64_Phdr *ph = (Elf64_Phdr *)(ctxt->scebuffer + ctxt->self.selfh->phdr_offset); + Elf64_Phdr *ph = (Elf64_Phdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->phdr_offset)); fwrite(ph, sizeof(Elf64_Phdr), ceh.e_phnum, fp); //Write program data. metadata_section_header_t *msh = ctxt->metash; - for(i = 0; i < ctxt->metah->section_count; i++) + for(i = 0; i < _ES32(ctxt->metah->section_count); i++) { - if(msh[i].type == METADATA_SECTION_TYPE_PHDR) + if(_ES32(msh[i].type) == METADATA_SECTION_TYPE_PHDR) { - if(msh[i].compressed == METADATA_SECTION_COMPRESSED) + if(_ES32(msh[i].compressed) == METADATA_SECTION_COMPRESSED) { - _es_elf64_phdr(&ph[msh[i].index]); - u8 *data = (u8 *)malloc(ph[msh[i].index].p_filesz); + _es_elf64_phdr(&ph[_ES32(msh[i].index)]); + u8 *data = (u8 *)malloc(ph[_ES32(msh[i].index)].p_filesz); - _zlib_inflate(ctxt->scebuffer + msh[i].data_offset, msh[i].data_size, data, ph[msh[i].index].p_filesz); - fseek(fp, ph[msh[i].index].p_offset, SEEK_SET); - fwrite(data, sizeof(u8), ph[msh[i].index].p_filesz, fp); + _zlib_inflate(ctxt->scebuffer + _ES64(msh[i].data_offset), _ES64(msh[i].data_size), data, ph[_ES32(msh[i].index)].p_filesz); + fseek(fp, ph[_ES32(msh[i].index)].p_offset, SEEK_SET); + fwrite(data, sizeof(u8), ph[_ES32(msh[i].index)].p_filesz, fp); free(data); } else { - _es_elf64_phdr(&ph[msh[i].index]); - fseek(fp, ph[msh[i].index].p_offset, SEEK_SET); - fwrite(ctxt->scebuffer + msh[i].data_offset, sizeof(u8), msh[i].data_size, fp); + _es_elf64_phdr(&ph[_ES32(msh[i].index)]); + fseek(fp, ph[_ES32(msh[i].index)].p_offset, SEEK_SET); + fwrite(ctxt->scebuffer + _ES64(msh[i].data_offset), sizeof(u8), _ES64(msh[i].data_size), fp); } } } //Write section headers. - if(ctxt->self.selfh->shdr_offset != 0) + if(_ES64(ctxt->self.selfh->shdr_offset) != 0) { - Elf64_Shdr *sh = (Elf64_Shdr *)(ctxt->scebuffer + ctxt->self.selfh->shdr_offset); + Elf64_Shdr *sh = (Elf64_Shdr *)(ctxt->scebuffer + _ES64(ctxt->self.selfh->shdr_offset)); fseek(fp, ceh.e_shoff, SEEK_SET); fwrite(sh, sizeof(Elf64_Shdr), ceh.e_shnum, fp); } @@ -656,7 +656,7 @@ static u8 _static_control_digest[0x14] = static BOOL _create_control_infos(sce_buffer_ctxt_t *ctxt, self_config_t *sconf) { control_info_t *ci; - u32 self_type = ctxt->self.ai->self_type; + u32 self_type = _ES32(ctxt->self.ai->self_type); //Step 1. switch(self_type) @@ -671,9 +671,9 @@ static BOOL _create_control_infos(sce_buffer_ctxt_t *ctxt, self_config_t *sconf) { //Add control flags. ci = (control_info_t *)malloc(sizeof(control_info_t) + sizeof(ci_data_flags_t)); - ci->type = CONTROL_INFO_TYPE_FLAGS; - ci->size = sizeof(control_info_t) + sizeof(ci_data_flags_t); - ci->next = 1; + ci->type = _ES32(CONTROL_INFO_TYPE_FLAGS); + ci->size = _ES32(sizeof(control_info_t) + sizeof(ci_data_flags_t)); + ci->next = _ES64(1); ci_data_flags_t *cif = (ci_data_flags_t *)((u8 *)ci + sizeof(control_info_t)); @@ -701,12 +701,12 @@ static BOOL _create_control_infos(sce_buffer_ctxt_t *ctxt, self_config_t *sconf) { //Add digest 0x40. ci = (control_info_t *)malloc(sizeof(control_info_t) + sizeof(ci_data_digest_40_t)); - ci->type = CONTROL_INFO_TYPE_DIGEST; - ci->size = sizeof(control_info_t) + sizeof(ci_data_digest_40_t); + ci->type = _ES32(CONTROL_INFO_TYPE_DIGEST); + ci->size = _ES32(sizeof(control_info_t) + sizeof(ci_data_digest_40_t)); if(self_type == SELF_TYPE_NPDRM) - ci->next = 1; + ci->next = _ES64(1); else - ci->next = 0; + ci->next = _ES64(0); ci_data_digest_40_t *cid = (ci_data_digest_40_t *)((u8 *)ci + sizeof(control_info_t)); memcpy(cid->digest1, _static_control_digest, 0x14); @@ -737,9 +737,9 @@ static BOOL _create_control_infos(sce_buffer_ctxt_t *ctxt, self_config_t *sconf) return FALSE; ci = (control_info_t *)malloc(sizeof(control_info_t) + sizeof(ci_data_npdrm_t)); - ci->type = CONTROL_INFO_TYPE_NPDRM; - ci->size = sizeof(control_info_t) + sizeof(ci_data_npdrm_t); - ci->next = 0; + ci->type = _ES32(CONTROL_INFO_TYPE_NPDRM); + ci->size = _ES32(sizeof(control_info_t) + sizeof(ci_data_npdrm_t)); + ci->next = _ES64(0); ci_data_npdrm_t *cinp = (ci_data_npdrm_t *)((u8 *)ci + sizeof(control_info_t)); @@ -798,7 +798,7 @@ static void _set_cap_flags(u32 self_type, oh_data_cap_flags_t *capf) static BOOL _create_optional_headers(sce_buffer_ctxt_t *ctxt, self_config_t *sconf) { opt_header_t *oh; - u32 self_type = ctxt->self.ai->self_type; + u32 self_type = _ES32(ctxt->self.ai->self_type); //Step 1. switch(self_type) @@ -813,12 +813,12 @@ static BOOL _create_optional_headers(sce_buffer_ctxt_t *ctxt, self_config_t *sco { //Add capability flags. oh = (opt_header_t *)malloc(sizeof(opt_header_t) + sizeof(oh_data_cap_flags_t)); - oh->type = OPT_HEADER_TYPE_CAP_FLAGS; - oh->size = sizeof(opt_header_t) + sizeof(oh_data_cap_flags_t); + oh->type = _ES32(OPT_HEADER_TYPE_CAP_FLAGS); + oh->size = _ES32(sizeof(opt_header_t) + sizeof(oh_data_cap_flags_t)); if(self_type == SELF_TYPE_ISO) - oh->next = 1; + oh->next = _ES64(1); else - oh->next = 0; + oh->next = _ES64(0); oh_data_cap_flags_t *capf = (oh_data_cap_flags_t *)((u8 *)oh + sizeof(opt_header_t)); @@ -840,9 +840,9 @@ static BOOL _create_optional_headers(sce_buffer_ctxt_t *ctxt, self_config_t *sco { //Add individuals seed. oh = (opt_header_t *)malloc(sizeof(opt_header_t) + 0x100); - oh->type = OPT_HEADER_TYPE_INDIV_SEED; - oh->size = sizeof(opt_header_t) + 0x100; - oh->next = 0; + oh->type = _ES32(OPT_HEADER_TYPE_INDIV_SEED); + oh->size = _ES32(sizeof(opt_header_t) + 0x100); + oh->next = _ES64(0); u8 *is = (u8 *)oh + sizeof(opt_header_t); memset(is, 0, 0x100); @@ -861,10 +861,10 @@ static BOOL _create_optional_headers(sce_buffer_ctxt_t *ctxt, self_config_t *sco static void _fill_sce_version(sce_buffer_ctxt_t *ctxt) { - ctxt->self.sv->header_type = SUB_HEADER_TYPE_SCEVERSION; - ctxt->self.sv->present = SCE_VERSION_NOT_PRESENT; - ctxt->self.sv->size = sizeof(sce_version_t); - ctxt->self.sv->unknown_3 = 0x00000000; + ctxt->self.sv->header_type = _ES32(SUB_HEADER_TYPE_SCEVERSION); + ctxt->self.sv->present = _ES32(SCE_VERSION_NOT_PRESENT); + ctxt->self.sv->size = _ES32(sizeof(sce_version_t)); + ctxt->self.sv->unknown_3 = _ES32(0x00000000); } static void _add_phdr_section(sce_buffer_ctxt_t *ctxt, u32 p_type, u32 size, u32 idx) @@ -957,7 +957,7 @@ static BOOL _build_self_32(sce_buffer_ctxt_t *ctxt, self_config_t *sconf) i++; //Metadata. - ctxt->metah->section_count = i; + ctxt->metah->section_count = _ES32(i); return TRUE; } @@ -1036,7 +1036,7 @@ static BOOL _build_self_64(sce_buffer_ctxt_t *ctxt, self_config_t *sconf) //Metadata. i -= skip; - ctxt->metah->section_count = i; + ctxt->metah->section_count = _ES32(i); return TRUE; } @@ -1046,11 +1046,11 @@ BOOL self_build_self(sce_buffer_ctxt_t *ctxt, self_config_t *sconf) //const u8 *eident; //Fill config values. - ctxt->sceh->key_revision = sconf->key_revision; - ctxt->self.ai->auth_id = sconf->auth_id; - ctxt->self.ai->vendor_id = sconf->vendor_id; - ctxt->self.ai->self_type = sconf->self_type; - ctxt->self.ai->version = sconf->app_version; + ctxt->sceh->key_revision = _ES16(sconf->key_revision); + ctxt->self.ai->auth_id = _ES64(sconf->auth_id); + ctxt->self.ai->vendor_id = _ES32(sconf->vendor_id); + ctxt->self.ai->self_type = _ES32(sconf->self_type); + ctxt->self.ai->version = _ES64(sconf->app_version); //Create control infos. if(_create_control_infos(ctxt, sconf) == FALSE) diff --git a/self.h b/src/self.h similarity index 100% rename from self.h rename to src/self.h diff --git a/sha1.c b/src/sha1.cpp similarity index 100% rename from sha1.c rename to src/sha1.cpp diff --git a/sha1.h b/src/sha1.h similarity index 100% rename from sha1.h rename to src/sha1.h diff --git a/spp.cpp b/src/spp.cpp similarity index 92% rename from spp.cpp rename to src/spp.cpp index 9564f33..9255e26 100644 --- a/spp.cpp +++ b/src/spp.cpp @@ -38,11 +38,11 @@ void spp_print(FILE *fp, sce_buffer_ctxt_t *ctxt) u32 i; //First section contains the SPP header. - spp_header_t *header = (spp_header_t *)(ctxt->scebuffer + ctxt->metash[0].data_offset); + spp_header_t *header = (spp_header_t *)(ctxt->scebuffer + _ES64(ctxt->metash[0].data_offset)); _es_spp_header(header); //Second section contains the entries. - u8 *ent = ctxt->scebuffer + ctxt->metash[1].data_offset; + u8 *ent = ctxt->scebuffer + _ES64(ctxt->metash[1].data_offset); _print_spp_header(fp, header); diff --git a/spp.h b/src/spp.h similarity index 100% rename from spp.h rename to src/spp.h diff --git a/tables.cpp b/src/tables.cpp similarity index 100% rename from tables.cpp rename to src/tables.cpp diff --git a/tables.h b/src/tables.h similarity index 100% rename from tables.h rename to src/tables.h diff --git a/types.h b/src/types.h similarity index 100% rename from types.h rename to src/types.h diff --git a/util.cpp b/src/util.cpp similarity index 100% rename from util.cpp rename to src/util.cpp diff --git a/util.h b/src/util.h similarity index 100% rename from util.h rename to src/util.h diff --git a/zconf.h b/src/zconf.h similarity index 72% rename from zconf.h rename to src/zconf.h index 02ce56c..9987a77 100644 --- a/zconf.h +++ b/src/zconf.h @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2010 Jean-loup Gailly. + * Copyright (C) 1995-2013 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -15,11 +15,13 @@ * this permanently in zconf.h using "./configure --zprefix". */ #ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET /* all linked symbols */ # define _dist_code z__dist_code # define _length_code z__length_code # define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits # define _tr_flush_block z__tr_flush_block # define _tr_init z__tr_init # define _tr_stored_block z__tr_stored_block @@ -27,9 +29,11 @@ # define adler32 z_adler32 # define adler32_combine z_adler32_combine # define adler32_combine64 z_adler32_combine64 -# define compress z_compress -# define compress2 z_compress2 -# define compressBound z_compressBound +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif # define crc32 z_crc32 # define crc32_combine z_crc32_combine # define crc32_combine64 z_crc32_combine64 @@ -40,44 +44,53 @@ # define deflateInit2_ z_deflateInit2_ # define deflateInit_ z_deflateInit_ # define deflateParams z_deflateParams +# define deflatePending z_deflatePending # define deflatePrime z_deflatePrime # define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep # define deflateSetDictionary z_deflateSetDictionary # define deflateSetHeader z_deflateSetHeader # define deflateTune z_deflateTune # define deflate_copyright z_deflate_copyright # define get_crc_table z_get_crc_table -# define gz_error z_gz_error -# define gz_intmax z_gz_intmax -# define gz_strwinerror z_gz_strwinerror -# define gzbuffer z_gzbuffer -# define gzclearerr z_gzclearerr -# define gzclose z_gzclose -# define gzclose_r z_gzclose_r -# define gzclose_w z_gzclose_w -# define gzdirect z_gzdirect -# define gzdopen z_gzdopen -# define gzeof z_gzeof -# define gzerror z_gzerror -# define gzflush z_gzflush -# define gzgetc z_gzgetc -# define gzgets z_gzgets -# define gzoffset z_gzoffset -# define gzoffset64 z_gzoffset64 -# define gzopen z_gzopen -# define gzopen64 z_gzopen64 -# define gzprintf z_gzprintf -# define gzputc z_gzputc -# define gzputs z_gzputs -# define gzread z_gzread -# define gzrewind z_gzrewind -# define gzseek z_gzseek -# define gzseek64 z_gzseek64 -# define gzsetparams z_gzsetparams -# define gztell z_gztell -# define gztell64 z_gztell64 -# define gzungetc z_gzungetc -# define gzwrite z_gzwrite +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzvprintf z_gzvprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzwrite z_gzwrite +# endif # define inflate z_inflate # define inflateBack z_inflateBack # define inflateBackEnd z_inflateBackEnd @@ -92,16 +105,22 @@ # define inflateReset z_inflateReset # define inflateReset2 z_inflateReset2 # define inflateSetDictionary z_inflateSetDictionary +# define inflateGetDictionary z_inflateGetDictionary # define inflateSync z_inflateSync # define inflateSyncPoint z_inflateSyncPoint # define inflateUndermine z_inflateUndermine +# define inflateResetKeep z_inflateResetKeep # define inflate_copyright z_inflate_copyright # define inflate_fast z_inflate_fast # define inflate_table z_inflate_table -# define uncompress z_uncompress +# ifndef Z_SOLO +# define uncompress z_uncompress +# endif # define zError z_zError -# define zcalloc z_zcalloc -# define zcfree z_zcfree +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif # define zlibCompileFlags z_zlibCompileFlags # define zlibVersion z_zlibVersion @@ -111,7 +130,9 @@ # define alloc_func z_alloc_func # define charf z_charf # define free_func z_free_func -# define gzFile z_gzFile +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif # define gz_header z_gz_header # define gz_headerp z_gz_headerp # define in_func z_in_func @@ -197,6 +218,12 @@ # endif #endif +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + /* Some Mac compilers merge all .h files incorrectly: */ #if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) # define NO_DUMMY_DECL @@ -243,6 +270,14 @@ # endif #endif +#ifndef Z_ARG /* function prototypes for stdarg */ +# if defined(STDC) || defined(Z_HAVE_STDARG_H) +# define Z_ARG(args) args +# else +# define Z_ARG(args) () +# endif +#endif + /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have @@ -356,12 +391,47 @@ typedef uLong FAR uLongf; typedef Byte *voidp; #endif +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + #ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ # define Z_HAVE_UNISTD_H #endif +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + #ifdef STDC -# include /* for off_t */ +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif #endif /* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and @@ -370,21 +440,38 @@ typedef uLong FAR uLongf; * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as * equivalently requesting no 64-bit operations */ -#if -_LARGEFILE64_SOURCE - -1 == 1 +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 # undef _LARGEFILE64_SOURCE #endif -#if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) -# include /* for SEEK_* and off_t */ -# ifdef VMS -# include /* for off_t */ -# endif -# ifndef z_off_t -# define z_off_t off_t +#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) +# define Z_HAVE_UNISTD_H +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif # endif #endif -#ifndef SEEK_SET +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ @@ -394,18 +481,14 @@ typedef uLong FAR uLongf; # define z_off_t long #endif -#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +#if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t #else -# define z_off64_t z_off_t -#endif - -#if defined(__OS400__) -# define NO_vsnprintf -#endif - -#if defined(__MVS__) -# define NO_vsnprintf +# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif #endif /* MVS linker does not support external names larger than 8 bytes */ diff --git a/zlib.h b/src/zlib.h similarity index 84% rename from zlib.h rename to src/zlib.h index bfbba83..3e0c767 100644 --- a/zlib.h +++ b/src/zlib.h @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.5, April 19th, 2010 + version 1.2.8, April 28th, 2013 - Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,8 +24,8 @@ The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt - (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). + Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 + (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). */ #ifndef ZLIB_H @@ -37,11 +37,11 @@ extern "C" { #endif -#define ZLIB_VERSION "1.2.5" -#define ZLIB_VERNUM 0x1250 +#define ZLIB_VERSION "1.2.8" +#define ZLIB_VERNUM 0x1280 #define ZLIB_VER_MAJOR 1 #define ZLIB_VER_MINOR 2 -#define ZLIB_VER_REVISION 5 +#define ZLIB_VER_REVISION 8 #define ZLIB_VER_SUBREVISION 0 /* @@ -83,15 +83,15 @@ typedef void (*free_func) OF((voidpf opaque, voidpf address)); struct internal_state; typedef struct z_stream_s { - Bytef *next_in; /* next input byte */ + z_const Bytef *next_in; /* next input byte */ uInt avail_in; /* number of bytes available at next_in */ - uLong total_in; /* total nb of input bytes read so far */ + uLong total_in; /* total number of input bytes read so far */ Bytef *next_out; /* next output byte should be put there */ uInt avail_out; /* remaining free space at next_out */ - uLong total_out; /* total nb of bytes output so far */ + uLong total_out; /* total number of bytes output so far */ - char *msg; /* last error message, NULL if no error */ + z_const char *msg; /* last error message, NULL if no error */ struct internal_state FAR *state; /* not visible by applications */ alloc_func zalloc; /* used to allocate the internal state */ @@ -327,8 +327,9 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); Z_FINISH can be used immediately after deflateInit if all the compression is to be done in a single step. In this case, avail_out must be at least the - value returned by deflateBound (see below). If deflate does not return - Z_STREAM_END, then it must be called again as described above. + value returned by deflateBound (see below). Then deflate is guaranteed to + return Z_STREAM_END. If not enough output space is provided, deflate will + not return Z_STREAM_END, and it must be called again as described above. deflate() sets strm->adler to the adler32 checksum of all input read so far (that is, total_in bytes). @@ -451,23 +452,29 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); error. However if all decompression is to be performed in a single step (a single call of inflate), the parameter flush should be set to Z_FINISH. In this case all pending input is processed and all pending output is flushed; - avail_out must be large enough to hold all the uncompressed data. (The size - of the uncompressed data may have been saved by the compressor for this - purpose.) The next operation on this stream must be inflateEnd to deallocate - the decompression state. The use of Z_FINISH is never required, but can be - used to inform inflate that a faster approach may be used for the single - inflate() call. + avail_out must be large enough to hold all of the uncompressed data for the + operation to complete. (The size of the uncompressed data may have been + saved by the compressor for this purpose.) The use of Z_FINISH is not + required to perform an inflation in one step. However it may be used to + inform inflate that a faster approach can be used for the single inflate() + call. Z_FINISH also informs inflate to not maintain a sliding window if the + stream completes, which reduces inflate's memory footprint. If the stream + does not complete, either because not all of the stream is provided or not + enough output space is provided, then a sliding window will be allocated and + inflate() can be called again to continue the operation as if Z_NO_FLUSH had + been used. In this implementation, inflate() always flushes as much output as possible to the output buffer, and always uses the faster approach on the - first call. So the only effect of the flush parameter in this implementation - is on the return value of inflate(), as noted below, or when it returns early - because Z_BLOCK or Z_TREES is used. + first call. So the effects of the flush parameter in this implementation are + on the return value of inflate() as noted below, when inflate() returns early + when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of + memory for a sliding window when Z_FINISH is used. If a preset dictionary is needed after this call (see inflateSetDictionary - below), inflate sets strm->adler to the adler32 checksum of the dictionary + below), inflate sets strm->adler to the Adler-32 checksum of the dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise it sets - strm->adler to the adler32 checksum of all output produced so far (that is, + strm->adler to the Adler-32 checksum of all output produced so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described below. At the end of the stream, inflate() checks that its computed adler32 checksum is equal to that saved by the compressor and returns Z_STREAM_END @@ -478,7 +485,9 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); initializing with inflateInit2(). Any information contained in the gzip header is not retained, so applications that need that information should instead use raw inflate, see inflateInit2() below, or inflateBack() and - perform their own processing of the gzip header and trailer. + perform their own processing of the gzip header and trailer. When processing + gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output + producted so far. The CRC-32 is checked against the gzip trailer. inflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if the end of the compressed data has @@ -580,10 +589,15 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, uInt dictLength)); /* Initializes the compression dictionary from the given byte sequence - without producing any compressed output. This function must be called - immediately after deflateInit, deflateInit2 or deflateReset, before any call - of deflate. The compressor and decompressor must use exactly the same - dictionary (see inflateSetDictionary). + without producing any compressed output. When using the zlib format, this + function must be called immediately after deflateInit, deflateInit2 or + deflateReset, and before any call of deflate. When doing raw deflate, this + function must be called either before any call of deflate, or immediately + after the completion of a deflate block, i.e. after all input has been + consumed and all output has been delivered when using any of the flush + options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The + compressor and decompressor must use exactly the same dictionary (see + inflateSetDictionary). The dictionary should consist of strings (byte sequences) that are likely to be encountered later in the data to be compressed, with the most commonly @@ -610,8 +624,8 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is inconsistent (for example if deflate has already been called for this stream - or if the compression method is bsort). deflateSetDictionary does not - perform any compression: this will be done by deflate(). + or if not at a block boundary for raw deflate). deflateSetDictionary does + not perform any compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, @@ -688,9 +702,29 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, deflation of sourceLen bytes. It must be called after deflateInit() or deflateInit2(), and after deflateSetHeader(), if used. This would be used to allocate an output buffer for deflation in a single pass, and so would be - called before deflate(). + called before deflate(). If that first deflate() call is provided the + sourceLen input bytes, an output buffer allocated to the size returned by + deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed + to return Z_STREAM_END. Note that it is possible for the compressed size to + be larger than the value returned by deflateBound() if flush options other + than Z_FINISH or Z_NO_FLUSH are used. */ +ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, + unsigned *pending, + int *bits)); +/* + deflatePending() returns the number of bytes and bits of output that have + been generated, but not yet provided in the available output. The bytes not + provided would be due to the available output space having being consumed. + The number of bits of output not provided are between 0 and 7, where they + await more bits to join them in order to fill out a full byte. If pending + or bits are Z_NULL, then those values are not set. + + deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. + */ + ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, int bits, int value)); @@ -703,8 +737,9 @@ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, than or equal to 16, and that many of the least significant bits of value will be inserted in the output. - deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. + deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough + room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the + source stream state was inconsistent. */ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, @@ -790,10 +825,11 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, if that call returned Z_NEED_DICT. The dictionary chosen by the compressor can be determined from the adler32 value returned by that call of inflate. The compressor and decompressor must use exactly the same dictionary (see - deflateSetDictionary). For raw inflate, this function can be called - immediately after inflateInit2() or inflateReset() and before any call of - inflate() to set the dictionary. The application must insure that the - dictionary that was used for compression is provided. + deflateSetDictionary). For raw inflate, this function can be called at any + time to set the dictionary. If the provided dictionary is smaller than the + window and there is already data in the window, then the provided dictionary + will amend what's there. The application must insure that the dictionary + that was used for compression is provided. inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is @@ -803,19 +839,38 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, inflate(). */ +ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, + Bytef *dictionary, + uInt *dictLength)); +/* + Returns the sliding dictionary being maintained by inflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If inflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similary, if dictLength is Z_NULL, then it is not set. + + inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); /* - Skips invalid compressed data until a full flush point (see above the - description of deflate with Z_FULL_FLUSH) can be found, or until all + Skips invalid compressed data until a possible full flush point (see above + for the description of deflate with Z_FULL_FLUSH) can be found, or until all available input is skipped. No output is provided. - inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no flush point has been - found, or Z_STREAM_ERROR if the stream structure was inconsistent. In the - success case, the application may save the current current value of total_in - which indicates where valid compressed data was found. In the error case, - the application may repeatedly call inflateSync, providing more input each - time, until success or end of the input data. + inflateSync searches for a 00 00 FF FF pattern in the compressed data. + All full flush points have this pattern, but not all occurrences of this + pattern are full flush points. + + inflateSync returns Z_OK if a possible full flush point has been found, + Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point + has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. + In the success case, the application may save the current current value of + total_in which indicates where valid compressed data was found. In the + error case, the application may repeatedly call inflateSync, providing more + input each time, until success or end of the input data. */ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, @@ -962,12 +1017,13 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, See inflateBack() for the usage of these routines. inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of - the paramaters are invalid, Z_MEM_ERROR if the internal state could not be + the parameters are invalid, Z_MEM_ERROR if the internal state could not be allocated, or Z_VERSION_ERROR if the version of the library does not match the version of the header file. */ -typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); +typedef unsigned (*in_func) OF((void FAR *, + z_const unsigned char FAR * FAR *)); typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, @@ -975,11 +1031,12 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, out_func out, void FAR *out_desc)); /* inflateBack() does a raw inflate with a single call using a call-back - interface for input and output. This is more efficient than inflate() for - file i/o applications in that it avoids copying between the output and the - sliding window by simply making the window itself the output buffer. This - function trusts the application to not change the output buffer passed by - the output function, at least until inflateBack() returns. + interface for input and output. This is potentially more efficient than + inflate() for file i/o applications, in that it avoids copying between the + output and the sliding window by simply making the window itself the output + buffer. inflate() can be faster on modern CPUs when used with large + buffers. inflateBack() trusts the application to not change the output + buffer passed by the output function, at least until inflateBack() returns. inflateBackInit() must be called first to allocate the internal state and to initialize the state with the user-provided window buffer. @@ -1088,6 +1145,7 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); 27-31: 0 (reserved) */ +#ifndef Z_SOLO /* utility functions */ @@ -1149,10 +1207,11 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In + the case where there is not enough room, uncompress() will fill the output + buffer with the uncompressed data up to that point. */ - /* gzip file access functions */ /* @@ -1162,7 +1221,7 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, wrapper, documented in RFC 1952, wrapped around a deflate stream. */ -typedef voidp gzFile; /* opaque gzip file descriptor */ +typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ /* ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); @@ -1172,13 +1231,28 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression as in "wb9F". (See the description of - deflateInit2 for more information about the strategy parameter.) Also "a" - can be used instead of "w" to request that the gzip stream that will be - written be appended to the file. "+" will result in an error, since reading - and writing to the same gzip file is not supported. + deflateInit2 for more information about the strategy parameter.) 'T' will + request transparent writing or appending with no compression and not using + the gzip format. + + "a" can be used instead of "w" to request that the gzip stream that will + be written be appended to the file. "+" will result in an error, since + reading and writing to the same gzip file is not supported. The addition of + "x" when writing will create the file exclusively, which fails if the file + already exists. On systems that support it, the addition of "e" when + reading or writing will set the flag to close the file on an execve() call. + + These functions, as well as gzip, will read and decode a sequence of gzip + streams in a file. The append function of gzopen() can be used to create + such a file. (Also see gzflush() for another way to do this.) When + appending, gzopen does not test whether the file begins with a gzip stream, + nor does it look for the end of the gzip streams to begin appending. gzopen + will simply append a gzip stream to the existing file. gzopen can be used to read a file which is not in gzip format; in this - case gzread will directly read from the file without decompression. + case gzread will directly read from the file without decompression. When + reading, this will be detected automatically by looking for the magic two- + byte gzip header. gzopen returns NULL if the file could not be opened, if there was insufficient memory to allocate the gzFile state, or if an invalid mode was @@ -1197,7 +1271,11 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, mode);. The duplicated descriptor should be saved to avoid a leak, since - gzdopen does not close fd if it fails. + gzdopen does not close fd if it fails. If you are using fileno() to get the + file descriptor from a FILE *, then you will have to use dup() to avoid + double-close()ing the file descriptor. Both gzclose() and fclose() will + close the associated file descriptor, so they need to have different file + descriptors. gzdopen returns NULL if there was insufficient memory to allocate the gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not @@ -1235,14 +1313,26 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); /* Reads the given number of uncompressed bytes from the compressed file. If - the input file was not in gzip format, gzread copies the given number of - bytes into the buffer. + the input file is not in gzip format, gzread copies the given number of + bytes into the buffer directly from the file. After reaching the end of a gzip stream in the input, gzread will continue - to read, looking for another gzip stream, or failing that, reading the rest - of the input file directly without decompression. The entire input file - will be read if gzread is called until it returns less than the requested - len. + to read, looking for another gzip stream. Any number of gzip streams may be + concatenated in the input file, and will all be decompressed by gzread(). + If something other than a gzip stream is encountered after a gzip stream, + that remaining trailing garbage is ignored (and no error is returned). + + gzread can be used to read a gzip file that is being concurrently written. + Upon reaching the end of the input, gzread will return with the available + data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then + gzclearerr can be used to clear the end of file indicator in order to permit + gzread to be tried again. Z_OK indicates that a gzip stream was completed + on the last gzread. Z_BUF_ERROR indicates that the input file ended in the + middle of a gzip stream. Note that gzread does not return -1 in the event + of an incomplete gzip stream. This error is deferred until gzclose(), which + will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip + stream. Alternatively, gzerror can be used before gzclose to detect this + case. gzread returns the number of uncompressed bytes actually read, less than len for end of file, or -1 for error. @@ -1256,7 +1346,7 @@ ZEXTERN int ZEXPORT gzwrite OF((gzFile file, error. */ -ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); +ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); /* Converts, formats, and writes the arguments to the compressed file under control of the format string, as in fprintf. gzprintf returns the number of @@ -1301,7 +1391,10 @@ ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); /* Reads one byte from the compressed file. gzgetc returns this byte or -1 - in case of end of file or error. + in case of end of file or error. This is implemented as a macro for speed. + As such, it does not do all of the checking the other functions do. I.e. + it does not check to see if file is NULL, nor whether the structure file + points to has been clobbered or not. */ ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); @@ -1397,9 +1490,7 @@ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); /* Returns true (1) if file is being copied directly while reading, or false - (0) if file is a gzip stream being decompressed. This state can change from - false to true while reading the input file if the end of a gzip stream is - reached, but is followed by data that is not another gzip stream. + (0) if file is a gzip stream being decompressed. If the input file is empty, gzdirect() will return true, since the input does not contain a gzip stream. @@ -1408,6 +1499,13 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); cause buffers to be allocated to allow reading the file to determine if it is a gzip file. Therefore if gzbuffer() is used, it should be called before gzdirect(). + + When writing, gzdirect() returns true (1) if transparent writing was + requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: + gzdirect() is not needed when writing. Transparent writing must be + explicitly requested, so the application already knows the answer. When + linking statically, using gzdirect() will include all of the zlib code for + gzip file reading and decompression, which may not be desired.) */ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); @@ -1419,7 +1517,8 @@ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); must not be called more than once on the same allocation. gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a - file operation error, or Z_OK on success. + file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the + last read ended in the middle of a gzip stream, or Z_OK on success. */ ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); @@ -1457,6 +1556,7 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); file that is being written concurrently. */ +#endif /* !Z_SOLO */ /* checksum functions */ @@ -1492,16 +1592,17 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of - seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note + that the z_off_t type (like off_t) is a signed integer. If len2 is + negative, the result has no meaning or utility. */ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); /* Update a running CRC-32 with the bytes buf[0..len-1] and return the updated CRC-32. If buf is Z_NULL, this function returns the required - initial value for the for the crc. Pre- and post-conditioning (one's - complement) is performed within this function so it shouldn't be done by the - application. + initial value for the crc. Pre- and post-conditioning (one's complement) is + performed within this function so it shouldn't be done by the application. Usage example: @@ -1544,17 +1645,42 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, const char *version, int stream_size)); #define deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) #define inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) #define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, sizeof(z_stream)) + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) #define inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) #define inflateBackInit(strm, windowBits, window) \ inflateBackInit_((strm), (windowBits), (window), \ - ZLIB_VERSION, sizeof(z_stream)) + ZLIB_VERSION, (int)sizeof(z_stream)) + +#ifndef Z_SOLO + +/* gzgetc() macro and its supporting function and exposed data structure. Note + * that the real internal state is much larger than the exposed structure. + * This abbreviated structure exposes just enough for the gzgetc() macro. The + * user should not mess with these exposed elements, since their names or + * behavior could change in the future, perhaps even capriciously. They can + * only be used by the gzgetc() macro. You have been warned. + */ +struct gzFile_s { + unsigned have; + unsigned char *next; + z_off64_t pos; +}; +ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ +#ifdef Z_PREFIX_SET +# undef z_gzgetc +# define z_gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g)) +#else +# define gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g)) +#endif /* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if @@ -1562,7 +1688,7 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, * functions are changed to 64 bits) -- in case these are set on systems * without large file support, _LFS64_LARGEFILE must also be true */ -#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +#ifdef Z_LARGE64 ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); @@ -1571,14 +1697,23 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); #endif -#if !defined(ZLIB_INTERNAL) && _FILE_OFFSET_BITS-0 == 64 && _LFS64_LARGEFILE-0 -# define gzopen gzopen64 -# define gzseek gzseek64 -# define gztell gztell64 -# define gzoffset gzoffset64 -# define adler32_combine adler32_combine64 -# define crc32_combine crc32_combine64 -# ifdef _LARGEFILE64_SOURCE +#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) +# ifdef Z_PREFIX_SET +# define z_gzopen z_gzopen64 +# define z_gzseek z_gzseek64 +# define z_gztell z_gztell64 +# define z_gzoffset z_gzoffset64 +# define z_adler32_combine z_adler32_combine64 +# define z_crc32_combine z_crc32_combine64 +# else +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# endif +# ifndef Z_LARGE64 ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); @@ -1595,6 +1730,13 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); #endif +#else /* Z_SOLO */ + + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); + +#endif /* !Z_SOLO */ + /* hack for buggy compilers */ #if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) struct internal_state {int dummy;}; @@ -1603,8 +1745,21 @@ ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, /* undocumented functions */ ZEXTERN const char * ZEXPORT zError OF((int)); ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); -ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); +ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); +ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); +#if defined(_WIN32) && !defined(Z_SOLO) +ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, + const char *mode)); +#endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, + const char *format, + va_list va)); +# endif +#endif #ifdef __cplusplus } diff --git a/zlib/Readme b/zlib/Readme new file mode 100644 index 0000000..e8ba480 --- /dev/null +++ b/zlib/Readme @@ -0,0 +1,2 @@ +Take both .lib files and put it to Visual_Studio installation folder\VC\lib\ +or compile it yourself from the official source code (http://zlib.net/zlib-1.2.8.tar.gz) \ No newline at end of file diff --git a/zlib/zlib.lib b/zlib/zlib.lib new file mode 100644 index 0000000000000000000000000000000000000000..edaf56ff3b720b5d410a71f719d777e98e4d5184 GIT binary patch literal 237420 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⋙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%0AZVaI4Py9JzRZZ;p%0 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 literal 0 HcmV?d00001 diff --git a/zlib/zlibd.lib b/zlib/zlibd.lib new file mode 100644 index 0000000000000000000000000000000000000000..bf30b8b9605881874be60d762b3642ea46291587 GIT binary patch literal 241622 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
tBe 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 literal 0 HcmV?d00001