mirror of
https://github.com/jakcron/nstool
synced 2024-12-27 15:11:12 +00:00
Merge pull request #42 from jakcron/nntools-rebrand
Rebrand NXTools to NNTools.
This commit is contained in:
commit
21b5bdaca9
243 changed files with 3577 additions and 3438 deletions
11
.vscode/c_cpp_properties.json
vendored
11
.vscode/c_cpp_properties.json
vendored
|
@ -9,14 +9,13 @@
|
|||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
|
||||
"/usr/include",
|
||||
"${workspaceRoot}",
|
||||
"${workspaceRoot}/lib/libcrypto/include",
|
||||
"${workspaceRoot}/lib/libcrypto/source/polarssl/libinclude",
|
||||
"${workspaceRoot}/lib/libcompress/include",
|
||||
"${workspaceRoot}/lib/libfnd/include",
|
||||
"${workspaceRoot}/lib/libpolarssl/include",
|
||||
"${workspaceRoot}/lib/liblz4/include",
|
||||
"${workspaceRoot}/lib/libes/include",
|
||||
"${workspaceRoot}/lib/libpki/include",
|
||||
"${workspaceRoot}/lib/libfnd/include",
|
||||
"${workspaceRoot}/lib/libnx/include",
|
||||
"${workspaceRoot}/lib/libnx-hb/include"
|
||||
"${workspaceRoot}/lib/libhac/include",
|
||||
"${workspaceRoot}/lib/libhac-hb/include"
|
||||
],
|
||||
"defines": [],
|
||||
"intelliSenseMode": "clang-x64",
|
||||
|
|
2
LICENSE
2
LICENSE
|
@ -1,4 +1,4 @@
|
|||
NXTools
|
||||
NNTools
|
||||
Copyright (c) 2017-2018 Jack
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
|
|
@ -3,49 +3,35 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27428.2015
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
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\libcrypto\crypto.vcxproj", "{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libnx", "lib\libnx\nx.vcxproj", "{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1} = {6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B} = {4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{170B4A09-1B67-4A62-93AB-116EBCFF4A8C}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
lib\makefile = lib\makefile
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Programs", "Programs", "{E0863FCC-8E72-490D-BE1B-458F12CA8298}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
programs\makefile = programs\makefile
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8F6C846D-35E2-47FD-AF42-7A3FD036346E}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.gitignore = .gitignore
|
||||
KEYS.md = KEYS.md
|
||||
LICENSE = LICENSE
|
||||
makefile = makefile
|
||||
README.md = README.md
|
||||
SWITCH_KEYS.md = SWITCH_KEYS.md
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libes", "lib\libes\es.vcxproj", "{7BE99936-0D40-410D-944B-4513C2EFF8DC}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nstool", "programs\nstool\nstool.vcxproj", "{AF09FA96-4463-417D-8FE6-526063F41349}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{CF01B5B7-730A-447F-9BB2-5EDA9B082177} = {CF01B5B7-730A-447F-9BB2-5EDA9B082177}
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63} = {738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcompress", "lib\libcompress\libcompress.vcxproj", "{CF01B5B7-730A-447F-9BB2-5EDA9B082177}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfnd", "lib\libfnd\libfnd.vcxproj", "{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libnx-hb", "lib\libnx-hb\libnx-hb.vcxproj", "{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpolarssl", "lib\libpolarssl\libpolarssl.vcxproj", "{394EFC16-BD3A-4538-B33D-7BA1EDB8DAC1}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblz4", "lib\liblz4\liblz4.vcxproj", "{AB0C3362-63AB-480A-ADBC-2EF7D859778B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpki", "lib\libpki\libpki.vcxproj", "{B9113734-6E84-44FF-8CF7-58199AA815C5}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libes", "lib\libes\libes.vcxproj", "{7BE99936-0D40-410D-944B-4513C2EFF8DC}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libhac", "lib\libhac\libhac.vcxproj", "{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libhac-hb", "lib\libhac-hb\libhac-hb.vcxproj", "{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
|
@ -54,38 +40,6 @@ Global
|
|||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Debug|x64.Build.0 = Debug|x64
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Debug|x86.Build.0 = Debug|Win32
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Release|x64.ActiveCfg = Release|x64
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Release|x64.Build.0 = Release|x64
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Release|x86.ActiveCfg = Release|Win32
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Release|x86.Build.0 = Release|Win32
|
||||
{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}.Debug|x64.Build.0 = Debug|x64
|
||||
{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}.Debug|x86.Build.0 = Debug|Win32
|
||||
{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}.Release|x64.ActiveCfg = Release|x64
|
||||
{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}.Release|x64.Build.0 = Release|x64
|
||||
{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}.Release|x86.ActiveCfg = Release|Win32
|
||||
{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}.Release|x86.Build.0 = Release|Win32
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Debug|x64.Build.0 = Debug|x64
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Debug|x86.Build.0 = Debug|Win32
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Release|x64.ActiveCfg = Release|x64
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Release|x64.Build.0 = Release|x64
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Release|x86.ActiveCfg = Release|Win32
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Release|x86.Build.0 = Release|Win32
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Debug|x64.Build.0 = Debug|x64
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Debug|x86.Build.0 = Debug|Win32
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Release|x64.ActiveCfg = Release|x64
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Release|x64.Build.0 = Release|x64
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Release|x86.ActiveCfg = Release|Win32
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Release|x86.Build.0 = Release|Win32
|
||||
{AF09FA96-4463-417D-8FE6-526063F41349}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{AF09FA96-4463-417D-8FE6-526063F41349}.Debug|x64.Build.0 = Debug|x64
|
||||
{AF09FA96-4463-417D-8FE6-526063F41349}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
|
@ -94,22 +48,30 @@ Global
|
|||
{AF09FA96-4463-417D-8FE6-526063F41349}.Release|x64.Build.0 = Release|x64
|
||||
{AF09FA96-4463-417D-8FE6-526063F41349}.Release|x86.ActiveCfg = Release|Win32
|
||||
{AF09FA96-4463-417D-8FE6-526063F41349}.Release|x86.Build.0 = Release|Win32
|
||||
{CF01B5B7-730A-447F-9BB2-5EDA9B082177}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{CF01B5B7-730A-447F-9BB2-5EDA9B082177}.Debug|x64.Build.0 = Debug|x64
|
||||
{CF01B5B7-730A-447F-9BB2-5EDA9B082177}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{CF01B5B7-730A-447F-9BB2-5EDA9B082177}.Debug|x86.Build.0 = Debug|Win32
|
||||
{CF01B5B7-730A-447F-9BB2-5EDA9B082177}.Release|x64.ActiveCfg = Release|x64
|
||||
{CF01B5B7-730A-447F-9BB2-5EDA9B082177}.Release|x64.Build.0 = Release|x64
|
||||
{CF01B5B7-730A-447F-9BB2-5EDA9B082177}.Release|x86.ActiveCfg = Release|Win32
|
||||
{CF01B5B7-730A-447F-9BB2-5EDA9B082177}.Release|x86.Build.0 = Release|Win32
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Debug|x64.Build.0 = Debug|x64
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Debug|x86.Build.0 = Debug|Win32
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Release|x64.ActiveCfg = Release|x64
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Release|x64.Build.0 = Release|x64
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Release|x86.ActiveCfg = Release|Win32
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Release|x86.Build.0 = Release|Win32
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Debug|x64.Build.0 = Debug|x64
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Debug|x86.Build.0 = Debug|Win32
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Release|x64.ActiveCfg = Release|x64
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Release|x64.Build.0 = Release|x64
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Release|x86.ActiveCfg = Release|Win32
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}.Release|x86.Build.0 = Release|Win32
|
||||
{394EFC16-BD3A-4538-B33D-7BA1EDB8DAC1}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{394EFC16-BD3A-4538-B33D-7BA1EDB8DAC1}.Debug|x64.Build.0 = Debug|x64
|
||||
{394EFC16-BD3A-4538-B33D-7BA1EDB8DAC1}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{394EFC16-BD3A-4538-B33D-7BA1EDB8DAC1}.Debug|x86.Build.0 = Debug|Win32
|
||||
{394EFC16-BD3A-4538-B33D-7BA1EDB8DAC1}.Release|x64.ActiveCfg = Release|x64
|
||||
{394EFC16-BD3A-4538-B33D-7BA1EDB8DAC1}.Release|x64.Build.0 = Release|x64
|
||||
{394EFC16-BD3A-4538-B33D-7BA1EDB8DAC1}.Release|x86.ActiveCfg = Release|Win32
|
||||
{394EFC16-BD3A-4538-B33D-7BA1EDB8DAC1}.Release|x86.Build.0 = Release|Win32
|
||||
{AB0C3362-63AB-480A-ADBC-2EF7D859778B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{AB0C3362-63AB-480A-ADBC-2EF7D859778B}.Debug|x64.Build.0 = Debug|x64
|
||||
{AB0C3362-63AB-480A-ADBC-2EF7D859778B}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{AB0C3362-63AB-480A-ADBC-2EF7D859778B}.Debug|x86.Build.0 = Debug|Win32
|
||||
{AB0C3362-63AB-480A-ADBC-2EF7D859778B}.Release|x64.ActiveCfg = Release|x64
|
||||
{AB0C3362-63AB-480A-ADBC-2EF7D859778B}.Release|x64.Build.0 = Release|x64
|
||||
{AB0C3362-63AB-480A-ADBC-2EF7D859778B}.Release|x86.ActiveCfg = Release|Win32
|
||||
{AB0C3362-63AB-480A-ADBC-2EF7D859778B}.Release|x86.Build.0 = Release|Win32
|
||||
{B9113734-6E84-44FF-8CF7-58199AA815C5}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{B9113734-6E84-44FF-8CF7-58199AA815C5}.Debug|x64.Build.0 = Debug|x64
|
||||
{B9113734-6E84-44FF-8CF7-58199AA815C5}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
|
@ -118,19 +80,43 @@ Global
|
|||
{B9113734-6E84-44FF-8CF7-58199AA815C5}.Release|x64.Build.0 = Release|x64
|
||||
{B9113734-6E84-44FF-8CF7-58199AA815C5}.Release|x86.ActiveCfg = Release|Win32
|
||||
{B9113734-6E84-44FF-8CF7-58199AA815C5}.Release|x86.Build.0 = Release|Win32
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Debug|x64.Build.0 = Debug|x64
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Debug|x86.Build.0 = Debug|Win32
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Release|x64.ActiveCfg = Release|x64
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Release|x64.Build.0 = Release|x64
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Release|x86.ActiveCfg = Release|Win32
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC}.Release|x86.Build.0 = Release|Win32
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Debug|x64.Build.0 = Debug|x64
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Debug|x86.Build.0 = Debug|Win32
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Release|x64.ActiveCfg = Release|x64
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Release|x64.Build.0 = Release|x64
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Release|x86.ActiveCfg = Release|Win32
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B}.Release|x86.Build.0 = Release|Win32
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Debug|x64.Build.0 = Debug|x64
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Debug|x86.Build.0 = Debug|Win32
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Release|x64.ActiveCfg = Release|x64
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Release|x64.Build.0 = Release|x64
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Release|x86.ActiveCfg = Release|Win32
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{AF09FA96-4463-417D-8FE6-526063F41349} = {E0863FCC-8E72-490D-BE1B-458F12CA8298}
|
||||
{CF01B5B7-730A-447F-9BB2-5EDA9B082177} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{394EFC16-BD3A-4538-B33D-7BA1EDB8DAC1} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{AB0C3362-63AB-480A-ADBC-2EF7D859778B} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{B9113734-6E84-44FF-8CF7-58199AA815C5} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{7BE99936-0D40-410D-944B-4513C2EFF8DC} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{91BA9E79-8242-4F7D-B997-0DFEC95EA22B} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63} = {170B4A09-1B67-4A62-93AB-116EBCFF4A8C}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {07DCCACC-D10D-47C9-85AE-FB9C54DB7D62}
|
|
@ -21,9 +21,9 @@
|
|||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{0A4197A1-76AD-4BF7-A29D-5CED369B72FD}</ProjectGuid>
|
||||
<RootNamespace>NXTools</RootNamespace>
|
||||
<RootNamespace>NNTools</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
|
||||
<ProjectName>libnx</ProjectName>
|
||||
<ProjectName>NNTools</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
37
README.md
37
README.md
|
@ -1,35 +1,26 @@
|
|||
# NXTools
|
||||
# NNTools
|
||||
|
||||
Tools & Libraries for NX (Nintendo Switch).
|
||||
Tools & Libraries for Nintendo devices.
|
||||
|
||||
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE)
|
||||
|
||||
# Tools
|
||||
|
||||
* __nstool__ - read *.npdm, read/extract PartitionFS (PFS0|HFS0) blobs (including *.nsp), read/extract RomFS blobs, read/extract *.xci, read/extract *.nca, read *.cnmt, read *.nso, read *.nro, read *.nacp
|
||||
* [__nstool__](/programs/nstool/README.md) - General purpose read/extract tool for Nintendo Switch file formats.
|
||||
|
||||
# Libraries
|
||||
|
||||
* __libfnd__ - Foundation library.
|
||||
* __libcrypto__ - Cryptographic functions (AES,SHA,RSA). Wrapper for [mbedTLS](https://github.com/ARMmbed/mbedtls)
|
||||
* __libcompress__ - Compression algorithms (LZ4). Wrapper for [lz4](https://github.com/lz4/lz4)
|
||||
* __libfnd__ - Foundation library. Provides file IO, crypto, CLI utils, string conversion, etc.
|
||||
* __libpki__ - Processes Nintendo's proprietary PKI.
|
||||
* __libes__ - Processes Nintendo's eShop file types.
|
||||
* __libnx__ - Processes NX file types.
|
||||
* __libnx-hb__ - Processes NX file types (homebrew extensions).
|
||||
* __libes__ - Processes Nintendo's eShop file formats.
|
||||
* __libhac__ - Processes Nintendo Switch file formats.
|
||||
* __libhac-hb__ - Processes Nintendo Switch file formats (homebrew extensions).
|
||||
|
||||
# Dependencies
|
||||
* __libpolarssl__ - Cryptographic functions (AES,SHA,RSA). Clone of [polarssl](https://github.com/ARMmbed/mbedtls) (now mbedTLS).
|
||||
* __liblz4__ - Compression algorithms (LZ4). Clone of [lz4](https://github.com/lz4/lz4).
|
||||
|
||||
(Copies of these are included locally and are statically linked libraries)
|
||||
|
||||
# Building
|
||||
|
||||
On MacOS/Linux/WSL run `make`.
|
||||
|
||||
For Windows, Visual Studio 2017 is supported.
|
||||
|
||||
# External Keys
|
||||
|
||||
Programs/libraries don't embed any keys that are copyright protected. However keys can be imported via a keyset file.
|
||||
|
||||
For programs that support it, the keyset file can be provided via the command line (see program usage for details). Alternatively a keyset file located in ___$HOME/.switch/prod.keys___ (or ___$HOME/.switch/dev.keys___ for dev) will be imported automatically if one is not provided at the command line.
|
||||
|
||||
Keyset files are ASCII text files containing one key per line, in the form "__key_name = HEXADECIMALKEY__". Case and whitespace do not matter, ';' character can be used to insert comments.
|
||||
|
||||
See [KEYS.md](/KEYS.md) for more details.
|
||||
For Windows, Visual Studio 2017 is supported.
|
|
@ -1,5 +1,19 @@
|
|||
# Format
|
||||
Programs in NXTools currently recognise the following keys (## represents a hexadecimal number between 00 and 1F):
|
||||
|
||||
# About
|
||||
Keyset files are ASCII text files containing one key per line, in the form "__key_name = HEXADECIMALKEY__". Case and whitespace do not matter, ';' character can be used to insert comments.
|
||||
|
||||
# Loading keyset files automatically
|
||||
If a keyset file is located in ___$HOME/.switch/___ it will be loaded automatically.
|
||||
|
||||
# General Keys (prod.keys and dev.keys)
|
||||
Some switch files formats feature encryption and or cryptographic signatures. In order to process these file formats, some keys are required. These keys can be supplied via a keyfile: ___prod.keys___ (or ___dev.keys___ for devkit variants).
|
||||
|
||||
This keyset file can be provided via the command line (refer to usage for details).
|
||||
|
||||
|
||||
|
||||
## Format
|
||||
The following keys are recognised (## represents a hexadecimal number between 00 and 1F):
|
||||
|
||||
```
|
||||
; Key Sources
|
||||
|
@ -47,8 +61,8 @@ acid_sign_key_modulus : RSA2048 Modulus (0x100 bytes)
|
|||
acid_sign_key_private : RSA2048 Private Exponent (0x100 bytes)
|
||||
```
|
||||
|
||||
# Compatibility with hactool keyset files
|
||||
NXTools keyset files share the same keyset file format as [hactool](https://github.com/SciresM/hactool/blob/master/KEYS.md), but names of keys may differ. For compatibility, hactool names for equivalent keys are accepted.
|
||||
## Compatibility with hactool keyset files
|
||||
`prod.keys` (and `dev.keys`) keyset files share the same keyset file format as [hactool](https://github.com/SciresM/hactool/blob/master/KEYS.md), but names of keys may differ. For compatibility, hactool names for equivalent keys are accepted.
|
||||
```
|
||||
titlekek_source : hactool alias for ticket_commonkey_source
|
||||
header_key_source : hactool alias for nca_header_key_source
|
|
@ -1,14 +0,0 @@
|
|||
#include <compress/lz4.h>
|
||||
#include "lz4/lz4.h"
|
||||
|
||||
void compress::lz4::compressData(const uint8_t* src, uint32_t src_len, uint8_t* dst, uint32_t dst_capacity, uint32_t& compressed_size)
|
||||
{
|
||||
compressed_size = LZ4_compress_default((const char*)src, (char*)dst, (int)src_len, (int)dst_capacity);
|
||||
}
|
||||
|
||||
void compress::lz4::decompressData(const uint8_t* src, uint32_t src_len, uint8_t* dst, uint32_t dst_capacity, uint32_t& decompressed_size)
|
||||
{
|
||||
decompressed_size = LZ4_decompress_safe((const char*)src, (char*)dst, (int)src_len, (int)dst_capacity);
|
||||
}
|
||||
|
||||
|
|
@ -1,159 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{6ADBB60D-DBA0-411D-BD2D-A355EF8E0FE1}</ProjectGuid>
|
||||
<RootNamespace>crypto</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
|
||||
<ProjectName>libcrypto</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v141</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup />
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libcrypto\source\libpolarssl\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libcrypto\source\libpolarssl\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libcrypto\source\libpolarssl\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libcrypto\source\libpolarssl\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\crypto\aes.h" />
|
||||
<ClInclude Include="include\crypto\base64.h" />
|
||||
<ClInclude Include="include\crypto\ecdsa.h" />
|
||||
<ClInclude Include="include\crypto\rsa.h" />
|
||||
<ClInclude Include="include\crypto\sha.h" />
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\aes.h" />
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\base64.h" />
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\bignum.h" />
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\bn_mul.h" />
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\config.h" />
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\md.h" />
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\md_wrap.h" />
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\rsa.h" />
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\sha1.h" />
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\sha2.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="source\aes_wrapper.cpp" />
|
||||
<ClCompile Include="source\base64_wrapper.cpp" />
|
||||
<ClCompile Include="source\libpolarssl\source\aes.c" />
|
||||
<ClCompile Include="source\libpolarssl\source\base64.c" />
|
||||
<ClCompile Include="source\libpolarssl\source\bignum.c" />
|
||||
<ClCompile Include="source\libpolarssl\source\md.c" />
|
||||
<ClCompile Include="source\libpolarssl\source\md_wrap.c" />
|
||||
<ClCompile Include="source\libpolarssl\source\rsa.c" />
|
||||
<ClCompile Include="source\libpolarssl\source\sha1.c" />
|
||||
<ClCompile Include="source\libpolarssl\source\sha2.c" />
|
||||
<ClCompile Include="source\rsa_wrapper.cpp" />
|
||||
<ClCompile Include="source\sha_wrapper.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="makefile" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -1,114 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\crypto">
|
||||
<UniqueIdentifier>{c24d0e3f-1a38-486c-9bad-b7db5b39eee2}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files\polarssl">
|
||||
<UniqueIdentifier>{50821199-d06b-4e82-b424-3f17b60f1a9e}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\polarssl">
|
||||
<UniqueIdentifier>{012a6f22-d10a-4ca3-b7c3-4c31c6ff1cc1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\crypto\aes.h">
|
||||
<Filter>Header Files\crypto</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\crypto\rsa.h">
|
||||
<Filter>Header Files\crypto</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\crypto\sha.h">
|
||||
<Filter>Header Files\crypto</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\aes.h">
|
||||
<Filter>Header Files\polarssl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\base64.h">
|
||||
<Filter>Header Files\polarssl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\bignum.h">
|
||||
<Filter>Header Files\polarssl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\bn_mul.h">
|
||||
<Filter>Header Files\polarssl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\config.h">
|
||||
<Filter>Header Files\polarssl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\rsa.h">
|
||||
<Filter>Header Files\polarssl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\sha1.h">
|
||||
<Filter>Header Files\polarssl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\sha2.h">
|
||||
<Filter>Header Files\polarssl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\md.h">
|
||||
<Filter>Header Files\polarssl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="source\libpolarssl\include\polarssl\md_wrap.h">
|
||||
<Filter>Header Files\polarssl</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\crypto\ecdsa.h">
|
||||
<Filter>Header Files\crypto</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\crypto\base64.h">
|
||||
<Filter>Header Files\crypto</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="source\aes_wrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\rsa_wrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\sha_wrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\libpolarssl\source\aes.c">
|
||||
<Filter>Source Files\polarssl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\libpolarssl\source\base64.c">
|
||||
<Filter>Source Files\polarssl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\libpolarssl\source\bignum.c">
|
||||
<Filter>Source Files\polarssl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\libpolarssl\source\md.c">
|
||||
<Filter>Source Files\polarssl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\libpolarssl\source\md_wrap.c">
|
||||
<Filter>Source Files\polarssl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\libpolarssl\source\rsa.c">
|
||||
<Filter>Source Files\polarssl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\libpolarssl\source\sha1.c">
|
||||
<Filter>Source Files\polarssl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\libpolarssl\source\sha2.c">
|
||||
<Filter>Source Files\polarssl</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\base64_wrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="makefile" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -1,30 +0,0 @@
|
|||
#include <crypto/base64.h>
|
||||
#include <polarssl/base64.h>
|
||||
|
||||
size_t crypto::base64::B64_GetEncodeLen(const uint8_t* src, size_t slen)
|
||||
{
|
||||
size_t dlen = 0;
|
||||
|
||||
base64_encode(nullptr, &dlen, src, slen);
|
||||
|
||||
return dlen;
|
||||
}
|
||||
|
||||
void crypto::base64::B64_Encode(const uint8_t* src, size_t slen, uint8_t* dst, size_t dlen)
|
||||
{
|
||||
base64_encode(dst, &dlen, src, slen);
|
||||
}
|
||||
|
||||
size_t crypto::base64::B64_GetDecodeLen(const uint8_t* src, size_t slen)
|
||||
{
|
||||
size_t dlen = 0;
|
||||
|
||||
base64_decode(nullptr, &dlen, src, slen);
|
||||
|
||||
return dlen;
|
||||
}
|
||||
|
||||
void crypto::base64::B64_Decode(const uint8_t* src, size_t slen, uint8_t* dst, size_t dlen)
|
||||
{
|
||||
base64_decode(dst, &dlen, src, slen);
|
||||
}
|
|
@ -1,37 +0,0 @@
|
|||
# Sources
|
||||
SRC_DIR = 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 =
|
||||
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
|
||||
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)
|
|
@ -1,15 +0,0 @@
|
|||
#include <crypto/sha.h>
|
||||
#include <polarssl/sha1.h>
|
||||
#include <polarssl/sha2.h>
|
||||
|
||||
using namespace crypto::sha;
|
||||
|
||||
void crypto::sha::Sha1(const uint8_t* in, uint64_t size, uint8_t hash[kSha1HashLen])
|
||||
{
|
||||
sha1(in, size, hash);
|
||||
}
|
||||
|
||||
void crypto::sha::Sha256(const uint8_t* in, uint64_t size, uint8_t hash[kSha256HashLen])
|
||||
{
|
||||
sha2(in, size, hash, false);
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <es/ticket.h>
|
||||
#include <nn/es/ticket.h>
|
||||
|
||||
namespace nn
|
||||
{
|
||||
namespace es
|
||||
{
|
||||
class SectionHeader_V2 :
|
||||
|
@ -52,5 +54,5 @@ namespace es
|
|||
uint16_t mRecordNum;
|
||||
ticket::SectionType mSectionType;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -2,8 +2,10 @@
|
|||
#include <string>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
#include <es/ticket.h>
|
||||
#include <nn/es/ticket.h>
|
||||
|
||||
namespace nn
|
||||
{
|
||||
namespace es
|
||||
{
|
||||
class TicketBody_V2 :
|
||||
|
@ -98,5 +100,4 @@ namespace es
|
|||
uint16_t mSectEntrySize;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <crypto/rsa.h>
|
||||
#include <fnd/rsa.h>
|
||||
|
||||
namespace nn
|
||||
{
|
||||
namespace es
|
||||
{
|
||||
namespace ticket
|
||||
|
@ -42,7 +44,7 @@ namespace es
|
|||
|
||||
static const size_t kIssuerSize = 0x40;
|
||||
static const byte_t kFormatVersion = 2;
|
||||
static const size_t kEncTitleKeySize = crypto::rsa::kRsa2048Size;
|
||||
static const size_t kEncTitleKeySize = fnd::rsa::kRsa2048Size;
|
||||
static const size_t kReservedRegionSize = 8;
|
||||
static const size_t kRightsIdSize = 16;
|
||||
}
|
||||
|
@ -105,4 +107,5 @@ namespace es
|
|||
inline uint16_t get_group(uint16_t index) const { return index & kGroupMask; }
|
||||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -20,9 +20,7 @@
|
|||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{7BE99936-0D40-410D-944B-4513C2EFF8DC}</ProjectGuid>
|
||||
<RootNamespace>es</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||
<ProjectName>libes</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
|
@ -75,7 +73,7 @@
|
|||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libes\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libes\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
|
@ -84,7 +82,7 @@
|
|||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libes\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libes\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
|
@ -95,7 +93,7 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libes\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libes\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
@ -110,7 +108,7 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libes\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libes\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
@ -122,9 +120,9 @@
|
|||
<None Include="makefile" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\es\SectionHeader_V2.h" />
|
||||
<ClInclude Include="include\es\ticket.h" />
|
||||
<ClInclude Include="include\es\TicketBody_V2.h" />
|
||||
<ClInclude Include="include\nn\es\SectionHeader_V2.h" />
|
||||
<ClInclude Include="include\nn\es\ticket.h" />
|
||||
<ClInclude Include="include\nn\es\TicketBody_V2.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="source\SectionHeader_V2.cpp" />
|
|
@ -18,13 +18,13 @@
|
|||
<None Include="makefile" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\es\SectionHeader_V2.h">
|
||||
<ClInclude Include="include\nn\es\SectionHeader_V2.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\es\ticket.h">
|
||||
<ClInclude Include="include\nn\es\ticket.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\es\TicketBody_V2.h">
|
||||
<ClInclude Include="include\nn\es\TicketBody_V2.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
|
@ -7,7 +7,6 @@ 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-value
|
||||
CFLAGS = -std=c11 $(INCS) -Wall -Wno-unused-value
|
||||
|
|
|
@ -1,16 +1,14 @@
|
|||
#include <es/SectionHeader_V2.h>
|
||||
#include <nn/es/SectionHeader_V2.h>
|
||||
|
||||
|
||||
|
||||
es::SectionHeader_V2::SectionHeader_V2()
|
||||
nn::es::SectionHeader_V2::SectionHeader_V2()
|
||||
{}
|
||||
|
||||
es::SectionHeader_V2::SectionHeader_V2(const SectionHeader_V2 & other)
|
||||
nn::es::SectionHeader_V2::SectionHeader_V2(const SectionHeader_V2 & other)
|
||||
{
|
||||
*this = other;
|
||||
}
|
||||
|
||||
void es::SectionHeader_V2::operator=(const SectionHeader_V2 & other)
|
||||
void nn::es::SectionHeader_V2::operator=(const SectionHeader_V2 & other)
|
||||
{
|
||||
if (other.getBytes().size())
|
||||
{
|
||||
|
@ -27,7 +25,7 @@ void es::SectionHeader_V2::operator=(const SectionHeader_V2 & other)
|
|||
}
|
||||
}
|
||||
|
||||
bool es::SectionHeader_V2::operator==(const SectionHeader_V2 & other) const
|
||||
bool nn::es::SectionHeader_V2::operator==(const SectionHeader_V2 & other) const
|
||||
{
|
||||
return (mSectionOffset == other.mSectionOffset) \
|
||||
&& (mRecordSize == other.mRecordSize) \
|
||||
|
@ -36,12 +34,12 @@ bool es::SectionHeader_V2::operator==(const SectionHeader_V2 & other) const
|
|||
&& (mSectionType == other.mSectionType);
|
||||
}
|
||||
|
||||
bool es::SectionHeader_V2::operator!=(const SectionHeader_V2 & other) const
|
||||
bool nn::es::SectionHeader_V2::operator!=(const SectionHeader_V2 & other) const
|
||||
{
|
||||
return !(*this ==other);
|
||||
}
|
||||
|
||||
void es::SectionHeader_V2::toBytes()
|
||||
void nn::es::SectionHeader_V2::toBytes()
|
||||
{
|
||||
mRawBinary.alloc(sizeof(sSectionHeader_v2));
|
||||
sSectionHeader_v2* hdr = (sSectionHeader_v2*)mRawBinary.data();
|
||||
|
@ -53,7 +51,7 @@ void es::SectionHeader_V2::toBytes()
|
|||
hdr->section_type = (mSectionType);
|
||||
}
|
||||
|
||||
void es::SectionHeader_V2::fromBytes(const byte_t * bytes, size_t len)
|
||||
void nn::es::SectionHeader_V2::fromBytes(const byte_t * bytes, size_t len)
|
||||
{
|
||||
if (len < sizeof(sSectionHeader_v2))
|
||||
{
|
||||
|
@ -73,12 +71,12 @@ void es::SectionHeader_V2::fromBytes(const byte_t * bytes, size_t len)
|
|||
mSectionType = (ticket::SectionType)hdr->section_type.get();
|
||||
}
|
||||
|
||||
const fnd::Vec<byte_t>& es::SectionHeader_V2::getBytes() const
|
||||
const fnd::Vec<byte_t>& nn::es::SectionHeader_V2::getBytes() const
|
||||
{
|
||||
return mRawBinary;
|
||||
}
|
||||
|
||||
void es::SectionHeader_V2::clear()
|
||||
void nn::es::SectionHeader_V2::clear()
|
||||
{
|
||||
mRawBinary.clear();
|
||||
mSectionOffset = 0;
|
||||
|
@ -88,52 +86,52 @@ void es::SectionHeader_V2::clear()
|
|||
mSectionType = ticket::SECTION_PERMANENT;
|
||||
}
|
||||
|
||||
uint32_t es::SectionHeader_V2::getSectionOffset() const
|
||||
uint32_t nn::es::SectionHeader_V2::getSectionOffset() const
|
||||
{
|
||||
return mSectionOffset;
|
||||
}
|
||||
|
||||
void es::SectionHeader_V2::setSectionOffset(uint32_t offset)
|
||||
void nn::es::SectionHeader_V2::setSectionOffset(uint32_t offset)
|
||||
{
|
||||
mSectionOffset = offset;
|
||||
}
|
||||
|
||||
uint32_t es::SectionHeader_V2::getRecordSize() const
|
||||
uint32_t nn::es::SectionHeader_V2::getRecordSize() const
|
||||
{
|
||||
return mRecordSize;
|
||||
}
|
||||
|
||||
void es::SectionHeader_V2::setRecordSize(uint32_t size)
|
||||
void nn::es::SectionHeader_V2::setRecordSize(uint32_t size)
|
||||
{
|
||||
mRecordSize = size;
|
||||
}
|
||||
|
||||
uint32_t es::SectionHeader_V2::getSectionSize() const
|
||||
uint32_t nn::es::SectionHeader_V2::getSectionSize() const
|
||||
{
|
||||
return mSectionSize;
|
||||
}
|
||||
|
||||
void es::SectionHeader_V2::getSectionSize(uint32_t size)
|
||||
void nn::es::SectionHeader_V2::getSectionSize(uint32_t size)
|
||||
{
|
||||
mSectionSize = size;
|
||||
}
|
||||
|
||||
uint16_t es::SectionHeader_V2::getRecordNum() const
|
||||
uint16_t nn::es::SectionHeader_V2::getRecordNum() const
|
||||
{
|
||||
return mRecordNum;
|
||||
}
|
||||
|
||||
void es::SectionHeader_V2::setRecordNum(uint16_t record_num)
|
||||
void nn::es::SectionHeader_V2::setRecordNum(uint16_t record_num)
|
||||
{
|
||||
mRecordNum = record_num;
|
||||
}
|
||||
|
||||
es::ticket::SectionType es::SectionHeader_V2::getSectionType() const
|
||||
nn::es::ticket::SectionType nn::es::SectionHeader_V2::getSectionType() const
|
||||
{
|
||||
return mSectionType;
|
||||
}
|
||||
|
||||
void es::SectionHeader_V2::setSectionType(ticket::SectionType type)
|
||||
void nn::es::SectionHeader_V2::setSectionType(ticket::SectionType type)
|
||||
{
|
||||
mSectionType = type;
|
||||
}
|
||||
|
|
|
@ -1,18 +1,16 @@
|
|||
#include <es/TicketBody_V2.h>
|
||||
#include <nn/es/TicketBody_V2.h>
|
||||
|
||||
|
||||
|
||||
es::TicketBody_V2::TicketBody_V2()
|
||||
nn::es::TicketBody_V2::TicketBody_V2()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
es::TicketBody_V2::TicketBody_V2(const TicketBody_V2 & other)
|
||||
nn::es::TicketBody_V2::TicketBody_V2(const TicketBody_V2 & other)
|
||||
{
|
||||
*this = other;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::operator=(const TicketBody_V2 & other)
|
||||
void nn::es::TicketBody_V2::operator=(const TicketBody_V2 & other)
|
||||
{
|
||||
if (other.getBytes().size())
|
||||
{
|
||||
|
@ -40,7 +38,7 @@ void es::TicketBody_V2::operator=(const TicketBody_V2 & other)
|
|||
}
|
||||
}
|
||||
|
||||
bool es::TicketBody_V2::operator==(const TicketBody_V2 & other) const
|
||||
bool nn::es::TicketBody_V2::operator==(const TicketBody_V2 & other) const
|
||||
{
|
||||
return (mIssuer == other.mIssuer) \
|
||||
&& (memcmp(mEncTitleKey, other.mEncTitleKey, ticket::kEncTitleKeySize) == 0) \
|
||||
|
@ -59,12 +57,12 @@ bool es::TicketBody_V2::operator==(const TicketBody_V2 & other) const
|
|||
&& (mSectEntrySize == other.mSectEntrySize);
|
||||
}
|
||||
|
||||
bool es::TicketBody_V2::operator!=(const TicketBody_V2 & other) const
|
||||
bool nn::es::TicketBody_V2::operator!=(const TicketBody_V2 & other) const
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::toBytes()
|
||||
void nn::es::TicketBody_V2::toBytes()
|
||||
{
|
||||
mRawBinary.alloc(sizeof(sTicketBody_v2));
|
||||
sTicketBody_v2* body = (sTicketBody_v2*)mRawBinary.data();
|
||||
|
@ -94,7 +92,7 @@ void es::TicketBody_V2::toBytes()
|
|||
body->sect_entry_size = (mSectEntrySize);
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::fromBytes(const byte_t * bytes, size_t len)
|
||||
void nn::es::TicketBody_V2::fromBytes(const byte_t * bytes, size_t len)
|
||||
{
|
||||
if (len < sizeof(sTicketBody_v2))
|
||||
{
|
||||
|
@ -134,12 +132,12 @@ void es::TicketBody_V2::fromBytes(const byte_t * bytes, size_t len)
|
|||
mSectEntrySize = body->sect_entry_size.get();
|
||||
}
|
||||
|
||||
const fnd::Vec<byte_t>& es::TicketBody_V2::getBytes() const
|
||||
const fnd::Vec<byte_t>& nn::es::TicketBody_V2::getBytes() const
|
||||
{
|
||||
return mRawBinary;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::clear()
|
||||
void nn::es::TicketBody_V2::clear()
|
||||
{
|
||||
mRawBinary.clear();
|
||||
mIssuer.clear();
|
||||
|
@ -160,12 +158,12 @@ void es::TicketBody_V2::clear()
|
|||
mSectEntrySize = 0;
|
||||
}
|
||||
|
||||
const std::string & es::TicketBody_V2::getIssuer() const
|
||||
const std::string & nn::es::TicketBody_V2::getIssuer() const
|
||||
{
|
||||
return mIssuer;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setIssuer(const std::string & issuer)
|
||||
void nn::es::TicketBody_V2::setIssuer(const std::string & issuer)
|
||||
{
|
||||
if (issuer.length() > ticket::kIssuerSize)
|
||||
{
|
||||
|
@ -175,154 +173,154 @@ void es::TicketBody_V2::setIssuer(const std::string & issuer)
|
|||
mIssuer = issuer;
|
||||
}
|
||||
|
||||
const byte_t * es::TicketBody_V2::getEncTitleKey() const
|
||||
const byte_t * nn::es::TicketBody_V2::getEncTitleKey() const
|
||||
{
|
||||
return mEncTitleKey;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setEncTitleKey(const byte_t * data, size_t len)
|
||||
void nn::es::TicketBody_V2::setEncTitleKey(const byte_t * data, size_t len)
|
||||
{
|
||||
memset(mEncTitleKey, 0, ticket::kEncTitleKeySize);
|
||||
memcpy(mEncTitleKey, data, _MIN(len, ticket::kEncTitleKeySize));
|
||||
}
|
||||
|
||||
es::ticket::TitleKeyEncType es::TicketBody_V2::getTitleKeyEncType() const
|
||||
nn::es::ticket::TitleKeyEncType nn::es::TicketBody_V2::getTitleKeyEncType() const
|
||||
{
|
||||
return mEncType;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setTitleKeyEncType(ticket::TitleKeyEncType type)
|
||||
void nn::es::TicketBody_V2::setTitleKeyEncType(ticket::TitleKeyEncType type)
|
||||
{
|
||||
mEncType = type;
|
||||
}
|
||||
|
||||
uint16_t es::TicketBody_V2::getTicketVersion() const
|
||||
uint16_t nn::es::TicketBody_V2::getTicketVersion() const
|
||||
{
|
||||
return mTicketVersion;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setTicketVersion(uint16_t version)
|
||||
void nn::es::TicketBody_V2::setTicketVersion(uint16_t version)
|
||||
{
|
||||
mTicketVersion = version;
|
||||
}
|
||||
|
||||
es::ticket::LicenseType es::TicketBody_V2::getLicenseType() const
|
||||
nn::es::ticket::LicenseType nn::es::TicketBody_V2::getLicenseType() const
|
||||
{
|
||||
return mLicenseType;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setLicenseType(ticket::LicenseType type)
|
||||
void nn::es::TicketBody_V2::setLicenseType(ticket::LicenseType type)
|
||||
{
|
||||
mLicenseType = type;
|
||||
}
|
||||
|
||||
byte_t es::TicketBody_V2::getCommonKeyId() const
|
||||
byte_t nn::es::TicketBody_V2::getCommonKeyId() const
|
||||
{
|
||||
return mCommonKeyId;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setCommonKeyId(byte_t id)
|
||||
void nn::es::TicketBody_V2::setCommonKeyId(byte_t id)
|
||||
{
|
||||
mCommonKeyId = id;
|
||||
}
|
||||
|
||||
const fnd::List<es::ticket::PropertyMaskFlags>& es::TicketBody_V2::getPropertyFlags() const
|
||||
const fnd::List<nn::es::ticket::PropertyMaskFlags>& nn::es::TicketBody_V2::getPropertyFlags() const
|
||||
{
|
||||
return mPropertyFlags;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setPropertyFlags(const fnd::List<es::ticket::PropertyMaskFlags>& flags)
|
||||
void nn::es::TicketBody_V2::setPropertyFlags(const fnd::List<nn::es::ticket::PropertyMaskFlags>& flags)
|
||||
{
|
||||
mPropertyFlags = flags;
|
||||
}
|
||||
|
||||
const byte_t * es::TicketBody_V2::getReservedRegion() const
|
||||
const byte_t * nn::es::TicketBody_V2::getReservedRegion() const
|
||||
{
|
||||
return mReservedRegion;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setReservedRegion(const byte_t * data, size_t len)
|
||||
void nn::es::TicketBody_V2::setReservedRegion(const byte_t * data, size_t len)
|
||||
{
|
||||
memset(mReservedRegion, 0, ticket::kReservedRegionSize);
|
||||
memcpy(mReservedRegion, data, _MIN(len, ticket::kReservedRegionSize));
|
||||
}
|
||||
|
||||
uint64_t es::TicketBody_V2::getTicketId() const
|
||||
uint64_t nn::es::TicketBody_V2::getTicketId() const
|
||||
{
|
||||
return mTicketId;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setTicketId(uint64_t id)
|
||||
void nn::es::TicketBody_V2::setTicketId(uint64_t id)
|
||||
{
|
||||
mTicketId = id;
|
||||
}
|
||||
|
||||
uint64_t es::TicketBody_V2::getDeviceId() const
|
||||
uint64_t nn::es::TicketBody_V2::getDeviceId() const
|
||||
{
|
||||
return mDeviceId;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setDeviceId(uint64_t id)
|
||||
void nn::es::TicketBody_V2::setDeviceId(uint64_t id)
|
||||
{
|
||||
mDeviceId = id;
|
||||
}
|
||||
|
||||
const byte_t * es::TicketBody_V2::getRightsId() const
|
||||
const byte_t * nn::es::TicketBody_V2::getRightsId() const
|
||||
{
|
||||
return mRightsId;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setRightsId(const byte_t * id)
|
||||
void nn::es::TicketBody_V2::setRightsId(const byte_t * id)
|
||||
{
|
||||
memcpy(mRightsId, id, ticket::kRightsIdSize);
|
||||
}
|
||||
|
||||
uint32_t es::TicketBody_V2::getAccountId() const
|
||||
uint32_t nn::es::TicketBody_V2::getAccountId() const
|
||||
{
|
||||
return mAccountId;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setAccountId(uint32_t id)
|
||||
void nn::es::TicketBody_V2::setAccountId(uint32_t id)
|
||||
{
|
||||
mAccountId = id;
|
||||
}
|
||||
|
||||
uint32_t es::TicketBody_V2::getSectionTotalSize() const
|
||||
uint32_t nn::es::TicketBody_V2::getSectionTotalSize() const
|
||||
{
|
||||
return mSectTotalSize;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setSectionTotalSize(uint32_t size)
|
||||
void nn::es::TicketBody_V2::setSectionTotalSize(uint32_t size)
|
||||
{
|
||||
mSectTotalSize = size;
|
||||
}
|
||||
|
||||
uint32_t es::TicketBody_V2::getSectionHeaderOffset() const
|
||||
uint32_t nn::es::TicketBody_V2::getSectionHeaderOffset() const
|
||||
{
|
||||
return mSectHeaderOffset;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setSectionHeaderOffset(uint32_t offset)
|
||||
void nn::es::TicketBody_V2::setSectionHeaderOffset(uint32_t offset)
|
||||
{
|
||||
mSectHeaderOffset = offset;
|
||||
}
|
||||
|
||||
uint16_t es::TicketBody_V2::getSectionNum() const
|
||||
uint16_t nn::es::TicketBody_V2::getSectionNum() const
|
||||
{
|
||||
return mSectNum;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setSectionNum(uint16_t num)
|
||||
void nn::es::TicketBody_V2::setSectionNum(uint16_t num)
|
||||
{
|
||||
mSectNum = num;
|
||||
}
|
||||
|
||||
uint16_t es::TicketBody_V2::getSectionEntrySize() const
|
||||
uint16_t nn::es::TicketBody_V2::getSectionEntrySize() const
|
||||
{
|
||||
return mSectEntrySize;
|
||||
}
|
||||
|
||||
void es::TicketBody_V2::setSectionEntrySize(uint16_t size)
|
||||
void nn::es::TicketBody_V2::setSectionEntrySize(uint16_t size)
|
||||
{
|
||||
mSectEntrySize = size;
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
#include <cstdint>
|
||||
#include <cstring>
|
||||
|
||||
namespace crypto
|
||||
namespace fnd
|
||||
{
|
||||
namespace aes
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
#include <cstdint>
|
||||
#include <cstring>
|
||||
|
||||
namespace crypto
|
||||
namespace fnd
|
||||
{
|
||||
namespace base64
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
#include <cstdint>
|
||||
#include <cstring>
|
||||
|
||||
namespace crypto
|
||||
namespace fnd
|
||||
{
|
||||
namespace ecdsa
|
||||
{
|
|
@ -1,7 +1,7 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
|
||||
namespace compress
|
||||
namespace fnd
|
||||
{
|
||||
namespace lz4
|
||||
{
|
|
@ -1,9 +1,9 @@
|
|||
#pragma once
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <crypto/sha.h>
|
||||
#include <fnd/sha.h>
|
||||
|
||||
namespace crypto
|
||||
namespace fnd
|
||||
{
|
||||
namespace rsa
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
#include <cstdint>
|
||||
#include <cstring>
|
||||
|
||||
namespace crypto
|
||||
namespace fnd
|
||||
{
|
||||
namespace sha
|
||||
{
|
|
@ -21,9 +21,7 @@
|
|||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{4D27EDB9-5110-44FE-8CE2-D46C5AD3C55B}</ProjectGuid>
|
||||
<RootNamespace>fnd</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
|
||||
<ProjectName>libfnd</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
|
@ -76,7 +74,7 @@
|
|||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libpolarssl\include;..\liblz4\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
|
@ -85,7 +83,7 @@
|
|||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libpolarssl\include;..\liblz4\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
|
@ -96,7 +94,7 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libpolarssl\include;..\liblz4\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
@ -111,7 +109,7 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libpolarssl\include;..\liblz4\include;</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_MBCS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
@ -123,7 +121,10 @@
|
|||
<None Include="makefile" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\fnd\aes.h" />
|
||||
<ClInclude Include="include\fnd\base64.h" />
|
||||
<ClInclude Include="include\fnd\BitMath.h" />
|
||||
<ClInclude Include="include\fnd\ecdsa.h" />
|
||||
<ClInclude Include="include\fnd\elf.h" />
|
||||
<ClInclude Include="include\fnd\Endian.h" />
|
||||
<ClInclude Include="include\fnd\Exception.h" />
|
||||
|
@ -131,7 +132,10 @@
|
|||
<ClInclude Include="include\fnd\io.h" />
|
||||
<ClInclude Include="include\fnd\ISerialisable.h" />
|
||||
<ClInclude Include="include\fnd\List.h" />
|
||||
<ClInclude Include="include\fnd\lz4.h" />
|
||||
<ClInclude Include="include\fnd\ResourceFileReader.h" />
|
||||
<ClInclude Include="include\fnd\rsa.h" />
|
||||
<ClInclude Include="include\fnd\sha.h" />
|
||||
<ClInclude Include="include\fnd\SimpleFile.h" />
|
||||
<ClInclude Include="include\fnd\SimpleTextOutput.h" />
|
||||
<ClInclude Include="include\fnd\StringConv.h" />
|
||||
|
@ -139,9 +143,14 @@
|
|||
<ClInclude Include="include\fnd\Vec.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="source\aes_wrapper.cpp" />
|
||||
<ClCompile Include="source\base64_wrapper.cpp" />
|
||||
<ClCompile Include="source\Exception.cpp" />
|
||||
<ClCompile Include="source\io.cpp" />
|
||||
<ClCompile Include="source\lz4_wrapper.cpp" />
|
||||
<ClCompile Include="source\ResourceFileReader.cpp" />
|
||||
<ClCompile Include="source\rsa_wrapper.cpp" />
|
||||
<ClCompile Include="source\sha_wrapper.cpp" />
|
||||
<ClCompile Include="source\SimpleFile.cpp" />
|
||||
<ClCompile Include="source\SimpleTextOutput.cpp" />
|
||||
<ClCompile Include="source\StringConv.cpp" />
|
|
@ -18,9 +18,18 @@
|
|||
<None Include="makefile" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\fnd\aes.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\fnd\base64.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\fnd\BitMath.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\fnd\ecdsa.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\fnd\elf.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
|
@ -42,9 +51,18 @@
|
|||
<ClInclude Include="include\fnd\List.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\fnd\lz4.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\fnd\ResourceFileReader.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\fnd\rsa.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\fnd\sha.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\fnd\SimpleFile.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
|
@ -62,15 +80,30 @@
|
|||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="source\aes_wrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\base64_wrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\Exception.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\io.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\lz4_wrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\ResourceFileReader.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\rsa_wrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\sha_wrapper.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="source\SimpleFile.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
|
@ -3,11 +3,10 @@ SRC_DIR = 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 =
|
||||
DEPENDS = polarssl lz4
|
||||
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-value
|
||||
CFLAGS = -std=c11 $(INCS) -Wall -Wno-unused-value
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include <crypto/aes.h>
|
||||
#include <fnd/aes.h>
|
||||
#include <polarssl/aes.h>
|
||||
|
||||
using namespace crypto::aes;
|
||||
using namespace fnd::aes;
|
||||
|
||||
inline void XorBlock(const uint8_t a[kAesBlockSize], const uint8_t b[kAesBlockSize], uint8_t out[kAesBlockSize])
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ inline void putbe32(uint8_t* data, uint32_t val) { data[0] = val >> 24; data[1]
|
|||
|
||||
|
||||
|
||||
void crypto::aes::AesEcbDecrypt(const uint8_t * in, uint64_t size, const uint8_t key[kAes128KeySize], uint8_t * out)
|
||||
void fnd::aes::AesEcbDecrypt(const uint8_t * in, uint64_t size, const uint8_t key[kAes128KeySize], uint8_t * out)
|
||||
{
|
||||
aes_context ctx;
|
||||
aes_setkey_dec(&ctx, key, 128);
|
||||
|
@ -28,7 +28,7 @@ void crypto::aes::AesEcbDecrypt(const uint8_t * in, uint64_t size, const uint8_t
|
|||
|
||||
}
|
||||
|
||||
void crypto::aes::AesEcbEncrypt(const uint8_t * in, uint64_t size, const uint8_t key[kAes128KeySize], uint8_t * out)
|
||||
void fnd::aes::AesEcbEncrypt(const uint8_t * in, uint64_t size, const uint8_t key[kAes128KeySize], uint8_t * out)
|
||||
{
|
||||
aes_context ctx;
|
||||
aes_setkey_enc(&ctx, key, 128);
|
||||
|
@ -38,7 +38,7 @@ void crypto::aes::AesEcbEncrypt(const uint8_t * in, uint64_t size, const uint8_t
|
|||
}
|
||||
}
|
||||
|
||||
void crypto::aes::AesCtr(const uint8_t* in, uint64_t size, const uint8_t key[kAes128KeySize], uint8_t ctr[kAesBlockSize], uint8_t* out)
|
||||
void fnd::aes::AesCtr(const uint8_t* in, uint64_t size, const uint8_t key[kAes128KeySize], uint8_t ctr[kAesBlockSize], uint8_t* out)
|
||||
{
|
||||
aes_context ctx;
|
||||
uint8_t block[kAesBlockSize] = { 0 };
|
||||
|
@ -48,7 +48,7 @@ void crypto::aes::AesCtr(const uint8_t* in, uint64_t size, const uint8_t key[kAe
|
|||
aes_crypt_ctr(&ctx, size, &counterOffset, ctr, block, in, out);
|
||||
}
|
||||
|
||||
void crypto::aes::AesIncrementCounter(const uint8_t in[kAesBlockSize], size_t block_num, uint8_t out[kAesBlockSize])
|
||||
void fnd::aes::AesIncrementCounter(const uint8_t in[kAesBlockSize], size_t block_num, uint8_t out[kAesBlockSize])
|
||||
{
|
||||
memcpy(out, in, kAesBlockSize);
|
||||
|
||||
|
@ -78,21 +78,21 @@ void crypto::aes::AesIncrementCounter(const uint8_t in[kAesBlockSize], size_t bl
|
|||
putbe32(&out[12], ctr[0]);
|
||||
}
|
||||
|
||||
void crypto::aes::AesCbcDecrypt(const uint8_t* in, uint64_t size, const uint8_t key[kAes128KeySize], uint8_t iv[kAesBlockSize], uint8_t* out)
|
||||
void fnd::aes::AesCbcDecrypt(const uint8_t* in, uint64_t size, const uint8_t key[kAes128KeySize], uint8_t iv[kAesBlockSize], uint8_t* out)
|
||||
{
|
||||
aes_context ctx;
|
||||
aes_setkey_dec(&ctx, key, 128);
|
||||
aes_crypt_cbc(&ctx, AES_DECRYPT, size, iv, in, out);
|
||||
}
|
||||
|
||||
void crypto::aes::AesCbcEncrypt(const uint8_t* in, uint64_t size, const uint8_t key[kAes128KeySize], uint8_t iv[kAesBlockSize], uint8_t* out)
|
||||
void fnd::aes::AesCbcEncrypt(const uint8_t* in, uint64_t size, const uint8_t key[kAes128KeySize], uint8_t iv[kAesBlockSize], uint8_t* out)
|
||||
{
|
||||
aes_context ctx;
|
||||
aes_setkey_enc(&ctx, key, 128);
|
||||
aes_crypt_cbc(&ctx, AES_ENCRYPT, size, iv, in, out);
|
||||
}
|
||||
|
||||
void crypto::aes::AesXtsDecryptSector(const uint8_t * in, uint64_t sector_size, const uint8_t key1[kAes128KeySize], const uint8_t key2[kAes128KeySize], uint8_t tweak[kAesBlockSize], uint8_t * out)
|
||||
void fnd::aes::AesXtsDecryptSector(const uint8_t * in, uint64_t sector_size, const uint8_t key1[kAes128KeySize], const uint8_t key2[kAes128KeySize], uint8_t tweak[kAesBlockSize], uint8_t * out)
|
||||
{
|
||||
aes_context data_ctx;
|
||||
aes_setkey_dec(&data_ctx, key1, 128);
|
||||
|
@ -116,7 +116,7 @@ void crypto::aes::AesXtsDecryptSector(const uint8_t * in, uint64_t sector_size,
|
|||
}
|
||||
}
|
||||
|
||||
void crypto::aes::AesXtsEncryptSector(const uint8_t * in, uint64_t sector_size, const uint8_t key1[kAes128KeySize], const uint8_t key2[kAes128KeySize], uint8_t tweak[kAesBlockSize], uint8_t * out)
|
||||
void fnd::aes::AesXtsEncryptSector(const uint8_t * in, uint64_t sector_size, const uint8_t key1[kAes128KeySize], const uint8_t key2[kAes128KeySize], uint8_t tweak[kAesBlockSize], uint8_t * out)
|
||||
{
|
||||
aes_context data_ctx;
|
||||
aes_setkey_enc(&data_ctx, key1, 128);
|
||||
|
@ -140,13 +140,13 @@ void crypto::aes::AesXtsEncryptSector(const uint8_t * in, uint64_t sector_size,
|
|||
}
|
||||
}
|
||||
|
||||
void crypto::aes::AesXtsMakeTweak(uint8_t tweak[kAesBlockSize], size_t block_index)
|
||||
void fnd::aes::AesXtsMakeTweak(uint8_t tweak[kAesBlockSize], size_t block_index)
|
||||
{
|
||||
memset(tweak, 0, kAesBlockSize);
|
||||
AesIncrementCounter(tweak, block_index, tweak);
|
||||
}
|
||||
|
||||
void crypto::aes::GaloisFunc(uint8_t x[kAesBlockSize])
|
||||
void fnd::aes::GaloisFunc(uint8_t x[kAesBlockSize])
|
||||
{
|
||||
uint8_t t = x[15];
|
||||
|
30
lib/libfnd/source/base64_wrapper.cpp
Normal file
30
lib/libfnd/source/base64_wrapper.cpp
Normal file
|
@ -0,0 +1,30 @@
|
|||
#include <fnd/base64.h>
|
||||
#include <polarssl/base64.h>
|
||||
|
||||
size_t fnd::base64::B64_GetEncodeLen(const uint8_t* src, size_t slen)
|
||||
{
|
||||
size_t dlen = 0;
|
||||
|
||||
base64_encode(nullptr, &dlen, src, slen);
|
||||
|
||||
return dlen;
|
||||
}
|
||||
|
||||
void fnd::base64::B64_Encode(const uint8_t* src, size_t slen, uint8_t* dst, size_t dlen)
|
||||
{
|
||||
base64_encode(dst, &dlen, src, slen);
|
||||
}
|
||||
|
||||
size_t fnd::base64::B64_GetDecodeLen(const uint8_t* src, size_t slen)
|
||||
{
|
||||
size_t dlen = 0;
|
||||
|
||||
base64_decode(nullptr, &dlen, src, slen);
|
||||
|
||||
return dlen;
|
||||
}
|
||||
|
||||
void fnd::base64::B64_Decode(const uint8_t* src, size_t slen, uint8_t* dst, size_t dlen)
|
||||
{
|
||||
base64_decode(dst, &dlen, src, slen);
|
||||
}
|
14
lib/libfnd/source/lz4_wrapper.cpp
Normal file
14
lib/libfnd/source/lz4_wrapper.cpp
Normal file
|
@ -0,0 +1,14 @@
|
|||
#include <fnd/lz4.h>
|
||||
#include <lz4.h>
|
||||
|
||||
void fnd::lz4::compressData(const uint8_t* src, uint32_t src_len, uint8_t* dst, uint32_t dst_capacity, uint32_t& compressed_size)
|
||||
{
|
||||
compressed_size = LZ4_compress_default((const char*)src, (char*)dst, (int)src_len, (int)dst_capacity);
|
||||
}
|
||||
|
||||
void fnd::lz4::decompressData(const uint8_t* src, uint32_t src_len, uint8_t* dst, uint32_t dst_capacity, uint32_t& decompressed_size)
|
||||
{
|
||||
decompressed_size = LZ4_decompress_safe((const char*)src, (char*)dst, (int)src_len, (int)dst_capacity);
|
||||
}
|
||||
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
#include <crypto/rsa.h>
|
||||
#include <fnd/rsa.h>
|
||||
#include <polarssl/rsa.h>
|
||||
#include <polarssl/md.h>
|
||||
|
||||
using namespace crypto::rsa;
|
||||
using namespace crypto::sha;
|
||||
using namespace fnd::rsa;
|
||||
using namespace fnd::sha;
|
||||
|
||||
int getWrappedHashType(HashType type)
|
||||
{
|
||||
|
@ -57,7 +57,7 @@ uint32_t getWrappedHashSize(HashType type)
|
|||
return size;
|
||||
}
|
||||
|
||||
int crypto::rsa::pkcs::rsaSign(const sRsa1024Key & key, HashType hash_type, const uint8_t * hash, uint8_t signature[kRsa1024Size])
|
||||
int fnd::rsa::pkcs::rsaSign(const sRsa1024Key & key, HashType hash_type, const uint8_t * hash, uint8_t signature[kRsa1024Size])
|
||||
{
|
||||
int ret;
|
||||
rsa_context ctx;
|
||||
|
@ -74,7 +74,7 @@ int crypto::rsa::pkcs::rsaSign(const sRsa1024Key & key, HashType hash_type, cons
|
|||
return ret;
|
||||
}
|
||||
|
||||
int crypto::rsa::pkcs::rsaVerify(const sRsa1024Key & key, HashType hash_type, const uint8_t * hash, const uint8_t signature[kRsa1024Size])
|
||||
int fnd::rsa::pkcs::rsaVerify(const sRsa1024Key & key, HashType hash_type, const uint8_t * hash, const uint8_t signature[kRsa1024Size])
|
||||
{
|
||||
static const uint8_t public_exponent[3] = { 0x01, 0x00, 0x01 };
|
||||
|
||||
|
@ -93,7 +93,7 @@ int crypto::rsa::pkcs::rsaVerify(const sRsa1024Key & key, HashType hash_type, co
|
|||
return ret;
|
||||
}
|
||||
|
||||
int crypto::rsa::pkcs::rsaSign(const sRsa2048Key & key, HashType hash_type, const uint8_t * hash, uint8_t signature[kRsa2048Size])
|
||||
int fnd::rsa::pkcs::rsaSign(const sRsa2048Key & key, HashType hash_type, const uint8_t * hash, uint8_t signature[kRsa2048Size])
|
||||
{
|
||||
int ret;
|
||||
rsa_context ctx;
|
||||
|
@ -110,7 +110,7 @@ int crypto::rsa::pkcs::rsaSign(const sRsa2048Key & key, HashType hash_type, cons
|
|||
return ret;
|
||||
}
|
||||
|
||||
int crypto::rsa::pkcs::rsaVerify(const sRsa2048Key & key, HashType hash_type, const uint8_t * hash, const uint8_t signature[kRsa2048Size])
|
||||
int fnd::rsa::pkcs::rsaVerify(const sRsa2048Key & key, HashType hash_type, const uint8_t * hash, const uint8_t signature[kRsa2048Size])
|
||||
{
|
||||
static const uint8_t public_exponent[3] = { 0x01, 0x00, 0x01 };
|
||||
|
||||
|
@ -129,7 +129,7 @@ int crypto::rsa::pkcs::rsaVerify(const sRsa2048Key & key, HashType hash_type, co
|
|||
return ret;
|
||||
}
|
||||
|
||||
int crypto::rsa::pkcs::rsaSign(const sRsa4096Key & key, HashType hash_type, const uint8_t * hash, uint8_t signature[kRsa4096Size])
|
||||
int fnd::rsa::pkcs::rsaSign(const sRsa4096Key & key, HashType hash_type, const uint8_t * hash, uint8_t signature[kRsa4096Size])
|
||||
{
|
||||
int ret;
|
||||
rsa_context ctx;
|
||||
|
@ -146,7 +146,7 @@ int crypto::rsa::pkcs::rsaSign(const sRsa4096Key & key, HashType hash_type, cons
|
|||
return ret;
|
||||
}
|
||||
|
||||
int crypto::rsa::pkcs::rsaVerify(const sRsa4096Key & key, HashType hash_type, const uint8_t * hash, const uint8_t signature[kRsa4096Size])
|
||||
int fnd::rsa::pkcs::rsaVerify(const sRsa4096Key & key, HashType hash_type, const uint8_t * hash, const uint8_t signature[kRsa4096Size])
|
||||
{
|
||||
static const uint8_t public_exponent[3] = { 0x01, 0x00, 0x01 };
|
||||
|
||||
|
@ -165,7 +165,7 @@ int crypto::rsa::pkcs::rsaVerify(const sRsa4096Key & key, HashType hash_type, co
|
|||
return ret;
|
||||
}
|
||||
|
||||
int crypto::rsa::pss::rsaVerify(const sRsa2048Key & key, HashType hash_type, const uint8_t * hash, const uint8_t signature[kRsa2048Size])
|
||||
int fnd::rsa::pss::rsaVerify(const sRsa2048Key & key, HashType hash_type, const uint8_t * hash, const uint8_t signature[kRsa2048Size])
|
||||
{
|
||||
static const uint8_t public_exponent[3] = { 0x01, 0x00, 0x01 };
|
||||
|
15
lib/libfnd/source/sha_wrapper.cpp
Normal file
15
lib/libfnd/source/sha_wrapper.cpp
Normal file
|
@ -0,0 +1,15 @@
|
|||
#include <fnd/sha.h>
|
||||
#include <polarssl/sha1.h>
|
||||
#include <polarssl/sha2.h>
|
||||
|
||||
using namespace fnd::sha;
|
||||
|
||||
void fnd::sha::Sha1(const uint8_t* in, uint64_t size, uint8_t hash[kSha1HashLen])
|
||||
{
|
||||
sha1(in, size, hash);
|
||||
}
|
||||
|
||||
void fnd::sha::Sha256(const uint8_t* in, uint64_t size, uint8_t hash[kSha256HashLen])
|
||||
{
|
||||
sha2(in, size, hash, false);
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <nx/aset.h>
|
||||
#include <nn/hac/aset.h>
|
||||
#include <fnd/List.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class AssetHeader :
|
||||
public fnd::ISerialisable
|
||||
|
@ -66,5 +68,5 @@ namespace nx
|
|||
sSection mNacpInfo;
|
||||
sSection mRomfsInfo;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
#include <fnd/types.h>
|
||||
#include <nx/macro.h>
|
||||
namespace nx
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace aset
|
||||
{
|
||||
|
@ -27,4 +29,5 @@ namespace nx
|
|||
sAssetSection romfs;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,11 +1,14 @@
|
|||
#pragma once
|
||||
#include <nn/hac/nro.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
#include <nx/nro.h>
|
||||
#include <nx/macro.h>
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace nro
|
||||
{
|
||||
static const uint64_t kNroHomebrewStructMagic = _MAKE_STRUCT_MAGIC_U64("HOMEBREW");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -21,7 +21,6 @@
|
|||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{738CB4FC-CD9E-4B81-A04B-DEADBFA71C63}</ProjectGuid>
|
||||
<RootNamespace>libnxhb</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
|
@ -78,7 +77,7 @@
|
|||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libnx\include;..\libnx-hb\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libhac\include;..\libhac-hb\include;</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
|
@ -91,7 +90,7 @@
|
|||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libnx\include;..\libnx-hb\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libhac\include;..\libhac-hb\include;</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
|
@ -100,7 +99,7 @@
|
|||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libnx\include;..\libnx-hb\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libhac\include;..\libhac-hb\include;</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
|
@ -111,7 +110,7 @@
|
|||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libcrypto\include;..\libnx\include;..\libnx-hb\include;</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\libfnd\include;..\libhac\include;..\libhac-hb\include;</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
|
@ -119,9 +118,9 @@
|
|||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\nx\aset.h" />
|
||||
<ClInclude Include="include\nx\AssetHeader.h" />
|
||||
<ClInclude Include="include\nx\nro-hb.h" />
|
||||
<ClInclude Include="include\nn\hac\aset.h" />
|
||||
<ClInclude Include="include\nn\hac\AssetHeader.h" />
|
||||
<ClInclude Include="include\nn\hac\nro-hb.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="source\AssetHeader.cpp" />
|
|
@ -15,13 +15,13 @@
|
|||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="include\nx\aset.h">
|
||||
<ClInclude Include="include\nn\hac\aset.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\nx\AssetHeader.h">
|
||||
<ClInclude Include="include\nn\hac\AssetHeader.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="include\nx\nro-hb.h">
|
||||
<ClInclude Include="include\nn\hac\nro-hb.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
|
@ -3,11 +3,10 @@ SRC_DIR = 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 crypto nx
|
||||
DEPENDS = fnd crypto hac
|
||||
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-value
|
||||
CFLAGS = -std=c11 $(INCS) -Wall -Wno-unused-value
|
|
@ -1,16 +1,17 @@
|
|||
#include <nx/AssetHeader.h>
|
||||
#include <cstring>
|
||||
#include <nn/hac/AssetHeader.h>
|
||||
|
||||
nx::AssetHeader::AssetHeader()
|
||||
nn::hac::AssetHeader::AssetHeader()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
nx::AssetHeader::AssetHeader(const AssetHeader& other)
|
||||
nn::hac::AssetHeader::AssetHeader(const AssetHeader& other)
|
||||
{
|
||||
*this = other;
|
||||
}
|
||||
|
||||
void nx::AssetHeader::operator=(const AssetHeader& other)
|
||||
void nn::hac::AssetHeader::operator=(const AssetHeader& other)
|
||||
{
|
||||
mRawBinary = other.mRawBinary;
|
||||
mIconInfo = other.mIconInfo;
|
||||
|
@ -18,22 +19,22 @@ void nx::AssetHeader::operator=(const AssetHeader& other)
|
|||
mRomfsInfo = other.mRomfsInfo;
|
||||
}
|
||||
|
||||
bool nx::AssetHeader::operator==(const AssetHeader& other) const
|
||||
bool nn::hac::AssetHeader::operator==(const AssetHeader& other) const
|
||||
{
|
||||
return (mIconInfo == other.mIconInfo) \
|
||||
&& (mNacpInfo == other.mNacpInfo) \
|
||||
&& (mRomfsInfo == other.mRomfsInfo);
|
||||
}
|
||||
|
||||
bool nx::AssetHeader::operator!=(const AssetHeader& other) const
|
||||
bool nn::hac::AssetHeader::operator!=(const AssetHeader& other) const
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
void nx::AssetHeader::toBytes()
|
||||
void nn::hac::AssetHeader::toBytes()
|
||||
{
|
||||
mRawBinary.alloc(sizeof(sAssetHeader));
|
||||
nx::sAssetHeader* hdr = (nx::sAssetHeader*)mRawBinary.data();
|
||||
nn::hac::sAssetHeader* hdr = (nn::hac::sAssetHeader*)mRawBinary.data();
|
||||
|
||||
// set header identifers
|
||||
hdr->st_magic = aset::kAssetStructMagic;
|
||||
|
@ -52,7 +53,7 @@ void nx::AssetHeader::toBytes()
|
|||
hdr->romfs.size = mRomfsInfo.size;
|
||||
}
|
||||
|
||||
void nx::AssetHeader::fromBytes(const byte_t* bytes, size_t len)
|
||||
void nn::hac::AssetHeader::fromBytes(const byte_t* bytes, size_t len)
|
||||
{
|
||||
// check input data size
|
||||
if (len < sizeof(sAssetHeader))
|
||||
|
@ -68,7 +69,7 @@ void nx::AssetHeader::fromBytes(const byte_t* bytes, size_t len)
|
|||
memcpy(mRawBinary.data(), bytes, mRawBinary.size());
|
||||
|
||||
// get sAssetHeader ptr
|
||||
const nx::sAssetHeader* hdr = (const nx::sAssetHeader*)mRawBinary.data();
|
||||
const nn::hac::sAssetHeader* hdr = (const nn::hac::sAssetHeader*)mRawBinary.data();
|
||||
|
||||
// check NRO signature
|
||||
if (hdr->st_magic.get() != aset::kAssetStructMagic)
|
||||
|
@ -90,12 +91,12 @@ void nx::AssetHeader::fromBytes(const byte_t* bytes, size_t len)
|
|||
mRomfsInfo.size = hdr->romfs.size.get();
|
||||
}
|
||||
|
||||
const fnd::Vec<byte_t>& nx::AssetHeader::getBytes() const
|
||||
const fnd::Vec<byte_t>& nn::hac::AssetHeader::getBytes() const
|
||||
{
|
||||
return mRawBinary;
|
||||
}
|
||||
|
||||
void nx::AssetHeader::clear()
|
||||
void nn::hac::AssetHeader::clear()
|
||||
{
|
||||
mRawBinary.clear();
|
||||
memset(&mIconInfo, 0, sizeof(mIconInfo));
|
||||
|
@ -103,32 +104,32 @@ void nx::AssetHeader::clear()
|
|||
memset(&mRomfsInfo, 0, sizeof(mRomfsInfo));
|
||||
}
|
||||
|
||||
const nx::AssetHeader::sSection& nx::AssetHeader::getIconInfo() const
|
||||
const nn::hac::AssetHeader::sSection& nn::hac::AssetHeader::getIconInfo() const
|
||||
{
|
||||
return mIconInfo;
|
||||
}
|
||||
|
||||
void nx::AssetHeader::setIconInfo(const nx::AssetHeader::sSection& info)
|
||||
void nn::hac::AssetHeader::setIconInfo(const nn::hac::AssetHeader::sSection& info)
|
||||
{
|
||||
mIconInfo = info;
|
||||
}
|
||||
|
||||
const nx::AssetHeader::sSection& nx::AssetHeader::getNacpInfo() const
|
||||
const nn::hac::AssetHeader::sSection& nn::hac::AssetHeader::getNacpInfo() const
|
||||
{
|
||||
return mNacpInfo;
|
||||
}
|
||||
|
||||
void nx::AssetHeader::setNacpInfo(const sSection& info)
|
||||
void nn::hac::AssetHeader::setNacpInfo(const sSection& info)
|
||||
{
|
||||
mNacpInfo = info;
|
||||
}
|
||||
|
||||
const nx::AssetHeader::sSection& nx::AssetHeader::getRomfsInfo() const
|
||||
const nn::hac::AssetHeader::sSection& nn::hac::AssetHeader::getRomfsInfo() const
|
||||
{
|
||||
return mRomfsInfo;
|
||||
}
|
||||
|
||||
void nx::AssetHeader::setRomfsInfo(const sSection& info)
|
||||
void nn::hac::AssetHeader::setRomfsInfo(const sSection& info)
|
||||
{
|
||||
mRomfsInfo = info;
|
||||
}
|
|
@ -2,12 +2,14 @@
|
|||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <nx/aci.h>
|
||||
#include <nx/FileSystemAccessControlBinary.h>
|
||||
#include <nx/ServiceAccessControlBinary.h>
|
||||
#include <nx/KernelCapabilityBinary.h>
|
||||
#include <nn/hac/aci.h>
|
||||
#include <nn/hac/FileSystemAccessControlBinary.h>
|
||||
#include <nn/hac/ServiceAccessControlBinary.h>
|
||||
#include <nn/hac/KernelCapabilityBinary.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class AccessControlInfoBinary : public fnd::ISerialisable
|
||||
{
|
||||
|
@ -30,13 +32,13 @@ namespace nx
|
|||
uint64_t getProgramId() const;
|
||||
void setProgramId(uint64_t program_id);
|
||||
|
||||
const nx::FileSystemAccessControlBinary& getFileSystemAccessControl() const;
|
||||
const nn::hac::FileSystemAccessControlBinary& getFileSystemAccessControl() const;
|
||||
void setFileSystemAccessControl(const FileSystemAccessControlBinary& fac);
|
||||
|
||||
const nx::ServiceAccessControlBinary& getServiceAccessControl() const;
|
||||
const nn::hac::ServiceAccessControlBinary& getServiceAccessControl() const;
|
||||
void setServiceAccessControl(const ServiceAccessControlBinary& sac);
|
||||
|
||||
const nx::KernelCapabilityBinary& getKernelCapabilities() const;
|
||||
const nn::hac::KernelCapabilityBinary& getKernelCapabilities() const;
|
||||
void setKernelCapabilities(const KernelCapabilityBinary& kc);
|
||||
private:
|
||||
const std::string kModuleName = "ACCESS_CONTROL_INFO_BINARY";
|
||||
|
@ -46,8 +48,9 @@ namespace nx
|
|||
|
||||
// variables
|
||||
uint64_t mProgramId;
|
||||
nx::FileSystemAccessControlBinary mFileSystemAccessControl;
|
||||
nx::ServiceAccessControlBinary mServiceAccessControl;
|
||||
nx::KernelCapabilityBinary mKernelCapabilities;
|
||||
nn::hac::FileSystemAccessControlBinary mFileSystemAccessControl;
|
||||
nn::hac::ServiceAccessControlBinary mServiceAccessControl;
|
||||
nn::hac::KernelCapabilityBinary mKernelCapabilities;
|
||||
};
|
||||
}
|
||||
}
|
|
@ -3,12 +3,14 @@
|
|||
#include <fnd/types.h>
|
||||
#include <fnd/List.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <nx/aci.h>
|
||||
#include <nx/FileSystemAccessControlBinary.h>
|
||||
#include <nx/ServiceAccessControlBinary.h>
|
||||
#include <nx/KernelCapabilityBinary.h>
|
||||
#include <nn/hac/aci.h>
|
||||
#include <nn/hac/FileSystemAccessControlBinary.h>
|
||||
#include <nn/hac/ServiceAccessControlBinary.h>
|
||||
#include <nn/hac/KernelCapabilityBinary.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class AccessControlInfoDescBinary : public fnd::ISerialisable
|
||||
{
|
||||
|
@ -48,14 +50,14 @@ namespace nx
|
|||
void fromBytes(const byte_t* data, size_t len);
|
||||
const fnd::Vec<byte_t>& getBytes() const;
|
||||
|
||||
void generateSignature(const crypto::rsa::sRsa2048Key& key);
|
||||
void validateSignature(const crypto::rsa::sRsa2048Key& key) const;
|
||||
void generateSignature(const fnd::rsa::sRsa2048Key& key);
|
||||
void validateSignature(const fnd::rsa::sRsa2048Key& key) const;
|
||||
|
||||
// variables
|
||||
void clear();
|
||||
|
||||
const crypto::rsa::sRsa2048Key& getNcaHeaderSignature2Key() const;
|
||||
void setNcaHeaderSignature2Key(const crypto::rsa::sRsa2048Key& key);
|
||||
const fnd::rsa::sRsa2048Key& getNcaHeaderSignature2Key() const;
|
||||
void setNcaHeaderSignature2Key(const fnd::rsa::sRsa2048Key& key);
|
||||
|
||||
const fnd::List<aci::Flag>& getFlagList() const;
|
||||
void setFlagList(const fnd::List<aci::Flag>& flags);
|
||||
|
@ -63,13 +65,13 @@ namespace nx
|
|||
const sProgramIdRestrict& getProgramIdRestrict() const;
|
||||
void setProgramIdRestrict(const sProgramIdRestrict& pid_restrict);
|
||||
|
||||
const nx::FileSystemAccessControlBinary& getFileSystemAccessControl() const;
|
||||
const nn::hac::FileSystemAccessControlBinary& getFileSystemAccessControl() const;
|
||||
void setFileSystemAccessControl(const FileSystemAccessControlBinary& fac);
|
||||
|
||||
const nx::ServiceAccessControlBinary& getServiceAccessControl() const;
|
||||
const nn::hac::ServiceAccessControlBinary& getServiceAccessControl() const;
|
||||
void setServiceAccessControl(const ServiceAccessControlBinary& sac);
|
||||
|
||||
const nx::KernelCapabilityBinary& getKernelCapabilities() const;
|
||||
const nn::hac::KernelCapabilityBinary& getKernelCapabilities() const;
|
||||
void setKernelCapabilities(const KernelCapabilityBinary& kc);
|
||||
private:
|
||||
const std::string kModuleName = "ACCESS_CONTROL_INFO_DESC_BINARY";
|
||||
|
@ -78,11 +80,12 @@ namespace nx
|
|||
fnd::Vec<byte_t> mRawBinary;
|
||||
|
||||
// variables
|
||||
crypto::rsa::sRsa2048Key mNcaHeaderSignature2Key;
|
||||
fnd::rsa::sRsa2048Key mNcaHeaderSignature2Key;
|
||||
fnd::List<aci::Flag> mFlags;
|
||||
sProgramIdRestrict mProgramIdRestrict;
|
||||
nx::FileSystemAccessControlBinary mFileSystemAccessControl;
|
||||
nx::ServiceAccessControlBinary mServiceAccessControl;
|
||||
nx::KernelCapabilityBinary mKernelCapabilities;
|
||||
nn::hac::FileSystemAccessControlBinary mFileSystemAccessControl;
|
||||
nn::hac::ServiceAccessControlBinary mServiceAccessControl;
|
||||
nn::hac::KernelCapabilityBinary mKernelCapabilities;
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <crypto/aes.h>
|
||||
#include <fnd/aes.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class AesKeygen
|
||||
{
|
||||
|
@ -16,4 +18,5 @@ namespace nx
|
|||
// 3 stage key generation dst = ((src1_key.decrypt(src1)).decrypt(src2)).decrypt(src3)
|
||||
static void generateKey(byte_t* dst, const byte_t* src1, const byte_t* src2, const byte_t* src3, const byte_t* src1_key);
|
||||
};
|
||||
}
|
||||
}
|
|
@ -3,9 +3,11 @@
|
|||
#include <fnd/types.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
#include <nx/nacp.h>
|
||||
#include <nn/hac/nacp.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class ApplicationControlPropertyBinary :
|
||||
public fnd::ISerialisable
|
||||
|
@ -229,7 +231,7 @@ namespace nx
|
|||
nacp::TouchScreenUsageMode mTouchScreenUsageMode;
|
||||
nacp::AocRegistrationType mAocRegistrationType;
|
||||
nacp::AttributeFlag mAttributeFlag;
|
||||
fnd::List<nx::nacp::Language> mSupportedLanguages;
|
||||
fnd::List<nn::hac::nacp::Language> mSupportedLanguages;
|
||||
nacp::ParentalControlFlag mParentalControlFlag;
|
||||
nacp::ScreenshotMode mScreenshotMode;
|
||||
nacp::VideoCaptureMode mVideoCaptureMode;
|
||||
|
@ -263,4 +265,5 @@ namespace nx
|
|||
nacp::RepairFlag mRepairFlag;
|
||||
byte_t mProgramIndex;
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
#pragma once
|
||||
#include <nx/nacp.h>
|
||||
#include <nn/hac/nacp.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class ApplicationControlPropertyUtils
|
||||
{
|
||||
|
@ -9,4 +11,5 @@ namespace nx
|
|||
static bool validateSaveDataSizeMax(int64_t size, int64_t alignment);
|
||||
static bool validateSaveDataSize(int64_t size);
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,11 +1,13 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
#include <nx/cnmt.h>
|
||||
#include <nn/hac/cnmt.h>
|
||||
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class ContentMetaBinary :
|
||||
public fnd::ISerialisable
|
||||
|
@ -13,7 +15,7 @@ namespace nx
|
|||
public:
|
||||
struct ContentInfo
|
||||
{
|
||||
crypto::sha::sSha256Hash hash;
|
||||
fnd::sha::sSha256Hash hash;
|
||||
byte_t nca_id[cnmt::kContentIdLen];
|
||||
size_t size;
|
||||
cnmt::ContentType type;
|
||||
|
@ -200,17 +202,17 @@ namespace nx
|
|||
const DeltaMetaExtendedHeader& getDeltaMetaExtendedHeader() const;
|
||||
void setDeltaMetaExtendedHeader(const DeltaMetaExtendedHeader& exhdr);
|
||||
|
||||
const fnd::List<nx::ContentMetaBinary::ContentInfo>& getContentInfo() const;
|
||||
void setContentInfo(const fnd::List<nx::ContentMetaBinary::ContentInfo>& info);
|
||||
const fnd::List<nn::hac::ContentMetaBinary::ContentInfo>& getContentInfo() const;
|
||||
void setContentInfo(const fnd::List<nn::hac::ContentMetaBinary::ContentInfo>& info);
|
||||
|
||||
const fnd::List<nx::ContentMetaBinary::ContentMetaInfo>& getContentMetaInfo() const;
|
||||
void setContentMetaInfo(const fnd::List<nx::ContentMetaBinary::ContentMetaInfo>& info);
|
||||
const fnd::List<nn::hac::ContentMetaBinary::ContentMetaInfo>& getContentMetaInfo() const;
|
||||
void setContentMetaInfo(const fnd::List<nn::hac::ContentMetaBinary::ContentMetaInfo>& info);
|
||||
|
||||
const fnd::Vec<byte_t>& getExtendedData() const;
|
||||
void setExtendedData(const fnd::Vec<byte_t>& data);
|
||||
|
||||
const nx::sDigest& getDigest() const;
|
||||
void setDigest(const nx::sDigest& digest);
|
||||
const nn::hac::sDigest& getDigest() const;
|
||||
void setDigest(const nn::hac::sDigest& digest);
|
||||
|
||||
|
||||
private:
|
||||
|
@ -232,10 +234,10 @@ namespace nx
|
|||
AddOnContentMetaExtendedHeader mAddOnContentMetaExtendedHeader;
|
||||
DeltaMetaExtendedHeader mDeltaMetaExtendedHeader;
|
||||
|
||||
fnd::List<nx::ContentMetaBinary::ContentInfo> mContentInfo;
|
||||
fnd::List<nx::ContentMetaBinary::ContentMetaInfo> mContentMetaInfo;
|
||||
fnd::List<nn::hac::ContentMetaBinary::ContentInfo> mContentInfo;
|
||||
fnd::List<nn::hac::ContentMetaBinary::ContentMetaInfo> mContentMetaInfo;
|
||||
fnd::Vec<byte_t> mExtendedData;
|
||||
nx::sDigest mDigest;
|
||||
nn::hac::sDigest mDigest;
|
||||
|
||||
inline size_t getExtendedHeaderOffset() const { return sizeof(sContentMetaHeader); }
|
||||
inline size_t getContentInfoOffset(size_t exhdrSize) const { return getExtendedHeaderOffset() + exhdrSize; }
|
||||
|
@ -248,4 +250,5 @@ namespace nx
|
|||
size_t getExtendedDataSize(cnmt::ContentMetaType type, const byte_t* data) const;
|
||||
void validateBinary(const byte_t* bytes, size_t len) const;
|
||||
};
|
||||
}
|
||||
}
|
|
@ -3,17 +3,18 @@
|
|||
#include <fnd/types.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
#include <nx/fac.h>
|
||||
#include <nn/hac/fac.h>
|
||||
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class FileSystemAccessControlBinary : public fnd::ISerialisable
|
||||
{
|
||||
public:
|
||||
struct sSaveDataOwnerId
|
||||
{
|
||||
nx::fac::SaveDataOwnerIdAccessType access_type;
|
||||
nn::hac::fac::SaveDataOwnerIdAccessType access_type;
|
||||
uint64_t id;
|
||||
|
||||
void operator=(const sSaveDataOwnerId& other)
|
||||
|
@ -72,4 +73,5 @@ namespace nx
|
|||
fnd::List<uint64_t> mContentOwnerIdList;
|
||||
fnd::List<sSaveDataOwnerId> mSaveDataOwnerIdList;
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <nx/KernelCapabilityEntry.h>
|
||||
#include <nn/hac/KernelCapabilityEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class HandleTableSizeEntry
|
||||
{
|
||||
|
@ -44,4 +46,5 @@ namespace nx
|
|||
mHandleTableSize = field & kMaxHandleTableSize;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <nx/IKernelCapabilityHandler.h>
|
||||
#include <nx/HandleTableSizeEntry.h>
|
||||
#include <nn/hac/IKernelCapabilityHandler.h>
|
||||
#include <nn/hac/HandleTableSizeEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class HandleTableSizeHandler :
|
||||
public IKernelCapabilityHandler
|
||||
|
@ -32,4 +34,4 @@ namespace nx
|
|||
HandleTableSizeEntry mEntry;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,10 +1,12 @@
|
|||
#pragma once
|
||||
#include <nx/hierarchicalintegrity.h>
|
||||
#include <nn/hac/hierarchicalintegrity.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
#include <crypto/sha.h>
|
||||
#include <fnd/sha.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class HierarchicalIntegrityHeader :
|
||||
public fnd::ISerialisable
|
||||
|
@ -52,8 +54,8 @@ namespace nx
|
|||
const fnd::List<sLayer>& getLayerInfo() const;
|
||||
void setLayerInfo(const fnd::List<sLayer>& layer_info);
|
||||
|
||||
const fnd::List<crypto::sha::sSha256Hash>& getMasterHashList() const;
|
||||
void setMasterHashList(const fnd::List<crypto::sha::sSha256Hash>& master_hash_list);
|
||||
const fnd::List<fnd::sha::sSha256Hash>& getMasterHashList() const;
|
||||
void setMasterHashList(const fnd::List<fnd::sha::sSha256Hash>& master_hash_list);
|
||||
private:
|
||||
const std::string kModuleName = "HIERARCHICAL_INTEGRITY_HEADER";
|
||||
|
||||
|
@ -62,7 +64,7 @@ namespace nx
|
|||
|
||||
// data
|
||||
fnd::List<sLayer> mLayerInfo;
|
||||
fnd::List<crypto::sha::sSha256Hash> mMasterHashList;
|
||||
fnd::List<fnd::sha::sSha256Hash> mMasterHashList;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <nx/hierarchicalsha256.h>
|
||||
#include <nn/hac/hierarchicalsha256.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class HierarchicalSha256Header :
|
||||
public fnd::ISerialisable
|
||||
|
@ -46,8 +48,8 @@ namespace nx
|
|||
// variables
|
||||
void clear();
|
||||
|
||||
const crypto::sha::sSha256Hash& getMasterHash() const;
|
||||
void setMasterHash(const crypto::sha::sSha256Hash& master_hash);
|
||||
const fnd::sha::sSha256Hash& getMasterHash() const;
|
||||
void setMasterHash(const fnd::sha::sSha256Hash& master_hash);
|
||||
|
||||
size_t getHashBlockSize() const;
|
||||
void setHashBlockSize(size_t hash_block_size);
|
||||
|
@ -61,9 +63,9 @@ namespace nx
|
|||
fnd::Vec<byte_t> mRawBinary;
|
||||
|
||||
// data
|
||||
crypto::sha::sSha256Hash mMasterHash;
|
||||
fnd::sha::sSha256Hash mMasterHash;
|
||||
size_t mHashBlockSize;
|
||||
fnd::List<sLayer> mLayerInfo;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <fnd/List.h>
|
||||
#include <nx/KernelCapabilityEntry.h>
|
||||
#include <nn/hac/KernelCapabilityEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class IKernelCapabilityHandler
|
||||
{
|
||||
|
@ -14,4 +16,4 @@ namespace nx
|
|||
virtual bool isSet() const = 0;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <nx/KernelCapabilityEntry.h>
|
||||
#include <nn/hac/KernelCapabilityEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class InteruptEntry
|
||||
{
|
||||
|
@ -52,5 +54,5 @@ namespace nx
|
|||
mInterupt[1] = (field >> kInteruptBits) & kInteruptMax;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <nx/IKernelCapabilityHandler.h>
|
||||
#include <nx/InteruptEntry.h>
|
||||
#include <nn/hac/IKernelCapabilityHandler.h>
|
||||
#include <nn/hac/InteruptEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class InteruptHandler :
|
||||
public IKernelCapabilityHandler
|
||||
|
@ -31,4 +33,4 @@ namespace nx
|
|||
fnd::List<uint16_t> mInterupts;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -3,16 +3,18 @@
|
|||
#include <vector>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
#include <nx/ThreadInfoHandler.h>
|
||||
#include <nx/SystemCallHandler.h>
|
||||
#include <nx/MemoryMappingHandler.h>
|
||||
#include <nx/InteruptHandler.h>
|
||||
#include <nx/MiscParamsHandler.h>
|
||||
#include <nx/KernelVersionHandler.h>
|
||||
#include <nx/HandleTableSizeHandler.h>
|
||||
#include <nx/MiscFlagsHandler.h>
|
||||
#include <nn/hac/ThreadInfoHandler.h>
|
||||
#include <nn/hac/SystemCallHandler.h>
|
||||
#include <nn/hac/MemoryMappingHandler.h>
|
||||
#include <nn/hac/InteruptHandler.h>
|
||||
#include <nn/hac/MiscParamsHandler.h>
|
||||
#include <nn/hac/KernelVersionHandler.h>
|
||||
#include <nn/hac/HandleTableSizeHandler.h>
|
||||
#include <nn/hac/MiscFlagsHandler.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class KernelCapabilityBinary :
|
||||
public fnd::ISerialisable
|
||||
|
@ -73,4 +75,4 @@ namespace nx
|
|||
MiscFlagsHandler mMiscFlags;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <nx/kc.h>
|
||||
#include <nn/hac/kc.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class KernelCapabilityEntry
|
||||
{
|
||||
|
@ -47,4 +49,4 @@ namespace nx
|
|||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <nx/KernelCapabilityEntry.h>
|
||||
#include <nn/hac/KernelCapabilityEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class KernelVersionEntry
|
||||
{
|
||||
|
@ -53,4 +55,4 @@ namespace nx
|
|||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <nx/IKernelCapabilityHandler.h>
|
||||
#include <nx/KernelVersionEntry.h>
|
||||
#include <nn/hac/IKernelCapabilityHandler.h>
|
||||
#include <nn/hac/KernelVersionEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class KernelVersionHandler :
|
||||
public IKernelCapabilityHandler
|
||||
|
@ -34,4 +36,4 @@ namespace nx
|
|||
KernelVersionEntry mEntry;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
#pragma once
|
||||
#include <nx/IKernelCapabilityHandler.h>
|
||||
#include <nn/hac/IKernelCapabilityHandler.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class MemoryMappingHandler :
|
||||
public IKernelCapabilityHandler
|
||||
|
@ -75,4 +77,4 @@ namespace nx
|
|||
fnd::List<sMemoryMapping> mMemPage;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <nx/KernelCapabilityEntry.h>
|
||||
#include <nn/hac/KernelCapabilityEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class MemoryPageEntry
|
||||
{
|
||||
|
@ -56,5 +58,5 @@ namespace nx
|
|||
mUseFlag = mCap.getType() == kc::KC_MEMORY_MAP;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <nx/KernelCapabilityEntry.h>
|
||||
#include <nn/hac/KernelCapabilityEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class MiscFlagsEntry
|
||||
{
|
||||
|
@ -44,5 +46,5 @@ namespace nx
|
|||
mFlags = field & kMaxVal;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <nx/IKernelCapabilityHandler.h>
|
||||
#include <nx/MiscFlagsEntry.h>
|
||||
#include <nn/hac/IKernelCapabilityHandler.h>
|
||||
#include <nn/hac/MiscFlagsEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class MiscFlagsHandler :
|
||||
public IKernelCapabilityHandler
|
||||
|
@ -51,5 +53,5 @@ namespace nx
|
|||
bool mIsSet;
|
||||
fnd::List<Flags> mFlags;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <nx/KernelCapabilityEntry.h>
|
||||
#include <nn/hac/KernelCapabilityEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class MiscParamsEntry
|
||||
{
|
||||
|
@ -44,6 +46,5 @@ namespace nx
|
|||
mProgramType = field & kMaxProgramType;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <nx/IKernelCapabilityHandler.h>
|
||||
#include <nx/MiscParamsEntry.h>
|
||||
#include <nn/hac/IKernelCapabilityHandler.h>
|
||||
#include <nn/hac/MiscParamsEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class MiscParamsHandler :
|
||||
public IKernelCapabilityHandler
|
||||
|
@ -32,4 +34,4 @@ namespace nx
|
|||
MiscParamsEntry mEntry;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <nx/nca.h>
|
||||
#include <nn/hac/nca.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class NcaHeader :
|
||||
public fnd::ISerialisable
|
||||
|
@ -20,7 +22,7 @@ namespace nx
|
|||
byte_t index;
|
||||
uint64_t offset;
|
||||
uint64_t size;
|
||||
crypto::sha::sSha256Hash hash;
|
||||
fnd::sha::sSha256Hash hash;
|
||||
|
||||
const sPartition& operator=(const sPartition& other)
|
||||
{
|
||||
|
@ -53,9 +55,6 @@ namespace nx
|
|||
bool operator==(const NcaHeader& other) const;
|
||||
bool operator!=(const NcaHeader& other) const;
|
||||
|
||||
// to be used after export
|
||||
size_t getSize() const;
|
||||
|
||||
// export/import binary
|
||||
void toBytes();
|
||||
void fromBytes(const byte_t* bytes, size_t len);
|
||||
|
@ -86,8 +85,8 @@ namespace nx
|
|||
void setRightsId(const byte_t* rights_id);
|
||||
const fnd::List<sPartition>& getPartitions() const;
|
||||
void setPartitions(const fnd::List<sPartition>& partitions);
|
||||
const fnd::List<crypto::aes::sAes128Key>& getEncAesKeys() const;
|
||||
void setEncAesKeys(const fnd::List<crypto::aes::sAes128Key>& keys);
|
||||
const fnd::List<fnd::aes::sAes128Key>& getEncAesKeys() const;
|
||||
void setEncAesKeys(const fnd::List<fnd::aes::sAes128Key>& keys);
|
||||
|
||||
private:
|
||||
const std::string kModuleName = "NCA_HEADER";
|
||||
|
@ -107,10 +106,10 @@ namespace nx
|
|||
uint32_t mSdkAddonVersion;
|
||||
byte_t mRightsId[nca::kRightsIdLen];
|
||||
fnd::List<sPartition> mPartitions;
|
||||
fnd::List<crypto::aes::sAes128Key> mEncAesKeys;
|
||||
fnd::List<fnd::aes::sAes128Key> mEncAesKeys;
|
||||
|
||||
uint64_t blockNumToSize(uint32_t block_num) const;
|
||||
uint32_t sizeToBlockNum(uint64_t real_size) const;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,14 +1,17 @@
|
|||
#pragma once
|
||||
#include <nx/nca.h>
|
||||
#include <nn/hac/nca.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class NcaUtils
|
||||
{
|
||||
public:
|
||||
static inline size_t sectorToOffset(size_t sector_index) { return sector_index * nx::nca::kSectorSize; }
|
||||
static void decryptNcaHeader(const byte_t* src, byte_t* dst, const crypto::aes::sAesXts128Key& key);
|
||||
static inline size_t sectorToOffset(size_t sector_index) { return sector_index * nn::hac::nca::kSectorSize; }
|
||||
static void decryptNcaHeader(const byte_t* src, byte_t* dst, const fnd::aes::sAesXts128Key& key);
|
||||
static byte_t getMasterKeyRevisionFromKeyGeneration(byte_t key_generation);
|
||||
static void getNcaPartitionAesCtr(const nx::sNcaFsHeader* hdr, byte_t* ctr);
|
||||
static void getNcaPartitionAesCtr(const nn::hac::sNcaFsHeader* hdr, byte_t* ctr);
|
||||
};
|
||||
}
|
||||
}
|
|
@ -2,12 +2,13 @@
|
|||
#include <string>
|
||||
#include <fnd/List.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <nx/npdm.h>
|
||||
#include <nx/AccessControlInfoBinary.h>
|
||||
#include <nx/AccessControlInfoDescBinary.h>
|
||||
#include <nn/hac/npdm.h>
|
||||
#include <nn/hac/AccessControlInfoBinary.h>
|
||||
#include <nn/hac/AccessControlInfoDescBinary.h>
|
||||
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class NpdmBinary :
|
||||
public fnd::ISerialisable
|
||||
|
@ -75,5 +76,5 @@ namespace nx
|
|||
AccessControlInfoBinary mAci;
|
||||
AccessControlInfoDescBinary mAcid;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,9 +1,12 @@
|
|||
#pragma once
|
||||
#include <nx/nro.h>
|
||||
#include <cstring>
|
||||
#include <nn/hac/nro.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class NroHeader :
|
||||
public fnd::ISerialisable
|
||||
|
@ -134,5 +137,5 @@ namespace nx
|
|||
sSection mRoDynStrInfo;
|
||||
sSection mRoDynSymInfo;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,9 +1,12 @@
|
|||
#pragma once
|
||||
#include <nx/nso.h>
|
||||
#include <cstring>
|
||||
#include <nn/hac/nso.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class NsoHeader :
|
||||
public fnd::ISerialisable
|
||||
|
@ -58,7 +61,7 @@ namespace nx
|
|||
sLayout memory_layout;
|
||||
bool is_compressed;
|
||||
bool is_hashed;
|
||||
crypto::sha::sSha256Hash hash;
|
||||
fnd::sha::sSha256Hash hash;
|
||||
|
||||
void operator=(const sCodeSegment& other)
|
||||
{
|
||||
|
@ -142,5 +145,5 @@ namespace nx
|
|||
sLayout mRoDynStrInfo;
|
||||
sLayout mRoDynSymInfo;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -3,10 +3,11 @@
|
|||
#include <fnd/types.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
#include <nx/pfs.h>
|
||||
#include <nn/hac/pfs.h>
|
||||
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class PfsHeader :
|
||||
public fnd::ISerialisable
|
||||
|
@ -24,7 +25,7 @@ namespace nx
|
|||
size_t offset;
|
||||
size_t size;
|
||||
size_t hash_protected_size;
|
||||
crypto::sha::sSha256Hash hash;
|
||||
fnd::sha::sSha256Hash hash;
|
||||
|
||||
sFile& operator=(const sFile& other)
|
||||
{
|
||||
|
@ -68,9 +69,6 @@ namespace nx
|
|||
bool operator==(const PfsHeader& other) const;
|
||||
bool operator!=(const PfsHeader& other) const;
|
||||
|
||||
// to be used after export
|
||||
size_t getSize() const;
|
||||
|
||||
// export/import binary
|
||||
void toBytes();
|
||||
void fromBytes(const byte_t* bytes, size_t len);
|
||||
|
@ -83,7 +81,7 @@ namespace nx
|
|||
void setFsType(FsType type);
|
||||
const fnd::List<sFile>& getFileList() const;
|
||||
void addFile(const std::string& name, size_t size);
|
||||
void addFile(const std::string& name, size_t size, size_t hash_protected_size, const crypto::sha::sSha256Hash& hash);
|
||||
void addFile(const std::string& name, size_t size, size_t hash_protected_size, const fnd::sha::sSha256Hash& hash);
|
||||
|
||||
private:
|
||||
const std::string kModuleName = "PFS_HEADER";
|
||||
|
@ -99,4 +97,4 @@ namespace nx
|
|||
void calculateOffsets(size_t data_offset);
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -3,9 +3,11 @@
|
|||
#include <vector>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
#include <nx/ServiceAccessControlEntry.h>
|
||||
#include <nn/hac/ServiceAccessControlEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class ServiceAccessControlBinary :
|
||||
public fnd::ISerialisable
|
||||
|
@ -36,5 +38,5 @@ namespace nx
|
|||
// variables
|
||||
fnd::List<ServiceAccessControlEntry> mServices;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -3,7 +3,9 @@
|
|||
#include <fnd/types.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class ServiceAccessControlEntry :
|
||||
public fnd::ISerialisable
|
||||
|
@ -44,8 +46,6 @@ namespace nx
|
|||
// variables
|
||||
bool mIsServer;
|
||||
std::string mName;
|
||||
|
||||
bool isEqual(const ServiceAccessControlEntry& other) const;
|
||||
void copyFrom(const ServiceAccessControlEntry& other);
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <nx/KernelCapabilityEntry.h>
|
||||
#include <nn/hac/KernelCapabilityEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class SystemCallEntry
|
||||
{
|
||||
|
@ -54,4 +56,4 @@ namespace nx
|
|||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
#pragma once
|
||||
#include <nx/IKernelCapabilityHandler.h>
|
||||
#include <nn/hac/IKernelCapabilityHandler.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class SystemCallHandler :
|
||||
public IKernelCapabilityHandler
|
||||
|
@ -32,5 +34,5 @@ namespace nx
|
|||
bool mIsSet;
|
||||
fnd::List<uint8_t> mSystemCalls;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <string>
|
||||
#include <fnd/types.h>
|
||||
#include <nx/KernelCapabilityEntry.h>
|
||||
#include <nn/hac/KernelCapabilityEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class ThreadInfoEntry
|
||||
{
|
||||
|
@ -64,3 +66,4 @@ namespace nx
|
|||
}
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <nx/IKernelCapabilityHandler.h>
|
||||
#include <nx/ThreadInfoEntry.h>
|
||||
#include <nn/hac/IKernelCapabilityHandler.h>
|
||||
#include <nn/hac/ThreadInfoEntry.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class ThreadInfoHandler :
|
||||
public IKernelCapabilityHandler
|
||||
|
@ -38,4 +40,4 @@ namespace nx
|
|||
ThreadInfoEntry mEntry;
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <nx/xci.h>
|
||||
#include <nn/hac/xci.h>
|
||||
#include <fnd/ISerialisable.h>
|
||||
#include <fnd/List.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class XciHeader :
|
||||
public fnd::ISerialisable
|
||||
|
@ -41,16 +43,16 @@ namespace nx
|
|||
void setPackageId(uint64_t id);
|
||||
uint32_t getValidDataEndPage() const;
|
||||
void setValidDataEndPage(uint32_t page);
|
||||
const crypto::aes::sAesIvCtr& getAesCbcIv() const;
|
||||
void setAesCbcIv(const crypto::aes::sAesIvCtr& iv);
|
||||
const fnd::aes::sAesIvCtr& getAesCbcIv() const;
|
||||
void setAesCbcIv(const fnd::aes::sAesIvCtr& iv);
|
||||
uint64_t getPartitionFsAddress() const;
|
||||
void setPartitionFsAddress(uint64_t address);
|
||||
uint64_t getPartitionFsSize() const;
|
||||
void setPartitionFsSize(uint64_t size);
|
||||
const crypto::sha::sSha256Hash& getPartitionFsHash() const;
|
||||
void setPartitionFsHash(const crypto::sha::sSha256Hash& hash);
|
||||
const crypto::sha::sSha256Hash& getInitialDataHash() const;
|
||||
void setInitialDataHash(const crypto::sha::sSha256Hash& hash);
|
||||
const fnd::sha::sSha256Hash& getPartitionFsHash() const;
|
||||
void setPartitionFsHash(const fnd::sha::sSha256Hash& hash);
|
||||
const fnd::sha::sSha256Hash& getInitialDataHash() const;
|
||||
void setInitialDataHash(const fnd::sha::sSha256Hash& hash);
|
||||
uint32_t getSelSec() const;
|
||||
void setSelSec(uint32_t sel_sec);
|
||||
uint32_t getSelT1Key() const;
|
||||
|
@ -99,11 +101,11 @@ namespace nx
|
|||
byte_t mFlags;
|
||||
uint64_t mPackageId;
|
||||
uint32_t mValidDataEndPage;
|
||||
crypto::aes::sAesIvCtr mAesCbcIv;
|
||||
fnd::aes::sAesIvCtr mAesCbcIv;
|
||||
uint64_t mPartitionFsHeaderAddress;
|
||||
uint64_t mPartitionFsHeaderSize;
|
||||
crypto::sha::sSha256Hash mPartitionFsHeaderHash;
|
||||
crypto::sha::sSha256Hash mInitialDataHash;
|
||||
fnd::sha::sSha256Hash mPartitionFsHeaderHash;
|
||||
fnd::sha::sSha256Hash mInitialDataHash;
|
||||
uint32_t mSelSec;
|
||||
uint32_t mSelT1Key;
|
||||
uint32_t mSelKey;
|
||||
|
@ -121,5 +123,5 @@ namespace nx
|
|||
byte_t mUppHash[8];
|
||||
uint64_t mUppId;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
|
@ -1,13 +1,16 @@
|
|||
#pragma once
|
||||
#include <nx/xci.h>
|
||||
#include <nn/hac/xci.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
class XciUtils
|
||||
{
|
||||
public:
|
||||
static inline uint64_t blockToAddr(uint32_t block) { return ((uint64_t)block) << 9; }
|
||||
static void getXciHeaderAesIv(const nx::sXciHeader* hdr, byte_t* iv);
|
||||
static void getXciHeaderAesIv(const nn::hac::sXciHeader* hdr, byte_t* iv);
|
||||
static void decryptXciHeader(const byte_t* src, byte_t* dst, const byte_t* key);
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <crypto/rsa.h>
|
||||
#include <nx/macro.h>
|
||||
#include <fnd/rsa.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace aci
|
||||
{
|
||||
|
@ -37,8 +39,8 @@ namespace nx
|
|||
|
||||
struct sAciDescHeader
|
||||
{
|
||||
byte_t signature[crypto::rsa::kRsa2048Size];
|
||||
byte_t nca_rsa_signature2_modulus[crypto::rsa::kRsa2048Size];
|
||||
byte_t signature[fnd::rsa::kRsa2048Size];
|
||||
byte_t nca_rsa_signature2_modulus[fnd::rsa::kRsa2048Size];
|
||||
le_uint32_t st_magic;
|
||||
le_uint32_t signed_size;
|
||||
byte_t reserved_00[0x4];
|
||||
|
@ -50,4 +52,5 @@ namespace nx
|
|||
sAciSection kc;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <crypto/sha.h>
|
||||
#include <fnd/sha.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace cnmt
|
||||
{
|
||||
|
@ -81,7 +83,7 @@ namespace nx
|
|||
|
||||
struct sContentInfo
|
||||
{
|
||||
crypto::sha::sSha256Hash content_hash;
|
||||
fnd::sha::sSha256Hash content_hash;
|
||||
byte_t content_id[cnmt::kContentIdLen];
|
||||
le_uint32_t size_lower;
|
||||
le_uint16_t size_higher;
|
||||
|
@ -132,4 +134,5 @@ namespace nx
|
|||
byte_t data[cnmt::kDigestLen];
|
||||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace elf
|
||||
{
|
||||
|
@ -64,4 +66,5 @@ namespace nx
|
|||
le_uint64_t size;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace fac
|
||||
{
|
||||
|
@ -54,4 +56,5 @@ namespace nx
|
|||
} content_owner_ids, save_data_owner_ids; // the data for these follow later in binary. start/end relative to base of FacData instance
|
||||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <nx/macro.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace hierarchicalintegrity
|
||||
{
|
||||
|
@ -30,3 +32,4 @@ namespace nx
|
|||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <crypto/sha.h>
|
||||
#include <fnd/sha.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace hierarchicalsha256
|
||||
{
|
||||
|
@ -13,7 +15,7 @@ namespace nx
|
|||
#pragma pack(push,1)
|
||||
struct sHierarchicalSha256Header
|
||||
{
|
||||
crypto::sha::sSha256Hash master_hash;
|
||||
fnd::sha::sSha256Hash master_hash;
|
||||
le_uint32_t hash_block_size;
|
||||
le_uint32_t layer_num;
|
||||
struct sLayer
|
||||
|
@ -24,3 +26,4 @@ namespace nx
|
|||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <crypto/rsa.h>
|
||||
#include <nx/macro.h>
|
||||
#include <fnd/rsa.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace kc
|
||||
{
|
||||
|
@ -21,4 +23,5 @@ namespace nx
|
|||
KC_MISC_FLAGS = 16
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace nacp
|
||||
{
|
||||
|
@ -217,4 +219,5 @@ namespace nx
|
|||
byte_t reserved_04[0xDED];
|
||||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,11 +1,13 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <crypto/aes.h>
|
||||
#include <crypto/sha.h>
|
||||
#include <crypto/rsa.h>
|
||||
#include <nx/macro.h>
|
||||
#include <fnd/aes.h>
|
||||
#include <fnd/sha.h>
|
||||
#include <fnd/rsa.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace nca
|
||||
{
|
||||
|
@ -106,8 +108,8 @@ namespace nx
|
|||
byte_t enabled;
|
||||
byte_t reserved[7];
|
||||
} partition[nca::kPartitionNum];
|
||||
crypto::sha::sSha256Hash partition_hash[nca::kPartitionNum];
|
||||
crypto::aes::sAes128Key enc_aes_key[nca::kAesKeyNum];
|
||||
fnd::sha::sSha256Hash partition_hash[nca::kPartitionNum];
|
||||
fnd::aes::sAes128Key enc_aes_key[nca::kAesKeyNum];
|
||||
};
|
||||
|
||||
struct sNcaFsHeader
|
||||
|
@ -124,11 +126,12 @@ namespace nx
|
|||
|
||||
struct sNcaHeaderBlock
|
||||
{
|
||||
byte_t signature_main[crypto::rsa::kRsa2048Size];
|
||||
byte_t signature_acid[crypto::rsa::kRsa2048Size];
|
||||
byte_t signature_main[fnd::rsa::kRsa2048Size];
|
||||
byte_t signature_acid[fnd::rsa::kRsa2048Size];
|
||||
sNcaHeader header;
|
||||
sNcaFsHeader fs_header[nx::nca::kPartitionNum];
|
||||
sNcaFsHeader fs_header[nn::hac::nca::kPartitionNum];
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <nx/macro.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace npdm
|
||||
{
|
||||
|
@ -51,4 +53,5 @@ namespace nx
|
|||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <nx/macro.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace nro
|
||||
{
|
||||
|
@ -40,3 +42,4 @@ namespace nx
|
|||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <crypto/rsa.h>
|
||||
#include <nx/macro.h>
|
||||
#include <fnd/rsa.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace nrr
|
||||
{
|
||||
|
@ -15,8 +17,8 @@ namespace nx
|
|||
{
|
||||
le_uint64_t application_id_mask;
|
||||
le_uint64_t application_id_pattern;
|
||||
byte_t nrr_body_modulus[crypto::rsa::kRsa2048Size];
|
||||
byte_t nrr_cert_signature[crypto::rsa::kRsa2048Size];
|
||||
byte_t nrr_body_modulus[fnd::rsa::kRsa2048Size];
|
||||
byte_t nrr_cert_signature[fnd::rsa::kRsa2048Size];
|
||||
};
|
||||
|
||||
struct sNrrHeader
|
||||
|
@ -24,7 +26,7 @@ namespace nx
|
|||
le_uint32_t st_magic;
|
||||
byte_t reserved_0[28];
|
||||
sNrrCertificate certificate;
|
||||
byte_t nrr_body_signature[crypto::rsa::kRsa2048Size];
|
||||
byte_t nrr_body_signature[fnd::rsa::kRsa2048Size];
|
||||
le_uint64_t application_id;
|
||||
le_uint32_t size;
|
||||
byte_t reserved_1[4];
|
||||
|
@ -34,3 +36,4 @@ namespace nx
|
|||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <crypto/sha.h>
|
||||
#include <nx/macro.h>
|
||||
#include <fnd/sha.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace nso
|
||||
{
|
||||
|
@ -56,10 +58,11 @@ namespace nx
|
|||
sNsoSection embedded;
|
||||
sNsoSection dyn_str;
|
||||
sNsoSection dyn_sym;
|
||||
crypto::sha::sSha256Hash text_hash;
|
||||
crypto::sha::sSha256Hash ro_hash;
|
||||
crypto::sha::sSha256Hash data_hash;
|
||||
fnd::sha::sSha256Hash text_hash;
|
||||
fnd::sha::sSha256Hash ro_hash;
|
||||
fnd::sha::sSha256Hash data_hash;
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,8 +1,11 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <crypto/sha.h>
|
||||
#include <nx/macro.h>
|
||||
#include <fnd/sha.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace pfs
|
||||
{
|
||||
|
@ -35,7 +38,8 @@ namespace nx
|
|||
le_uint32_t name_offset;
|
||||
le_uint32_t hash_protected_size;
|
||||
byte_t padding[8];
|
||||
crypto::sha::sSha256Hash hash;
|
||||
fnd::sha::sSha256Hash hash;
|
||||
}; // sizeof(0x40)
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace romfs
|
||||
{
|
||||
|
@ -55,3 +57,4 @@ namespace nx
|
|||
};
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
|
@ -1,12 +1,14 @@
|
|||
#pragma once
|
||||
#include <fnd/types.h>
|
||||
#include <fnd/List.h>
|
||||
#include <crypto/aes.h>
|
||||
#include <crypto/sha.h>
|
||||
#include <crypto/rsa.h>
|
||||
#include <nx/macro.h>
|
||||
#include <fnd/aes.h>
|
||||
#include <fnd/sha.h>
|
||||
#include <fnd/rsa.h>
|
||||
#include <nn/hac/macro.h>
|
||||
|
||||
namespace nx
|
||||
namespace nn
|
||||
{
|
||||
namespace hac
|
||||
{
|
||||
namespace xci
|
||||
{
|
||||
|
@ -78,11 +80,11 @@ namespace nx
|
|||
le_uint64_t package_id;
|
||||
le_uint32_t valid_data_end_page;
|
||||
byte_t reserved_00[4];
|
||||
crypto::aes::sAesIvCtr aescbc_iv;
|
||||
fnd::aes::sAesIvCtr aescbc_iv;
|
||||
le_uint64_t partition_fs_header_address;
|
||||
le_uint64_t partition_fs_header_size;
|
||||
crypto::sha::sSha256Hash partition_fs_header_hash;
|
||||
crypto::sha::sSha256Hash initial_data_hash;
|
||||
fnd::sha::sSha256Hash partition_fs_header_hash;
|
||||
fnd::sha::sSha256Hash initial_data_hash;
|
||||
le_uint32_t sel_sec;
|
||||
le_uint32_t sel_t1_key;
|
||||
le_uint32_t sel_key;
|
||||
|
@ -105,7 +107,7 @@ namespace nx
|
|||
|
||||
struct sXciHeaderPage
|
||||
{
|
||||
byte_t signature[crypto::rsa::kRsa2048Size];
|
||||
byte_t signature[fnd::rsa::kRsa2048Size];
|
||||
sXciHeader header;
|
||||
}; // sizeof() = 512 (1 page)
|
||||
|
||||
|
@ -122,9 +124,10 @@ namespace nx
|
|||
{
|
||||
sInitialData initial_data; // AES128-CCM encrypted {titlekey[16]}
|
||||
byte_t encrypted_00[xci::kPageSize * 6]; // AES128-CTR encrypted {titlekey[16]}
|
||||
byte_t encrypted_00_aesctr_data[crypto::rsa::kRsa2048Size]; // RSA2048-OAEP-SHA256 encrypted AES-CTR data used for encrypted_00 {key[16],iv[16]}
|
||||
byte_t reserved[xci::kPageSize - crypto::rsa::kRsa2048Size];
|
||||
byte_t encrypted_00_aesctr_data[fnd::rsa::kRsa2048Size]; // RSA2048-OAEP-SHA256 encrypted AES-CTR data used for encrypted_00 {key[16],iv[16]}
|
||||
byte_t reserved[xci::kPageSize - fnd::rsa::kRsa2048Size];
|
||||
}; // sizeof() = 512*8 (8 pages)
|
||||
|
||||
#pragma pack(pop)
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue