package konogonka.Controllers.NCA; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.control.TitledPane; import konogonka.Tools.NCA.NCASectionTableBlock.NCASectionBlock; import static konogonka.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; @FXML private Label BKTRoffsetSection1Lbl, BKTRsizeSection1Lbl, BKTRmagicSection1Lbl, BKTRu32Section1Lbl, BKTRs32Section1Lbl, BKTRunknownSection1Lbl, BKTRoffsetSection2Lbl, BKTRsizeSection2Lbl, BKTRmagicSection2Lbl, BKTRu32Section2Lbl, BKTRs32Section2Lbl, BKTRunknownSection2Lbl, BKTRunknown1Lbl, BKTRunknown2Lbl; 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("-"); BKTRunknown1Lbl.setText("-"); BKTRunknown2Lbl.setText("-"); } public void populateTab(NCASectionBlock ncaSectionBlock){ versionLbl.setText(byteArrToHexString(ncaSectionBlock.getVersion())); StringBuilder sb = new StringBuilder(); sb.append(String.format("%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("%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(String.format("%02x ", 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(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl1Offset())); romFsLvl1SizeLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl1Size())); romFsLvl1SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl1SBlockSize())); romFsReserved1Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved1())); romFsLvl2OffsetLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl2Offset())); romFsLvl2SizeLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl2Size())); romFsLvl2SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl2SBlockSize())); romFsReserved2Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved2())); romFsLvl3OffsetLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl3Offset())); romFsLvl3SizeLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl3Size())); romFsLvl3SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl3SBlockSize())); romFsReserved3Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved3())); romFsLvl4OffsetLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl4Offset())); romFsLvl4SizeLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl4Size())); romFsLvl4SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl4SBlockSize())); romFsReserved4Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved4())); romFsLvl5OffsetLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl5Offset())); romFsLvl5SizeLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl5Size())); romFsLvl5SBlockSizeLbl.setText(Integer.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl5SBlockSize())); romFsReserved5Lbl.setText(byteArrToHexString(ncaSectionBlock.getSuperBlockIVFC().getReserved5())); romFsLvl6OffsetLbl.setText(Long.toString(ncaSectionBlock.getSuperBlockIVFC().getLvl6Offset())); romFsLvl6SizeLbl.setText(Long.toString(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())); BKTRunknown1Lbl.setText(byteArrToHexString(ncaSectionBlock.getBKTRunknown1())); BKTRunknown2Lbl.setText(byteArrToHexString(ncaSectionBlock.getBKTRunknown2())); } }