From e74f214a3b92a6133a55040b664fbc6a4b158117 Mon Sep 17 00:00:00 2001 From: jakcron Date: Sat, 5 Aug 2017 21:09:50 +0800 Subject: [PATCH] change directory structure, and add support for VS compile, and fix aes-xts bug. --- .gitignore | 4 + NXTools.sln | 8 +- lib/crypto/crypto.vcxproj.filters | 48 ------ .../es.vcxproj => libcrypto/crypto.vcxproj} | 75 +++++---- lib/libcrypto/crypto.vcxproj.filters | 99 ++++++++++++ .../include/crypto/AesCtrStream.h} | 2 +- lib/{ => libcrypto/include}/crypto/aes.h | 0 lib/{ => libcrypto/include}/crypto/rsa.h | 0 lib/{ => libcrypto/include}/crypto/sha.h | 0 lib/libcrypto/makefile | 37 +++++ .../source/AesCtrStream.cpp} | 2 +- lib/{crypto => libcrypto/source}/aes.cpp | 6 +- .../libpolarssl/include}/polarssl/aes.h | 1 + .../libpolarssl/include}/polarssl/base64.h | 0 .../libpolarssl/include}/polarssl/bignum.h | 0 .../libpolarssl/include}/polarssl/bn_mul.h | 0 .../libpolarssl/include}/polarssl/config.h | 0 .../libpolarssl/include}/polarssl/rsa.h | 0 .../libpolarssl/include}/polarssl/sha1.h | 0 .../libpolarssl/include}/polarssl/sha2.h | 0 .../source/libpolarssl}/makefile | 12 +- .../source/libpolarssl/source/polar_aes.c} | 6 +- .../source/libpolarssl/source/polar_base64.c} | 4 +- .../source/libpolarssl/source/polar_bignum.c} | 6 +- .../source/libpolarssl/source/polar_rsa.c} | 6 +- .../source/libpolarssl/source/polar_sha1.c} | 4 +- .../source/libpolarssl/source/polar_sha2.c} | 4 +- lib/{crypto => libcrypto/source}/rsa.cpp | 4 +- lib/{crypto => libcrypto/source}/sha.cpp | 6 +- .../crypto.vcxproj => libes/es.vcxproj} | 49 +++--- lib/{es => libes}/es.vcxproj.filters | 12 +- lib/{ => libes/include}/es/ETicketBody_V2.h | 7 +- .../include}/es/ETicketContentRecord_V1.h | 3 +- .../include}/es/ETicketSectionHeader_V2.h | 2 +- lib/{nx => libes}/makefile | 12 +- lib/{es => libes/source}/ETicketBody_V2.cpp | 12 +- .../source}/ETicketContentRecord_V1.cpp | 2 +- .../source}/ETicketSectionHeader_V2.cpp | 2 +- lib/{fnd => libfnd}/fnd.vcxproj | 43 +++--- lib/{fnd => libfnd}/fnd.vcxproj.filters | 24 +-- .../include/fnd/Exception.h} | 0 .../include}/fnd/ISerialiseableBinary.h | 0 lib/{ => libfnd/include}/fnd/List.h | 0 .../include/fnd/MemoryBlob.h} | 0 .../include/fnd/StringConv.h} | 0 lib/{ => libfnd/include}/fnd/elf.h | 0 lib/{ => libfnd/include}/fnd/io.h | 2 +- lib/{ => libfnd/include}/fnd/types.h | 2 +- lib/{es => libfnd}/makefile | 12 +- .../source/Exception.cpp} | 2 +- .../source/MemoryBlob.cpp} | 2 +- .../source/StringConv.cpp} | 2 +- lib/{fnd => libfnd/source}/io.cpp | 2 +- lib/{ => libnx/include}/nx/AciBinary.h | 2 +- lib/{ => libnx/include}/nx/AciHeader.h | 2 +- lib/{ => libnx/include}/nx/AcidBinary.h | 2 +- lib/{ => libnx/include}/nx/FacBinary.h | 2 +- lib/{ => libnx/include}/nx/FacHeader.h | 2 +- .../include}/nx/HandleTableSizeEntry.h | 0 .../include}/nx/HandleTableSizeHandler.h | 0 .../include}/nx/IKernelCapabilityHandler.h | 0 lib/{ => libnx/include}/nx/InteruptEntry.h | 0 lib/{ => libnx/include}/nx/InteruptHandler.h | 0 lib/{ => libnx/include}/nx/KcBinary.h | 2 +- lib/{ => libnx/include}/nx/KernelCapability.h | 0 .../include}/nx/KernelVersionEntry.h | 0 .../include}/nx/KernelVersionHandler.h | 0 .../include}/nx/MemoryMappingHandler.h | 0 lib/{ => libnx/include}/nx/MemoryPageEntry.h | 0 lib/{ => libnx/include}/nx/MiscFlagsEntry.h | 0 lib/{ => libnx/include}/nx/MiscFlagsHandler.h | 0 lib/{ => libnx/include}/nx/MiscParamsEntry.h | 0 .../include}/nx/MiscParamsHandler.h | 0 lib/{ => libnx/include}/nx/NXCrypto.h | 2 + lib/{ => libnx/include}/nx/NcaHeader.h | 2 +- lib/{ => libnx/include}/nx/NpdmBinary.h | 2 +- lib/{ => libnx/include}/nx/NpdmFile.h | 0 lib/{ => libnx/include}/nx/NpdmHeader.h | 2 +- lib/{ => libnx/include}/nx/PfsHeader.h | 2 +- lib/{ => libnx/include}/nx/SacBinary.h | 2 +- lib/{ => libnx/include}/nx/SacEntry.h | 2 +- lib/{ => libnx/include}/nx/SystemCallEntry.h | 0 .../include}/nx/SystemCallHandler.h | 0 lib/{ => libnx/include}/nx/ThreadInfoEntry.h | 0 .../include}/nx/ThreadInfoHandler.h | 0 lib/{ => libnx/include}/nx/XciHeader.h | 2 +- lib/{fnd => libnx}/makefile | 12 +- lib/{nx => libnx}/nx.vcxproj | 146 +++++++++--------- lib/{nx => libnx}/nx.vcxproj.filters | 124 +++++++-------- lib/{nx => libnx/source}/AciBinary.cpp | 2 +- lib/{nx => libnx/source}/AciHeader.cpp | 2 +- lib/{nx => libnx/source}/AcidBinary.cpp | 2 +- lib/{nx => libnx/source}/FacBinary.cpp | 2 +- lib/{nx => libnx/source}/FacHeader.cpp | 2 +- .../source}/HandleTableSizeEntry.cpp | 2 +- .../source}/HandleTableSizeHandler.cpp | 2 +- lib/{nx => libnx/source}/InteruptEntry.cpp | 2 +- lib/{nx => libnx/source}/InteruptHandler.cpp | 2 +- lib/{nx => libnx/source}/KcBinary.cpp | 2 +- lib/{nx => libnx/source}/KernelCapability.cpp | 2 +- .../source}/KernelVersionEntry.cpp | 2 +- .../source}/KernelVersionHandler.cpp | 2 +- .../source}/MemoryMappingHandler.cpp | 4 +- lib/{nx => libnx/source}/MemoryPageEntry.cpp | 2 +- lib/{nx => libnx/source}/MiscFlagsEntry.cpp | 2 +- lib/{nx => libnx/source}/MiscFlagsHandler.cpp | 2 +- lib/{nx => libnx/source}/MiscParamsEntry.cpp | 2 +- .../source}/MiscParamsHandler.cpp | 2 +- lib/{nx => libnx/source}/NcaHeader.cpp | 3 +- lib/{nx => libnx/source}/NpdmBinary.cpp | 2 +- lib/{nx => libnx/source}/NpdmHeader.cpp | 2 +- lib/{nx => libnx/source}/PfsHeader.cpp | 2 +- lib/{nx => libnx/source}/SacBinary.cpp | 2 +- lib/{nx => libnx/source}/SacEntry.cpp | 2 +- lib/{nx => libnx/source}/SystemCallEntry.cpp | 2 +- .../source}/SystemCallHandler.cpp | 4 +- lib/{nx => libnx/source}/ThreadInfoEntry.cpp | 2 +- .../source}/ThreadInfoHandler.cpp | 2 +- lib/{nx => libnx/source}/XciHeader.cpp | 2 +- lib/makefile | 2 +- programs/makefile | 7 +- programs/ncatool/bin/ncatool | Bin 0 -> 112761 bytes programs/ncatool/makefile | 16 +- programs/ncatool/ncatool.vcxproj | 24 ++- programs/ncatool/ncatool.vcxproj.filters | 2 +- programs/ncatool/ncatool.vcxproj.user | 19 +++ programs/ncatool/{ => source}/main.cpp | 13 +- programs/npdmtool/bin/npdmtool | Bin 0 -> 460937 bytes programs/npdmtool/makefile | 16 +- programs/npdmtool/npdmtool.vcxproj | 32 ++-- programs/npdmtool/npdmtool.vcxproj.filters | 5 +- programs/npdmtool/{ => source}/main.cpp | 2 +- programs/pfstool/bin/pfstool | Bin 0 -> 67746 bytes programs/pfstool/makefile | 16 +- programs/pfstool/pfstool.vcxproj | 35 +++-- programs/pfstool/pfstool.vcxproj.filters | 2 +- programs/pfstool/{ => source}/main.cpp | 2 +- programs/tiktool/bin/tiktool | Bin 0 -> 70049 bytes programs/tiktool/main.cpp | 33 ---- programs/tiktool/makefile | 16 +- programs/tiktool/source/main.cpp | 107 +++++++++++++ programs/tiktool/tiktool.vcxproj | 35 +++-- programs/tiktool/tiktool.vcxproj.filters | 2 +- 143 files changed, 798 insertions(+), 489 deletions(-) delete mode 100644 lib/crypto/crypto.vcxproj.filters rename lib/{es/es.vcxproj => libcrypto/crypto.vcxproj} (61%) create mode 100644 lib/libcrypto/crypto.vcxproj.filters rename lib/{crypto/aes_ctr_stream.h => libcrypto/include/crypto/AesCtrStream.h} (99%) rename lib/{ => libcrypto/include}/crypto/aes.h (100%) rename lib/{ => libcrypto/include}/crypto/rsa.h (100%) rename lib/{ => libcrypto/include}/crypto/sha.h (100%) create mode 100644 lib/libcrypto/makefile rename lib/{crypto/aes_ctr_stream.cpp => libcrypto/source/AesCtrStream.cpp} (98%) rename lib/{crypto => libcrypto/source}/aes.cpp (98%) rename lib/{crypto => libcrypto/source/libpolarssl/include}/polarssl/aes.h (99%) rename lib/{crypto => libcrypto/source/libpolarssl/include}/polarssl/base64.h (100%) rename lib/{crypto => libcrypto/source/libpolarssl/include}/polarssl/bignum.h (100%) rename lib/{crypto => libcrypto/source/libpolarssl/include}/polarssl/bn_mul.h (100%) rename lib/{crypto => libcrypto/source/libpolarssl/include}/polarssl/config.h (100%) rename lib/{crypto => libcrypto/source/libpolarssl/include}/polarssl/rsa.h (100%) rename lib/{crypto => libcrypto/source/libpolarssl/include}/polarssl/sha1.h (100%) rename lib/{crypto => libcrypto/source/libpolarssl/include}/polarssl/sha2.h (100%) rename lib/{crypto => libcrypto/source/libpolarssl}/makefile (69%) rename lib/{crypto/polarssl/aes.c => libcrypto/source/libpolarssl/source/polar_aes.c} (99%) rename lib/{crypto/polarssl/base64.c => libcrypto/source/libpolarssl/source/polar_base64.c} (99%) rename lib/{crypto/polarssl/bignum.c => libcrypto/source/libpolarssl/source/polar_bignum.c} (99%) rename lib/{crypto/polarssl/rsa.c => libcrypto/source/libpolarssl/source/polar_rsa.c} (99%) rename lib/{crypto/polarssl/sha1.c => libcrypto/source/libpolarssl/source/polar_sha1.c} (99%) rename lib/{crypto/polarssl/sha2.c => libcrypto/source/libpolarssl/source/polar_sha2.c} (99%) rename lib/{crypto => libcrypto/source}/rsa.cpp (98%) rename lib/{crypto => libcrypto/source}/sha.cpp (77%) rename lib/{crypto/crypto.vcxproj => libes/es.vcxproj} (74%) rename lib/{es => libes}/es.vcxproj.filters (77%) rename lib/{ => libes/include}/es/ETicketBody_V2.h (98%) rename lib/{ => libes/include}/es/ETicketContentRecord_V1.h (93%) rename lib/{ => libes/include}/es/ETicketSectionHeader_V2.h (98%) rename lib/{nx => libes}/makefile (68%) rename lib/{es => libes/source}/ETicketBody_V2.cpp (97%) rename lib/{es => libes/source}/ETicketContentRecord_V1.cpp (60%) rename lib/{es => libes/source}/ETicketSectionHeader_V2.cpp (98%) rename lib/{fnd => libfnd}/fnd.vcxproj (77%) rename lib/{fnd => libfnd}/fnd.vcxproj.filters (73%) rename lib/{fnd/exception.h => libfnd/include/fnd/Exception.h} (100%) rename lib/{ => libfnd/include}/fnd/ISerialiseableBinary.h (100%) rename lib/{ => libfnd/include}/fnd/List.h (100%) rename lib/{fnd/memory_blob.h => libfnd/include/fnd/MemoryBlob.h} (100%) rename lib/{fnd/string_conv.h => libfnd/include/fnd/StringConv.h} (100%) rename lib/{ => libfnd/include}/fnd/elf.h (100%) rename lib/{ => libfnd/include}/fnd/io.h (90%) rename lib/{ => libfnd/include}/fnd/types.h (98%) rename lib/{es => libfnd}/makefile (69%) rename lib/{fnd/exception.cpp => libfnd/source/Exception.cpp} (96%) rename lib/{fnd/memory_blob.cpp => libfnd/source/MemoryBlob.cpp} (97%) rename lib/{fnd/string_conv.cpp => libfnd/source/StringConv.cpp} (99%) rename lib/{fnd => libfnd/source}/io.cpp (98%) rename lib/{ => libnx/include}/nx/AciBinary.h (97%) rename lib/{ => libnx/include}/nx/AciHeader.h (99%) rename lib/{ => libnx/include}/nx/AcidBinary.h (97%) rename lib/{ => libnx/include}/nx/FacBinary.h (97%) rename lib/{ => libnx/include}/nx/FacHeader.h (99%) rename lib/{ => libnx/include}/nx/HandleTableSizeEntry.h (100%) rename lib/{ => libnx/include}/nx/HandleTableSizeHandler.h (100%) rename lib/{ => libnx/include}/nx/IKernelCapabilityHandler.h (100%) rename lib/{ => libnx/include}/nx/InteruptEntry.h (100%) rename lib/{ => libnx/include}/nx/InteruptHandler.h (100%) rename lib/{ => libnx/include}/nx/KcBinary.h (98%) rename lib/{ => libnx/include}/nx/KernelCapability.h (100%) rename lib/{ => libnx/include}/nx/KernelVersionEntry.h (100%) rename lib/{ => libnx/include}/nx/KernelVersionHandler.h (100%) rename lib/{ => libnx/include}/nx/MemoryMappingHandler.h (100%) rename lib/{ => libnx/include}/nx/MemoryPageEntry.h (100%) rename lib/{ => libnx/include}/nx/MiscFlagsEntry.h (100%) rename lib/{ => libnx/include}/nx/MiscFlagsHandler.h (100%) rename lib/{ => libnx/include}/nx/MiscParamsEntry.h (100%) rename lib/{ => libnx/include}/nx/MiscParamsHandler.h (100%) rename lib/{ => libnx/include}/nx/NXCrypto.h (99%) rename lib/{ => libnx/include}/nx/NcaHeader.h (99%) rename lib/{ => libnx/include}/nx/NpdmBinary.h (97%) rename lib/{ => libnx/include}/nx/NpdmFile.h (100%) rename lib/{ => libnx/include}/nx/NpdmHeader.h (99%) rename lib/{ => libnx/include}/nx/PfsHeader.h (98%) rename lib/{ => libnx/include}/nx/SacBinary.h (97%) rename lib/{ => libnx/include}/nx/SacEntry.h (97%) rename lib/{ => libnx/include}/nx/SystemCallEntry.h (100%) rename lib/{ => libnx/include}/nx/SystemCallHandler.h (100%) rename lib/{ => libnx/include}/nx/ThreadInfoEntry.h (100%) rename lib/{ => libnx/include}/nx/ThreadInfoHandler.h (100%) rename lib/{ => libnx/include}/nx/XciHeader.h (98%) rename lib/{fnd => libnx}/makefile (68%) rename lib/{nx => libnx}/nx.vcxproj (54%) rename lib/{nx => libnx}/nx.vcxproj.filters (56%) rename lib/{nx => libnx/source}/AciBinary.cpp (99%) rename lib/{nx => libnx/source}/AciHeader.cpp (99%) rename lib/{nx => libnx/source}/AcidBinary.cpp (99%) rename lib/{nx => libnx/source}/FacBinary.cpp (99%) rename lib/{nx => libnx/source}/FacHeader.cpp (99%) rename lib/{nx => libnx/source}/HandleTableSizeEntry.cpp (96%) rename lib/{nx => libnx/source}/HandleTableSizeHandler.cpp (97%) rename lib/{nx => libnx/source}/InteruptEntry.cpp (97%) rename lib/{nx => libnx/source}/InteruptHandler.cpp (98%) rename lib/{nx => libnx/source}/KcBinary.cpp (99%) rename lib/{nx => libnx/source}/KernelCapability.cpp (97%) rename lib/{nx => libnx/source}/KernelVersionEntry.cpp (97%) rename lib/{nx => libnx/source}/KernelVersionHandler.cpp (98%) rename lib/{nx => libnx/source}/MemoryMappingHandler.cpp (98%) rename lib/{nx => libnx/source}/MemoryPageEntry.cpp (98%) rename lib/{nx => libnx/source}/MiscFlagsEntry.cpp (96%) rename lib/{nx => libnx/source}/MiscFlagsHandler.cpp (98%) rename lib/{nx => libnx/source}/MiscParamsEntry.cpp (96%) rename lib/{nx => libnx/source}/MiscParamsHandler.cpp (97%) rename lib/{nx => libnx/source}/NcaHeader.cpp (99%) rename lib/{nx => libnx/source}/NpdmBinary.cpp (98%) rename lib/{nx => libnx/source}/NpdmHeader.cpp (99%) rename lib/{nx => libnx/source}/PfsHeader.cpp (99%) rename lib/{nx => libnx/source}/SacBinary.cpp (98%) rename lib/{nx => libnx/source}/SacEntry.cpp (99%) rename lib/{nx => libnx/source}/SystemCallEntry.cpp (97%) rename lib/{nx => libnx/source}/SystemCallHandler.cpp (97%) rename lib/{nx => libnx/source}/ThreadInfoEntry.cpp (98%) rename lib/{nx => libnx/source}/ThreadInfoHandler.cpp (98%) rename lib/{nx => libnx/source}/XciHeader.cpp (55%) create mode 100644 programs/ncatool/bin/ncatool create mode 100644 programs/ncatool/ncatool.vcxproj.user rename programs/ncatool/{ => source}/main.cpp (92%) create mode 100644 programs/npdmtool/bin/npdmtool rename programs/npdmtool/{ => source}/main.cpp (99%) create mode 100644 programs/pfstool/bin/pfstool rename programs/pfstool/{ => source}/main.cpp (97%) create mode 100644 programs/tiktool/bin/tiktool delete mode 100644 programs/tiktool/main.cpp create mode 100644 programs/tiktool/source/main.cpp diff --git a/.gitignore b/.gitignore index a33e3f3..28707b3 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,8 @@ *.log /bin/* /*/*/Debug +/*/*/x64 +/x64 +/Debug +/test /sample diff --git a/NXTools.sln b/NXTools.sln index e7d9026..7e78817 100644 --- a/NXTools.sln +++ b/NXTools.sln @@ -3,11 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfnd", "lib\fnd\fnd.vcxproj", "{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfnd", "lib\libfnd\fnd.vcxproj", "{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcrypto", "lib\crypto\crypto.vcxproj", "{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcrypto", "lib\libcrypto\crypto.vcxproj", "{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libnx", "lib\nx\nx.vcxproj", "{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libnx", "lib\libnx\nx.vcxproj", "{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ncatool", "programs\ncatool\ncatool.vcxproj", "{7DA88C6F-4470-495D-995A-4F633F3370C1}" EndProject @@ -32,7 +32,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pfstool", "programs\pfstool\pfstool.vcxproj", "{BC2F2D07-BAB3-469C-9C25-8CC54F96F7AB}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libes", "lib\es\es.vcxproj", "{7BE99936-0D40-410D-944B-4513C2EFF8DC}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libes", "lib\libes\es.vcxproj", "{7BE99936-0D40-410D-944B-4513C2EFF8DC}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tiktool", "programs\tiktool\tiktool.vcxproj", "{2200B834-F15A-4C6E-9DDB-6012B9A5C246}" EndProject diff --git a/lib/crypto/crypto.vcxproj.filters b/lib/crypto/crypto.vcxproj.filters deleted file mode 100644 index b8415e2..0000000 --- a/lib/crypto/crypto.vcxproj.filters +++ /dev/null @@ -1,48 +0,0 @@ - - - - - {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;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - \ No newline at end of file diff --git a/lib/es/es.vcxproj b/lib/libcrypto/crypto.vcxproj similarity index 61% rename from lib/es/es.vcxproj rename to lib/libcrypto/crypto.vcxproj index 84be88b..b953c49 100644 --- a/lib/es/es.vcxproj +++ b/lib/libcrypto/crypto.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -19,35 +19,36 @@ - {7BE99936-0D40-410D-944B-4513C2EFF8DC} - es - 8.1 - libes + 15.0 + {6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1} + crypto + 10.0.15063.0 + libcrypto - Application + StaticLibrary true - v140 + v141 MultiByte - Application + StaticLibrary false - v140 + v141 true MultiByte - Application + StaticLibrary true - v140 + v141 MultiByte - Application + StaticLibrary false - v140 + v141 true MultiByte @@ -75,7 +76,8 @@ Level3 Disabled true - ..\ + ..\libfnd\include;..\libcrypto\include;..\libcrypto\source\libpolarssl\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -83,7 +85,8 @@ Level3 Disabled true - ..\ + ..\libfnd\include;..\libcrypto\include;..\libcrypto\source\libpolarssl\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -93,7 +96,8 @@ true true true - ..\ + ..\libfnd\include;..\libcrypto\include;..\libcrypto\source\libpolarssl\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -107,26 +111,43 @@ true true true - ..\ + ..\libfnd\include;..\libcrypto\include;..\libcrypto\source\libpolarssl\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true true + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - diff --git a/lib/libcrypto/crypto.vcxproj.filters b/lib/libcrypto/crypto.vcxproj.filters new file mode 100644 index 0000000..80b23f4 --- /dev/null +++ b/lib/libcrypto/crypto.vcxproj.filters @@ -0,0 +1,99 @@ + + + + + {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;mfcribbon-ms + + + {c24d0e3f-1a38-486c-9bad-b7db5b39eee2} + + + {50821199-d06b-4e82-b424-3f17b60f1a9e} + + + {012a6f22-d10a-4ca3-b7c3-4c31c6ff1cc1} + + + + + Header Files\crypto + + + Header Files\crypto + + + Header Files\crypto + + + Header Files\crypto + + + Header Files\polarssl + + + Header Files\polarssl + + + Header Files\polarssl + + + Header Files\polarssl + + + Header Files\polarssl + + + Header Files\polarssl + + + Header Files\polarssl + + + Header Files\polarssl + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\polarssl + + + Source Files\polarssl + + + Source Files\polarssl + + + Source Files\polarssl + + + Source Files\polarssl + + + Source Files\polarssl + + + + + + \ No newline at end of file diff --git a/lib/crypto/aes_ctr_stream.h b/lib/libcrypto/include/crypto/AesCtrStream.h similarity index 99% rename from lib/crypto/aes_ctr_stream.h rename to lib/libcrypto/include/crypto/AesCtrStream.h index 963df7b..b4eea4a 100644 --- a/lib/crypto/aes_ctr_stream.h +++ b/lib/libcrypto/include/crypto/AesCtrStream.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include +#include #include namespace crypto diff --git a/lib/crypto/aes.h b/lib/libcrypto/include/crypto/aes.h similarity index 100% rename from lib/crypto/aes.h rename to lib/libcrypto/include/crypto/aes.h diff --git a/lib/crypto/rsa.h b/lib/libcrypto/include/crypto/rsa.h similarity index 100% rename from lib/crypto/rsa.h rename to lib/libcrypto/include/crypto/rsa.h diff --git a/lib/crypto/sha.h b/lib/libcrypto/include/crypto/sha.h similarity index 100% rename from lib/crypto/sha.h rename to lib/libcrypto/include/crypto/sha.h diff --git a/lib/libcrypto/makefile b/lib/libcrypto/makefile new file mode 100644 index 0000000..e763fae --- /dev/null +++ b/lib/libcrypto/makefile @@ -0,0 +1,37 @@ +# Sources +SRC_DIR = source source/libpolarssl/source +OBJS = $(foreach dir,$(SRC_DIR),$(subst .cpp,.o,$(wildcard $(dir)/*.cpp))) $(foreach dir,$(SRC_DIR),$(subst .c,.o,$(wildcard $(dir)/*.c))) + +# External dependencies +DEPENDS = fnd +LIB_DIR = .. +INCS = -I"include" -I"source/libpolarssl/include" $(foreach dep,$(DEPENDS), -I"$(LIB_DIR)/lib$(dep)/include") + + +# Compiler Settings +CXXFLAGS = -std=c++11 $(INCS) -D__STDC_FORMAT_MACROS -Wall -Wno-unused-but-set-variable -Wno-unused-value +CFLAGS = -std=c11 $(INCS) -Wall -Wno-unused-but-set-variable -Wno-unused-value +ifeq ($(OS),Windows_NT) + # Windows Only Flags/Libs + CC = x86_64-w64-mingw32-gcc + CXX = x86_64-w64-mingw32-g++ + CFLAGS += + CXXFLAGS += +else + # *nix Only Flags/Libs + CFLAGS += + CXXFLAGS += +endif + +# Output +OUTPUT = $(shell basename $(CURDIR)).a + +main: build + +rebuild: clean build + +build: $(OBJS) + ar cr -o $(OUTPUT) $(OBJS) + +clean: + rm -rf $(OUTPUT) $(OBJS) \ No newline at end of file diff --git a/lib/crypto/aes_ctr_stream.cpp b/lib/libcrypto/source/AesCtrStream.cpp similarity index 98% rename from lib/crypto/aes_ctr_stream.cpp rename to lib/libcrypto/source/AesCtrStream.cpp index a02c642..9ab8c99 100644 --- a/lib/crypto/aes_ctr_stream.cpp +++ b/lib/libcrypto/source/AesCtrStream.cpp @@ -1,4 +1,4 @@ -#include "aes_ctr_stream.h" +#include using namespace crypto::aes; diff --git a/lib/crypto/aes.cpp b/lib/libcrypto/source/aes.cpp similarity index 98% rename from lib/crypto/aes.cpp rename to lib/libcrypto/source/aes.cpp index 732d1ba..851434e 100644 --- a/lib/crypto/aes.cpp +++ b/lib/libcrypto/source/aes.cpp @@ -1,5 +1,5 @@ -#include "aes.h" -#include "polarssl/aes.h" +#include +#include using namespace crypto::aes; @@ -150,7 +150,7 @@ void crypto::aes::GaloisFunc(uint8_t x[kAesBlockSize]) { uint8_t t = x[15]; - for (uint8_t i = 16; i > 0; i--) + for (uint8_t i = 15; i > 0; i--) { x[i] = (x[i] << 1) | (x[i - 1] & 0x80 ? 1 : 0); } diff --git a/lib/crypto/polarssl/aes.h b/lib/libcrypto/source/libpolarssl/include/polarssl/aes.h similarity index 99% rename from lib/crypto/polarssl/aes.h rename to lib/libcrypto/source/libpolarssl/include/polarssl/aes.h index 92fca54..f78fbd9 100644 --- a/lib/crypto/polarssl/aes.h +++ b/lib/libcrypto/source/libpolarssl/include/polarssl/aes.h @@ -34,6 +34,7 @@ #ifdef _MSC_VER #include typedef UINT32 uint32_t; +typedef UINT64 uint64_t; #else #include #endif diff --git a/lib/crypto/polarssl/base64.h b/lib/libcrypto/source/libpolarssl/include/polarssl/base64.h similarity index 100% rename from lib/crypto/polarssl/base64.h rename to lib/libcrypto/source/libpolarssl/include/polarssl/base64.h diff --git a/lib/crypto/polarssl/bignum.h b/lib/libcrypto/source/libpolarssl/include/polarssl/bignum.h similarity index 100% rename from lib/crypto/polarssl/bignum.h rename to lib/libcrypto/source/libpolarssl/include/polarssl/bignum.h diff --git a/lib/crypto/polarssl/bn_mul.h b/lib/libcrypto/source/libpolarssl/include/polarssl/bn_mul.h similarity index 100% rename from lib/crypto/polarssl/bn_mul.h rename to lib/libcrypto/source/libpolarssl/include/polarssl/bn_mul.h diff --git a/lib/crypto/polarssl/config.h b/lib/libcrypto/source/libpolarssl/include/polarssl/config.h similarity index 100% rename from lib/crypto/polarssl/config.h rename to lib/libcrypto/source/libpolarssl/include/polarssl/config.h diff --git a/lib/crypto/polarssl/rsa.h b/lib/libcrypto/source/libpolarssl/include/polarssl/rsa.h similarity index 100% rename from lib/crypto/polarssl/rsa.h rename to lib/libcrypto/source/libpolarssl/include/polarssl/rsa.h diff --git a/lib/crypto/polarssl/sha1.h b/lib/libcrypto/source/libpolarssl/include/polarssl/sha1.h similarity index 100% rename from lib/crypto/polarssl/sha1.h rename to lib/libcrypto/source/libpolarssl/include/polarssl/sha1.h diff --git a/lib/crypto/polarssl/sha2.h b/lib/libcrypto/source/libpolarssl/include/polarssl/sha2.h similarity index 100% rename from lib/crypto/polarssl/sha2.h rename to lib/libcrypto/source/libpolarssl/include/polarssl/sha2.h diff --git a/lib/crypto/makefile b/lib/libcrypto/source/libpolarssl/makefile similarity index 69% rename from lib/crypto/makefile rename to lib/libcrypto/source/libpolarssl/makefile index 6b16e04..f2d86c3 100644 --- a/lib/crypto/makefile +++ b/lib/libcrypto/source/libpolarssl/makefile @@ -1,12 +1,16 @@ # Sources -SRC_DIR = . polarssl +SRC_DIR = source OBJS = $(foreach dir,$(SRC_DIR),$(subst .cpp,.o,$(wildcard $(dir)/*.cpp))) $(foreach dir,$(SRC_DIR),$(subst .c,.o,$(wildcard $(dir)/*.c))) -INC_DIR = .. -INCS = $(foreach dir,$(INC_DIR), -I"$(dir)") +# External dependencies +DEPENDS = +LIB_DIR = .. +INCS = -I"include" $(foreach dep,$(DEPENDS), -I"$(LIB_DIR)/lib$(dep)/include") + # Compiler Settings CXXFLAGS = -std=c++11 $(INCS) -D__STDC_FORMAT_MACROS -Wall -Wno-unused-but-set-variable -Wno-unused-value +CFLAGS = -std=c11 $(INCS) -Wall -Wno-unused-but-set-variable -Wno-unused-value ifeq ($(OS),Windows_NT) # Windows Only Flags/Libs CC = x86_64-w64-mingw32-gcc @@ -20,7 +24,7 @@ else endif # Output -OUTPUT = ../lib$(shell basename $(CURDIR)).a +OUTPUT = $(shell basename $(CURDIR)).a main: build diff --git a/lib/crypto/polarssl/aes.c b/lib/libcrypto/source/libpolarssl/source/polar_aes.c similarity index 99% rename from lib/crypto/polarssl/aes.c rename to lib/libcrypto/source/libpolarssl/source/polar_aes.c index 65c2b1f..f8293e6 100644 --- a/lib/crypto/polarssl/aes.c +++ b/lib/libcrypto/source/libpolarssl/source/polar_aes.c @@ -29,13 +29,13 @@ * http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf */ -#include "config.h" +#include #if defined(POLARSSL_AES_C) -#include "aes.h" +#include #if defined(POLARSSL_PADLOCK_C) -#include "padlock.h" +#include #endif #if !defined(POLARSSL_AES_ALT) diff --git a/lib/crypto/polarssl/base64.c b/lib/libcrypto/source/libpolarssl/source/polar_base64.c similarity index 99% rename from lib/crypto/polarssl/base64.c rename to lib/libcrypto/source/libpolarssl/source/polar_base64.c index c99192a..b596527 100644 --- a/lib/crypto/polarssl/base64.c +++ b/lib/libcrypto/source/libpolarssl/source/polar_base64.c @@ -23,11 +23,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "config.h" +#include #if defined(POLARSSL_BASE64_C) -#include "base64.h" +#include #ifdef _MSC_VER #include diff --git a/lib/crypto/polarssl/bignum.c b/lib/libcrypto/source/libpolarssl/source/polar_bignum.c similarity index 99% rename from lib/crypto/polarssl/bignum.c rename to lib/libcrypto/source/libpolarssl/source/polar_bignum.c index 2a40ff4..839ec30 100644 --- a/lib/crypto/polarssl/bignum.c +++ b/lib/libcrypto/source/libpolarssl/source/polar_bignum.c @@ -30,12 +30,12 @@ * http://math.libtomcrypt.com/files/tommath.pdf */ -#include "config.h" +#include #if defined(POLARSSL_BIGNUM_C) -#include "bignum.h" -#include "bn_mul.h" +#include +#include #include diff --git a/lib/crypto/polarssl/rsa.c b/lib/libcrypto/source/libpolarssl/source/polar_rsa.c similarity index 99% rename from lib/crypto/polarssl/rsa.c rename to lib/libcrypto/source/libpolarssl/source/polar_rsa.c index 29dd7bf..a877233 100644 --- a/lib/crypto/polarssl/rsa.c +++ b/lib/libcrypto/source/libpolarssl/source/polar_rsa.c @@ -29,14 +29,14 @@ * http://www.cacr.math.uwaterloo.ca/hac/about/chap8.pdf */ -#include "config.h" +#include #if defined(POLARSSL_RSA_C) -#include "rsa.h" +#include #if defined(POLARSSL_PKCS1_V21) -#include "md.h" +#include #endif #include diff --git a/lib/crypto/polarssl/sha1.c b/lib/libcrypto/source/libpolarssl/source/polar_sha1.c similarity index 99% rename from lib/crypto/polarssl/sha1.c rename to lib/libcrypto/source/libpolarssl/source/polar_sha1.c index c56a6a8..36b4c73 100644 --- a/lib/crypto/polarssl/sha1.c +++ b/lib/libcrypto/source/libpolarssl/source/polar_sha1.c @@ -28,11 +28,11 @@ * http://www.itl.nist.gov/fipspubs/fip180-1.htm */ -#include "config.h" +#include #if defined(POLARSSL_SHA1_C) -#include "sha1.h" +#include #if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) #include diff --git a/lib/crypto/polarssl/sha2.c b/lib/libcrypto/source/libpolarssl/source/polar_sha2.c similarity index 99% rename from lib/crypto/polarssl/sha2.c rename to lib/libcrypto/source/libpolarssl/source/polar_sha2.c index 319d7e8..6c19082 100644 --- a/lib/crypto/polarssl/sha2.c +++ b/lib/libcrypto/source/libpolarssl/source/polar_sha2.c @@ -28,11 +28,11 @@ * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf */ -#include "config.h" +#include #if defined(POLARSSL_SHA2_C) -#include "sha2.h" +#include #if defined(POLARSSL_FS_IO) || defined(POLARSSL_SELF_TEST) #include diff --git a/lib/crypto/rsa.cpp b/lib/libcrypto/source/rsa.cpp similarity index 98% rename from lib/crypto/rsa.cpp rename to lib/libcrypto/source/rsa.cpp index 55195eb..f302990 100644 --- a/lib/crypto/rsa.cpp +++ b/lib/libcrypto/source/rsa.cpp @@ -1,5 +1,5 @@ -#include "rsa.h" -#include "polarssl/rsa.h" +#include +#include using namespace crypto::rsa; using namespace crypto::sha; diff --git a/lib/crypto/sha.cpp b/lib/libcrypto/source/sha.cpp similarity index 77% rename from lib/crypto/sha.cpp rename to lib/libcrypto/source/sha.cpp index 3839f99..c625c95 100644 --- a/lib/crypto/sha.cpp +++ b/lib/libcrypto/source/sha.cpp @@ -1,6 +1,6 @@ -#include "sha.h" -#include "polarssl/sha1.h" -#include "polarssl/sha2.h" +#include +#include +#include using namespace crypto::sha; diff --git a/lib/crypto/crypto.vcxproj b/lib/libes/es.vcxproj similarity index 74% rename from lib/crypto/crypto.vcxproj rename to lib/libes/es.vcxproj index 2ab9ade..8b81816 100644 --- a/lib/crypto/crypto.vcxproj +++ b/lib/libes/es.vcxproj @@ -19,34 +19,33 @@ - 15.0 - {6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1} - crypto - 10.0.15063.0 - libcrypto + {7BE99936-0D40-410D-944B-4513C2EFF8DC} + es + 8.1 + libes - Application + StaticLibrary true v141 MultiByte - Application + StaticLibrary false v141 true MultiByte - Application + StaticLibrary true v141 MultiByte - Application + StaticLibrary false v141 true @@ -76,7 +75,8 @@ Level3 Disabled true - ..\ + ..\libfnd\include;..\libcrypto\include;..\libes\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -84,7 +84,8 @@ Level3 Disabled true - ..\ + ..\libfnd\include;..\libcrypto\include;..\libes\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -94,6 +95,8 @@ true true true + ..\libfnd\include;..\libcrypto\include;..\libes\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -107,27 +110,27 @@ true true true + ..\libfnd\include;..\libcrypto\include;..\libes\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true true - - - - - - - - - - - - + + + + + + + + + + diff --git a/lib/es/es.vcxproj.filters b/lib/libes/es.vcxproj.filters similarity index 77% rename from lib/es/es.vcxproj.filters rename to lib/libes/es.vcxproj.filters index 73aad3f..a86064e 100644 --- a/lib/es/es.vcxproj.filters +++ b/lib/libes/es.vcxproj.filters @@ -18,24 +18,24 @@ - + Header Files - + Header Files - + Header Files - + Source Files - + Source Files - + Source Files diff --git a/lib/es/ETicketBody_V2.h b/lib/libes/include/es/ETicketBody_V2.h similarity index 98% rename from lib/es/ETicketBody_V2.h rename to lib/libes/include/es/ETicketBody_V2.h index 0b5d4ff..8f68b3c 100644 --- a/lib/es/ETicketBody_V2.h +++ b/lib/libes/include/es/ETicketBody_V2.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include #include @@ -60,6 +60,9 @@ namespace es LicenseType getLicenseType() const; void setLicenseType(LicenseType type); + u8 getCommonKeyId() const; + void setCommonKeyId(u8 id); + bool isPreInstall() const; void setIsPreInstall(bool isPreInstall); @@ -196,7 +199,7 @@ namespace es TitleKeyEncType mEncType; // 0 = aes-cbc, 1 = rsa2048 u16 mTicketVersion; LicenseType mLicenseType; - u8 kCommonKeyId; + u8 mCommonKeyId; bool mPreInstall; bool mSharedTitle; bool mAllowAllContent; diff --git a/lib/es/ETicketContentRecord_V1.h b/lib/libes/include/es/ETicketContentRecord_V1.h similarity index 93% rename from lib/es/ETicketContentRecord_V1.h rename to lib/libes/include/es/ETicketContentRecord_V1.h index c1a9533..56d9be4 100644 --- a/lib/es/ETicketContentRecord_V1.h +++ b/lib/libes/include/es/ETicketContentRecord_V1.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include #include @@ -13,6 +13,7 @@ namespace es ETicketContentRecord_V1(); private: + const std::string kModuleName = "ETICKET_CONTENT_RECORD_V1"; #pragma pack (push, 1) struct sContentRecord_v1 diff --git a/lib/es/ETicketSectionHeader_V2.h b/lib/libes/include/es/ETicketSectionHeader_V2.h similarity index 98% rename from lib/es/ETicketSectionHeader_V2.h rename to lib/libes/include/es/ETicketSectionHeader_V2.h index 9447185..ae810b5 100644 --- a/lib/es/ETicketSectionHeader_V2.h +++ b/lib/libes/include/es/ETicketSectionHeader_V2.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include namespace es diff --git a/lib/nx/makefile b/lib/libes/makefile similarity index 68% rename from lib/nx/makefile rename to lib/libes/makefile index cea813e..920e98d 100644 --- a/lib/nx/makefile +++ b/lib/libes/makefile @@ -1,12 +1,16 @@ # Sources -SRC_DIR = . +SRC_DIR = source OBJS = $(foreach dir,$(SRC_DIR),$(subst .cpp,.o,$(wildcard $(dir)/*.cpp))) $(foreach dir,$(SRC_DIR),$(subst .c,.o,$(wildcard $(dir)/*.c))) -INC_DIR = .. -INCS = $(foreach dir,$(INC_DIR), -I"$(dir)/") +# External dependencies +DEPENDS = fnd crypto +LIB_DIR = .. +INCS = -I"include" $(foreach dep,$(DEPENDS), -I"$(LIB_DIR)/lib$(dep)/include") + # Compiler Settings CXXFLAGS = -std=c++11 $(INCS) -D__STDC_FORMAT_MACROS -Wall -Wno-unused-but-set-variable -Wno-unused-value +CFLAGS = -std=c11 $(INCS) -Wall -Wno-unused-but-set-variable -Wno-unused-value ifeq ($(OS),Windows_NT) # Windows Only Flags/Libs CC = x86_64-w64-mingw32-gcc @@ -20,7 +24,7 @@ else endif # Output -OUTPUT = ../lib$(shell basename $(CURDIR)).a +OUTPUT = $(shell basename $(CURDIR)).a main: build diff --git a/lib/es/ETicketBody_V2.cpp b/lib/libes/source/ETicketBody_V2.cpp similarity index 97% rename from lib/es/ETicketBody_V2.cpp rename to lib/libes/source/ETicketBody_V2.cpp index e14f8e1..a199b6f 100644 --- a/lib/es/ETicketBody_V2.cpp +++ b/lib/libes/source/ETicketBody_V2.cpp @@ -1,4 +1,4 @@ -#include "ETicketBody_V2.h" +#include @@ -234,6 +234,16 @@ void es::ETicketBody_V2::setLicenseType(LicenseType type) mLicenseType = type; } +u8 es::ETicketBody_V2::getCommonKeyId() const +{ + return mCommonKeyId; +} + +void es::ETicketBody_V2::setCommonKeyId(u8 id) +{ + mCommonKeyId = id; +} + bool es::ETicketBody_V2::isPreInstall() const { return mPreInstall; diff --git a/lib/es/ETicketContentRecord_V1.cpp b/lib/libes/source/ETicketContentRecord_V1.cpp similarity index 60% rename from lib/es/ETicketContentRecord_V1.cpp rename to lib/libes/source/ETicketContentRecord_V1.cpp index bb4dcfe..acc97fc 100644 --- a/lib/es/ETicketContentRecord_V1.cpp +++ b/lib/libes/source/ETicketContentRecord_V1.cpp @@ -1,4 +1,4 @@ -#include "ETicketContentRecord_V1.h" +#include diff --git a/lib/es/ETicketSectionHeader_V2.cpp b/lib/libes/source/ETicketSectionHeader_V2.cpp similarity index 98% rename from lib/es/ETicketSectionHeader_V2.cpp rename to lib/libes/source/ETicketSectionHeader_V2.cpp index 3ca5246..9eb2a0e 100644 --- a/lib/es/ETicketSectionHeader_V2.cpp +++ b/lib/libes/source/ETicketSectionHeader_V2.cpp @@ -1,4 +1,4 @@ -#include "ETicketSectionHeader_V2.h" +#include diff --git a/lib/fnd/fnd.vcxproj b/lib/libfnd/fnd.vcxproj similarity index 77% rename from lib/fnd/fnd.vcxproj rename to lib/libfnd/fnd.vcxproj index 858c981..b74a6d7 100644 --- a/lib/fnd/fnd.vcxproj +++ b/lib/libfnd/fnd.vcxproj @@ -27,26 +27,26 @@ - Application + StaticLibrary true v141 MultiByte - Application + StaticLibrary false v141 true MultiByte - Application + StaticLibrary true v141 MultiByte - Application + StaticLibrary false v141 true @@ -76,7 +76,8 @@ Level3 Disabled true - ..\ + ..\libfnd\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -84,7 +85,8 @@ Level3 Disabled true - ..\ + ..\libfnd\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -94,7 +96,8 @@ true true true - C:\Users\jkrca\Source\Repos\NXTools\lib;%(AdditionalIncludeDirectories) + ..\libfnd\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -108,6 +111,8 @@ true true true + ..\libfnd\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -115,20 +120,20 @@ - - - - - - - - + + + + + + + + - - - - + + + + diff --git a/lib/fnd/fnd.vcxproj.filters b/lib/libfnd/fnd.vcxproj.filters similarity index 73% rename from lib/fnd/fnd.vcxproj.filters rename to lib/libfnd/fnd.vcxproj.filters index e73663b..3d1dee6 100644 --- a/lib/fnd/fnd.vcxproj.filters +++ b/lib/libfnd/fnd.vcxproj.filters @@ -15,42 +15,42 @@ - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Source Files - + Source Files - + Source Files - + Source Files diff --git a/lib/fnd/exception.h b/lib/libfnd/include/fnd/Exception.h similarity index 100% rename from lib/fnd/exception.h rename to lib/libfnd/include/fnd/Exception.h diff --git a/lib/fnd/ISerialiseableBinary.h b/lib/libfnd/include/fnd/ISerialiseableBinary.h similarity index 100% rename from lib/fnd/ISerialiseableBinary.h rename to lib/libfnd/include/fnd/ISerialiseableBinary.h diff --git a/lib/fnd/List.h b/lib/libfnd/include/fnd/List.h similarity index 100% rename from lib/fnd/List.h rename to lib/libfnd/include/fnd/List.h diff --git a/lib/fnd/memory_blob.h b/lib/libfnd/include/fnd/MemoryBlob.h similarity index 100% rename from lib/fnd/memory_blob.h rename to lib/libfnd/include/fnd/MemoryBlob.h diff --git a/lib/fnd/string_conv.h b/lib/libfnd/include/fnd/StringConv.h similarity index 100% rename from lib/fnd/string_conv.h rename to lib/libfnd/include/fnd/StringConv.h diff --git a/lib/fnd/elf.h b/lib/libfnd/include/fnd/elf.h similarity index 100% rename from lib/fnd/elf.h rename to lib/libfnd/include/fnd/elf.h diff --git a/lib/fnd/io.h b/lib/libfnd/include/fnd/io.h similarity index 90% rename from lib/fnd/io.h rename to lib/libfnd/include/fnd/io.h index 28fa7ef..7e05f50 100644 --- a/lib/fnd/io.h +++ b/lib/libfnd/include/fnd/io.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include namespace fnd { diff --git a/lib/fnd/types.h b/lib/libfnd/include/fnd/types.h similarity index 98% rename from lib/fnd/types.h rename to lib/libfnd/include/fnd/types.h index 3f87609..3ed1ae8 100644 --- a/lib/fnd/types.h +++ b/lib/libfnd/include/fnd/types.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include typedef uint64_t dword_t; typedef uint32_t word_t; diff --git a/lib/es/makefile b/lib/libfnd/makefile similarity index 69% rename from lib/es/makefile rename to lib/libfnd/makefile index cea813e..f2d86c3 100644 --- a/lib/es/makefile +++ b/lib/libfnd/makefile @@ -1,12 +1,16 @@ # Sources -SRC_DIR = . +SRC_DIR = source OBJS = $(foreach dir,$(SRC_DIR),$(subst .cpp,.o,$(wildcard $(dir)/*.cpp))) $(foreach dir,$(SRC_DIR),$(subst .c,.o,$(wildcard $(dir)/*.c))) -INC_DIR = .. -INCS = $(foreach dir,$(INC_DIR), -I"$(dir)/") +# External dependencies +DEPENDS = +LIB_DIR = .. +INCS = -I"include" $(foreach dep,$(DEPENDS), -I"$(LIB_DIR)/lib$(dep)/include") + # Compiler Settings CXXFLAGS = -std=c++11 $(INCS) -D__STDC_FORMAT_MACROS -Wall -Wno-unused-but-set-variable -Wno-unused-value +CFLAGS = -std=c11 $(INCS) -Wall -Wno-unused-but-set-variable -Wno-unused-value ifeq ($(OS),Windows_NT) # Windows Only Flags/Libs CC = x86_64-w64-mingw32-gcc @@ -20,7 +24,7 @@ else endif # Output -OUTPUT = ../lib$(shell basename $(CURDIR)).a +OUTPUT = $(shell basename $(CURDIR)).a main: build diff --git a/lib/fnd/exception.cpp b/lib/libfnd/source/Exception.cpp similarity index 96% rename from lib/fnd/exception.cpp rename to lib/libfnd/source/Exception.cpp index ed2c609..c50f256 100644 --- a/lib/fnd/exception.cpp +++ b/lib/libfnd/source/Exception.cpp @@ -1,4 +1,4 @@ -#include "exception.h" +#include using namespace fnd; diff --git a/lib/fnd/memory_blob.cpp b/lib/libfnd/source/MemoryBlob.cpp similarity index 97% rename from lib/fnd/memory_blob.cpp rename to lib/libfnd/source/MemoryBlob.cpp index 33b817e..2456972 100644 --- a/lib/fnd/memory_blob.cpp +++ b/lib/libfnd/source/MemoryBlob.cpp @@ -1,4 +1,4 @@ -#include "memory_blob.h" +#include using namespace fnd; diff --git a/lib/fnd/string_conv.cpp b/lib/libfnd/source/StringConv.cpp similarity index 99% rename from lib/fnd/string_conv.cpp rename to lib/libfnd/source/StringConv.cpp index ed77b9a..8b9fcc6 100644 --- a/lib/fnd/string_conv.cpp +++ b/lib/libfnd/source/StringConv.cpp @@ -1,4 +1,4 @@ -#include "string_conv.h" +#include #include #include diff --git a/lib/fnd/io.cpp b/lib/libfnd/source/io.cpp similarity index 98% rename from lib/fnd/io.cpp rename to lib/libfnd/source/io.cpp index b01b337..cc6066f 100644 --- a/lib/fnd/io.cpp +++ b/lib/libfnd/source/io.cpp @@ -1,4 +1,4 @@ -#include "io.h" +#include using namespace fnd; diff --git a/lib/nx/AciBinary.h b/lib/libnx/include/nx/AciBinary.h similarity index 97% rename from lib/nx/AciBinary.h rename to lib/libnx/include/nx/AciBinary.h index 3b7810a..312fa42 100644 --- a/lib/nx/AciBinary.h +++ b/lib/libnx/include/nx/AciBinary.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include #include #include diff --git a/lib/nx/AciHeader.h b/lib/libnx/include/nx/AciHeader.h similarity index 99% rename from lib/nx/AciHeader.h rename to lib/libnx/include/nx/AciHeader.h index f45694a..c7686cc 100644 --- a/lib/nx/AciHeader.h +++ b/lib/libnx/include/nx/AciHeader.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include +#include #include namespace nx diff --git a/lib/nx/AcidBinary.h b/lib/libnx/include/nx/AcidBinary.h similarity index 97% rename from lib/nx/AcidBinary.h rename to lib/libnx/include/nx/AcidBinary.h index 4f27159..6d4cd52 100644 --- a/lib/nx/AcidBinary.h +++ b/lib/libnx/include/nx/AcidBinary.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include #include diff --git a/lib/nx/FacBinary.h b/lib/libnx/include/nx/FacBinary.h similarity index 97% rename from lib/nx/FacBinary.h rename to lib/libnx/include/nx/FacBinary.h index 4b9d4e6..fa9c6b0 100644 --- a/lib/nx/FacBinary.h +++ b/lib/libnx/include/nx/FacBinary.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include #include diff --git a/lib/nx/FacHeader.h b/lib/libnx/include/nx/FacHeader.h similarity index 99% rename from lib/nx/FacHeader.h rename to lib/libnx/include/nx/FacHeader.h index 10e1773..e2edfee 100644 --- a/lib/nx/FacHeader.h +++ b/lib/libnx/include/nx/FacHeader.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include #include diff --git a/lib/nx/HandleTableSizeEntry.h b/lib/libnx/include/nx/HandleTableSizeEntry.h similarity index 100% rename from lib/nx/HandleTableSizeEntry.h rename to lib/libnx/include/nx/HandleTableSizeEntry.h diff --git a/lib/nx/HandleTableSizeHandler.h b/lib/libnx/include/nx/HandleTableSizeHandler.h similarity index 100% rename from lib/nx/HandleTableSizeHandler.h rename to lib/libnx/include/nx/HandleTableSizeHandler.h diff --git a/lib/nx/IKernelCapabilityHandler.h b/lib/libnx/include/nx/IKernelCapabilityHandler.h similarity index 100% rename from lib/nx/IKernelCapabilityHandler.h rename to lib/libnx/include/nx/IKernelCapabilityHandler.h diff --git a/lib/nx/InteruptEntry.h b/lib/libnx/include/nx/InteruptEntry.h similarity index 100% rename from lib/nx/InteruptEntry.h rename to lib/libnx/include/nx/InteruptEntry.h diff --git a/lib/nx/InteruptHandler.h b/lib/libnx/include/nx/InteruptHandler.h similarity index 100% rename from lib/nx/InteruptHandler.h rename to lib/libnx/include/nx/InteruptHandler.h diff --git a/lib/nx/KcBinary.h b/lib/libnx/include/nx/KcBinary.h similarity index 98% rename from lib/nx/KcBinary.h rename to lib/libnx/include/nx/KcBinary.h index a339d27..47780cb 100644 --- a/lib/nx/KcBinary.h +++ b/lib/libnx/include/nx/KcBinary.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include +#include #include #include #include diff --git a/lib/nx/KernelCapability.h b/lib/libnx/include/nx/KernelCapability.h similarity index 100% rename from lib/nx/KernelCapability.h rename to lib/libnx/include/nx/KernelCapability.h diff --git a/lib/nx/KernelVersionEntry.h b/lib/libnx/include/nx/KernelVersionEntry.h similarity index 100% rename from lib/nx/KernelVersionEntry.h rename to lib/libnx/include/nx/KernelVersionEntry.h diff --git a/lib/nx/KernelVersionHandler.h b/lib/libnx/include/nx/KernelVersionHandler.h similarity index 100% rename from lib/nx/KernelVersionHandler.h rename to lib/libnx/include/nx/KernelVersionHandler.h diff --git a/lib/nx/MemoryMappingHandler.h b/lib/libnx/include/nx/MemoryMappingHandler.h similarity index 100% rename from lib/nx/MemoryMappingHandler.h rename to lib/libnx/include/nx/MemoryMappingHandler.h diff --git a/lib/nx/MemoryPageEntry.h b/lib/libnx/include/nx/MemoryPageEntry.h similarity index 100% rename from lib/nx/MemoryPageEntry.h rename to lib/libnx/include/nx/MemoryPageEntry.h diff --git a/lib/nx/MiscFlagsEntry.h b/lib/libnx/include/nx/MiscFlagsEntry.h similarity index 100% rename from lib/nx/MiscFlagsEntry.h rename to lib/libnx/include/nx/MiscFlagsEntry.h diff --git a/lib/nx/MiscFlagsHandler.h b/lib/libnx/include/nx/MiscFlagsHandler.h similarity index 100% rename from lib/nx/MiscFlagsHandler.h rename to lib/libnx/include/nx/MiscFlagsHandler.h diff --git a/lib/nx/MiscParamsEntry.h b/lib/libnx/include/nx/MiscParamsEntry.h similarity index 100% rename from lib/nx/MiscParamsEntry.h rename to lib/libnx/include/nx/MiscParamsEntry.h diff --git a/lib/nx/MiscParamsHandler.h b/lib/libnx/include/nx/MiscParamsHandler.h similarity index 100% rename from lib/nx/MiscParamsHandler.h rename to lib/libnx/include/nx/MiscParamsHandler.h diff --git a/lib/nx/NXCrypto.h b/lib/libnx/include/nx/NXCrypto.h similarity index 99% rename from lib/nx/NXCrypto.h rename to lib/libnx/include/nx/NXCrypto.h index 76c781b..9269643 100644 --- a/lib/nx/NXCrypto.h +++ b/lib/libnx/include/nx/NXCrypto.h @@ -69,6 +69,8 @@ namespace crypto // aes128-cbc keys u8 xci_header_key[16] = { 0x01, 0xc5, 0x8f, 0xe7, 0x2d, 0x13, 0x5a, 0xb2, 0x9a, 0x3f, 0x69, 0x33, 0x95, 0x74, 0xb1 }; u8 eticket_common_key[16] = { 0x55, 0xA3, 0xF8, 0x72, 0xBD, 0xC8, 0x0C, 0x55, 0x5A, 0x65, 0x43, 0x81, 0x13, 0x9E, 0x15, 0x3B }; // lol this 3ds dev common key + + u8 wii_sd_key[16] = { 0xAB, 0x01, 0xB9, 0xD8, 0xE1, 0x62, 0x2B, 0x08, 0xAF, 0xBA, 0xD8, 0x4D, 0xBF, 0xC2, 0xA5, 0x5D }; } namespace prod diff --git a/lib/nx/NcaHeader.h b/lib/libnx/include/nx/NcaHeader.h similarity index 99% rename from lib/nx/NcaHeader.h rename to lib/libnx/include/nx/NcaHeader.h index 0484a13..8dc0cea 100644 --- a/lib/nx/NcaHeader.h +++ b/lib/libnx/include/nx/NcaHeader.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include +#include #include #include #include diff --git a/lib/nx/NpdmBinary.h b/lib/libnx/include/nx/NpdmBinary.h similarity index 97% rename from lib/nx/NpdmBinary.h rename to lib/libnx/include/nx/NpdmBinary.h index d61466f..fb01c59 100644 --- a/lib/nx/NpdmBinary.h +++ b/lib/libnx/include/nx/NpdmBinary.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include #include #include diff --git a/lib/nx/NpdmFile.h b/lib/libnx/include/nx/NpdmFile.h similarity index 100% rename from lib/nx/NpdmFile.h rename to lib/libnx/include/nx/NpdmFile.h diff --git a/lib/nx/NpdmHeader.h b/lib/libnx/include/nx/NpdmHeader.h similarity index 99% rename from lib/nx/NpdmHeader.h rename to lib/libnx/include/nx/NpdmHeader.h index ddb11ef..c54b0fd 100644 --- a/lib/nx/NpdmHeader.h +++ b/lib/libnx/include/nx/NpdmHeader.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include +#include #include namespace nx diff --git a/lib/nx/PfsHeader.h b/lib/libnx/include/nx/PfsHeader.h similarity index 98% rename from lib/nx/PfsHeader.h rename to lib/libnx/include/nx/PfsHeader.h index d1e7d39..1a70f4e 100644 --- a/lib/nx/PfsHeader.h +++ b/lib/libnx/include/nx/PfsHeader.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include +#include #include #include diff --git a/lib/nx/SacBinary.h b/lib/libnx/include/nx/SacBinary.h similarity index 97% rename from lib/nx/SacBinary.h rename to lib/libnx/include/nx/SacBinary.h index 6b5fd7c..b1c816e 100644 --- a/lib/nx/SacBinary.h +++ b/lib/libnx/include/nx/SacBinary.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include +#include #include #include #include diff --git a/lib/nx/SacEntry.h b/lib/libnx/include/nx/SacEntry.h similarity index 97% rename from lib/nx/SacEntry.h rename to lib/libnx/include/nx/SacEntry.h index 55dbf3f..6900a26 100644 --- a/lib/nx/SacEntry.h +++ b/lib/libnx/include/nx/SacEntry.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include +#include #include namespace nx diff --git a/lib/nx/SystemCallEntry.h b/lib/libnx/include/nx/SystemCallEntry.h similarity index 100% rename from lib/nx/SystemCallEntry.h rename to lib/libnx/include/nx/SystemCallEntry.h diff --git a/lib/nx/SystemCallHandler.h b/lib/libnx/include/nx/SystemCallHandler.h similarity index 100% rename from lib/nx/SystemCallHandler.h rename to lib/libnx/include/nx/SystemCallHandler.h diff --git a/lib/nx/ThreadInfoEntry.h b/lib/libnx/include/nx/ThreadInfoEntry.h similarity index 100% rename from lib/nx/ThreadInfoEntry.h rename to lib/libnx/include/nx/ThreadInfoEntry.h diff --git a/lib/nx/ThreadInfoHandler.h b/lib/libnx/include/nx/ThreadInfoHandler.h similarity index 100% rename from lib/nx/ThreadInfoHandler.h rename to lib/libnx/include/nx/ThreadInfoHandler.h diff --git a/lib/nx/XciHeader.h b/lib/libnx/include/nx/XciHeader.h similarity index 98% rename from lib/nx/XciHeader.h rename to lib/libnx/include/nx/XciHeader.h index e707413..a13bd55 100644 --- a/lib/nx/XciHeader.h +++ b/lib/libnx/include/nx/XciHeader.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include +#include #include #include diff --git a/lib/fnd/makefile b/lib/libnx/makefile similarity index 68% rename from lib/fnd/makefile rename to lib/libnx/makefile index cea813e..920e98d 100644 --- a/lib/fnd/makefile +++ b/lib/libnx/makefile @@ -1,12 +1,16 @@ # Sources -SRC_DIR = . +SRC_DIR = source OBJS = $(foreach dir,$(SRC_DIR),$(subst .cpp,.o,$(wildcard $(dir)/*.cpp))) $(foreach dir,$(SRC_DIR),$(subst .c,.o,$(wildcard $(dir)/*.c))) -INC_DIR = .. -INCS = $(foreach dir,$(INC_DIR), -I"$(dir)/") +# External dependencies +DEPENDS = fnd crypto +LIB_DIR = .. +INCS = -I"include" $(foreach dep,$(DEPENDS), -I"$(LIB_DIR)/lib$(dep)/include") + # Compiler Settings CXXFLAGS = -std=c++11 $(INCS) -D__STDC_FORMAT_MACROS -Wall -Wno-unused-but-set-variable -Wno-unused-value +CFLAGS = -std=c11 $(INCS) -Wall -Wno-unused-but-set-variable -Wno-unused-value ifeq ($(OS),Windows_NT) # Windows Only Flags/Libs CC = x86_64-w64-mingw32-gcc @@ -20,7 +24,7 @@ else endif # Output -OUTPUT = ../lib$(shell basename $(CURDIR)).a +OUTPUT = $(shell basename $(CURDIR)).a main: build diff --git a/lib/nx/nx.vcxproj b/lib/libnx/nx.vcxproj similarity index 54% rename from lib/nx/nx.vcxproj rename to lib/libnx/nx.vcxproj index 9a92938..432e43c 100644 --- a/lib/nx/nx.vcxproj +++ b/lib/libnx/nx.vcxproj @@ -19,70 +19,73 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 15.0 @@ -93,26 +96,26 @@ - Application + StaticLibrary true v141 MultiByte - Application + StaticLibrary false v141 true MultiByte - Application + StaticLibrary true v141 MultiByte - Application + StaticLibrary false v141 true @@ -142,7 +145,8 @@ Level3 Disabled true - ..\ + ..\libfnd\include;..\libcrypto\include;..\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -150,7 +154,8 @@ Level3 Disabled true - ..\ + ..\libfnd\include;..\libcrypto\include;..\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -160,7 +165,8 @@ true true true - ..\ + ..\libfnd\include;..\libcrypto\include;..\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -174,6 +180,8 @@ true true true + ..\libfnd\include;..\libcrypto\include;..\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true diff --git a/lib/nx/nx.vcxproj.filters b/lib/libnx/nx.vcxproj.filters similarity index 56% rename from lib/nx/nx.vcxproj.filters rename to lib/libnx/nx.vcxproj.filters index 594b901..995cebf 100644 --- a/lib/nx/nx.vcxproj.filters +++ b/lib/libnx/nx.vcxproj.filters @@ -15,192 +15,192 @@ - + 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 - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header 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 - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files diff --git a/lib/nx/AciBinary.cpp b/lib/libnx/source/AciBinary.cpp similarity index 99% rename from lib/nx/AciBinary.cpp rename to lib/libnx/source/AciBinary.cpp index 7b73205..9879127 100644 --- a/lib/nx/AciBinary.cpp +++ b/lib/libnx/source/AciBinary.cpp @@ -1,4 +1,4 @@ -#include "AciBinary.h" +#include diff --git a/lib/nx/AciHeader.cpp b/lib/libnx/source/AciHeader.cpp similarity index 99% rename from lib/nx/AciHeader.cpp rename to lib/libnx/source/AciHeader.cpp index e743747..11c7be1 100644 --- a/lib/nx/AciHeader.cpp +++ b/lib/libnx/source/AciHeader.cpp @@ -1,4 +1,4 @@ -#include "AciHeader.h" +#include using namespace nx; diff --git a/lib/nx/AcidBinary.cpp b/lib/libnx/source/AcidBinary.cpp similarity index 99% rename from lib/nx/AcidBinary.cpp rename to lib/libnx/source/AcidBinary.cpp index 3224405..7da5b09 100644 --- a/lib/nx/AcidBinary.cpp +++ b/lib/libnx/source/AcidBinary.cpp @@ -1,4 +1,4 @@ -#include "AcidBinary.h" +#include diff --git a/lib/nx/FacBinary.cpp b/lib/libnx/source/FacBinary.cpp similarity index 99% rename from lib/nx/FacBinary.cpp rename to lib/libnx/source/FacBinary.cpp index d6a4f1d..db74f68 100644 --- a/lib/nx/FacBinary.cpp +++ b/lib/libnx/source/FacBinary.cpp @@ -1,4 +1,4 @@ -#include "FacBinary.h" +#include diff --git a/lib/nx/FacHeader.cpp b/lib/libnx/source/FacHeader.cpp similarity index 99% rename from lib/nx/FacHeader.cpp rename to lib/libnx/source/FacHeader.cpp index 85d1660..ffac90f 100644 --- a/lib/nx/FacHeader.cpp +++ b/lib/libnx/source/FacHeader.cpp @@ -1,4 +1,4 @@ -#include "FacHeader.h" +#include diff --git a/lib/nx/HandleTableSizeEntry.cpp b/lib/libnx/source/HandleTableSizeEntry.cpp similarity index 96% rename from lib/nx/HandleTableSizeEntry.cpp rename to lib/libnx/source/HandleTableSizeEntry.cpp index ebd7ff3..0b99811 100644 --- a/lib/nx/HandleTableSizeEntry.cpp +++ b/lib/libnx/source/HandleTableSizeEntry.cpp @@ -1,4 +1,4 @@ -#include "HandleTableSizeEntry.h" +#include diff --git a/lib/nx/HandleTableSizeHandler.cpp b/lib/libnx/source/HandleTableSizeHandler.cpp similarity index 97% rename from lib/nx/HandleTableSizeHandler.cpp rename to lib/libnx/source/HandleTableSizeHandler.cpp index 1fe65b8..96d5905 100644 --- a/lib/nx/HandleTableSizeHandler.cpp +++ b/lib/libnx/source/HandleTableSizeHandler.cpp @@ -1,4 +1,4 @@ -#include "HandleTableSizeHandler.h" +#include diff --git a/lib/nx/InteruptEntry.cpp b/lib/libnx/source/InteruptEntry.cpp similarity index 97% rename from lib/nx/InteruptEntry.cpp rename to lib/libnx/source/InteruptEntry.cpp index 63b8bee..4335d1b 100644 --- a/lib/nx/InteruptEntry.cpp +++ b/lib/libnx/source/InteruptEntry.cpp @@ -1,4 +1,4 @@ -#include "InteruptEntry.h" +#include diff --git a/lib/nx/InteruptHandler.cpp b/lib/libnx/source/InteruptHandler.cpp similarity index 98% rename from lib/nx/InteruptHandler.cpp rename to lib/libnx/source/InteruptHandler.cpp index 346a519..129b22c 100644 --- a/lib/nx/InteruptHandler.cpp +++ b/lib/libnx/source/InteruptHandler.cpp @@ -1,4 +1,4 @@ -#include "InteruptHandler.h" +#include diff --git a/lib/nx/KcBinary.cpp b/lib/libnx/source/KcBinary.cpp similarity index 99% rename from lib/nx/KcBinary.cpp rename to lib/libnx/source/KcBinary.cpp index b0e932d..6291d4b 100644 --- a/lib/nx/KcBinary.cpp +++ b/lib/libnx/source/KcBinary.cpp @@ -1,4 +1,4 @@ -#include "KcBinary.h" +#include diff --git a/lib/nx/KernelCapability.cpp b/lib/libnx/source/KernelCapability.cpp similarity index 97% rename from lib/nx/KernelCapability.cpp rename to lib/libnx/source/KernelCapability.cpp index 15e8e33..a1b2a88 100644 --- a/lib/nx/KernelCapability.cpp +++ b/lib/libnx/source/KernelCapability.cpp @@ -1,4 +1,4 @@ -#include "KernelCapability.h" +#include using namespace nx; diff --git a/lib/nx/KernelVersionEntry.cpp b/lib/libnx/source/KernelVersionEntry.cpp similarity index 97% rename from lib/nx/KernelVersionEntry.cpp rename to lib/libnx/source/KernelVersionEntry.cpp index 19277ce..11c3de7 100644 --- a/lib/nx/KernelVersionEntry.cpp +++ b/lib/libnx/source/KernelVersionEntry.cpp @@ -1,4 +1,4 @@ -#include "KernelVersionEntry.h" +#include diff --git a/lib/nx/KernelVersionHandler.cpp b/lib/libnx/source/KernelVersionHandler.cpp similarity index 98% rename from lib/nx/KernelVersionHandler.cpp rename to lib/libnx/source/KernelVersionHandler.cpp index f312f5e..ab1791f 100644 --- a/lib/nx/KernelVersionHandler.cpp +++ b/lib/libnx/source/KernelVersionHandler.cpp @@ -1,4 +1,4 @@ -#include "KernelVersionHandler.h" +#include diff --git a/lib/nx/MemoryMappingHandler.cpp b/lib/libnx/source/MemoryMappingHandler.cpp similarity index 98% rename from lib/nx/MemoryMappingHandler.cpp rename to lib/libnx/source/MemoryMappingHandler.cpp index c37a123..d8b29cf 100644 --- a/lib/nx/MemoryMappingHandler.cpp +++ b/lib/libnx/source/MemoryMappingHandler.cpp @@ -1,5 +1,5 @@ -#include "MemoryMappingHandler.h" -#include "MemoryPageEntry.h" +#include +#include nx::MemoryMappingHandler::MemoryMappingHandler() : diff --git a/lib/nx/MemoryPageEntry.cpp b/lib/libnx/source/MemoryPageEntry.cpp similarity index 98% rename from lib/nx/MemoryPageEntry.cpp rename to lib/libnx/source/MemoryPageEntry.cpp index b005d0e..0456393 100644 --- a/lib/nx/MemoryPageEntry.cpp +++ b/lib/libnx/source/MemoryPageEntry.cpp @@ -1,4 +1,4 @@ -#include "MemoryPageEntry.h" +#include diff --git a/lib/nx/MiscFlagsEntry.cpp b/lib/libnx/source/MiscFlagsEntry.cpp similarity index 96% rename from lib/nx/MiscFlagsEntry.cpp rename to lib/libnx/source/MiscFlagsEntry.cpp index 4b40de6..292fd7c 100644 --- a/lib/nx/MiscFlagsEntry.cpp +++ b/lib/libnx/source/MiscFlagsEntry.cpp @@ -1,4 +1,4 @@ -#include "MiscFlagsEntry.h" +#include diff --git a/lib/nx/MiscFlagsHandler.cpp b/lib/libnx/source/MiscFlagsHandler.cpp similarity index 98% rename from lib/nx/MiscFlagsHandler.cpp rename to lib/libnx/source/MiscFlagsHandler.cpp index f2a63d6..9dcbf0f 100644 --- a/lib/nx/MiscFlagsHandler.cpp +++ b/lib/libnx/source/MiscFlagsHandler.cpp @@ -1,4 +1,4 @@ -#include "MiscFlagsHandler.h" +#include diff --git a/lib/nx/MiscParamsEntry.cpp b/lib/libnx/source/MiscParamsEntry.cpp similarity index 96% rename from lib/nx/MiscParamsEntry.cpp rename to lib/libnx/source/MiscParamsEntry.cpp index 581d303..24b9ae5 100644 --- a/lib/nx/MiscParamsEntry.cpp +++ b/lib/libnx/source/MiscParamsEntry.cpp @@ -1,4 +1,4 @@ -#include "MiscParamsEntry.h" +#include diff --git a/lib/nx/MiscParamsHandler.cpp b/lib/libnx/source/MiscParamsHandler.cpp similarity index 97% rename from lib/nx/MiscParamsHandler.cpp rename to lib/libnx/source/MiscParamsHandler.cpp index 7f69909..8948974 100644 --- a/lib/nx/MiscParamsHandler.cpp +++ b/lib/libnx/source/MiscParamsHandler.cpp @@ -1,4 +1,4 @@ -#include "MiscParamsHandler.h" +#include diff --git a/lib/nx/NcaHeader.cpp b/lib/libnx/source/NcaHeader.cpp similarity index 99% rename from lib/nx/NcaHeader.cpp rename to lib/libnx/source/NcaHeader.cpp index 7f51aaa..ca19423 100644 --- a/lib/nx/NcaHeader.cpp +++ b/lib/libnx/source/NcaHeader.cpp @@ -1,5 +1,4 @@ -#include "NcaHeader.h" -#include +#include using namespace nx; diff --git a/lib/nx/NpdmBinary.cpp b/lib/libnx/source/NpdmBinary.cpp similarity index 98% rename from lib/nx/NpdmBinary.cpp rename to lib/libnx/source/NpdmBinary.cpp index 43380eb..97a6e9c 100644 --- a/lib/nx/NpdmBinary.cpp +++ b/lib/libnx/source/NpdmBinary.cpp @@ -1,4 +1,4 @@ -#include "NpdmBinary.h" +#include diff --git a/lib/nx/NpdmHeader.cpp b/lib/libnx/source/NpdmHeader.cpp similarity index 99% rename from lib/nx/NpdmHeader.cpp rename to lib/libnx/source/NpdmHeader.cpp index d5f73dc..bbe9892 100644 --- a/lib/nx/NpdmHeader.cpp +++ b/lib/libnx/source/NpdmHeader.cpp @@ -1,4 +1,4 @@ -#include "NpdmHeader.h" +#include diff --git a/lib/nx/PfsHeader.cpp b/lib/libnx/source/PfsHeader.cpp similarity index 99% rename from lib/nx/PfsHeader.cpp rename to lib/libnx/source/PfsHeader.cpp index 205a26f..53b4a0e 100644 --- a/lib/nx/PfsHeader.cpp +++ b/lib/libnx/source/PfsHeader.cpp @@ -1,4 +1,4 @@ -#include "PfsHeader.h" +#include diff --git a/lib/nx/SacBinary.cpp b/lib/libnx/source/SacBinary.cpp similarity index 98% rename from lib/nx/SacBinary.cpp rename to lib/libnx/source/SacBinary.cpp index 5cab445..5ec9d2a 100644 --- a/lib/nx/SacBinary.cpp +++ b/lib/libnx/source/SacBinary.cpp @@ -1,4 +1,4 @@ -#include "SacBinary.h" +#include using namespace nx; diff --git a/lib/nx/SacEntry.cpp b/lib/libnx/source/SacEntry.cpp similarity index 99% rename from lib/nx/SacEntry.cpp rename to lib/libnx/source/SacEntry.cpp index b2065a5..66acc87 100644 --- a/lib/nx/SacEntry.cpp +++ b/lib/libnx/source/SacEntry.cpp @@ -1,4 +1,4 @@ -#include "SacEntry.h" +#include using namespace nx; diff --git a/lib/nx/SystemCallEntry.cpp b/lib/libnx/source/SystemCallEntry.cpp similarity index 97% rename from lib/nx/SystemCallEntry.cpp rename to lib/libnx/source/SystemCallEntry.cpp index dde30ba..a2c9861 100644 --- a/lib/nx/SystemCallEntry.cpp +++ b/lib/libnx/source/SystemCallEntry.cpp @@ -1,4 +1,4 @@ -#include "SystemCallEntry.h" +#include diff --git a/lib/nx/SystemCallHandler.cpp b/lib/libnx/source/SystemCallHandler.cpp similarity index 97% rename from lib/nx/SystemCallHandler.cpp rename to lib/libnx/source/SystemCallHandler.cpp index ed86344..21b0b1a 100644 --- a/lib/nx/SystemCallHandler.cpp +++ b/lib/libnx/source/SystemCallHandler.cpp @@ -1,5 +1,5 @@ -#include "SystemCallHandler.h" -#include "SystemCallEntry.h" +#include +#include nx::SystemCallHandler::SystemCallHandler() : diff --git a/lib/nx/ThreadInfoEntry.cpp b/lib/libnx/source/ThreadInfoEntry.cpp similarity index 98% rename from lib/nx/ThreadInfoEntry.cpp rename to lib/libnx/source/ThreadInfoEntry.cpp index fdddb95..b07089d 100644 --- a/lib/nx/ThreadInfoEntry.cpp +++ b/lib/libnx/source/ThreadInfoEntry.cpp @@ -1,4 +1,4 @@ -#include "ThreadInfoEntry.h" +#include diff --git a/lib/nx/ThreadInfoHandler.cpp b/lib/libnx/source/ThreadInfoHandler.cpp similarity index 98% rename from lib/nx/ThreadInfoHandler.cpp rename to lib/libnx/source/ThreadInfoHandler.cpp index 43e8983..2dad8ec 100644 --- a/lib/nx/ThreadInfoHandler.cpp +++ b/lib/libnx/source/ThreadInfoHandler.cpp @@ -1,4 +1,4 @@ -#include "ThreadInfoHandler.h" +#include diff --git a/lib/nx/XciHeader.cpp b/lib/libnx/source/XciHeader.cpp similarity index 55% rename from lib/nx/XciHeader.cpp rename to lib/libnx/source/XciHeader.cpp index e9f52c4..35a96ad 100644 --- a/lib/nx/XciHeader.cpp +++ b/lib/libnx/source/XciHeader.cpp @@ -1,4 +1,4 @@ -#include "XciHeader.h" +#include diff --git a/lib/makefile b/lib/makefile index cc5fbcb..9dd2971 100644 --- a/lib/makefile +++ b/lib/makefile @@ -1,4 +1,4 @@ -LIBS = fnd crypto es nx +LIBS = libfnd libcrypto libes libnx main: build rebuild: clean build diff --git a/programs/makefile b/programs/makefile index 14bea3d..5cf9eaf 100644 --- a/programs/makefile +++ b/programs/makefile @@ -1,13 +1,14 @@ PROGS = ncatool npdmtool pfstool tiktool +BIN_DIR = "../bin" main: build rebuild: clean build build: - mkdir -p "../bin" - @$(foreach prog,$(PROGS), cd $(prog) && $(MAKE) && cd ..;) + mkdir -p $(BIN_DIR) + @$(foreach prog,$(PROGS), cd $(prog) && $(MAKE) && cd .. && cp -r $(prog)/bin/* $(BIN_DIR);) clean: @$(foreach prog,$(PROGS), cd $(prog) && $(MAKE) clean && cd ..;) - #rm -rf "../bin" \ No newline at end of file + rm -rf $(BIN_DIR) \ No newline at end of file diff --git a/programs/ncatool/bin/ncatool b/programs/ncatool/bin/ncatool new file mode 100644 index 0000000000000000000000000000000000000000..45b6d150433c4b581e3c8850666d437b02b1f26f GIT binary patch literal 112761 zcmeFaeSB2awLg3&$v{9P(Nc|wI$BWhH9?A~*bb1Xg9c0?*r;F2)7^{`|7zO06HOksHbonzxwW&j zG1?GtIq{#)=ayGG9FSrP9NF6QPc8x$@`VlyM+*Fui2~|!WFE<-el75+Ul;O)4*R5GI@H@oZKMD4 zWc%`x+$d4mO+d@$e@#fd^q2dguY|4#p5r2*n=f>jbArI@P?!5Y3+;W ziEJK)|0o8C{{G@UPd8vi{y?#C-S*9?Ds_?o7IO~o(1JoNcnD-ORg_MNdQU;Qj??HM0EaJ2Xq zZL#yQl!Nd6cE!vk+aO~5Hw_h^9EW-ZjE;x@#D@P=1Zh0}0UJHrZSdqrR~&oJvcb38 z==lWv@$4CDW9QvAdd|1O??7kA)1PgFf73?K$u|63ZTP3z*k5kbFK5{3>9xV<+u%<_ zV8(0jr8fO?oelnen||45qyHTn|8&~$AF{Fk1{?oeZsX5OZSXJK=Eq`127P|Ga90KhdULb8Ps>+3-hg{4m6(U2ogqU$bd%zfJ#MXk*U^8~&GV^zXOf zpKD|1Pi@*e!A4Ki#-C@}*zdE^AF#3KT^s(5vfiEyH(GA~-3dF-)<$dfBZ?TAFG;_U z_#TPZ=gEH5OZ?i2R{ooz{~YZ^?eT})tYNd%^Ihm6eCrf}F9jd{T_E}UvfNyz`HTKW zNk3Gb=H{~g&u8GLdfn2V@sjWiAmyLj82-NlNA&6-hO zSy7r-w6MHX(Be}Hs(g#9ON&YhmXxk2D8`i!>;=VjMFoqhOG^t%>xxUOd}WmtTEUI8 z=hjR@wN+V}1yoawuex%DXU?^Ai)I#kq)b(9b!ow}vT9##QMr(qk>$B=F08w8t}pAd zf&x@lxx8Q@>MJTQuPk0hOxMn>`F1hdR_)>9+?p9#GjoeQp1gv&Sp|lEYxUKoi%N=o zMTW%0xDwDjsitgYDY0>zxOz6Gs(fZKOv)-=TvT1)t1c?@)u0*N7SG&;GxG}aG7Ivu z3Ou>j&b^e3m<+Fz3E5d(CqysTTT@qPgT;a@}k;3o^R9CYP61+~QlTw?1oP!Q6t|_7TMVl0-&h<^qTvS=Tyr{aQpbVi@)~H*>JrlglbJ9bd4x46#aX zFulM%v=H%IQBYjuD_%@3hXbY*7gZG%m-$vu!wPPxt1GA~t*)u8C@Kf8U|A+RNbz3w zMBM|5+n0i?VmbXw-JzRk_*Vq><#3}I0-mKy&CY=Y$Nj{~i2IsSUxDy`K~Y6XK@Gx( zhL}gFrlBArgd4*#juE8}BPJji%rgvctq*}q`KovcYFSdSsHlvwRHL?ZNl96?R$WSZdJiD($b}HuvS)6R9;cLR9jS2TDpXg#Y?NSWi=I5)nygFMU1Fgp)D#dudFH67A>zv z@M=g`MI}U9TDgo;7#SuL=F+0F3hn9{GYT%fI8(biXXf-71rsmMnq*v>R}(M(w!r4+ zgLzU+2_iG{^QTRpS&(({r79m1cM|_E8M`N>bo?cwO#dZeUnQ=HLS^wU@dz2G zKjMBu(%mR;`0)eSuBK`?fle}`%F0fpo%SMGt{q)AjM`RZ$frPu;04ec@1&K+Fm09O zFB$j=%1-TGS$^Z!OK_E<{g*8JCftXud6KpnW%?V47BZwgGwm<+KYgAhHhpd;TD_cq z3GXI^{OeKh({v<3xlSPd=?XqWE8-H>N$t`9TnZiyG5*FYc+ua2l&RpU7xlj>3SKsq zNp1zNo)dT#yy}Ns1&@v}{_++4a09Dpg$iCCQ80C}f*+yqS1EXOyzy73;N_7F)9Mv` zn!$~8DFv^u)rj1r;7?Ncn-#pee``_j-%$9sD0n)v(EnN${5N$ZV4H$JMZvc#_)`^p zr-G-m5&f@A!P8lX{@1PGPuG!vJqlhwGb3_X!Jnb<_bK=@75spLr!xlQ&tb-`%RpiT zD|oMhPgn3~EBFir|2+loQt;;}`0)zt>7nnz9g8U-+mON z=(x@JH|;DpuBg12h>@Ns{>D8>Wts{iU0lA8$}|N;+PQo$l_~W{TDg1|l_}*%TDZKD z%9QFOO-5sk}F zP?=I`r0<{9{zs|oqH+(HAEYv+$VeBL@1ruMz(_ln@1-)OzDO&V@1ioLyhsa|S5lc$ zU8IT2)l@#0%Jp2nmCBUbB2`>oNagWVF68o!RGvWPTrSU{GNrbNo6FZwnNnILlgrbo zOsOp5;_?+#rW6)Q=ki1*@$nf}*q_WBQc8xHm5 z=FJSX7e3?GyrGW1-w+7Bf*cSY3di&>N;@kX>xHYafSl*Oh}NCnhJle@|A)(y7QEC3 zeVkDG7wjTZv?uMXdcw6)N$2kvNCv;xzuVjK$#=buF7ImtwGiG;jNZoAeft_s^~8+O{+a=9wftephFhybz$=l!=aCjS54Bg%3vxh^3Ut``e$_+3Nxj`ZfTV_Fbldn)3zbK zQ%$Jb(TAF{I&~X`=C10!3v@Gc;RtB0?ehBPbwYc4j^EQ(;tiyXqw(hTdj_)FVRNT9 z=;`tL-y{#6dJ_l%52QljY-C9$cN`q%4Ngr*rCr|OtRCRnz|%g{|CgD5=zR_T+ljr5 z7S76N>46gOrJ@c@K-=MS!*T9di(;*TB}Q*ugnWg1I=vk|!@M2g6tBO-8=Ti8to;L7 z*fh_y_5tL0tF`bZv9qNXGw;tEZ00vqGhGxxMps-66$3B=2FN(++DTzW7W881?4sEz zeBa;oE=I7Nwd{9Bn=_3zhdg0$YLR^;9P;#0q4(R+9yYc2iT*~nn{jlX5l5>BxRO4K z$iB2?dv>{?B77=Ut%vn|tGujUEiB@hC)rx_Tw(KF%;ue7o zJD{hFJLpPJIPIQuFcL-Mr{&G{t~p$f#eo0CRWt(p&sG7beICwgZ(y3^&QZIX(a!MO ze~U)jc>QtB5V$GWm`;NhMx3#hi(RZJ6kbR$&`1is4eb~esovm5CI%bbEW#o30vQ?H z$VzkqNBY=1Se;-Eg^QW5QP(~eE)|9)`A!rU$!U#OqAA|svpu9<7&fh~3M;Ya3-Ql( zGMWs%19=x@UGq>3Hg7N}g$TQy28-9v_C1fOd)G76@b|y6h<$-M*xQW2NcK7lv3n=Y ze;^hlmR&|blv{;9R)p%M(0@sxHw~f7tU?DAp>`=$B85IRgp#a6uR#cwr2JM-aR>iu zG5;M>3Wn1Sh7K#kN0Q;&21ARL;V+_wIR?GnO8q12@&7G%=OE8w!7h zm9h6qCa3+ReQkSMV?VO$uCGu-xQdjA8hfOddT&4rsX!K;xK;1h;lyS7?ia#$f{zE% zhp58Hhwoq*3B&Fpxdv9K8dfR|+b9epJ#1L*UB)Qe>!9w@M>eJ%ZRbA;ML7V;0Vao~ z$&qTpo5r0C|Da=uEIT%ps_{2!G-3l1WYHZczm?(YcSwGbv4B*OMn;aEBJ-@`5jI@_7Lk?RZwnOCHS zA!K_{q@-Yw*tVZ$O8-nqcagOJ?HvC{D2ggV;VMxS_J+bm zqNq3V9AP_~1=$%yZD7x<-Pv*`Dg^m%%z=nA^1O_*QkuQZuBm|oMGvRc7VbI|?Fje% z1stKqKFA=fwchW-yi)j_Yl(m%%OBJ0>5fE%-1{AO5If!*&PJEHXoy(q+qQw6Y zCK0i8!~zQIk`cW2Nn4wX$ccOp|IGC7@%rCTEWP22XtZ~Tf$k!Upy*^cAo2+897Gv! z72y7az)4oL?)4*RwW7XBs{g=>)_Y+Sl)$!D$@QX@izXAY?G!Xp(W%dvKf`pDF^uWnQQjYWPj7N`CT1vf8MbpZff6zSU8|iK6MXm3J`=FsW zg2Rc7n_~I52!5KvO#XIz{vN?kdDY}^ishd+k5(iNhsXO@@AKDoHmu&~NNfB6XBlf& zcTx;|BM-s%!V96@pyN6xxFmIE!(j{#A+uYN zDTYjr|MT$0ip*|YZy%3!1Fv^?y>cE##M7T6-e06vzd$D{x~k=hs-;rZ2VgbmP&F%9 znhM7n)z465YFXyv@UIn_8IYNYb0JkGO_5nCWo}nw(&EUx1Dvp9_s+Yd%+-p_JGhRm z=W#{GFJ-==$UKf~#WjB?*WCXZT(g5Z_yzQl;hOo1svk;KonX~nGassE1Eizvk_U+!;EM*FmioV44%m%B>E=A^1DRY4$vkTWsJ12}sJD>a% zBkDTNOE2s8`~-ZxX*2x>;%-vX_>S*eyim@W&_l~a%w5SdFF)WLi6~6X@qZj{f~ww6 zbNpcn;Rb3GQk{&>Y*IO0L0n3RECq26AzTXLBtpOnLx%>$tj14$W7{}bCv=k)GlTP; zTF&LY<}e&4%|IRsg^xl;X~>I2L#;;3o+1QlH4r}~gxdCdftb~J2yN#$&}$u&l5_b7 zW~CbrLrib`J*X6EW;_zpv;`v7?4$%@CXV6Ch3;#!gQNlMHQ0(Aq+*^X;i638{4E%JoCf-d=r6h3sY40?OU- zb%4?upAyo#o<$qTNas3gB3NIMmiV{HIB!>F0h9hFT_TfV2kks zhPXE{5C2gkcpo#Dnc}wN=HrnsFqtTaK(UckTzXc)L0lNs;y+KHtoBG)M9)hcMZ(|0 zpq2dlQ!%_Dqq>J~YhgAU~fm_VAG>JBnj&EC*8ugyCGA>xoDVK;bJd z>AgmJsM$Q_2?01dNX`z0uiyaTIE~jqwsP6_a+YYn*yK~QH0}G@2QXXnPT1}Bqub=T zO6AswmJFlzaX4bv0zd1mif8KpO;IwK)EK5*qRXi^p!GE3W5xh`GLCh8j=$U6_T18U zw$cB+X}^ZmaZG-d@{BZj9h+?HT|0|ku(xe4dkcYGIvFg)@6a)Y3f9TVo zVxjB{Z-CBuq(k&RjpwxmMr4Xe;jF{)i{9g*GVi#xrx@wPPS<6s!!mg&&^-#ewGg2H zXjpl|+3Qlq%E5E4Dj>%Wk`s>?wvIGHrcaM4qy3uMGIPu!ym3##8=Qy#jQo~vs8C}A zL&4M_+9TuWD3%XKoRV%ca&YFY`A+44;~Y8*PUO_^x+byy*Q}-T^^mOV;K2Q#hc$xCOcS463H*g$X zGO{e(=y$lU<6w$OZ#bNJ96=R|UCYuk^InUV`E99?d{czaNdhfbPM1Z{BYa2PG})*nXo7F7HN}H|Hrt7nv=MU zimeJk8NMqM+tBcGs6y|y3ppO>G}B}7_5j@mw0RTmAMa9Syq4fe^#v-k>@2jFM_(%J z01C1+@3Oj5GEq*$en|9QO6O0NRIfOH>gUT)c$F}P>eOW;;17?bY8v*qjk6>@5%7A& z>}$F+tEFvd7Z~drDJX7Zo*_I$Ik0Qp7^FV7@Fc=2YY;?{qE%fTPM{e(mgX6dyAGO$ zyXa9H7n)#229O6KOcCqo>P;cK%z3(GV{d$S)P9UlLC>_ZN_Y)(= zd??&`fN-Q(ciBojZ$hd9Zg1MQE+U9VK5XD~Ecj;(e69t**TCml@NY}JH;|jJRQtJ! zE>zGdr$}pZ7n`P>ZXnA|WF{d)o^JGo7MV;g5dNs5W?qT|Xl`Zqgx&rw?Dy7r-eP(% zw+gTuw<)~-x5D?aV#+OuNAB8DIE(hbl(uaiu}e?93se2?lG=~(>`ojt*A7zi`(dOe z4y%h4Qc{i9p$|`vkVMR;M!Ba_i zsGytfzfy3p*ZxUIxL10*?w0c5~#2o4ifXk4=AFltS}a+SFsyzZf9qX0Lb6i-e_cuc_VTf>ijI z?+`P#yPkWgf9|E|4$iw5<))pHt!}6dh5!0Ckby>4AH*gQG#UYvf8GnPTY$P56AEu4 zMyaU~ink}-hGU!b=Sa5W_6-Cv;`?V2SD%!Hi}M|P6>vc@}vb_sH59Ww0}A!7-rtDV#^Wn&G4oc zsSr7(c{?^g8l{nSo&d&EfW$=x&coXsZ-JuRfCC3)FiNYY(9`83hBz1iaYnKMQGTZmJP>SjQ`&4qn) zw|>ga95+jjWhTe%;0T{f_%(YdX_*TQWqlrUd&zKAJ`i%}n3uWcC4WeP7`!2OzK+Iq zp?)25BX8(B%JoYO zFF12;I90sh%(LNC@x+P9$RE5u!g8z6>(5mwg169?SEX?K7u#5%;)Si{Hk>M+ZN)Sx z>KCi_Ok>rq%%RWI8EeBpGS8vDYB5bE{fVNDrm6R6XnjCMTE){7Yp2NsJbOQoq)24n z9&?U5bUi|WAF~UE2i_o2p=Jjptl4)sDP|qK%xRYc>~DBNrS}}=?#o?N7oz_`KpFjy zkZ8l6Of#lsB#9`qZ?_SIQ95XjZFwr!WVAd&MZM*h$d>0(o8q?olX+&#zkZ!W<^54e zSX-V>idl!gLeU%Vifw!&Rfonu1SlK-C`s#$7rT5hY66~qYusMANeIEm@w=N73y z&*+DEM|haNbG7mf1bF7_!;rjucUt4Sa$pB?Y1#uehp?RnmgYQQa|!#5fu#u#*gV2+ zl32N-?xQipsvArKO?gBp1fjM91z1579&{`Qh92|-hL+R7lml}OU2X11W=+L zK#2fKEY4#$M8pg1Wod- z>@u%sn=&87eUOb_wWwKcjo>pqI( z|5U0*Hf)n}U1iD)^8fyQrp#i~Y;N13A6Wfgq7OL3Pvwl6*NG!?*$2FzI|GL=v3+oY z>4Qw}4x~bdj-MpV&mmT!gR}m>FR2>|(Q3Dtwb&P(IRA?|=~k%px|On4 zmUFqXt|Z=odwkqEACy^r{9cGWzidXw#nid`xp2+T*SgEWT{O*}$>6 z?g5wKapTzz(H>!^i&FrHV;^cyV5h>l?bZJSJL9&7{G1Lq!BrY9Q)Y2E(bkc1?o>if zAtY@hd8LvL%(+Ys=8hr?LVJ{qz*_hNE0uVw5UY1AzAjaKt?!+1dr80Fr0j>%O)T5w z#!WSKt;k5)VOj8f>#&4`q1Y?;ugguf>PQe{;zWo0ZW4M#iC9)fl^Zr%>rg17Vz<+l zSD{GWA-22_wK2Y&wLBKu6hSP#4 zPo{12^f%zmiH7zRto@C9!|I(byxbMb=M<;vcx9$5#w(`2bUS_QqmY)q&5h8r<~44= zC1Ssc1E9F$$-;G~9T)Wm`JGn^k>lc`CuL%5q+Z36>W54kbe|oRW`h#Dw(26mAM=d} zv4%tOE-GIBk~p>;%1@N^-io8RFjAP-n+=mOgU~Z8Y<7h%%-C*;{R7_@;)D93SOIY^ zVDYnYy2Ni9ffKK(kube&MDH}z{(^4`$>j*OBd)dI(ksMd3KgTMc-+=%y0FFCa?{#x z9I>~SPq^)^mCwIm2ZEdRyc5AwJapGwf2HeuxDGvz{fBVfrF>$p-T?ZL&N=1#h2X*y z%XEf&B~lhUXcwt9d*7vOb}QNyGlvbLQ19hK zXbT+DQlh-Bh?m8n2k20^g6}uOMlGN-#xeY60Nz+k#iLjVrhI*00dq3-rLAfXzdb2}=_+APmoVpB z@MRB0tseZa1G@&=D0Aq4L)g&`JM__z$*5WM=A?K-0d~~yj-4}PRQW_3y5cV zF5gX$ZxK>|R*n({&q0U9VL0*O4odD6W<&1A%K?;4xF6WQe}K_CS;ft0$6qrYzYC+d zW?Bd!8sgOaN}OEAjgca3-g=ye$B7|chd?d!JQbe@k@M#9P-Mi$^*7uJEm(5svxTU! z-PB9c#+=8io?|_Afj0gtbse&)3rs4IKt432u4hsgwy%Yq}41k2mfo-4@9^8TW?dgh{xsAMcqi(d}SL75Z6AJKtF({bUFA zIbC*BkmH)4&yQ^_zikfta?>OCQ?9@R60>(v+aMJRzrmNG@J$38R(ET)bQgu2Q%x4f zai6Y`yW)2Uk=}E3ky70C5Zz6E0t?yb1%wrr_8<~;bU(T${PP`Dul+Nca-MqYAG+c` zXhN8=;u<49j}b==V2l$-lWpRtjB7LEC`9%f%R4-`78^g)+!-x%E^xsKn`INkYREj9@v**@)Tc& z!jlMcn9wON*hAr8l3|K>Ea7pZB|Ipd4GxbU!U`kR@R*743$NWy^>KK_S?f|Dgu;Dv zJHk(H8<4|JpNS5MdmKR14?2`}L_MKE+>1(S9kE$T*~#DTo{IaDM?m(g7wQ}h-t(!o4dQha-jlb?$Z zeKqqjc$k3azlj;k@Z~4#+TO%!kuWtQb<7@M_)#sK@!LcvEE({O!zymOY4;XPB3jd8N=ca%h3Wur4=a0n3JD?+k5{Imo-Pz#%q=UUK znOyOD>*BBC_15R8;aI(OhPAim(5<%wy|w*W&}DC(%eU!_4dSU>9MoIY9GzQCx{p z8*-xujB7k5U@I-GIu7YXkrFu)FH$ZrZPv#%1}C0&#UQn=4IM{G9=)tj9U`G@73eU~ zh<9^sxRR?g=JbtpVc(%=7PZ8(v}l~@}-$Csh-cL`e8hS!tDaolH_{C|yQl({yX$+t1!fmz+6Z+L|= zP26lDqtTPb+OQkl6Tases`r>{!%O~77L#IiZ8-XP*M_(7VsB6!jkbxS4&0R#0~B!? z3O`BqE32PD@e^-t*uyt>?Bb_e7-U@={)$Cx;^$!^+Q(1)wPC~vI=gU5v^G59x8w$% z@0$2B6wV-MT^k0;FvUBT@c51;JoeF@HSR?JUn#*+o zLUrzVz)ZkQnSiY;C%NMLg3eeF8eM>LX`}Cqc`~PEI3ktqW7G_xYo1!LG1s-BM$1lm zfV4e9TCeoTH@Z zL*e)0$~~>hS#12sq)^<#KDoo8QrmrFXVU-GJ5Bn&i+5%EZ5q*SFoajI!ui(dQ{IG< z<0ED#B|US78KrUT!E{c4X^M^iLwm%FUOarP_Ml{H7gx3;fxgEQo0|f7NaEj=n{4Z) z&%-G7@(BC})%&lGz?1O=u81e9YYIZVi`Q#nAJ&N_Sh)8xBpzTxVfvXGQ7cEH+>qPB8$68_3&TOWhi_fp*VHXu8!q) zbz-)-;tAj_iwR2*zk{R0<8B6>Pb$s$85g-39ds$1aVuS;8F+}q(v0(gw>D$vlSVUU zaEtIf5}~ZkD5qxB{4#zs2It|msK&hKFGm7RJI0YbO+-qhDkVL;(}KJGAM7#CR0g;5EleFYt>os3Q?KJ~IG}1W$G51cFpm4xOF_xB_obbZkIWF2uZn7pYdSf9hE3f;YyY zRfrk$-3({A>laE?xsi#wG2vi(;pghQ!QH7oOLdM2Qt)6!jy<8@a}+GtT;Y)opk8DY zty&1hVf_T7=t&$xjUcX{Fsd))IYbTZ%?o%A1+p9a{InnI!ebmX%eB$6!h1Q+{Z1ir zUL)4{o-W636#OXkjzcl**NarZbKow2J7l{WJck?&s}ChFdn_=I%Y0TV#e z8g{3M7ZK@5ot`xp$W(#!FcLK~=LmtM7kXl2lp+`1-Nj&ICxakGHoBWS5`DwS!Q-nE z=?=Xkn4V=l0haUzHnKV)GSmO}nSMO)jz98T`8oei8&2m3SdZ5ReMp4QR%~bzVc*Ox zf0hCrZxD)*3)Txi)G-KF0mMdsAjqsi&LwJye;=<$d4qK7x{6`dI9nETlPj4gff5E4JYcYJPPt0;_!U@gj z;?EzZhSQ@umJ_c};14<6<=1J_wz<>Rd7^tgU#Ior4eWVebJlU}PTMw1UgAUFctNn; z(eCfSvu9s>@vf=h=>uVH`wGhwlEd%~aN^>3q`$6T{k2y61aTWWpxA?FsUUR^LPj2X zXLWI!46oC7ddhu@y`Ct(ObyGZR{8`vERzP%C&<&b)ly0M1UXgE(2iHMqxGw!Y0F+V z_gUb>gOk*lj-Cvzk=8K|9hE+eay6mQ1i_VRpppe@nEE(gZ9kH1M_8&_Cl-^zTnA&* z@iBDL7R*iJa;i~IMtL1RM$g;AHHVvr(uctMa0?5ufUAC7QB?IV4lvf+9N0)W|At2V zHWNPUMFm2V2qAF_DUiWYnz$HO4|%MzhPItfio~6TtgcI0bR5;==gS7Jz_I2*Rd)cTphlRit2{l@x)%|^7~v`@m}W}KX>Uqpq59ziGTIV z0&BU2+sQn7Z5AyD296L-5DmunlA#hGX2ZX15M6W(3?0@bt2fD6-17g2tPOp|x((c| zyY-f?YwE!_B}EB~0NKyLo>`;~>Z!CJzJtVT_EzL1Jg=l{O50XXs_4`Ivb9vxarTsO z6$u13(sh>Z!=r>^eH}fiWFS+ep&dQxS-2z~3@*B)PWCoatc=uKg}zJSVn-(ijmmPe zl?BB?ET>pmP#nZE+GHUYz;A{N8eXIpX+DJV6l1`MSVEEJ&*BbmS^Jv$`g&S(IXV$N z{@s3nvncA&;t5?7I{dGCi+Ahsx3|~H`BqmwJFs!=zehD{(+BNdMf;?Gm-h5{+AsWf zY0ogU`@c~8_$;$`C=5^>)Pdi!vY-&j}pC7?+J%AtTV-9O}NJ9Me999;PIln z);qin&*MfT_y8&GP3SE>Y>#P~j%%8h@uW$}(+^H9ayS0LjDTmd8mSBxdg?ncufOA9 z5`NHvZhARhP1|;I+P2pNv-&&UPip9JU^`0(pN_wzZ5x)h?Uj!AQ~hra`-6~a*c~g@ zaWH+@n>sN$MrX&tjA38+(;Gbfn70megq>I7S@e6Bi1l1JpfwDPNLza`nvb7gNn2Zw z^GN+d6gbGIqOxwn6v3HL(o$V`X~#1jHHh+ z=ox}eext{o(;HUz4@1bbvfo^TTr97IhSAfLEcB_8KE|L=u||Rm zkuW6f?xBc;CO%0tjxGu*7W`t@?|-%x4E~Kz;om?b{VTHg86u016ImP|3gy!bnaB~P zvdFm{pC^??HJyJ=I z+J^i6tw=YW{K|${%Cw0+F-C10rdI5uspC2hicK?6<~~|%tqCRf(byvl>k^M%(H0re zJ8vMMWnqI)pCZJ;t3|bQu<9ZD7Tr`mR7bJu12RV%stG}=5jd2!rPWwI#acaF*JG+a zK}WIbo>G@oG+f6?F?wI4bbTF?2jDa ze8DFSqK)Y|AK~dpuCB2O^BmGsKH+F=0N2wI7FnKfG!THp!Vig^5ES+387xz+st?4f z?vA4x)eTaO>a3~{$Exm$RSj#zLQ%0A)eTaO>a42!VpSiCRSjzfsYZ2!RHHhpYC7yU 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 U6f_MXeU6O5K?)THh_ERC2iqB)tN;K2 literal 0 HcmV?d00001 diff --git a/programs/ncatool/makefile b/programs/ncatool/makefile index 117d52e..3d96a8d 100644 --- a/programs/ncatool/makefile +++ b/programs/ncatool/makefile @@ -1,16 +1,15 @@ # Sources -SRC_DIR = . +SRC_DIR = source OBJS = $(foreach dir,$(SRC_DIR),$(subst .cpp,.o,$(wildcard $(dir)/*.cpp))) $(foreach dir,$(SRC_DIR),$(subst .c,.o,$(wildcard $(dir)/*.c))) -#local dependencies +# External dependencies DEPENDS = nx crypto fnd - LIB_DIR = ../../lib +LIBS = $(foreach dep,$(DEPENDS), -L"$(LIB_DIR)/lib$(dep)" -l$(dep)) +INCS = $(foreach dep,$(DEPENDS), -I"$(LIB_DIR)/lib$(dep)/include") -LIBS = -L"$(LIB_DIR)" $(foreach dep,$(DEPENDS), -l"$(dep)") -INCS = -I"$(LIB_DIR)/" - -OUTPUT = ../../bin/$(shell basename $(CURDIR)) +BIN_DIR = bin +OUTPUT = $(BIN_DIR)/$(shell basename $(CURDIR)) # Compiler Settings CXXFLAGS = -std=c++11 $(INCS) -D__STDC_FORMAT_MACROS -Wall -Wno-unused-but-set-variable -Wno-unused-value @@ -33,7 +32,8 @@ all: build rebuild: clean build build: $(OBJS) + mkdir -p $(BIN_DIR) $(CXX) $(OBJS) $(LIBS) -o $(OUTPUT) clean: - rm -rf $(OBJS) $(OUTPUT) \ No newline at end of file + rm -rf $(OBJS) $(OUTPUT) $(BIN_DIR) \ No newline at end of file diff --git a/programs/ncatool/ncatool.vcxproj b/programs/ncatool/ncatool.vcxproj index 3b70f76..40f4b64 100644 --- a/programs/ncatool/ncatool.vcxproj +++ b/programs/ncatool/ncatool.vcxproj @@ -75,7 +75,8 @@ Level3 Disabled true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -83,7 +84,8 @@ Level3 Disabled true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -93,7 +95,8 @@ true true true - C:\Users\jkrca\Source\Repos\NXTools\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -107,6 +110,8 @@ true true true + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -114,11 +119,22 @@ - + + + + {6adbb60d-dba0-411d-bd2d-a355ef8e0fe1} + + + {4d27edb9-5110-44fe-8ce2-d46c5ad3c55b} + + + {91ba9e79-8242-4f7d-b997-0dfec95ea22b} + + diff --git a/programs/ncatool/ncatool.vcxproj.filters b/programs/ncatool/ncatool.vcxproj.filters index 61ac64b..f033c14 100644 --- a/programs/ncatool/ncatool.vcxproj.filters +++ b/programs/ncatool/ncatool.vcxproj.filters @@ -15,7 +15,7 @@ - + Source Files diff --git a/programs/ncatool/ncatool.vcxproj.user b/programs/ncatool/ncatool.vcxproj.user new file mode 100644 index 0000000..df9f8d9 --- /dev/null +++ b/programs/ncatool/ncatool.vcxproj.user @@ -0,0 +1,19 @@ + + + + ..\..\sample\nca\gfx\GfxPrimitiveRenderer.nca + WindowsLocalDebugger + + + ..\..\sample\nca\gfx\GfxPrimitiveRenderer.nca + WindowsLocalDebugger + + + ..\..\sample\nca\gfx\GfxPrimitiveRenderer.nca + WindowsLocalDebugger + + + ..\..\sample\nca\gfx\GfxPrimitiveRenderer.nca + WindowsLocalDebugger + + \ No newline at end of file diff --git a/programs/ncatool/main.cpp b/programs/ncatool/source/main.cpp similarity index 92% rename from programs/ncatool/main.cpp rename to programs/ncatool/source/main.cpp index bc985a6..f6bb365 100644 --- a/programs/ncatool/main.cpp +++ b/programs/ncatool/source/main.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include #include @@ -195,16 +195,13 @@ int main(int argc, char** argv) } if (argc == 4) { - printf("encrypt test\n"); - u8 sect[kNcaSectorSize] = { 0 }; - u8 enc_sect[kNcaSectorSize * 6]; - u8 tweak[crypto::aes::kAesBlockSize]; + printf("decrypt test\n"); + u8 sect[kNcaSectorSize];; for (size_t i = 0; i < 6; i++) { - crypto::aes::AesXtsMakeTweak(tweak, i); - crypto::aes::AesXtsEncryptSector(sect, kNcaSectorSize, crypto::aes::nx::dev::nca_header_key[0], crypto::aes::nx::dev::nca_header_key[1], tweak, enc_sect + i*kNcaSectorSize); + decryptNcaSectorXts(nca, sect, i, crypto::aes::nx::dev::nca_header_key[0], crypto::aes::nx::dev::nca_header_key[1]); + dumpNcaSector(sect); } - fnd::io::writeFile("testenc.bin", enc_sect, kNcaSectorSize * 6); } } catch (const fnd::Exception& e) diff --git a/programs/npdmtool/bin/npdmtool b/programs/npdmtool/bin/npdmtool new file mode 100644 index 0000000000000000000000000000000000000000..3a06484996fdb317250e07e420c1c2a6adc03e34 GIT binary patch literal 460937 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

g!|hlGf8N#S#on)K(m z5$D)p&&CUw-$_QC3xv;2Hd`%3oSPip#_3;UKS9ds_7hBCd#cF&1g|}EL^d#z{RESh zW-qMVAIs)G$Ge~4g%Wz${RD@UAaXy!pZ(7fxA&9zAm|9%PtaRozDfE2?XL~q1mD&vsr&EX$FU7PsrdfWKTGco7r}EJWn^$b9=&> z6S}41$Bz)kq_p!8c8B--+j3Y(p{Okt?|3g<=DI_9Y=_s$et#Y8_t)N-wQWct*}Jqo zZQabKtZi(p$nJa9?MOk`?oa~7s=H^KS9N0NBy#K@+Zh0v@|m+{1UH{H>tt`VBHdIk zyvO1RrbL~YW7`RD&bd7n|MD)S?aq)5+{_+}o#fV&$$qVMU3qMl$Qa9EQ&vZ&zsDj$ z*i}*YSj=mfO9=TevWYadjdcD|w0rkTD2Z9eeNm12*^Ksz4NW=QIOsGL^V1Hg7(UV7 zoLMA{+$ZpM-LfzvxHCXHVc{oW%Rg|cM# zMH15O39C7Q)*Z%6(|#bX5FdRfR*1I|CoDvw+mNwIxA7CvOj#G0qRHlrB6`&3jPLy| zVspk6vpHjIzhiSoS%$JXqujTc-`M<8oNlO|;a>NoreeC1H1l6e&oW!^WHvR+B~GS0 zsXAODKIUi2;S;LHTt8@ZmmK}qSV3Mzq_7~;GC~;4ro!E!1M*pAad&&=GAA}?Fc@@) znoaX!b&;81{Pyln*E#c-q0>Zh8}5+^_l#G!G1FNLyk?udwUo*yS^Xq@jy#JN%p zXvxWJ{1e}_H5SNb&(?}FhFD?NMRZoX`SEW;2L}8CbVva-NM=kyXGCP$W0aI7mP{Od zx|8#7LSH4RpFOK(SxRAYBS$!b(So}}^=9YkPG44HcZX(~oTZvR+u!& zd-q(s20By9Dq|}9qVAlpp4#*tHU3@NGaFyA9rHKNvSxf8LYY(?6M z)oj^mT8!I~wcAVFRNyx9414ZjrlHaA)hNjP&f}SlJ(+)FQV5MQn|?|)r&7(mvSBt8 zSr0bA?$D1kCcTF_U5;1(w^opDo_itXVFY74aITTUyUHHc5coFfa7QfF`V`|W3FD<5 zd_9WxpPAYCtV{exNw87#xx~~s8=db<^#u#)NEfxYZpMI3?P941N|@DkRBR>9L3?Je zoZ&EPeBfl{7QNwQ{$!IG7n98AqmoHqCYt3@pjJ|9A$`~#+JETCvE4tj?d}4xSvD50 zyQj~au$jhMRr5@MY71SZmOe}KV*Jl(-Tl0cQLbYiZLT@1W9RSvmU_hb)16W_7kHVC zuZ3>WC5yCAK1(e*Nn*G^ihJj`o=@|3w`c;dg{Epnv6C@_h(EzzL{TYrpTv2lUrQ?U zlOA7cYD4wkj(cC;c(L~;})AJI&-E<-^luR--x)mZT3(!+T-l zK4J`5m!M?dEHGQoEY`xe`!D<0g-ej!eu)^pD2h9K*Uj ztS^3O4A6eEMQTDuo#vd5-F>!Md}$YLT8ARP`foM6H+M;q0wz+2xF;I7<{ZKu-4s3} zMXTGFcXRr3zvm~>iYbrIHfl

;bL)QV*ZxTkuj+or~NsNprxQeMz==n*NYYN}Z%c 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 literal 0 HcmV?d00001 diff --git a/programs/npdmtool/makefile b/programs/npdmtool/makefile index 117d52e..3d96a8d 100644 --- a/programs/npdmtool/makefile +++ b/programs/npdmtool/makefile @@ -1,16 +1,15 @@ # Sources -SRC_DIR = . +SRC_DIR = source OBJS = $(foreach dir,$(SRC_DIR),$(subst .cpp,.o,$(wildcard $(dir)/*.cpp))) $(foreach dir,$(SRC_DIR),$(subst .c,.o,$(wildcard $(dir)/*.c))) -#local dependencies +# External dependencies DEPENDS = nx crypto fnd - LIB_DIR = ../../lib +LIBS = $(foreach dep,$(DEPENDS), -L"$(LIB_DIR)/lib$(dep)" -l$(dep)) +INCS = $(foreach dep,$(DEPENDS), -I"$(LIB_DIR)/lib$(dep)/include") -LIBS = -L"$(LIB_DIR)" $(foreach dep,$(DEPENDS), -l"$(dep)") -INCS = -I"$(LIB_DIR)/" - -OUTPUT = ../../bin/$(shell basename $(CURDIR)) +BIN_DIR = bin +OUTPUT = $(BIN_DIR)/$(shell basename $(CURDIR)) # Compiler Settings CXXFLAGS = -std=c++11 $(INCS) -D__STDC_FORMAT_MACROS -Wall -Wno-unused-but-set-variable -Wno-unused-value @@ -33,7 +32,8 @@ all: build rebuild: clean build build: $(OBJS) + mkdir -p $(BIN_DIR) $(CXX) $(OBJS) $(LIBS) -o $(OUTPUT) clean: - rm -rf $(OBJS) $(OUTPUT) \ No newline at end of file + rm -rf $(OBJS) $(OUTPUT) $(BIN_DIR) \ No newline at end of file diff --git a/programs/npdmtool/npdmtool.vcxproj b/programs/npdmtool/npdmtool.vcxproj index d1e94ed..3dfdca2 100644 --- a/programs/npdmtool/npdmtool.vcxproj +++ b/programs/npdmtool/npdmtool.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -27,26 +27,26 @@ Application true - v140 + v141 MultiByte Application false - v140 + v141 true MultiByte Application true - v140 + v141 MultiByte Application false - v140 + v141 true MultiByte @@ -74,7 +74,8 @@ Level3 Disabled true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -82,7 +83,8 @@ Level3 Disabled true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -92,6 +94,8 @@ true true true + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -105,6 +109,8 @@ true true true + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -112,10 +118,18 @@ - + - + + {6adbb60d-dba0-411d-bd2d-a355ef8e0fe1} + + + {4d27edb9-5110-44fe-8ce2-d46c5ad3c55b} + + + {91ba9e79-8242-4f7d-b997-0dfec95ea22b} + diff --git a/programs/npdmtool/npdmtool.vcxproj.filters b/programs/npdmtool/npdmtool.vcxproj.filters index e0418b2..4c0a72b 100644 --- a/programs/npdmtool/npdmtool.vcxproj.filters +++ b/programs/npdmtool/npdmtool.vcxproj.filters @@ -15,10 +15,7 @@ - - - - + Source Files diff --git a/programs/npdmtool/main.cpp b/programs/npdmtool/source/main.cpp similarity index 99% rename from programs/npdmtool/main.cpp rename to programs/npdmtool/source/main.cpp index 7d418ce..8c20784 100644 --- a/programs/npdmtool/main.cpp +++ b/programs/npdmtool/source/main.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/programs/pfstool/bin/pfstool b/programs/pfstool/bin/pfstool new file mode 100644 index 0000000000000000000000000000000000000000..54932be2890c8992b088bf8f2b28687d5763d9cd GIT binary patch literal 67746 zcmeGFdt6l2_dkxG;i6=UWM1$-ni}2^5D_oc2#gMjN&-rz4!1#2ZViK?c}Fc&%*>3; z%F35nnVFfPnc^i;(;~IPGNp?(h!vU{FEjZ**S^f08D@OFdVe0j$K&_M>y)gs*IIk+ zwbx#I?X~wgGqX@1Gtxt&QRL;JJg88~udR-u_+Lc{c##zaE?l`w(J5V(PD&GCyzx)R zC`$E5ip6}NLb&3;?Up9>u0d?#~!d0XUE(vA5hfznG?FM0@V+;xF`Jd7CIm+t$$W#PC;S+!tk*EVWENfxq%_9-z1-SM~zEhElE52qeMEl#y|1_qEE;e z_3p2ponP^|btv@Qw0C+;%-{Vb(L(W0j@#4va_u0+OG7xihTz|;J)fR)Y;m*G%@(gQ zZcP2?Pk+58+^1IJlRX@ zLZ7Z~@Z;Uc`2_r~^qJ>|-`5TPQ#bt`gaL6S|7$nxM!J!|%?x} zbAvzUMozpNe61UNvKu`&yTQNY20z-39ZYWUiEi*++~60u8L#1P^vQH%w@5d3SmH*G z)lIu=-0&}OqyJ7fa{hFq&vS0%FLT4c#f|(ZH~QS?Mt-3i`NeMdZ@G~l?}opxkgsj6 zgU0sjRp7fR9Te@xB!)~Bq+Obmf0Gmcb=2#wv{3FHrDGB{3pvw;oaz^n z7$!jAp8=%!kmsb&U7}xW+UNwQ09Z%zEorHJ`_kGGrWlRWvvYHd`Icm}#b{KFqh}c> zn5JjuTTJH2tmOQBQ@&!1jvs4GGnoZCer#k`ZjLEFIVH=)X|5^8JWGbzl$>UqX_{k9 z#hnH0#?-=OW4hU7GMWlgO?j5g+#G?-D=?dkvog(=g5)g4IC)%Leq^wId>ope9A^n0 zY&1ez?rdWU1SV%?<)+RerZI8(gHoZqSucyB`I&P~RAMc$I!r=dR&*-l1gB;sn~fH8 za;7CeI#nN+j6eFgl<0V4e2_6d*r<;k6F1N}VN6^YY(Yvy1>1y~O;Q~2Vaa)UrkphJ zr*cMUi+j{0kwC>yjI#_;b&`Z7$LYa9T^h&OP)F(=mSxJBZpmQf_=)3!gQx?A$tjt$ zf~oVVG!{n7oIH~;GbcTlH4xpnfw0V+e3RLt&$g+BCYceLIZ`l$ImXmvOKJuUd|{z6 z&t%Te%}LJ6w9GNi3Sx?>w2lhl`Z;tr8(cZF=`Wc-G%eYZEV!uWDtobE!l*YIYS>LG zA;y`k;MD67SRg;sRmZt&*bJFJ*la?lXPNY*Q=Ek=a$n&lHJZ%kT(iv}a^OV$w5-@! z3g*Q0RQM51iD1Q;kTW|IDo!xv7i61=n9Ao0{46zZj*^~>kyp|!rmQR_ufUS8WY0{? zG%I=L%p6O)Vm47_;eY6TVWvgNHf86VEJ}L5$uyG+so8l9kg(LO+7 zL>q$x2dXI)2Rzt+p2!Fh=5TqUO#eKPE7F}T6OFLm3`ba^(_gAboODMxg2d;6?A=3Y zihq*Z3ppjxdFHG^sSPU2{42KCoVzLG-_I3cydi=fgf`Yay&h?HQ{||@6?DkFi}d~6 z#_x$bTpoauR{tC#pSSX@;6L-uOl)7glq;fa>Aet98K9B|0Clp z?R_Zsm6wd~gdZf4fHJ-lK1_v|@tyF4Re1k3NvuR|lK%42s_^KD?Fvxgh3bqJq{7R+ z2@%3ocxqc-Iu%~Me=(@=YCFWL@G!jXN>t&S*|3U|q{3rhZC8d0-`s}9x~0O4Eg_>8 zs_?!l{zWRhZR-g7lPbJiW2xF275*NToKh8DonLQK;qO)PZ&l%GFD0)XD!kk)5v@#x zZzq`n%T;*Vo5|~#3g2EL0V`Gb4k~<=3O`hZuU6qZs_<47UheUUT&Kc!R`J)X@Lg1R z<>@3=A|Ii>lDvFWc&$VN`l;~URCs?CzPk#qRpEQ6@Bu1(PZd5$h3}=phpX`StMED% zUgl6lHmLBuRs69kd><7)QHAfT!Y8Tl{Z#l26@HispQpn2SK$j)_&^nYkqSRRg@00o zr?@GvH7b0tL;{wo@F6PvCKZ053U4U7;$v9pJ!rmGF)S;$cw37=G!z~2IjmyBZNs4M zU}@;t1Akj~)!~lH8N^gm-GHlS2P#v@tEpt=R#c`?S5wZ)&8SQvu4V@-dr+A|Tg@g` zzBvzN3TZWKSos>2DU{VLV&%(JCikq#W99FujF_*~B(d_>RHjf?6U)k{sZ1fPM#su0 zs7#@&CWw^}QJF$kjh2=7Qkgp;YcnWj|I9p)!St z8ikenP?2Y3kQ3V&%(JrYT>O$I9PRnWlP85-WdAWt!qOv8;TW$~3iWbgX=W z$~2{Gf>`+wm1!#1XjyqLm1(Nh__6X%D$^9LQCRs+D$~@gsk_C-pUN~PYpPj!1C?ni z)>NV#{7ZE4=hF_gY}-^HxwT-9K8IHK~rh? zyuJXH_Y$LF*=fu5sfOaCy#Dv1{-Os)EY~VZ!95A6X|eC ziVt%BuSKgpFvEF|JPSJ7RrE8gRQCUkZjl0YXyw2c)Y*}Lp}mS_6o6nBrREHAh(7Mb zTsN$ImS~1zrg#|)60XJLHj!vP z?BmgP?JSAo9Y(XI4y@ctKrePg%l^!8M9cPmcR=&@=((0%2b<PwYLjebwi=Ux*e!XF(zMcgMRN4ui|WL z^-*^+8WeTaoS+=COI1@UlpW-Iymut+4+2Cw1Je?$0P6chMWL z=8%&Bt^std)n&$Uh{;=NK#YW3n322tH$)^1L=-R)jco=Jop#f*!Rk88h$fFz9)h3@P;Flztd3 zl5cDIPGZIrGsMhmB<7MB5&I~R98$qb6+UG)hB_srQib(LW(Ku?*}8!N7QQIz*)+3L zR_bsstgRS&A2JkI+RA(Y`RKht%?iuE2%V*N|H*V}i$Cvv#5UV|q4sB2+Of>ykfH3Y zH~D2~`3|%eT~Mn$L#6VQOl6l=avmkM#*eBrmbS!FVrx!X%#}{gF@bp?O$c})cbNNB z(u=N$QHHazk!8+Cj{wN`oUDyWlQlgk-S@AL&oz~`UaGd^u#g2H zcvJybMM^Kmrjp%@1*Sy*8=*V=&LUowp#*`N;STNZ&61zbtoyHmCip_2yS)F2?n!Kk zfwD@-IkZ1i)LEgbbDQpouc+Lg+FFBslPI%=?MH7 zPuY9Alo`@SDFCJR0lT4?^)s+YsjbJF?(KwRCSCs<`ozbPnRGdoxk)=xL)@ekvB;v~ z%|r_ zM!y3Qt4zaqi^`b+mO)L!Fnt-@Ocd-E2TmJ7I!2_L);t@K<8@5*elJrBSxH|q$U#T|MZGq%PF2%N$rt?h?h+m6 z<1XcxnH)sr|0v)kCcs@YWWsWx+a}jdHKnHDV#hDTC@T}nF^#MS%?VLyAPtq>FQtB` z>2w5@LTf?hepwE`Jm%n+zmVmJ>5qv`?kRR$b0kqlZ8{Jtx{`;vP>OV74Wi7GhNAgT z`sJGsXklV&A<1Sd$LrM85YnV1;dO+P%KbywDus-jDXlLRs~)ThU&r*nXx)voOk$;~ zFA-OXo{0&8)V<>(b;|zAsXFxGqID6qvl24kvHP)-v5w{AXi*|bM1=^%f{#$^3AJ)8 z6qlzzH&l{{!@?@DX+qNd2$xcWTFf1HP_ZYDsQ2O|1&v;y@()mTS$WH6aV%gFcE}^` z?RE&JMx-6a2|Ju8siYf^zv#8J!}bo4E$pzKxP%@0K&qo13aK563sB=IPSQz)+I343 z;f|dAImmpnlmYc51s^$TheZEGGesm+YAZ)A(5<$3HO8i`)oRyv9%?vhd%`9omcmb& z@YfG}K!9qHT8c2QLS10%iF(`~O9- zNpq~Ad}@fe^2yIMn0Kt*i`On=!Vp&P%-w^yi&2XGqfYd)CfBYGB;BhF#cAkH$2u_W-*OK7k{UqwCuneb(1=VMNG zE}|h2b~Yil)^<>JD4s2IO#kuJm7*gCk#X=it3~^uBActwTdASi$Iui~f0l1p#q_yJ zhq|y*(R{07i3Ecc3=|crs5fFE`~plkh{n#(C3!c=SgG@i(NwdY4D22013$2m9|$=W z)=J7~hUu-s6Y}5*&{^Bq=6nx@GZv;O*tG)`wqjrl%zAx-7eIdBUn87k@#L`fT!+^HU> zuCpJ@;ShuA&9d)~KiZfjBR0484LntKwY#Pf!))5AK0D!auW@hQ0TY(VVAkx)Sn@}x zfaGh)p@L2V=_inWglx*5EY*6meEUCJbv}I3ZdEz|?dLuAjv+G8Aqb8(_^FJISLfr{ zWv&(R#;Pe~H_RBfylM(~1)qaIkc6>yB9&l6knw}V5TM>lotH|(;)3g>&dP-A#j$EU z*YO`{UZK<>4Uv+iR@5hqWFK~hTw%4J12>+lm@O67=c^F`SYm|9T47y5#UY0acn|_& z4iIuiqB#0H$m>o^o~N4RtyztvSv5P$_$H0 z&#+A>S>%~zOV|XnMF{F<56Eaak}At!T<|Y8O<*rNU{Rf4!q6Bpjyu=Y!KJ|~}C@U5H~@|@!sx>k+`0pW?1c@5K-w_HbAcqDpRNxcN* zD|Cgvnw7;;yn&W3s#=2WBJb@OQdy8c+;K>|$F0&XLC&zPeyFKOU zEo1V>(Tc-Lz{d)UWHFj3fh*XL&4a)T`8YOLj~G@-=N^es>tvVhdUScu(Xk5amt^^3 zax-*>Y1YTFw#`aDteXzo89Jp_IX5H}Kq#9%%P9b39PozGjD)78K^q(L`0v$wa^xiGBKsKhY@|SI9vMOXwure27Rk#ODCL*Kg z;1z=DPS0FyOuTI_C55`hq>vu8IHQRKI6k>CWohaSr|7PRH&z_$SMwaR?P2RL-%#gJ z4g2ZybX#G)NvNXvRZ78NCKag9DXoT(I|*fDavO2Ew!5sBBC4$%OM?S7*$kRYSgvk0 zJ0juer(qWBr{}0`cEslx_oe?qndVX|O+sc|cpHXTSByM#$S+L#Hv4)(owrS;BSDr{g8;mm|%5VsVS{2rE)ntI&V zOvf~|Tn;(ZaxKO6<|whLmh=@HS;qSk@vKZ6ICP2|2N`Ea@hp99DVEZ24@@VO7xBt&ZX1Tq0gmJabqJ>YW4W z6G%K72hs~@oY#}%h{51%uwxv(hXqF1UQRylKu0**3N-p>kE88bYqmIgilvFJV?d)g z8s;L7#xnu#;^-`{g<~A;CfZ~QJIB#hL}ZlzmpIztdnx7rDUSXNE2xO09cUK7Pj(W@ zF^(3q%-ppNWpHM3bT@2okE0z#HODyGim-Ah>8P3eb~MalU4E9@b{9t-Jn{u%W&1sm z0I?N>_J8c*2AnX~Po531R}bY=RC}y|zu~2*8?>wVIA*1(GN$;a1OAw9){)|@ciA_V z7VK59i`E=?Ms3I1_QYEJ6CFQ0FH@>qSkFA}3rt$6Tay|uO{e1`ergBNLDP>5$UGKD;Z<#;%M^9NHE{H3zsb7HR@h?UOz z>S-DY@K;#dkuHGm5Q^_EA)U#&@GYk2&y~Qt+M3WvNK5%+3E}#&y(zLVsL!obWt(9? z(%~PLS(TNV;}uUwD}4?oVWs(`QPB~9cQXu+_~~H|Ig2=+eT#JEWlY2h>kIa>50zKS zGVTXJMYg@hs~MCP)Dy$kpGm7buXqd4A<4B%%|%m5tVejmmgi)6n8$y>>bBz=os^Z&D_gobDq!d;0sZAHk2@+w>GI;t9 zWHwvDhI_m-$#cyzyID~iZ-?`i%Y<2hvzw?KVqpTt7s^`(pLhn&J2946s0F??-YWVQ zCeh;A-AF2nGvt;_SJB*Jl@h5JTqfGtzl4n^UdbU{=@g)3Z1vuy49ODy?zGgFVB1%M zY|ZxYFpj68B!)brT-ujwk0SQFr&vW)!u##~p7m-!?rZV7xvc|b?BttI-G`~mMeMO_ zqm@aVwtjljrLT)#@32!5d)Y*hdv_6wF&K3(Bw1MF?L=Re1<(%|{&hob81Teq5OZXDo%5YoG;Sg>?f2@4ssrq7DkbP%E_8 zFPdMi@MELG16ufp^*tt=UNhMNolEyO7d38E;>dkq$KK8i$$X;;?Y|o#861XQ(9-hE^+Z@Ay#keP#rG^n4VTA5~b}ko}6}d+ANt*x~(j z#=xAB+02MCAKfpQHEDF2`1Qm{aSeMznmqEng}t+mPl_bG!-tNIbZ@H5JRo7meywne z%@l8)hW`p}gvIcmJFeX+Lz& zwjCN-?STpIK-)xrhsTMru7dOOW0(_q(Uo&3P;P>uw>r*=mq~FnN_|?HP-dGGm+2)W z9xuz)bK)AUW$ZN7J}17S1X7%^9-x+lf!@Qtqaj|Q*60lu+9Zmj+uBfI;B|PRsARYY z8!`uX{s?uXJ6B0}u7*2TF?T-1Hb|BpjzTEQL=(k!H=f0thAr_N1oyS~bLT84#9h$T z=EM6?5I+1gRVq3X>o9Nu#q-Y>7gQC^Kd&j64mIclLj}{&X}q&pVeLXy*!`jX2AKZ< zMGot+3W=?-4kxo5!-qUsP&q(fV`9w!U7kWSG3~%4;$U;GgnR(7pV~XXrsfPpX195E z9huS=cLtLJP_GAbGMwa4X2n8q3AKcx%sgzT4oZhl@H}&k6_fwdwh!PLmi@Rtb^kbV@juX4{GOCrmKdS$Y9tANqX0kX-f-6bM zDOALBFZT2$LNbj6mS&G&I?T>kY)0ROqW$sTOV9#o+Pd;5^}p46p(&;1Zp;+^9SO3lqQUo!g26A;l%4kJ0F^7PcOm^X@?2F({& z+LMZKn{O4(FIQSF{Q>@j29L2P2&@*}`iKuS;kl}rCN;dV!m78;BF?gMY`HiO>;)yb z5aFxxpfT2`W(jKmtdO$z8RlCoqv}X?_)##EK7?-~s<|B7naF<5h9RW6i==cFz?5QpG@BlVp4ShgZ zrWq_}Kd9}8_O0I{A%J(wciLU~@C+%GqLah(u4!B_&@5=l=Uq--NKfz4JZ3jMTHd;S zrq$>fl0%@(f-L(SCVz!3Y$s^UE^OfJE8}h2a`krq%&6Z-%s8y-Y2vk4JerEYw0ue}M{A4c#Vp6JCl0cTJw|$4FY^(pBie&- zPn#B08*?2s?Jp&~L6s2`9hgv+Jw-#;$C7iR5}k(AkuaMOC3c;#^4L}zE+18o>Km|k zOTZ|zYH}VG*{eCbIHPboh_y^erBVfED5ctVx?CaHysPmiW0K^bI3a#AOt#R8V*~aW3=1DchSu12Y^b!fZ=O9O%4M8$fl%Dc{tf}OZ zn*o8kXnwt7 z;Sa8hX)(e4q5Pf=+&q|t4H}_n;L-zIcBLdp!Pf;vDawdRBZ?bFOpGqRF(M(l_=^$o zF(o~BglO>_(cwDgsf z{JwWHWdP@6?_uCp!se5j9Sl z`eVYc0SpJ+0GJ5453msMcfe9W4{UVH06PIz0n)BH5uXEH09e=(-^Y%v^(MgUI5;>4 zI1Xnvb%2T3O8CPqJn+Cr2N(pH1Q-Fh2(TP*E8r{~$5jGu2CM^2!SSj;zPIQ}z;M7F zfQf)#0u};Z2P_3_g+u##=<^VuKlFJRFdQ%mu#ofvECsv(SO(YxkCUqa{Q>I%Lje8p zS=}hWaKLGRiGX>4g@7vnO94v(%K#4nRso&`tOvXT=#PHh1`G%EKa2W+fq-SuFBY&G z@GPKDD@FMgFaWSMJyHQ23P|6$77zF&paogA>b;&Qowq^GQdtajjaZZp;K9Wnb9;rEnp#_4sbbO65wvYMSvFpHv#&e!~6jZ z!JCU#z*&Gk_?o4)fB}G?0U7`=0Ma+V8P7v+z*4}ifGOWXZ@>+Jb%0ht|F(+adja+V z3;;|7Oad$foLh}{0m}i)0Ykq-J-~^8{`ls&C4k|8^vYBs;5UGUfX%;0e*r@P%K(Q1 zRsmW7>j75-`uk&E0EPqZ089kD09Xik3$PS0?+5rR;0i!1p#P7sGro$U7hn+JdcY+5 zYKBX&6X5}?0j+>O9njuS-~;^hXUGS<0$2#x%nJE{9RN3he*j=P;G=+Lz&8L^16I^R z4n7sy@(Sz=xagOLhCD#eUr`^>A21d$1+Wb8O~5L^(Z69_J0V8bp&lT8%0CwHHeeoL z-c{5Gq;Cl*11!CU_5im7DxLA07Qe$E0HXkPfYShz0ILBP0p0}M1lZ|1^akvH1NH$- z2lVNpD6atq0Gs{ze`iWc!2Pz(4Xpbqc^U=m;h;3B~GcrLXGa3o+kU=m<8;3hzP z$+_|qpce2tpbl{GU#JiGFyJD zQXc9stk1w6tVNQE^i8sy8xm^^cA80-B zZ$9jj=Y?-Xj#{j<^&zIjbCp+-x2MsIHzs)F0au|tGJw}675`Kl8 z1^Os8-6MiAQ2lK}~}_3sMkV{q@aO=TyK zkv4;po@XJ)?+)!;2mLnW^aiiZPHA>KwDv?yLVb67&~NE@fS!cvUOUu!JnEpw6v!ER z2R-PwPy#@Ar^iOnLqH#_*3)d)b06rVL3cOa=RuFX1N|206G2BxV7EhzU4AFb2LtG? z>_B#=x4a`j4^`LCwb!2lI>~pZ-#pN#+(G_EQQw{XeW1^{gZ%TL=Yj6dzPCW13p(}1 z<_DAP`gih1&H*}7TRUBErw<1`3H0u2x`+WJa|-Awpu3xI^FXKZaVLKx=;S}{kbcWD0>=rn%r#IfTp9lIqpu4lr zM$o^+Jare3_JLlFT;JWga~|{ypc~ctc}!*s()ip0y$jk8P}5WG`gg)!tQY9+=Erc* z{Xs`6W%m!h?67rj3g~1XxBUm*3v_q(-3a<^= zUU$L*{ype!`w#kA(2?TW`#-^MzbT-f1l^tf^FZGZx;y{gNAkROE!NrQu)fICv%Q8f5}z03+}zdBFoF2aIPn?meEq=J1O7gl`0AbbV(omP z*eg%`prPR|#7~Dd8$7sjKvTQazwo^c4R0dOcy(D~*KgD+&mu3+mnf?sKU@lVd-pdq z1mfN%FO!QR`ex9Nf$qwV)XtA+hw3lDy;s~4dpod$hlR@_zAKR9hrRx8+}qk=x_G=P z6{q%EBOtv5K3DUaQv3IDy z5A=zkyPf}_$Gf3ZKRSV)b4cWI)0f!o=9I_vz}Z9w_?D{m3J6J$p;f7BA*aiKTg8mBby&hj;9~bJ&bG$F4=RU~!`wn`X z2mK1@Gr?=~caL-?fQ>)s;fODE?^UwI-j31HUOjL&6AHc{wVauDJ)%I50^MDlOana( zba(bx3VIOe?(Df4^e%U3{|M-Tp!Zhmr^;u41br~*;c9w5*Pr^{1N2zX+as^_TDQb* z2a2ODc}ydF)Az_l;H9M~wVZ`^JH&vV4m$DL?5)bDvOrG({Q)&y%pj_>3iO4b1K8`U z_9xpw$N_z^n(i@=DM0m4g8muk?)rHJbSvn`)%D4z4)8t@n&h;`nb``Q8M>1b3i_*{ zk8_q2+7Lo z%Ju`U2k7;nTX667;}W}^XukgyQwCJNuEm3YIL=ZjFZHThV&_-IO|s(@oSlY&uP^Rx z{=lanv-3RABS0Ucri;BC)!ztuHt6W4y}rsH_JRH==)r1w79Rtue;)KK(B0Yp7U*Ws zu?*PdtMdC!n9%gzuq*qM{NbQmKzBEOQ$WuF-JSmPg#6a(_Q%`x-w1jv>i1XERr&Qk z(5Hd!YW<^erT&rrY+SD|v5%9Bai#t=M}n~l{I2>#aUuroZ2)~W?!A;EyF8jhOYM5c zQ=)>mU|jW^^jZfwzd}wP$?;dok$R?E z+x7Vobn~aK^GK@ig|q4Dpp$Mk`O|rQ>UR|CKM45;iMNMJUypq@MTsv9d{y9ENqhln zzU2;l>%cc0Z)>tVv!9BO;;qOtNw1C2D+e!-x*A`i?*l#S4)pV&&j20M)!whs_I`B& z{RPlBgX|ULsE5Y}J6{y|+QB}@XnlxM@$o!%AFU9iPYfLSgG!vis@p@K=(vmQvkG!9 zg8rBWa#l5xW1so-<9 ze<1oT(CO2Cqi}B<+r-5D# z`fxQJV?{?8f+0r644L?oPkWpr?R7NL@eAKL3t@J{xp*`u_;} zV|S46g^COAP`?N0g`n%y?LTgBKMM3x&_}B2m^+l2lYP=a-w(Pw`z-~18|abh`r;W0 z8-LJ010BF_Kk@vB{O||}$3ah2(|HUNqrm;p9M3X;2i={Y^#k4OYxm;WANG827vv;C4#Jhg)!_MvW_(|7IHdP_AC1NP`zD?x z8t+e874mFYgbVdM@|&-rUslRd4T-rk)>od*5i{`9u?MP@nd} z;(Er%yU0hW@_{G~9*xmEKMnW}8yEjNj`H5FQ6Bd`rcs{Lc>k(VUe|b^(HWJ#`Bsy|n7WVmuGA<+8gKj}%gY+?e|aeH zXuQ{WC`UEke`%CUf-88G_ZlB%rG|XL!+WQX@{A|c``gp|tdDZgYaUjZCf-lnrJQW) zeZxn2+sDF0H@^=&qrImpW>BP`>dDu zcb>{OUfv&jDs^7oyF8V>-h=^NjCE^rqp9AfJ(L3PgC5Fzn)g9d8PKt9QgWDgiZWa1 z(V%JG+dECsdoNJtbY=Bg2YYYRC}X|9(I|!9M>WbpO(^NxS<|Yg_cYBTsP~k{djOvB zd5@7jcW95dP2({oNl|{$^xfmBIpPt9T!_Zwf@ila{O4}D9q9X({&)S)0{^qX|19u7 z3;fRl|FgjVEbu=I{QrdoD%hsax!yshHdCsJ1&V25#{C_t(3LWvAY(c zyzWt6#@3fz){-O!v2|h>j>g%=_LR7*7j)VO(uGIr?E2$&LoVHvdgur!Jj2Diu|B-q zgkiD!@Ze>31_7L>7yjV7n*#+$5bVN{o5Ll#fd{5Z3@`U|J4F4~f*Y?ounR{n?DFx| zF(~nCTJW;eyO2>8-Nx&NdHfb%|7qFLrVFHd6aH4?e z0?ra}xq#~h+#=v^0gnp!rGP&PctgM@ZAAM5_7X5mz>xw@6fj-DSpqH>aJ_(A1l%p) zQ31ac@FxLp2-w7Fp0dIC2Y)W5eRF%lGeb?oS5B+%_u}>UlOCV_U~tWhr&dQzDSfPb z(l?)Mc;@9L=J?T;sR1KjJQ?1qN$~wmwx>*7_2`11US6Q_=rMHOgW;o}>fSJ>+obj% zEPh)~dz%LL=Z5c#nsIev*M5_8E!wFcw|{@wzMU_hdFSlTSG_uw7A(+w{M66=@14AJ z!$X+^pS8TJB)nE{{^(fqgvqAJ#rM9{X4qSrJyqYO^!0gXZ`IfXhyFFyCRp4|ez0o% zh4QLi!GC@~wf*CNRCapd@tZdS{2zGi#@PI;v3pK0t6w!@MgR5h{l2y`>%}$e7j`JD zYB#s+if@iz!m$$z{VV*}6|~sfKI+2FXO4YhJn_O^!vp)b+IjQt56W+y^*++K;^i6J z-e0t7ocWWIY0FX%Jm0ps>FuF+?YlVT_cgr-HkjY{uk@)sTzV*G*p1Il?tJXq)xX~R z$UVYVT+12%n@AHb9bn=<>76)Gn9of6pDNFlPUC;Ik ze(U3o$8(l_F|U1}i(ia;{mHe*cMS2$%Q*FNc^V7CF zSJXVz!o1md?)cfgmom?r+r7PR#LN#rEt>cGH{o-ye?Fmqk>>F6zan3YAMwCPg4%Y~)p4%ZsqSw78M_u9kHS} z^|9Mim$$q0v@vQ<_Tl0mR($Ju_Qd5mpM)m=95>=&kH->EWS&bNy7>d?a{pZarJ^3|QI9=K9-SNxm(u3PtAvWzWwu2p5)UpwA< z`BJ~?i{~CJuKggg^7NBm{`lV6@cA7E& zWu;4p4`Mx=)vcO7Vc~;sn~w~6X6U==w~R|a>)dkG`MKwRee369EbJEVb@bP9&00K^et1|#{c8iNN-y>MV0UQbr&T+=@2`6Cm!luv zX!iNX$JYjR`!>P&!rNo2%a1fUlh?b=rT0c3I{nrq&%=F&-nT0}^mv=cH#EEUV@>(6 zU%uaUu+1NX9=MhMk=K^;InViqfAa0**jM*Fb?qzDt@?qBYpSi$hbIjx9Q@RcM;=ao z@Yz47S%2&0KUDYTkFRIvFTFgfq~CdK%e^=uI#7~XI(+Es+v6iY=zDv_-B&|~fAr+x ziN3Eq(C*BNz)-KwKfn2V@rB5O?o+ld_#wI?sp8xVKmR=VXs=Ec<9co%IbrVcgW zGs&mKGHA<%$9ulDOn|r^XUDNWX5eeB7!j4UPFKN;@r{42y zIq7P<6+r`6WUT!wf0EaVPky+*;=m8rwuRpp)a%)Z2V!sTdMBw{!TEEOb{)>TbmLNW zf@$`ciY*J8-Trn_#P}8q+LT_NA#21@HgRReyhzUG?>~4GB{oywc8m*J~Y` z9jvYVo!SXvP&yoIH+uxQBwKarwz-G zO_^E~_jvn0Tg$tD{(JXkvDf;VygR;hCHei-*K&vLO&uC{J$k@ro+rPGUDC1lc%KU$ zvqz2Jx_d^iO+^oNc&F$o-*yk(j_NdVU0`%kk!Q{Bx4*dXL;qLKrE8~lowk1JqX{j} z?wXymy<_I@TatYrP8kxAS}^Otj?>+LEA8pwUH;XKCjI_ZHTlK4o4X~v{O<=3w7t>v z(4L$pUV6XN{^xEkS@28H+4P4lRCOHF=GS@zuQ z&pxykCkC7=uUfpI%k;L-e%89jl3hQq_1X3MlNCo-hjjY!!y%rpUg-8>*(;f0VK3g( zG%A&H@;$2{9g%uM!Y@#n6PU zcjC}xiNV`1wA~-kec3A!AAPv#iP~X3Teg|}O3OIkhySSiX7$M>qsL93dN3xXL+5Fu zkNn>Gr{bbdl*(RzrCdFC)IX!`jX}R!td~Fkbj5c?Usneimqxbmd&|q{`|S(Aw##3h z7qVgfTX)639@KNhy6=ph<1g=>-*>}^PO-+m-xl4x{@bM3(+hUJT)cF`;M64^nGYXq zGtZ;fr9rvRf3yFiuQW|N9eSY4%mqG8_kEuoedX?kAD>>8vgcOjfuXyzhEDYjo|e^l zL$`A;o+*np-al{j>D$(?JMDRCL6-sZ|DE@0Y5N&*y0o9m*KSWct=SnJ)P7-oPK)S4 zHP6mgOdogoqtCxznXqZ|%_kms>ftLMi#AtuxBNCS`LQA25Aa;_O>E7{B*VzZzCZfd z@Bdylp~LrE{bw()Y*jmc@urK~h`Rb8l%H+j!ul0V@6K0n$~vRSmTpT^=l(MrqtJKwmelgdsdSsW2Soy8gS^wDa*b|VVjaWf0;gL zPR<7n2fdFza<0qq!(AV3_ePJA@4eOe@i|+sEjpI_`V0N72cG`w?5j=VN|(%kdPT;Z z7j{4Oy7%LKv+nAXxT4#o-KVyFveekU?UMM`p0yt?zw$^}c>RbGC+=HutyJ@N>)oa{ z!%`y-KA5oTQ24m=Nz-oj=~uCF|CFyLj{Phw_?gr1Hd{4s;q8&yAD*6<`cRL>4KW$x z_qWYR@3iLB?UIjEhxMP*^VzLqhQBkZ>C)iAH&aVHZri!|-QLri1wXK$|H9k<>ixih zGbdlnFVL-=Q#xeD+iOfq*4(w(^6EpsRunYpy=+uu-JG0lGG?Tqt}H=lYO2x1KG|-B`dKC}!=U{kAOMha1{+%KGshI+XDKgg|In$^J)dV{M3F+^OqZJamj^5%qhplKqc! z{V0%bV2>)>FZIwd=2C$mI$d&~F89M6i|1vyp*^{*U+tkoiT3XdD4Rq@+SgOxWqrAS zo(LT6m1TW-4zNft%6&gr*yU`$X~5E+Th^ER?4@EyQz+_5{Ux7-GeM_4ye!Loydn-h z)`Ss>iX5^DITkMZE(-PK-2QG5)%6V~9b-3`c&%IVfQ%Py<0pzrId0VTqZaEJDQYnTN^>Xu zo!dVRHgXloCeP)pCA_|~y`}$fDjxOXrlqRBJh!VC^_}^h%a>7?^q1``tCLW|MUIKf zncunm8+hd0V*H}MkEmZq!g0xAko9H1>OoVtU;k7Ru`BgYG2pg+Dd%snsq4#gLuC!G zzg4u)OZNWA`b|Jr*DrrMiLsVH&1-1o0j3b36;Oias7$h?{ivY_tf>Rn|Uedeh#|;P$-ag zlktz{x2yL3Px5*zhI1(YI=3(Jt{}a_5bmLCMDj$mkn60P=m|~a`ss-GvYl5u;=OI> z)Q^(sZs3SQ@K}>@k>qg#9LZ2E;-_H`Y+>+ zir}fVRa~8adn)Y^7m`$*{MM76CWz++YNDsoUXkFmC-Jt^Fi z{7NVJ&olnU<5C8^t9~71{4JHOVjY(A^}N9QOwr-a9tU{*ZK?P<;X9+E1}l@l6J96q zS|>bv2i}F9r9J_IU+S|EH`L!>yK#L+F|8Cu%3tIpe+b3R|UU(PAH$7Nj(#t z_~}=4@6_KUCq1P-JB;P}INNiFlYFS-QvMLMt5NPzbWZVM6vH>3FVt;Udd4yS#`8K8 zcm;9BIiAcFc<1<2!sIlLC+mUNx`+?20N)+svVMe)8dAEjzl!p+z@G@xF-(7fZ{dm0 zw1YoG;Cl*uFNPNd70?4u^1~+S81_Ly%Xh<%7Z(|S$U~f8rsE$0-wl2x<5+-@^9_^J zLP>v^^G_Cd4HC~*;$98>fhT=-cH#U_Gcqx>|X2eU52$tlXRZ#p}TW|IuWQj~Dn-f&acE$3G(Q zZwq|TV2<|{_}_uQhsOQcB#sgKv_*nScIY>P^UHl#BJi&4mc{Tbl-1)ozqEg`8-Duk z2J(|NBCf)n*tJc{5&k3n?KtqHPxWvvKV0ySZ_4F(jN|xQ0zU(I;@{hiob8ji2lkny(tn>(tq-OTn>H50bN?)Nza#rpY-8q zC0yVy>vRkw<>X0zp^voBdVvod%K1A9IbR6;xJZtlA@H>V@BaYD(`QrZ8iIyMpI;~H zSXtUF4R|fXIR43ZgMR{eSN{3D8~ppgQ@fjlJ!QMM1^zBEzY<0BeQ-EL{JX@wun7Eo z;9a%5M(`JkcqRES3A{zjciC=VBvP*AJmdyHh2dK$6{B@b6UrOtnhQMX*>0GQmF0Zt z(1PP175?9wQSmuafj=wkFa2t&z&|JAhLm$j;BSig5-Q}hhGS5>l_9*{HUb|e@YjW3 zNjYbMZ-pJdbAJA{;6En(Q|jZV%+-+IpYNW>v+x|CGfL>ccsq?H~2S%9E;F%u#j^_;I|Cq@}-}&#zvRy zoIIK1rG3T%-wk=D{2o|TXIHYo)BF2$`LnbH>A&|wMh)GWq%dr zdElwP@_Tn>zupF(`Jw2Sj5B`&Px3E_xO7m+x%XbqpCkC?yoeBZ=XHE8@DSDLTIUA8 zUC8+}NXP2Py1NB_cp}HQ7ZSe^c<1>13zOeif6vyuUnyg`oR@{1j=+;0s>M8&_74D_ zjqipe#;Fzj@q&L~XC1?g68IGY|C3m!q?|p#%f1L!2EJtY7RrtEs?KyPHJ20iu#w@cW85gJq6g z>jmC953^V z&jr48f+PP`f&W0vBPk~p6N>bFOY~Rj`HaAy9?9jvJ=pcSz@M1J@zOq@08is0zsH+> zw-ahy5&Xl2Kg;!nzHgP<-5<>5NI&T(@XqVwIDtVni?Z%36=|f0dg9N^E?kbZbGOc1pR-{cA0+r65_sqM86)tchjRW01pgY~ zNzcMSj^8ct?+gAzojG2P%W1*CP~>k0!GBxuJLh9}qa$QDA2DB+3jW6h{%7IO{RDm^ z@T8CY{&i`G-Gbja&;J#8iW{*aZa@uowd~5sr-MX%-UMnvcox>mElI6l&He9z80hLQ8S5_syb{GNUKZZ*2DYdO9{ zkdBIq%%gm}!QVU(hhIoyc=@LT@UHxMDDY(e2gN!f{lp^hfg)Z>`K#Q>q3`V_JwF(w zV@=X`XV7&Tc(yJ-m&D3)UArOV-xU3o_MvatC4IJu`6buWMZmk#e;vbPU$56O`SSc> zha3D!;K@Gp(}(Ko9Prex^S&VYK8|tA&kbc;)2j_P_&lxK4of37dSvkHr z0zcF#p1%k@$=5#0`AtIEw*~)M!7uIhrNBGqrN0Th^FI213@G*2d0iMI@YlqAl=5c- zPve**;+UV%=Ow|vG=b|W<9UU^cNos`;ey`>0h#)BXe7sDd%~{!fG2%&v>YEQ@G}Iz z^ZC*e!T+1^6RGDJ#*gzUr@Z2tkmG!=(&B#JZh{yWxepp6@V7*~mGbihK1aj>nO8pz zJoRf+6xV;H(Em+_7X=kKAmm&Y@}+NoC-BbaAs$G0B#%mr(gt{1*W~X_$Z;76JlXT4 z7)J~TyD|knUf5aoYlXl&=O@Pmer|}4)xU>}QLYMnA7M9%?+k?<}uRG5Qd~1=nV0yA^H}KToO&gO~S+3)?g5Npc=zxXEmE8sbPx?#{{wd@CQv&at z&+lh)8jtT+g8#}xI;M}*)3+~|@0`~K3jDpJIR9o=3%}0+Jgrl8Q#oGRbFSde>B#Xi z&O8r1`I|0?<1rlUdXM2nK?SM=|7J1oq@3$+_!75Lj? z9?ALm0`P3zd?tx=YB=~v@P97&(Hy&44-ovNNgN^ghXPOi^%d=6xY-pe@Xq^%G=X={ zKNkY;%FZvk!M`iytP|t-ifH!-fgjyf$1sBhzHJcKGeE={X@^LGcRo*^0zCO!Sa&W* zKBssLc$!DmQ#f9(J8K!gXiNp(1fJrR&x=VaES_rsPj>q$M91)QUY`{BaUyS&^8Xb0 zBf`!y-Y&#IyRzFez?1y=5nO(2(fS#IcRo+<7Q*>8PJS|8;GNH7Hw*mE36A<76!@V+ z&oQE1&w*UN^ZDv)0)JM>q3?{M>y*GdpYvQ1c<1x;zF5#(@v07gN4ddg15fr*M1Cmk zxnAI-!gNf|Od;)a;Ay@rTARc$egc0Tc=D5*{dEkpK;Z8k#PNXxI9|@9fxuI{&d+7` z2)y$?>u({a{9!Iv&`pb3;y*(Isan8zhB^& z2)~87*!3;&>^#S5o?aFF{vyAX^R62v8tJJOaRbXeyApw?a~S9Sj#2P$75vhF<^k`@ z57!I+yF`Db9bOjv^dlPTt6cCq_qXW~*YfXkgAW6q+4K1%E?&g#X~0u|=ZbL|B^qDn zM$R^dZ=s}&)iKVO1^*Etr!t1)qXqt^8#%3qy4L@GH~5jjlb)XnJKrPZFBbU6C-Zg@ z*4VX8;P-}de73+>G5IZ&-QzjlEb!NXC;Q|%&Fikic)LrS#&?3i?-ui-gOIaa;LlFt z^5uO040u=m@V($4DdMyAhklsgG=KkY%jM*G@dkn!zVZ8AgMlaeIOp4mz*E1pPW@6+ z&6a#i0e+bF)jTK9k~=Wj zlphluI&*|6KR6_OjA>3Bei~8Vh+!ZxL}cZr&U8%=8v}Y|YWBF?oK%x!nH&=wZZuA} zWSH^OfX3uhOXe(-F>jVWB&abKpO3KphM>?sW)OZpaC%O5wqpCSK1RvRl?=hbGsotp z6=a#l;j<9XIW*X4%(o<4GEM@|?q zR&Uggi-Nas*Ae%kh4CXt#_8jY@gpK)^u*yXhG~un^v8?=i+W_-h_TU;3Vk+%`bfCR z^_M^n%G9G4G?vl>-~!9t7^+0T07r#$mbuB{!H z91Yv)^-&@ESxTN6A0SE>l8hmNA%TM$8I{^%HV6(fM#{PBT6XjVCYnYtDsOx|9|#A7 zM228EGN>1@X^7ESkV9U^ri3XCp&)OL5&Btz2WIDDR%RlaB_l>f$7bkZzYIM@#v9{8 zjc}9+=tz99kp+b@ah5Rtd#0}Sl6}rB6b6KA8F_2ePIOF4u%7-wr!X@nWo|a&LaHf0 z-=+aRxHMglu)#FUj?U2Q(Z|>^&?7F46l!EOW?t%LC~IMYqoYdCA5UH$X2z^VZ_TE3 z#BfBa=y;<()G{Z}q#qwQh>4bA(VU+Qa|VYd#s#qpZke5%#%w@>Y!gk+8Fbur!}{>- z7;5@u^vG`#AeDlAdQw&kHi<=cQ&1#&4m{PBy1S z!*BHIdGHp!egb;S{SzZcDmwSj?xL6CL8&W{stSFJH%PSjZw6+Agac?Y)n6k&7{VT%cnb3 zmQzaf%Ym@V=<52zfnf4VG51u@h?#%M~c zSX7P8h)D_3>j%T$n_4 z2ZwR~73XL%LuOGZrZy1W202Gu`9r=r2(j7Z5-eyNr)MJ@Vctf$!suDX2_m${Fv-<`GZnX&Fp${`X}MZo)XYnHA_rd)`{Ry8HOonCWo--9h-q+&|^J- z{s<0yvHi!crH(KIjiV7M5HM7$S$e+7G_z5+RU`jjr8|zTM6>wo*ba@=K&+10$ums| z@U#-9!==P$XjQ8sT+?Z#Bs1_S2xFyX#kxon@&}tu`6lx$lfH3UL~|!3Gk3^rGg`4F zmtx8OrvckBF0-JG&eDMDA!>*zhdvC9u0<#2o5x`hrM%o0;}OrY@=Ru|h0#%Y6u#x3QYQ0VsT_n5jTQTjkpNm;Fx-jDTU3!kypUQGlY+;vj-NqRgwCi_^Em|-*M!yLSf{Fpu6m2 z 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 literal 0 HcmV?d00001 diff --git a/programs/pfstool/makefile b/programs/pfstool/makefile index 117d52e..3d96a8d 100644 --- a/programs/pfstool/makefile +++ b/programs/pfstool/makefile @@ -1,16 +1,15 @@ # Sources -SRC_DIR = . +SRC_DIR = source OBJS = $(foreach dir,$(SRC_DIR),$(subst .cpp,.o,$(wildcard $(dir)/*.cpp))) $(foreach dir,$(SRC_DIR),$(subst .c,.o,$(wildcard $(dir)/*.c))) -#local dependencies +# External dependencies DEPENDS = nx crypto fnd - LIB_DIR = ../../lib +LIBS = $(foreach dep,$(DEPENDS), -L"$(LIB_DIR)/lib$(dep)" -l$(dep)) +INCS = $(foreach dep,$(DEPENDS), -I"$(LIB_DIR)/lib$(dep)/include") -LIBS = -L"$(LIB_DIR)" $(foreach dep,$(DEPENDS), -l"$(dep)") -INCS = -I"$(LIB_DIR)/" - -OUTPUT = ../../bin/$(shell basename $(CURDIR)) +BIN_DIR = bin +OUTPUT = $(BIN_DIR)/$(shell basename $(CURDIR)) # Compiler Settings CXXFLAGS = -std=c++11 $(INCS) -D__STDC_FORMAT_MACROS -Wall -Wno-unused-but-set-variable -Wno-unused-value @@ -33,7 +32,8 @@ all: build rebuild: clean build build: $(OBJS) + mkdir -p $(BIN_DIR) $(CXX) $(OBJS) $(LIBS) -o $(OUTPUT) clean: - rm -rf $(OBJS) $(OUTPUT) \ No newline at end of file + rm -rf $(OBJS) $(OUTPUT) $(BIN_DIR) \ No newline at end of file diff --git a/programs/pfstool/pfstool.vcxproj b/programs/pfstool/pfstool.vcxproj index 7e15c82..f9d21c8 100644 --- a/programs/pfstool/pfstool.vcxproj +++ b/programs/pfstool/pfstool.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -27,26 +27,26 @@ Application true - v140 + v141 MultiByte Application false - v140 + v141 true MultiByte Application true - v140 + v141 MultiByte Application false - v140 + v141 true MultiByte @@ -74,7 +74,8 @@ Level3 Disabled true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -82,7 +83,8 @@ Level3 Disabled true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -92,7 +94,8 @@ true true true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -106,7 +109,8 @@ true true true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libnx\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -114,11 +118,22 @@ - + + + + {6adbb60d-dba0-411d-bd2d-a355ef8e0fe1} + + + {4d27edb9-5110-44fe-8ce2-d46c5ad3c55b} + + + {91ba9e79-8242-4f7d-b997-0dfec95ea22b} + + diff --git a/programs/pfstool/pfstool.vcxproj.filters b/programs/pfstool/pfstool.vcxproj.filters index 61ac64b..f033c14 100644 --- a/programs/pfstool/pfstool.vcxproj.filters +++ b/programs/pfstool/pfstool.vcxproj.filters @@ -15,7 +15,7 @@ - + Source Files diff --git a/programs/pfstool/main.cpp b/programs/pfstool/source/main.cpp similarity index 97% rename from programs/pfstool/main.cpp rename to programs/pfstool/source/main.cpp index 6d9a12f..d86507a 100644 --- a/programs/pfstool/main.cpp +++ b/programs/pfstool/source/main.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/programs/tiktool/bin/tiktool b/programs/tiktool/bin/tiktool new file mode 100644 index 0000000000000000000000000000000000000000..7d37d92fd04d8649c1ec775d1d10e4edbe91218e GIT binary patch literal 70049 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�&>tzE-x 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 R!G_U{4;l7x%n_RO*?)}2P`dyC literal 0 HcmV?d00001 diff --git a/programs/tiktool/main.cpp b/programs/tiktool/main.cpp deleted file mode 100644 index 708e40a..0000000 --- a/programs/tiktool/main.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include -#include -#include - -int main(int argc, char** argv) -{ - if (argc < 2) - { - printf("usage: tiktool \n"); - return 1; - } - - try - { - fnd::MemoryBlob file; - fnd::io::readFile(argv[1], file); - - // import - es::ETicketBody_V2 body; - body.importBinary(file.getBytes() + 0x140, file.getSize() - 0x140); - - printf("Issuer: %s\n", body.getIssuer().c_str()); - - - } catch (const fnd::Exception& e) - { - printf("%s\n", e.what()); - } - - return 0; -} \ No newline at end of file diff --git a/programs/tiktool/makefile b/programs/tiktool/makefile index 38dc36b..5377914 100644 --- a/programs/tiktool/makefile +++ b/programs/tiktool/makefile @@ -1,16 +1,15 @@ # Sources -SRC_DIR = . +SRC_DIR = source OBJS = $(foreach dir,$(SRC_DIR),$(subst .cpp,.o,$(wildcard $(dir)/*.cpp))) $(foreach dir,$(SRC_DIR),$(subst .c,.o,$(wildcard $(dir)/*.c))) -#local dependencies +# External dependencies DEPENDS = es crypto fnd - LIB_DIR = ../../lib +LIBS = $(foreach dep,$(DEPENDS), -L"$(LIB_DIR)/lib$(dep)" -l$(dep)) +INCS = $(foreach dep,$(DEPENDS), -I"$(LIB_DIR)/lib$(dep)/include") -LIBS = -L"$(LIB_DIR)" $(foreach dep,$(DEPENDS), -l"$(dep)") -INCS = -I"$(LIB_DIR)/" - -OUTPUT = ../../bin/$(shell basename $(CURDIR)) +BIN_DIR = bin +OUTPUT = $(BIN_DIR)/$(shell basename $(CURDIR)) # Compiler Settings CXXFLAGS = -std=c++11 $(INCS) -D__STDC_FORMAT_MACROS -Wall -Wno-unused-but-set-variable -Wno-unused-value @@ -33,7 +32,8 @@ all: build rebuild: clean build build: $(OBJS) + mkdir -p $(BIN_DIR) $(CXX) $(OBJS) $(LIBS) -o $(OUTPUT) clean: - rm -rf $(OBJS) $(OUTPUT) \ No newline at end of file + rm -rf $(OBJS) $(OUTPUT) $(BIN_DIR) \ No newline at end of file diff --git a/programs/tiktool/source/main.cpp b/programs/tiktool/source/main.cpp new file mode 100644 index 0000000..ef1c34a --- /dev/null +++ b/programs/tiktool/source/main.cpp @@ -0,0 +1,107 @@ +#include +#include +#include +#include +#include +#include + +const std::string kTitleKeyPersonalisation[2] = +{ + "Generic (AESCBC)", + "Personalised (AESCBC/RSA2048)" +}; + +const std::string kLicenseType[6] = +{ + "PERMANENT", + "DEMO", + "TRIAL", + "RENTAL", + "SUBSCRIPTION", + "SERVICE" +}; + +const std::string kBooleanStr[2] = +{ + "FALSE", + "TRUE" +}; + +u8 eticket_common_key[16] = { 0x55, 0xA3, 0xF8, 0x72, 0xBD, 0xC8, 0x0C, 0x55, 0x5A, 0x65, 0x43, 0x81, 0x13, 0x9E, 0x15, 0x3B }; // lol this 3ds dev common key + +int main(int argc, char** argv) +{ + if (argc < 2) + { + printf("usage: tiktool \n"); + return 1; + } + + try + { + fnd::MemoryBlob file; + fnd::io::readFile(argv[1], file); + + // import + es::ETicketBody_V2 body; + body.importBinary(file.getBytes() + 0x140, file.getSize() - 0x140); + + printf("[ETICKET]\n"); + printf(" Issuer: %s\n", body.getIssuer().c_str()); + printf(" Title Key:\n"); + printf(" EncMode: %s\n", kTitleKeyPersonalisation[body.getTitleKeyEncType()].c_str()); + printf(" CommonKeyId: %02X\n", body.getCommonKeyId()); + printf(" EncData:"); + size_t size = body.getTitleKeyEncType() == es::ETicketBody_V2::RSA2048 ? crypto::rsa::kRsa2048Size : crypto::aes::kAes128KeySize; + for (u32 i = 0; i < size; i++) + { + if (i % 16 == 0) + { + printf("\n "); + } + printf("%02X%s", body.getEncTitleKey()[i], (i+1 != size) ? "" : "\n"); + } + + if (body.getTitleKeyEncType() == es::ETicketBody_V2::AES128_CBC && body.getCommonKeyId() == 0) + { + u8 iv[crypto::aes::kAesBlockSize]; + u8 key[crypto::aes::kAes128KeySize]; + memcpy(iv, body.getRightsId(), crypto::aes::kAesBlockSize); + crypto::aes::AesCbcDecrypt(body.getEncTitleKey(), crypto::aes::kAes128KeySize, eticket_common_key, iv, key); + size = crypto::aes::kAes128KeySize; + printf(" TitleKey:"); + for (u32 i = 0; i < size; i++) + { + if (i % 16 == 0) + { + printf("\n "); + } + printf("%02X%s", key[i], (i + 1 != size) ? "" : "\n"); + } + } + printf(" Version: v%d\n", body.getTicketVersion()); + printf(" License Type: %s\n", kLicenseType[body.getLicenseType()].c_str()); + printf(" Flags:\n"); + printf(" PreInstall: %s\n", kBooleanStr[body.isPreInstall()].c_str()); + printf(" SharedTitle: %s\n", kBooleanStr[body.isSharedTitle()].c_str()); + printf(" AllContent: %s\n", kBooleanStr[body.allowAllContent()].c_str()); + printf(" Reserved Region:"); + for (u32 i = 0; i < 8; i++) + { + if (i % 16 == 0) + { + printf("\n "); + } + printf("%02X%s", body.getReservedRegion()[i], (i + 1 != 8) ? "" : "\n"); + } + printf(" TicketId: 0x%016" PRIx64 "\n", body.getTicketId()); + printf(" DeviceId: 0x%016" PRIx64 "\n", body.getDeviceId()); + + + } catch (const fnd::Exception& e) + { + printf("%s\n", e.what()); + } + + return 0; +} \ No newline at end of file diff --git a/programs/tiktool/tiktool.vcxproj b/programs/tiktool/tiktool.vcxproj index 29fba34..6d2735c 100644 --- a/programs/tiktool/tiktool.vcxproj +++ b/programs/tiktool/tiktool.vcxproj @@ -1,5 +1,5 @@  - + Debug @@ -27,26 +27,26 @@ Application true - v140 + v141 MultiByte Application false - v140 + v141 true MultiByte Application true - v140 + v141 MultiByte Application false - v140 + v141 true MultiByte @@ -74,7 +74,8 @@ Level3 Disabled true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libes\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -82,7 +83,8 @@ Level3 Disabled true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libes\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) @@ -92,7 +94,8 @@ true true true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libes\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -106,7 +109,8 @@ true true true - ..\..\lib + ..\..\lib\libfnd\include;..\..\lib\libcrypto\include;..\..\lib\libes\include; + _MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -114,11 +118,22 @@ - + + + + {6adbb60d-dba0-411d-bd2d-a355ef8e0fe1} + + + {7be99936-0d40-410d-944b-4513c2eff8dc} + + + {4d27edb9-5110-44fe-8ce2-d46c5ad3c55b} + + diff --git a/programs/tiktool/tiktool.vcxproj.filters b/programs/tiktool/tiktool.vcxproj.filters index 61ac64b..f033c14 100644 --- a/programs/tiktool/tiktool.vcxproj.filters +++ b/programs/tiktool/tiktool.vcxproj.filters @@ -15,7 +15,7 @@ - + Source Files