Update FsHeader
This commit is contained in:
parent
27b7ba5e7f
commit
3634a8c98d
16 changed files with 3095 additions and 2025 deletions
20
pom.xml
20
pom.xml
|
@ -141,10 +141,28 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.redrise</groupId>
|
<groupId>ru.redrise</groupId>
|
||||||
<artifactId>libKonogonka</artifactId>
|
<artifactId>libKonogonka</artifactId>
|
||||||
<version>0.1</version>
|
<version>0.1-SNAPSHOT</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
<version>5.5.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<version>5.5.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-params</artifactId>
|
||||||
|
<version>5.5.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
<!-- Consider removing
|
<!-- Consider removing
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hamcrest</groupId>
|
<groupId>org.hamcrest</groupId>
|
||||||
|
|
|
@ -34,13 +34,13 @@ import java.net.URL;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import static libKonogonka.LoperConverter.byteArrToHexString;
|
import static libKonogonka.Converter.byteArrToHexString;
|
||||||
|
|
||||||
public class NCAController implements ITabController {
|
public class NCAController implements ITabController {
|
||||||
|
|
||||||
private File selectedFile;
|
private File selectedFile;
|
||||||
@FXML
|
@FXML
|
||||||
private NCASectionHeaderBlockController
|
private NCAFsHeaderController
|
||||||
NCASectionHeaderFirstController,
|
NCASectionHeaderFirstController,
|
||||||
NCASectionHeaderSecondController,
|
NCASectionHeaderSecondController,
|
||||||
NCASectionHeaderThirdController,
|
NCASectionHeaderThirdController,
|
||||||
|
@ -179,7 +179,7 @@ public class NCAController implements ITabController {
|
||||||
NCASectionContentFourthController.resetTab();
|
NCASectionContentFourthController.resetTab();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void populateFields(NCAProvider ncaProvider){
|
private void populateFields(NCAProvider ncaProvider) {
|
||||||
if (ncaProvider == null)
|
if (ncaProvider == null)
|
||||||
return;
|
return;
|
||||||
rsa2048oneTF.setText(byteArrToHexString(ncaProvider.getRsa2048one()));
|
rsa2048oneTF.setText(byteArrToHexString(ncaProvider.getRsa2048one()));
|
||||||
|
@ -224,17 +224,27 @@ public class NCAController implements ITabController {
|
||||||
NCASectionHeaderThirdController.populateTab(ncaProvider.getSectionBlock2());
|
NCASectionHeaderThirdController.populateTab(ncaProvider.getSectionBlock2());
|
||||||
NCASectionHeaderFourthController.populateTab(ncaProvider.getSectionBlock3());
|
NCASectionHeaderFourthController.populateTab(ncaProvider.getSectionBlock3());
|
||||||
// Section content blocks
|
// Section content blocks
|
||||||
|
|
||||||
NCASectionContentFirstController.populateFields(
|
NCASectionContentFirstController.populateFields(
|
||||||
ncaProvider.getNCAContentProvider(0),
|
getNcaContent(ncaProvider, 0),
|
||||||
0);
|
0);
|
||||||
NCASectionContentSecondController.populateFields(
|
NCASectionContentSecondController.populateFields(
|
||||||
ncaProvider.getNCAContentProvider(1),
|
getNcaContent(ncaProvider, 1),
|
||||||
1);
|
1);
|
||||||
NCASectionContentThirdController.populateFields(
|
NCASectionContentThirdController.populateFields(
|
||||||
ncaProvider.getNCAContentProvider(2),
|
getNcaContent(ncaProvider, 2),
|
||||||
2);
|
2);
|
||||||
NCASectionContentFourthController.populateFields(
|
NCASectionContentFourthController.populateFields(
|
||||||
ncaProvider.getNCAContentProvider(3),
|
getNcaContent(ncaProvider, 3),
|
||||||
3);
|
3);
|
||||||
}
|
}
|
||||||
|
private NCAContent getNcaContent(NCAProvider provider, int i){
|
||||||
|
try{
|
||||||
|
return provider.getNCAContentProvider(i);
|
||||||
|
}
|
||||||
|
catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,385 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019-2022 Dmitry Isaenko
|
||||||
|
|
||||||
|
This file is part of Konogonka.
|
||||||
|
|
||||||
|
Konogonka is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Konogonka is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Konogonka. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package konogonka.Controllers.NCA;
|
||||||
|
|
||||||
|
import javafx.fxml.FXML;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.TextField;
|
||||||
|
import javafx.scene.control.TitledPane;
|
||||||
|
import libKonogonka.Tools.NCA.NCASectionTableBlock.CompressionInfo;
|
||||||
|
import libKonogonka.Tools.NCA.NCASectionTableBlock.MetaDataHashDataInfo;
|
||||||
|
import libKonogonka.Tools.NCA.NCASectionTableBlock.NcaFsHeader;
|
||||||
|
import libKonogonka.Tools.NCA.NCASectionTableBlock.SparseInfo;
|
||||||
|
|
||||||
|
import static libKonogonka.Converter.byteArrToHexString;
|
||||||
|
|
||||||
|
public class NCAFsHeaderController {
|
||||||
|
@FXML
|
||||||
|
private Label
|
||||||
|
versionLbl,
|
||||||
|
fsTypeLbl,
|
||||||
|
hashTypeLbl,
|
||||||
|
cryptoTypeLbl,
|
||||||
|
metaDataHashTypeLbl,
|
||||||
|
paddingLbl;
|
||||||
|
@FXML
|
||||||
|
private TitledPane
|
||||||
|
romFsTitlePanel,
|
||||||
|
pfs0TitlePanel;
|
||||||
|
// PFS0Provider
|
||||||
|
@FXML
|
||||||
|
private Label
|
||||||
|
pfs0blockSizeLbl,
|
||||||
|
pfs0LayerCountLbl,
|
||||||
|
pfs0hashTableOffsetLbl,
|
||||||
|
pfs0hashTableSizeLbl,
|
||||||
|
pfs0relativeToSectionStartOffsetLbl,
|
||||||
|
pfs0sizePfs0Lbl,
|
||||||
|
|
||||||
|
sparseInfoTableOffsetLbl,
|
||||||
|
sparseInfoTableSizeLbl,
|
||||||
|
sparseInfoMagicLbl,
|
||||||
|
sparseInfoVersionLbl,
|
||||||
|
sparseInfoEntryCountLbl,
|
||||||
|
sparseInfoUnknownLbl,
|
||||||
|
sparseInfoPhysicalOffsetLbl,
|
||||||
|
sparseInfoGenerationLbl,
|
||||||
|
sparseInfoReseredLbl,
|
||||||
|
compressionInfoTableOffsetLbl,
|
||||||
|
compressionInfoTableSizeLbl,
|
||||||
|
compressionMagicLbl,
|
||||||
|
compressionInfoVersionLbl,
|
||||||
|
compressionInfoEntryCountLbl,
|
||||||
|
compressionInfoUnknownLbl,
|
||||||
|
compressionInfoReservedLbl,
|
||||||
|
metaDataHashDataTableOffsetLbl,
|
||||||
|
metaDataHashDataTableSizeLbl,
|
||||||
|
metaDataHashDataTableHashLbl;
|
||||||
|
@FXML
|
||||||
|
private TextField
|
||||||
|
pfs0SHA256hashTf,
|
||||||
|
pfs0zeroesTf;
|
||||||
|
// RomFS (IVFC)
|
||||||
|
@FXML
|
||||||
|
private Label
|
||||||
|
romFsMagicLbl,
|
||||||
|
romFsMagicNumberLbl,
|
||||||
|
romFsMasterHashSizeLbl,
|
||||||
|
romFsTotalNumberOfLevelsLbl,
|
||||||
|
romFsLvl1OffsetLbl,
|
||||||
|
romFsLvl1SizeLbl,
|
||||||
|
romFsLvl1SBlockSizeLbl,
|
||||||
|
romFsReserved1Lbl,
|
||||||
|
|
||||||
|
romFsLvl2OffsetLbl,
|
||||||
|
romFsLvl2SizeLbl,
|
||||||
|
romFsLvl2SBlockSizeLbl,
|
||||||
|
romFsReserved2Lbl,
|
||||||
|
|
||||||
|
romFsLvl3OffsetLbl,
|
||||||
|
romFsLvl3SizeLbl,
|
||||||
|
romFsLvl3SBlockSizeLbl,
|
||||||
|
romFsReserved3Lbl,
|
||||||
|
|
||||||
|
romFsLvl4OffsetLbl,
|
||||||
|
romFsLvl4SizeLbl,
|
||||||
|
romFsLvl4SBlockSizeLbl,
|
||||||
|
romFsReserved4Lbl,
|
||||||
|
|
||||||
|
romFsLvl5OffsetLbl,
|
||||||
|
romFsLvl5SizeLbl,
|
||||||
|
romFsLvl5SBlockSizeLbl,
|
||||||
|
romFsReserved5Lbl,
|
||||||
|
|
||||||
|
romFsLvl6OffsetLbl,
|
||||||
|
romFsLvl6SizeLbl,
|
||||||
|
romFsLvl6SBlockSizeLbl,
|
||||||
|
romFsReserved6Lbl,
|
||||||
|
romFsReservedTailLbl;
|
||||||
|
@FXML
|
||||||
|
private TextField
|
||||||
|
signatureSaltTf,
|
||||||
|
romFsMasterHashTf,
|
||||||
|
unknwnEndPaddingTF;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label
|
||||||
|
indirectOffsetLbl,
|
||||||
|
indirectSizeLbl,
|
||||||
|
indirectInfoMagicLbl,
|
||||||
|
indirectInfoVersionLbl,
|
||||||
|
indirectInfoEntryCountLbl,
|
||||||
|
indirectInfoUnknownLbl,
|
||||||
|
aesCtrExOffsetLbl,
|
||||||
|
aesCtrExSizeLbl,
|
||||||
|
aesCtrExMagicLbl,
|
||||||
|
aesCtrExVersionLbl,
|
||||||
|
aesCtrExEntryCountLbl,
|
||||||
|
aesCtrExUnknownLbl,
|
||||||
|
sectionCTRLbl,
|
||||||
|
generationLbl;
|
||||||
|
|
||||||
|
public void resetTab() {
|
||||||
|
versionLbl.setText("-");
|
||||||
|
fsTypeLbl.setText("-");
|
||||||
|
hashTypeLbl.setText("-");
|
||||||
|
cryptoTypeLbl.setText("-");
|
||||||
|
metaDataHashTypeLbl.setText("-");
|
||||||
|
paddingLbl.setText("-");
|
||||||
|
|
||||||
|
romFsTitlePanel.setDisable(false);
|
||||||
|
romFsTitlePanel.setExpanded(false);
|
||||||
|
pfs0TitlePanel.setDisable(false);
|
||||||
|
pfs0TitlePanel.setExpanded(false);
|
||||||
|
//RomFS
|
||||||
|
romFsMagicLbl.setText("-");
|
||||||
|
romFsMagicNumberLbl.setText("-");
|
||||||
|
romFsMasterHashSizeLbl.setText("-");
|
||||||
|
romFsTotalNumberOfLevelsLbl.setText("-");
|
||||||
|
romFsLvl1OffsetLbl.setText("-");
|
||||||
|
romFsLvl1SizeLbl.setText("-");
|
||||||
|
romFsLvl1SBlockSizeLbl.setText("-");
|
||||||
|
romFsReserved1Lbl.setText("-");
|
||||||
|
|
||||||
|
romFsLvl2OffsetLbl.setText("-");
|
||||||
|
romFsLvl2SizeLbl.setText("-");
|
||||||
|
romFsLvl2SBlockSizeLbl.setText("-");
|
||||||
|
romFsReserved2Lbl.setText("-");
|
||||||
|
|
||||||
|
romFsLvl3OffsetLbl.setText("-");
|
||||||
|
romFsLvl3SizeLbl.setText("-");
|
||||||
|
romFsLvl3SBlockSizeLbl.setText("-");
|
||||||
|
romFsReserved3Lbl.setText("-");
|
||||||
|
|
||||||
|
romFsLvl4OffsetLbl.setText("-");
|
||||||
|
romFsLvl4SizeLbl.setText("-");
|
||||||
|
romFsLvl4SBlockSizeLbl.setText("-");
|
||||||
|
romFsReserved4Lbl.setText("-");
|
||||||
|
|
||||||
|
romFsLvl5OffsetLbl.setText("-");
|
||||||
|
romFsLvl5SizeLbl.setText("-");
|
||||||
|
romFsLvl5SBlockSizeLbl.setText("-");
|
||||||
|
romFsReserved5Lbl.setText("-");
|
||||||
|
|
||||||
|
romFsLvl6OffsetLbl.setText("-");
|
||||||
|
romFsLvl6SizeLbl.setText("-");
|
||||||
|
romFsLvl6SBlockSizeLbl.setText("-");
|
||||||
|
romFsReserved6Lbl.setText("-");
|
||||||
|
|
||||||
|
signatureSaltTf.setText("-");
|
||||||
|
romFsMasterHashTf.setText("-");
|
||||||
|
romFsReservedTailLbl.setText("-");
|
||||||
|
|
||||||
|
// PFS0Provider
|
||||||
|
pfs0SHA256hashTf.setText("-");
|
||||||
|
pfs0blockSizeLbl.setText("-");
|
||||||
|
pfs0LayerCountLbl.setText("-");
|
||||||
|
pfs0hashTableOffsetLbl.setText("-");
|
||||||
|
pfs0hashTableSizeLbl.setText("-");
|
||||||
|
pfs0relativeToSectionStartOffsetLbl.setText("-");
|
||||||
|
pfs0sizePfs0Lbl.setText("-");
|
||||||
|
pfs0zeroesTf.setText("-");
|
||||||
|
|
||||||
|
indirectOffsetLbl.setText("-");
|
||||||
|
indirectSizeLbl.setText("-");
|
||||||
|
indirectInfoMagicLbl.setText("-");
|
||||||
|
indirectInfoVersionLbl.setText("-");
|
||||||
|
indirectInfoEntryCountLbl.setText("-");
|
||||||
|
indirectInfoUnknownLbl.setText("-");
|
||||||
|
aesCtrExOffsetLbl.setText("-");
|
||||||
|
aesCtrExSizeLbl.setText("-");
|
||||||
|
aesCtrExMagicLbl.setText("-");
|
||||||
|
aesCtrExVersionLbl.setText("-");
|
||||||
|
aesCtrExEntryCountLbl.setText("-");
|
||||||
|
aesCtrExUnknownLbl.setText("-");
|
||||||
|
sectionCTRLbl.setText("-");
|
||||||
|
generationLbl.setText("-");
|
||||||
|
unknwnEndPaddingTF.setText("-");
|
||||||
|
|
||||||
|
sparseInfoTableOffsetLbl.setText("-");
|
||||||
|
sparseInfoTableSizeLbl.setText("-");
|
||||||
|
sparseInfoMagicLbl.setText("-");
|
||||||
|
sparseInfoVersionLbl.setText("-");
|
||||||
|
sparseInfoEntryCountLbl.setText("-");
|
||||||
|
sparseInfoUnknownLbl.setText("-");
|
||||||
|
sparseInfoPhysicalOffsetLbl.setText("-");
|
||||||
|
sparseInfoGenerationLbl.setText("-");
|
||||||
|
sparseInfoReseredLbl.setText("-");
|
||||||
|
compressionInfoTableOffsetLbl.setText("-");
|
||||||
|
compressionInfoTableSizeLbl.setText("-");
|
||||||
|
compressionMagicLbl.setText("-");
|
||||||
|
compressionInfoVersionLbl.setText("-");
|
||||||
|
compressionInfoEntryCountLbl.setText("-");
|
||||||
|
compressionInfoUnknownLbl.setText("-");
|
||||||
|
compressionInfoReservedLbl.setText("-");
|
||||||
|
metaDataHashDataTableOffsetLbl.setText("-");
|
||||||
|
metaDataHashDataTableSizeLbl.setText("-");
|
||||||
|
metaDataHashDataTableHashLbl.setText("-");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void populateTab(NcaFsHeader ncaFsHeader){
|
||||||
|
versionLbl.setText(byteArrToHexString(ncaFsHeader.getVersion()));
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append(String.format("0x%02x ", ncaFsHeader.getFsType()));
|
||||||
|
if (ncaFsHeader.getFsType() == 0)
|
||||||
|
sb.append("(RomFS)");
|
||||||
|
else if (ncaFsHeader.getFsType() == 1)
|
||||||
|
sb.append("(PFS0)");
|
||||||
|
fsTypeLbl.setText(sb.toString());
|
||||||
|
sb = new StringBuilder();
|
||||||
|
sb.append(String.format("0x%02x ", ncaFsHeader.getHashType()));
|
||||||
|
if (ncaFsHeader.getHashType() == 0x3)
|
||||||
|
sb.append("(RomFS)");
|
||||||
|
else if (ncaFsHeader.getHashType() == 0x2)
|
||||||
|
sb.append("(PFS0)");
|
||||||
|
hashTypeLbl.setText(sb.toString());
|
||||||
|
switch (ncaFsHeader.getCryptoType()){
|
||||||
|
case 0: cryptoTypeLbl.setText(String.format("%02x - Auto", ncaFsHeader.getCryptoType()));;
|
||||||
|
break;
|
||||||
|
case 1: cryptoTypeLbl.setText(String.format("%02x - None", ncaFsHeader.getCryptoType()));;
|
||||||
|
break;
|
||||||
|
case 2: cryptoTypeLbl.setText(String.format("%02x - AesXts", ncaFsHeader.getCryptoType()));
|
||||||
|
break;
|
||||||
|
case 3: cryptoTypeLbl.setText(String.format("%02x - AesCtr", ncaFsHeader.getCryptoType()));
|
||||||
|
break;
|
||||||
|
case 4: cryptoTypeLbl.setText(String.format("%02x - AesCtrEx", ncaFsHeader.getCryptoType()));
|
||||||
|
break;
|
||||||
|
case 5: cryptoTypeLbl.setText(String.format("%02x - AesCtrSkipLayerHash", ncaFsHeader.getCryptoType()));
|
||||||
|
break;
|
||||||
|
case 6: cryptoTypeLbl.setText(String.format("%02x - AesCtrExSkipLayerHash", ncaFsHeader.getCryptoType()));
|
||||||
|
break;
|
||||||
|
default: cryptoTypeLbl.setText(String.format("%02x", ncaFsHeader.getCryptoType()));
|
||||||
|
}
|
||||||
|
switch (ncaFsHeader.getMetaDataHashType()){
|
||||||
|
case 0:
|
||||||
|
metaDataHashTypeLbl.setText(String.format("%d - None", ncaFsHeader.getMetaDataHashType()));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
metaDataHashTypeLbl.setText(String.format("%d - HierarchicalIntegrity", ncaFsHeader.getMetaDataHashType()));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
metaDataHashTypeLbl.setText(String.format("%d", ncaFsHeader.getMetaDataHashType()));
|
||||||
|
}
|
||||||
|
|
||||||
|
paddingLbl.setText(byteArrToHexString(ncaFsHeader.getPadding()));
|
||||||
|
if ((ncaFsHeader.getFsType() == 0) && (ncaFsHeader.getHashType() == 0x3)){
|
||||||
|
romFsMagicLbl.setText(ncaFsHeader.getSuperBlockIVFC().getMagic());
|
||||||
|
romFsMagicNumberLbl.setText(ncaFsHeader.getSuperBlockIVFC().getMagic()
|
||||||
|
+(!ncaFsHeader.getSuperBlockIVFC().getMagic().matches("2")? " (OK)":" (wrong magic number)")); // TODO: TEST
|
||||||
|
romFsMasterHashSizeLbl.setText(Integer.toString(ncaFsHeader.getSuperBlockIVFC().getMasterHashSize()));
|
||||||
|
romFsTotalNumberOfLevelsLbl.setText(Integer.toString(ncaFsHeader.getSuperBlockIVFC().getTotalNumberOfLevels()));
|
||||||
|
romFsLvl1OffsetLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl1Offset()));
|
||||||
|
romFsLvl1SizeLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl1Size()));
|
||||||
|
romFsLvl1SBlockSizeLbl.setText(Integer.toString(ncaFsHeader.getSuperBlockIVFC().getLvl1SBlockSize()));
|
||||||
|
romFsReserved1Lbl.setText(byteArrToHexString(ncaFsHeader.getSuperBlockIVFC().getReserved1()));
|
||||||
|
|
||||||
|
romFsLvl2OffsetLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl2Offset()));
|
||||||
|
romFsLvl2SizeLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl2Size()));
|
||||||
|
romFsLvl2SBlockSizeLbl.setText(Integer.toString(ncaFsHeader.getSuperBlockIVFC().getLvl2SBlockSize()));
|
||||||
|
romFsReserved2Lbl.setText(byteArrToHexString(ncaFsHeader.getSuperBlockIVFC().getReserved2()));
|
||||||
|
|
||||||
|
romFsLvl3OffsetLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl3Offset()));
|
||||||
|
romFsLvl3SizeLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl3Size()));
|
||||||
|
romFsLvl3SBlockSizeLbl.setText(Integer.toString(ncaFsHeader.getSuperBlockIVFC().getLvl3SBlockSize()));
|
||||||
|
romFsReserved3Lbl.setText(byteArrToHexString(ncaFsHeader.getSuperBlockIVFC().getReserved3()));
|
||||||
|
|
||||||
|
romFsLvl4OffsetLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl4Offset()));
|
||||||
|
romFsLvl4SizeLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl4Size()));
|
||||||
|
romFsLvl4SBlockSizeLbl.setText(Integer.toString(ncaFsHeader.getSuperBlockIVFC().getLvl4SBlockSize()));
|
||||||
|
romFsReserved4Lbl.setText(byteArrToHexString(ncaFsHeader.getSuperBlockIVFC().getReserved4()));
|
||||||
|
|
||||||
|
romFsLvl5OffsetLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl5Offset()));
|
||||||
|
romFsLvl5SizeLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl5Size()));
|
||||||
|
romFsLvl5SBlockSizeLbl.setText(Integer.toString(ncaFsHeader.getSuperBlockIVFC().getLvl5SBlockSize()));
|
||||||
|
romFsReserved5Lbl.setText(byteArrToHexString(ncaFsHeader.getSuperBlockIVFC().getReserved5()));
|
||||||
|
|
||||||
|
romFsLvl6OffsetLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl6Offset()));
|
||||||
|
romFsLvl6SizeLbl.setText(getCuteDecHexRepresentation(ncaFsHeader.getSuperBlockIVFC().getLvl6Size()));
|
||||||
|
romFsLvl6SBlockSizeLbl.setText(Integer.toString(ncaFsHeader.getSuperBlockIVFC().getLvl6SBlockSize()));
|
||||||
|
romFsReserved6Lbl.setText(byteArrToHexString(ncaFsHeader.getSuperBlockIVFC().getReserved6()));
|
||||||
|
|
||||||
|
signatureSaltTf.setText(byteArrToHexString(ncaFsHeader.getSuperBlockIVFC().getSignatureSalt()));
|
||||||
|
romFsMasterHashTf.setText(byteArrToHexString(ncaFsHeader.getSuperBlockIVFC().getMasterHash()));
|
||||||
|
romFsReservedTailLbl.setText(byteArrToHexString(ncaFsHeader.getSuperBlockIVFC().getReservedTail()));
|
||||||
|
|
||||||
|
pfs0TitlePanel.setDisable(true);
|
||||||
|
}
|
||||||
|
else if ((ncaFsHeader.getFsType() == 0x1) && (ncaFsHeader.getHashType() == 0x2)){
|
||||||
|
pfs0SHA256hashTf.setText(byteArrToHexString(ncaFsHeader.getSuperBlockPFS0().getSHA256hash()));
|
||||||
|
pfs0blockSizeLbl.setText(Integer.toString(ncaFsHeader.getSuperBlockPFS0().getBlockSize()));
|
||||||
|
pfs0LayerCountLbl.setText(Integer.toString(ncaFsHeader.getSuperBlockPFS0().getLayerCount()));
|
||||||
|
pfs0hashTableOffsetLbl.setText(Long.toString(ncaFsHeader.getSuperBlockPFS0().getHashTableOffset()));
|
||||||
|
pfs0hashTableSizeLbl.setText(Long.toString(ncaFsHeader.getSuperBlockPFS0().getHashTableSize()));
|
||||||
|
pfs0relativeToSectionStartOffsetLbl.setText(Long.toString(ncaFsHeader.getSuperBlockPFS0().getPfs0offset()));
|
||||||
|
pfs0sizePfs0Lbl.setText(Long.toString(ncaFsHeader.getSuperBlockPFS0().getPfs0size()));
|
||||||
|
pfs0zeroesTf.setText(byteArrToHexString(ncaFsHeader.getSuperBlockPFS0().getZeroes()));
|
||||||
|
romFsTitlePanel.setDisable(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pfs0TitlePanel.setDisable(true);
|
||||||
|
romFsTitlePanel.setDisable(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
indirectOffsetLbl.setText(Long.toString(ncaFsHeader.getPatchInfoOffsetSection1()));
|
||||||
|
indirectSizeLbl.setText(Long.toString(ncaFsHeader.getPatchInfoSizeSection1()));
|
||||||
|
indirectInfoMagicLbl.setText(ncaFsHeader.getPatchInfoMagicSection1());
|
||||||
|
indirectInfoVersionLbl.setText(Long.toString(ncaFsHeader.getPatchInfoSizeSection1()));
|
||||||
|
indirectInfoEntryCountLbl.setText(Integer.toString(ncaFsHeader.getEntryCountSection1()));
|
||||||
|
indirectInfoUnknownLbl.setText(byteArrToHexString(ncaFsHeader.getPatchInfoUnknownSection1()));
|
||||||
|
aesCtrExOffsetLbl.setText(Long.toString(ncaFsHeader.getPatchInfoOffsetSection2()));
|
||||||
|
aesCtrExSizeLbl.setText(Long.toString(ncaFsHeader.getPatchInfoSizeSection2()));
|
||||||
|
aesCtrExMagicLbl.setText(ncaFsHeader.getPatchInfoMagicSection2());
|
||||||
|
aesCtrExVersionLbl.setText(Integer.toString(ncaFsHeader.getPatchInfoVersionSection2()));
|
||||||
|
aesCtrExEntryCountLbl.setText(Integer.toString(ncaFsHeader.getEntryCountSection2()));
|
||||||
|
aesCtrExUnknownLbl.setText(byteArrToHexString(ncaFsHeader.getPatchInfoUnknownSection2()));
|
||||||
|
sectionCTRLbl.setText(byteArrToHexString(ncaFsHeader.getSectionCTR()));
|
||||||
|
generationLbl.setText(byteArrToHexString(ncaFsHeader.getGeneration()));
|
||||||
|
|
||||||
|
SparseInfo sparseInfo = ncaFsHeader.getSparseInfo();
|
||||||
|
sparseInfoTableOffsetLbl.setText(Long.toString(sparseInfo.getOffset()));
|
||||||
|
sparseInfoTableSizeLbl.setText(Long.toString(sparseInfo.getSize()));
|
||||||
|
sparseInfoMagicLbl.setText(sparseInfo.getBktrMagic());
|
||||||
|
sparseInfoVersionLbl.setText(Long.toString(sparseInfo.getBktrVersion()));
|
||||||
|
sparseInfoEntryCountLbl.setText(Integer.toString(sparseInfo.getBktrEntryCount()));
|
||||||
|
sparseInfoUnknownLbl.setText(byteArrToHexString(sparseInfo.getBktrUnknown()));
|
||||||
|
sparseInfoPhysicalOffsetLbl.setText(Long.toString(sparseInfo.getPhysicalOffset()));
|
||||||
|
sparseInfoGenerationLbl.setText(byteArrToHexString(sparseInfo.getGeneration()));
|
||||||
|
sparseInfoReseredLbl.setText(byteArrToHexString(sparseInfo.getUnknown()));
|
||||||
|
|
||||||
|
CompressionInfo compressionInfo = ncaFsHeader.getCompressionInfo();
|
||||||
|
compressionInfoTableOffsetLbl.setText(Long.toString(compressionInfo.getOffset()));
|
||||||
|
compressionInfoTableSizeLbl.setText(Long.toString(compressionInfo.getSize()));
|
||||||
|
compressionMagicLbl.setText(compressionInfo.getBktrMagic());
|
||||||
|
compressionInfoVersionLbl.setText(Long.toString(compressionInfo.getBktrVersion()));
|
||||||
|
compressionInfoEntryCountLbl.setText(Integer.toString(compressionInfo.getBktrEntryCount()));
|
||||||
|
compressionInfoUnknownLbl.setText(byteArrToHexString(compressionInfo.getBktrUnknown()));
|
||||||
|
compressionInfoReservedLbl.setText(byteArrToHexString(compressionInfo.getUnknown()));
|
||||||
|
|
||||||
|
MetaDataHashDataInfo metaDataHashDataInfo = ncaFsHeader.getMetaDataHashDataInfo();
|
||||||
|
metaDataHashDataTableOffsetLbl.setText(Long.toString(metaDataHashDataInfo.getOffset()));
|
||||||
|
metaDataHashDataTableSizeLbl.setText(Long.toString(metaDataHashDataInfo.getSize()));
|
||||||
|
metaDataHashDataTableHashLbl.setText(byteArrToHexString(metaDataHashDataInfo.getTableHash()));
|
||||||
|
|
||||||
|
unknwnEndPaddingTF.setText(byteArrToHexString(ncaFsHeader.getUnknownEndPadding()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getCuteDecHexRepresentation(long value){
|
||||||
|
return String.format("%d (0x%02x)", value, value);
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,7 +28,7 @@ import javafx.scene.layout.VBox;
|
||||||
import konogonka.AppPreferences;
|
import konogonka.AppPreferences;
|
||||||
import konogonka.Controllers.NSP.NSPController;
|
import konogonka.Controllers.NSP.NSPController;
|
||||||
import konogonka.Controllers.RFS.RomFsController;
|
import konogonka.Controllers.RFS.RomFsController;
|
||||||
import libKonogonka.LoperConverter;
|
import libKonogonka.Converter;
|
||||||
import konogonka.MediatorControl;
|
import konogonka.MediatorControl;
|
||||||
import libKonogonka.Tools.NCA.NCAContent;
|
import libKonogonka.Tools.NCA.NCAContent;
|
||||||
import konogonka.Workers.DumbNCA3ContentExtractor;
|
import konogonka.Workers.DumbNCA3ContentExtractor;
|
||||||
|
@ -89,7 +89,7 @@ public class NCASectionContentController implements Initializable {
|
||||||
for (int i = 0; i < sha256hashList.size(); i++){
|
for (int i = 0; i < sha256hashList.size(); i++){
|
||||||
Label numberLblTmp = new Label(String.format("%10d", i));
|
Label numberLblTmp = new Label(String.format("%10d", i));
|
||||||
numberLblTmp.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
|
numberLblTmp.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
|
||||||
Label sha256LblTmp = new Label(LoperConverter.byteArrToHexString(sha256hashList.get(i)));
|
Label sha256LblTmp = new Label(Converter.byteArrToHexString(sha256hashList.get(i)));
|
||||||
sha256LblTmp.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
|
sha256LblTmp.setPadding(new Insets(5.0, 5.0, 5.0, 5.0));
|
||||||
|
|
||||||
sha256pane.getChildren().add(new HBox(numberLblTmp, sha256LblTmp));
|
sha256pane.getChildren().add(new HBox(numberLblTmp, sha256LblTmp));
|
||||||
|
|
|
@ -1,284 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2019-2022 Dmitry Isaenko
|
|
||||||
|
|
||||||
This file is part of Konogonka.
|
|
||||||
|
|
||||||
Konogonka is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Konogonka is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Konogonka. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package konogonka.Controllers.NCA;
|
|
||||||
|
|
||||||
import javafx.fxml.FXML;
|
|
||||||
import javafx.scene.control.Label;
|
|
||||||
import javafx.scene.control.TextField;
|
|
||||||
import javafx.scene.control.TitledPane;
|
|
||||||
import libKonogonka.Tools.NCA.NCASectionTableBlock.NCASectionBlock;
|
|
||||||
|
|
||||||
import static libKonogonka.LoperConverter.byteArrToHexString;
|
|
||||||
|
|
||||||
public class NCASectionHeaderBlockController {
|
|
||||||
@FXML
|
|
||||||
private Label
|
|
||||||
versionLbl,
|
|
||||||
fsTypeLbl,
|
|
||||||
hashTypeLbl,
|
|
||||||
cryptoTypeLbl,
|
|
||||||
paddingLbl;
|
|
||||||
@FXML
|
|
||||||
private TextField
|
|
||||||
BKTRHeaderTf;
|
|
||||||
@FXML
|
|
||||||
private TitledPane
|
|
||||||
romFsTitlePanel,
|
|
||||||
pfs0TitlePanel;
|
|
||||||
// PFS0Provider
|
|
||||||
@FXML
|
|
||||||
private Label
|
|
||||||
pfs0blockSizeLbl,
|
|
||||||
pfs0unknownNumberTwoLbl,
|
|
||||||
pfs0hashTableOffsetLbl,
|
|
||||||
pfs0hashTableSizeLbl,
|
|
||||||
pfs0relativeToSectionStartOffsetLbl,
|
|
||||||
pfs0sizePfs0Lbl;
|
|
||||||
@FXML
|
|
||||||
private TextField
|
|
||||||
pfs0SHA256hashTf,
|
|
||||||
pfs0zeroesTf;
|
|
||||||
// RomFS (IVFC)
|
|
||||||
@FXML
|
|
||||||
private Label
|
|
||||||
romFsMagicLbl,
|
|
||||||
romFsMagicNumberLbl,
|
|
||||||
romFsMasterHashSizeLbl,
|
|
||||||
romFsTotalNumberOfLevelsLbl,
|
|
||||||
romFsLvl1OffsetLbl,
|
|
||||||
romFsLvl1SizeLbl,
|
|
||||||
romFsLvl1SBlockSizeLbl,
|
|
||||||
romFsReserved1Lbl,
|
|
||||||
|
|
||||||
romFsLvl2OffsetLbl,
|
|
||||||
romFsLvl2SizeLbl,
|
|
||||||
romFsLvl2SBlockSizeLbl,
|
|
||||||
romFsReserved2Lbl,
|
|
||||||
|
|
||||||
romFsLvl3OffsetLbl,
|
|
||||||
romFsLvl3SizeLbl,
|
|
||||||
romFsLvl3SBlockSizeLbl,
|
|
||||||
romFsReserved3Lbl,
|
|
||||||
|
|
||||||
romFsLvl4OffsetLbl,
|
|
||||||
romFsLvl4SizeLbl,
|
|
||||||
romFsLvl4SBlockSizeLbl,
|
|
||||||
romFsReserved4Lbl,
|
|
||||||
|
|
||||||
romFsLvl5OffsetLbl,
|
|
||||||
romFsLvl5SizeLbl,
|
|
||||||
romFsLvl5SBlockSizeLbl,
|
|
||||||
romFsReserved5Lbl,
|
|
||||||
|
|
||||||
romFsLvl6OffsetLbl,
|
|
||||||
romFsLvl6SizeLbl,
|
|
||||||
romFsLvl6SBlockSizeLbl,
|
|
||||||
romFsReserved6Lbl;
|
|
||||||
@FXML
|
|
||||||
private TextField
|
|
||||||
romFsUnknownTf,
|
|
||||||
romFsHashTf,
|
|
||||||
unknwnEndPaddingTF;
|
|
||||||
|
|
||||||
@FXML
|
|
||||||
private Label
|
|
||||||
BKTRoffsetSection1Lbl,
|
|
||||||
BKTRsizeSection1Lbl,
|
|
||||||
BKTRmagicSection1Lbl,
|
|
||||||
BKTRu32Section1Lbl,
|
|
||||||
BKTRs32Section1Lbl,
|
|
||||||
BKTRunknownSection1Lbl,
|
|
||||||
BKTRoffsetSection2Lbl,
|
|
||||||
BKTRsizeSection2Lbl,
|
|
||||||
BKTRmagicSection2Lbl,
|
|
||||||
BKTRu32Section2Lbl,
|
|
||||||
BKTRs32Section2Lbl,
|
|
||||||
BKTRunknownSection2Lbl,
|
|
||||||
sectionCTRLbl;
|
|
||||||
|
|
||||||
public void resetTab() {
|
|
||||||
versionLbl.setText("-");
|
|
||||||
fsTypeLbl.setText("-");
|
|
||||||
hashTypeLbl.setText("-");
|
|
||||||
cryptoTypeLbl.setText("-");
|
|
||||||
paddingLbl.setText("-");
|
|
||||||
|
|
||||||
romFsTitlePanel.setDisable(false);
|
|
||||||
romFsTitlePanel.setExpanded(false);
|
|
||||||
pfs0TitlePanel.setDisable(false);
|
|
||||||
pfs0TitlePanel.setExpanded(false);
|
|
||||||
//RomFS
|
|
||||||
romFsMagicLbl.setText("-");
|
|
||||||
romFsMagicNumberLbl.setText("-");
|
|
||||||
romFsMasterHashSizeLbl.setText("-");
|
|
||||||
romFsTotalNumberOfLevelsLbl.setText("-");
|
|
||||||
romFsLvl1OffsetLbl.setText("-");
|
|
||||||
romFsLvl1SizeLbl.setText("-");
|
|
||||||
romFsLvl1SBlockSizeLbl.setText("-");
|
|
||||||
romFsReserved1Lbl.setText("-");
|
|
||||||
|
|
||||||
romFsLvl2OffsetLbl.setText("-");
|
|
||||||
romFsLvl2SizeLbl.setText("-");
|
|
||||||
romFsLvl2SBlockSizeLbl.setText("-");
|
|
||||||
romFsReserved2Lbl.setText("-");
|
|
||||||
|
|
||||||
romFsLvl3OffsetLbl.setText("-");
|
|
||||||
romFsLvl3SizeLbl.setText("-");
|
|
||||||
romFsLvl3SBlockSizeLbl.setText("-");
|
|
||||||
romFsReserved3Lbl.setText("-");
|
|
||||||
|
|
||||||
romFsLvl4OffsetLbl.setText("-");
|
|
||||||
romFsLvl4SizeLbl.setText("-");
|
|
||||||
romFsLvl4SBlockSizeLbl.setText("-");
|
|
||||||
romFsReserved4Lbl.setText("-");
|
|
||||||
|
|
||||||
romFsLvl5OffsetLbl.setText("-");
|
|
||||||
romFsLvl5SizeLbl.setText("-");
|
|
||||||
romFsLvl5SBlockSizeLbl.setText("-");
|
|
||||||
romFsReserved5Lbl.setText("-");
|
|
||||||
|
|
||||||
romFsLvl6OffsetLbl.setText("-");
|
|
||||||
romFsLvl6SizeLbl.setText("-");
|
|
||||||
romFsLvl6SBlockSizeLbl.setText("-");
|
|
||||||
romFsReserved6Lbl.setText("-");
|
|
||||||
|
|
||||||
romFsUnknownTf.setText("-");
|
|
||||||
romFsHashTf.setText("-");
|
|
||||||
|
|
||||||
// PFS0Provider
|
|
||||||
pfs0SHA256hashTf.setText("-");
|
|
||||||
pfs0blockSizeLbl.setText("-");
|
|
||||||
pfs0unknownNumberTwoLbl.setText("-");
|
|
||||||
pfs0hashTableOffsetLbl.setText("-");
|
|
||||||
pfs0hashTableSizeLbl.setText("-");
|
|
||||||
pfs0relativeToSectionStartOffsetLbl.setText("-");
|
|
||||||
pfs0sizePfs0Lbl.setText("-");
|
|
||||||
pfs0zeroesTf.setText("-");
|
|
||||||
|
|
||||||
BKTRHeaderTf.setText("-");
|
|
||||||
BKTRoffsetSection1Lbl.setText("-");
|
|
||||||
BKTRsizeSection1Lbl.setText("-");
|
|
||||||
BKTRmagicSection1Lbl.setText("-");
|
|
||||||
BKTRu32Section1Lbl.setText("-");
|
|
||||||
BKTRs32Section1Lbl.setText("-");
|
|
||||||
BKTRunknownSection1Lbl.setText("-");
|
|
||||||
BKTRoffsetSection2Lbl.setText("-");
|
|
||||||
BKTRsizeSection2Lbl.setText("-");
|
|
||||||
BKTRmagicSection2Lbl.setText("-");
|
|
||||||
BKTRu32Section2Lbl.setText("-");
|
|
||||||
BKTRs32Section2Lbl.setText("-");
|
|
||||||
BKTRunknownSection2Lbl.setText("-");
|
|
||||||
sectionCTRLbl.setText("-");
|
|
||||||
unknwnEndPaddingTF.setText("-");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void populateTab(NCASectionBlock ncaSectionBlock){
|
|
||||||
versionLbl.setText(byteArrToHexString(ncaSectionBlock.getVersion()));
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append(String.format("0x%02x ", ncaSectionBlock.getFsType()));
|
|
||||||
if (ncaSectionBlock.getFsType() == 0)
|
|
||||||
sb.append("(RomFS)");
|
|
||||||
else if (ncaSectionBlock.getFsType() == 1)
|
|
||||||
sb.append("(PFS0)");
|
|
||||||
fsTypeLbl.setText(sb.toString());
|
|
||||||
sb = new StringBuilder();
|
|
||||||
sb.append(String.format("0x%02x ", ncaSectionBlock.getHashType()));
|
|
||||||
if (ncaSectionBlock.getHashType() == 0x3)
|
|
||||||
sb.append("(RomFS)");
|
|
||||||
else if (ncaSectionBlock.getHashType() == 0x2)
|
|
||||||
sb.append("(PFS0)");
|
|
||||||
hashTypeLbl.setText(sb.toString());
|
|
||||||
cryptoTypeLbl.setText(String.format("%02x ", ncaSectionBlock.getCryptoType()));
|
|
||||||
paddingLbl.setText(byteArrToHexString(ncaSectionBlock.getPadding()));
|
|
||||||
if ((ncaSectionBlock.getFsType() == 0) && (ncaSectionBlock.getHashType() == 0x3)){
|
|
||||||
romFsMagicLbl.setText(ncaSectionBlock.getSuperBlockIVFC().getMagic());
|
|
||||||
romFsMagicNumberLbl.setText(ncaSectionBlock.getSuperBlockIVFC().getMagicNumber()
|
|
||||||
+(ncaSectionBlock.getSuperBlockIVFC().getMagicNumber() == 0x20000? " (OK)":" (wrong magic number)"));
|
|
||||||
romFsMasterHashSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getMasterHashSize()));
|
|
||||||
romFsTotalNumberOfLevelsLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getTotalNumberOfLevels()));
|
|
||||||
romFsLvl1OffsetLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl1Offset()));
|
|
||||||
romFsLvl1SizeLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl1Size()));
|
|
||||||
romFsLvl1SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl1SBlockSize()));
|
|
||||||
romFsReserved1Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved1()));
|
|
||||||
|
|
||||||
romFsLvl2OffsetLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl2Offset()));
|
|
||||||
romFsLvl2SizeLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl2Size()));
|
|
||||||
romFsLvl2SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl2SBlockSize()));
|
|
||||||
romFsReserved2Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved2()));
|
|
||||||
|
|
||||||
romFsLvl3OffsetLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl3Offset()));
|
|
||||||
romFsLvl3SizeLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl3Size()));
|
|
||||||
romFsLvl3SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl3SBlockSize()));
|
|
||||||
romFsReserved3Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved3()));
|
|
||||||
|
|
||||||
romFsLvl4OffsetLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl4Offset()));
|
|
||||||
romFsLvl4SizeLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl4Size()));
|
|
||||||
romFsLvl4SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl4SBlockSize()));
|
|
||||||
romFsReserved4Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved4()));
|
|
||||||
|
|
||||||
romFsLvl5OffsetLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl5Offset()));
|
|
||||||
romFsLvl5SizeLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl5Size()));
|
|
||||||
romFsLvl5SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl5SBlockSize()));
|
|
||||||
romFsReserved5Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved5()));
|
|
||||||
|
|
||||||
romFsLvl6OffsetLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl6Offset()));
|
|
||||||
romFsLvl6SizeLbl.setText(getCuteDecHexRepresentation(ncaSectionBlock.getSuperBlockIVFC().getLvl6Size()));
|
|
||||||
romFsLvl6SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl6SBlockSize()));
|
|
||||||
romFsReserved6Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved6()));
|
|
||||||
|
|
||||||
romFsUnknownTf.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getUnknown()));
|
|
||||||
romFsHashTf.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getHash()));
|
|
||||||
pfs0TitlePanel.setDisable(true);
|
|
||||||
}
|
|
||||||
else if ((ncaSectionBlock.getFsType() == 0x1) && (ncaSectionBlock.getHashType() == 0x2)){
|
|
||||||
pfs0SHA256hashTf.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockPFS0().getSHA256hash()));
|
|
||||||
pfs0blockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockPFS0().getBlockSize()));
|
|
||||||
pfs0unknownNumberTwoLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockPFS0().getUnknownNumberTwo()));
|
|
||||||
pfs0hashTableOffsetLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockPFS0().getHashTableOffset()));
|
|
||||||
pfs0hashTableSizeLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockPFS0().getHashTableSize()));
|
|
||||||
pfs0relativeToSectionStartOffsetLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockPFS0().getPfs0offset()));
|
|
||||||
pfs0sizePfs0Lbl.setText(Long.toString(ncaSectionBlock.getSuperBlockPFS0().getPfs0size()));
|
|
||||||
pfs0zeroesTf.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockPFS0().getZeroes()));
|
|
||||||
romFsTitlePanel.setDisable(true);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
pfs0TitlePanel.setDisable(true);
|
|
||||||
romFsTitlePanel.setDisable(true);
|
|
||||||
}
|
|
||||||
BKTRHeaderTf.setText(byteArrToHexString(ncaSectionBlock.getBKTRfullHeader()));
|
|
||||||
BKTRoffsetSection1Lbl.setText(Long.toString(ncaSectionBlock.getBKTRoffsetSection1()));
|
|
||||||
BKTRsizeSection1Lbl.setText(Long.toString(ncaSectionBlock.getBKTRsizeSection1()));
|
|
||||||
BKTRmagicSection1Lbl.setText(ncaSectionBlock.getBKTRmagicSection1());
|
|
||||||
BKTRu32Section1Lbl.setText(Integer.toString(ncaSectionBlock.getBKTRu32Section1()));
|
|
||||||
BKTRs32Section1Lbl.setText(Integer.toString(ncaSectionBlock.getBKTRs32Section1()));
|
|
||||||
BKTRunknownSection1Lbl.setText(byteArrToHexString(ncaSectionBlock.getBKTRunknownSection1()));
|
|
||||||
BKTRoffsetSection2Lbl.setText(Long.toString(ncaSectionBlock.getBKTRoffsetSection2()));
|
|
||||||
BKTRsizeSection2Lbl.setText(Long.toString(ncaSectionBlock.getBKTRsizeSection2()));
|
|
||||||
BKTRmagicSection2Lbl.setText(ncaSectionBlock.getBKTRmagicSection2());
|
|
||||||
BKTRu32Section2Lbl.setText(Integer.toString(ncaSectionBlock.getBKTRu32Section2()));
|
|
||||||
BKTRs32Section2Lbl.setText(Integer.toString(ncaSectionBlock.getBKTRs32Section2()));
|
|
||||||
BKTRunknownSection2Lbl.setText(byteArrToHexString(ncaSectionBlock.getBKTRunknownSection2()));
|
|
||||||
sectionCTRLbl.setText(byteArrToHexString(ncaSectionBlock.getSectionCTR()));
|
|
||||||
unknwnEndPaddingTF.setText(byteArrToHexString(ncaSectionBlock.getUnknownEndPadding()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getCuteDecHexRepresentation(long value){
|
|
||||||
return String.format("%d (0x%02x)", value, value);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -22,7 +22,7 @@ import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import libKonogonka.Tools.NCA.NCAHeaderTableEntry;
|
import libKonogonka.Tools.NCA.NCAHeaderTableEntry;
|
||||||
|
|
||||||
import static libKonogonka.LoperConverter.byteArrToHexString;
|
import static libKonogonka.Converter.byteArrToHexString;
|
||||||
|
|
||||||
public class NCATableController {
|
public class NCATableController {
|
||||||
@FXML
|
@FXML
|
||||||
|
|
|
@ -27,8 +27,8 @@ import libKonogonka.Tools.NPDM.ACID.FSAccessControlProvider;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import static libKonogonka.LoperConverter.byteArrToHexString;
|
import static libKonogonka.Converter.byteArrToHexString;
|
||||||
import static libKonogonka.LoperConverter.longToOctString;
|
import static libKonogonka.Converter.longToOctString;
|
||||||
|
|
||||||
public class FSAccessControlController implements Initializable {
|
public class FSAccessControlController implements Initializable {
|
||||||
@FXML
|
@FXML
|
||||||
|
|
|
@ -27,8 +27,8 @@ import libKonogonka.Tools.NPDM.ACI0.FSAccessHeaderProvider;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import static libKonogonka.LoperConverter.byteArrToHexString;
|
import static libKonogonka.Converter.byteArrToHexString;
|
||||||
import static libKonogonka.LoperConverter.longToOctString;
|
import static libKonogonka.Converter.longToOctString;
|
||||||
|
|
||||||
public class FSAccessHeaderController implements Initializable {
|
public class FSAccessHeaderController implements Initializable {
|
||||||
@FXML
|
@FXML
|
||||||
|
|
|
@ -33,7 +33,7 @@ import java.io.File;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import static libKonogonka.LoperConverter.byteArrToHexString;
|
import static libKonogonka.Converter.byteArrToHexString;
|
||||||
|
|
||||||
public class NPDMController implements ITabController {
|
public class NPDMController implements ITabController {
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ import java.net.URL;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import static libKonogonka.LoperConverter.byteArrToHexString;
|
import static libKonogonka.Converter.byteArrToHexString;
|
||||||
|
|
||||||
public class NSPController implements ITabController {
|
public class NSPController implements ITabController {
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,7 @@ public class RomFsController implements ITabController {
|
||||||
public void analyze(File file) {
|
public void analyze(File file) {
|
||||||
long lv6offset = -1;
|
long lv6offset = -1;
|
||||||
try{
|
try{
|
||||||
System.out.println(file.getName().replaceAll("(^.*lv6\\s)|(]\\.bin)", ""));
|
System.out.println("lv6offset expected: "+file.getName().replaceAll("(^.*lv6\\s)|(]\\.bin)", ""));
|
||||||
lv6offset = Long.parseLong(file.getName().replaceAll("(^.*lv6\\s)|(]\\.bin)", ""));
|
lv6offset = Long.parseLong(file.getName().replaceAll("(^.*lv6\\s)|(]\\.bin)", ""));
|
||||||
}
|
}
|
||||||
catch (Exception e){
|
catch (Exception e){
|
||||||
|
@ -161,7 +161,6 @@ public class RomFsController implements ITabController {
|
||||||
this.setData(provider);
|
this.setData(provider);
|
||||||
});
|
});
|
||||||
Thread workThread = new Thread(analyzer);
|
Thread workThread = new Thread(analyzer);
|
||||||
workThread.setDaemon(true);
|
|
||||||
workThread.start();
|
workThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ import java.io.File;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import static libKonogonka.LoperConverter.byteArrToHexString;
|
import static libKonogonka.Converter.byteArrToHexString;
|
||||||
|
|
||||||
public class TIKController implements ITabController {
|
public class TIKController implements ITabController {
|
||||||
@FXML
|
@FXML
|
||||||
|
|
|
@ -32,7 +32,7 @@ import java.io.File;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import static libKonogonka.LoperConverter.byteArrToHexString;
|
import static libKonogonka.Converter.byteArrToHexString;
|
||||||
|
|
||||||
public class XCIController implements ITabController {
|
public class XCIController implements ITabController {
|
||||||
|
|
||||||
|
|
2658
src/main/resources/FXML/NCA/NCAFsHeaderBlock.fxml
Normal file
2658
src/main/resources/FXML/NCA/NCAFsHeaderBlock.fxml
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -771,22 +771,22 @@
|
||||||
<children>
|
<children>
|
||||||
<TitledPane expanded="false" text="Section 0">
|
<TitledPane expanded="false" text="Section 0">
|
||||||
<content>
|
<content>
|
||||||
<fx:include fx:id="NCASectionHeaderFirst" source="NCASectionHeaderBlock.fxml" />
|
<fx:include fx:id="NCASectionHeaderFirst" source="NCAFsHeaderBlock.fxml" />
|
||||||
</content>
|
</content>
|
||||||
</TitledPane>
|
</TitledPane>
|
||||||
<TitledPane expanded="false" text="Section 1">
|
<TitledPane expanded="false" text="Section 1">
|
||||||
<content>
|
<content>
|
||||||
<fx:include fx:id="NCASectionHeaderSecond" source="NCASectionHeaderBlock.fxml" />
|
<fx:include fx:id="NCASectionHeaderSecond" source="NCAFsHeaderBlock.fxml" />
|
||||||
</content>
|
</content>
|
||||||
</TitledPane>
|
</TitledPane>
|
||||||
<TitledPane expanded="false" text="Section 2">
|
<TitledPane expanded="false" text="Section 2">
|
||||||
<content>
|
<content>
|
||||||
<fx:include fx:id="NCASectionHeaderThird" source="NCASectionHeaderBlock.fxml" />
|
<fx:include fx:id="NCASectionHeaderThird" source="NCAFsHeaderBlock.fxml" />
|
||||||
</content>
|
</content>
|
||||||
</TitledPane>
|
</TitledPane>
|
||||||
<TitledPane expanded="false" text="Section 3">
|
<TitledPane expanded="false" text="Section 3">
|
||||||
<content>
|
<content>
|
||||||
<fx:include fx:id="NCASectionHeaderFourth" source="NCASectionHeaderBlock.fxml" />
|
<fx:include fx:id="NCASectionHeaderFourth" source="NCAFsHeaderBlock.fxml" />
|
||||||
</content>
|
</content>
|
||||||
</TitledPane>
|
</TitledPane>
|
||||||
</children>
|
</children>
|
||||||
|
|
Loading…
Reference in a new issue