FSaccessControl for ACID added into UI

This commit is contained in:
Dmitry Isaenko 2019-08-25 20:42:49 +03:00
parent 94cab77aa9
commit c3c89f2659
10 changed files with 2006 additions and 447 deletions

View file

@ -23,7 +23,14 @@ JRE/JDK 8u60 or higher.
### Checklist
* [X] NSP (PFS0)
* [X] XCI (+HFS0)
* [X] TIK
* [X] XML
* [ ] LogPrinter to singleton implementation
* [ ] NPDM support
* [ ] CNMT support
* [ ] NSO support
* [ ] NSO support
* [ ] RomFS deep-dive
* [ ] 'Save to folder' option

View file

@ -0,0 +1,188 @@
package konogonka.Controllers.NPDM;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import konogonka.Tools.NPDM.FSAccessControlProvider;
import java.net.URL;
import java.util.ResourceBundle;
import static konogonka.LoperConverter.byteArrToHexString;
public class FSAccessControlController implements Initializable {
@FXML
private Label ACID_FSAcccessControlVersionLbl,
ACID_FSAcccessControlPaddingLbl,
ACID_FSAcccessControlBitbaskLbl;
@FXML
private TextField ACID_FSAcccessControlReservedTf;
@FXML
private Label mask0,
mask1,
mask2,
mask3,
mask4,
mask5,
mask6,
mask7,
mask8,
mask9,
mask10,
mask11,
mask12,
mask13,
mask14,
mask15,
mask16,
mask17,
mask18,
mask19,
mask20,
mask21,
mask22,
mask23,
mask24,
mask25,
mask26,
mask27,
mask28,
mask29,
mask30,
mask31,
mask32,
mask33,
mask34,
mask35,
mask36,
mask37,
mask38,
mask39,
mask40,
mask41,
mask42,
mask43,
mask44,
mask45,
mask46,
mask47,
mask48,
mask49,
mask50,
mask51,
mask52,
mask53,
mask54,
mask55,
mask56,
mask57,
mask58,
mask59,
mask60,
mask61,
mask62,
mask63;
private Label[] masksArr;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
masksArr = new Label[64];
masksArr[0] = mask0;
masksArr[1] = mask1;
masksArr[2] = mask2;
masksArr[3] = mask3;
masksArr[4] = mask4;
masksArr[5] = mask5;
masksArr[6] = mask6;
masksArr[7] = mask7;
masksArr[8] = mask8;
masksArr[9] = mask9;
masksArr[10] = mask10;
masksArr[11] = mask11;
masksArr[12] = mask12;
masksArr[13] = mask13;
masksArr[14] = mask14;
masksArr[15] = mask15;
masksArr[16] = mask16;
masksArr[17] = mask17;
masksArr[18] = mask18;
masksArr[19] = mask19;
masksArr[20] = mask20;
masksArr[21] = mask21;
masksArr[22] = mask22;
masksArr[23] = mask23;
masksArr[24] = mask24;
masksArr[25] = mask25;
masksArr[26] = mask26;
masksArr[27] = mask27;
masksArr[28] = mask28;
masksArr[29] = mask29;
masksArr[30] = mask30;
masksArr[31] = mask31;
masksArr[32] = mask32;
masksArr[33] = mask33;
masksArr[34] = mask34;
masksArr[35] = mask35;
masksArr[36] = mask36;
masksArr[37] = mask37;
masksArr[38] = mask38;
masksArr[39] = mask39;
masksArr[40] = mask40;
masksArr[41] = mask41;
masksArr[42] = mask42;
masksArr[43] = mask43;
masksArr[44] = mask44;
masksArr[45] = mask45;
masksArr[46] = mask46;
masksArr[47] = mask47;
masksArr[48] = mask48;
masksArr[49] = mask49;
masksArr[50] = mask50;
masksArr[51] = mask51;
masksArr[52] = mask52;
masksArr[53] = mask53;
masksArr[54] = mask54;
masksArr[55] = mask55;
masksArr[56] = mask56;
masksArr[57] = mask57;
masksArr[58] = mask58;
masksArr[59] = mask59;
masksArr[60] = mask60;
masksArr[61] = mask61;
masksArr[62] = mask62;
masksArr[63] = mask63;
}
public void resetTab() {
ACID_FSAcccessControlVersionLbl.setText("-");
ACID_FSAcccessControlPaddingLbl.setText("-");
ACID_FSAcccessControlBitbaskLbl.setText("-");
ACID_FSAcccessControlReservedTf.setText("-");
for (int i = 0; i < 64; i++)
masksArr[i].setText("-");
}
public void populateFields(FSAccessControlProvider provider){
ACID_FSAcccessControlVersionLbl.setText(String.format("0x%02x", provider.getVersion()));
ACID_FSAcccessControlPaddingLbl.setText(byteArrToHexString(provider.getPadding()));
ACID_FSAcccessControlBitbaskLbl.setText(byteArrToHexString(provider.getPermissionsBitmask()));
ACID_FSAcccessControlReservedTf.setText(byteArrToHexString(provider.getReserved()));
byte[] permissionsBitmask = provider.getPermissionsBitmask();
String mask =
String.format("%8s", Integer.toBinaryString(permissionsBitmask[7] & 0xFF)).replace(' ', '0')+
String.format("%8s", Integer.toBinaryString(permissionsBitmask[6] & 0xFF)).replace(' ', '0')+
String.format("%8s", Integer.toBinaryString(permissionsBitmask[5] & 0xFF)).replace(' ', '0')+
String.format("%8s", Integer.toBinaryString(permissionsBitmask[4] & 0xFF)).replace(' ', '0')+
String.format("%8s", Integer.toBinaryString(permissionsBitmask[3] & 0xFF)).replace(' ', '0')+
String.format("%8s", Integer.toBinaryString(permissionsBitmask[2] & 0xFF)).replace(' ', '0')+
String.format("%8s", Integer.toBinaryString(permissionsBitmask[1] & 0xFF)).replace(' ', '0')+
String.format("%8s", Integer.toBinaryString(permissionsBitmask[0] & 0xFF)).replace(' ', '0');
for (int i = 0; i < 64; i++)
masksArr[i].setText(mask.substring(i, i+1));
}
}

View file

@ -55,7 +55,8 @@ public class NPDMController implements ITabController {
aci0KernelAccessControlSizeLbl,
aci0Reserved3Lbl;
// ACID
@FXML TextField acidRsa2048signatureTf,
@FXML
TextField acidRsa2048signatureTf,
acidRsa2048publicKeyTf;
@FXML
private Label acidMagicNumLbl,
@ -74,6 +75,8 @@ public class NPDMController implements ITabController {
acidKernelAccessControlOffsetLbl,
acidKernelAccessControlSizeLbl,
acidReserved2Lbl;
@FXML
private FSAccessControlController FSAccessControlTableController;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) { }
@ -158,6 +161,8 @@ public class NPDMController implements ITabController {
acidKernelAccessControlOffsetLbl.setText("-");
acidKernelAccessControlSizeLbl.setText("-");
acidReserved2Lbl.setText("-");
FSAccessControlTableController.resetTab();
}
private void setData(NPDMProvider npdmProvider, File file) {
if (npdmProvider == null)
@ -217,5 +222,7 @@ public class NPDMController implements ITabController {
acidKernelAccessControlOffsetLbl.setText(Integer.toString(acid.getKernelAccessControlOffset()));
acidKernelAccessControlSizeLbl.setText(Integer.toString(acid.getKernelAccessControlSize()));
acidReserved2Lbl.setText(byteArrToHexString(acid.getReserved2()));
FSAccessControlTableController.populateFields(acid.getFSAccessControlProvider());
}
}

View file

@ -4,8 +4,9 @@ import java.io.IOException;
import java.io.PipedInputStream;
/**
* Create prototype of the provider that created and works with pipes only
* Any class of this type must be able to accept data from stream (and file as any other).
* */
public abstract class ASuperInFileProvider {
protected byte[] readFromStream(PipedInputStream pis, int size) throws IOException {
byte[] buffer = new byte[size];

View file

@ -2,7 +2,9 @@ package konogonka.Tools;
import java.io.File;
import java.io.PipedInputStream;
/**
* Any class of this type must provide streams
* */
public interface ISuperProvider {
PipedInputStream getProviderSubFilePipedInpStream(String subFileName) throws Exception;
PipedInputStream getProviderSubFilePipedInpStream(int subFileNumber) throws Exception;

View file

@ -18,7 +18,7 @@ public class ACI0Provider {
private int kernelAccessControlSize;
private byte[] reserved3;
public ACI0Provider(byte[] aci0bytes) throws Exception{
public ACI0Provider(byte[] aci0bytes) throws Exception {
if (aci0bytes.length < 0x40)
throw new Exception("ACI0 size is too short");
magicNum = new String(aci0bytes, 0, 0x4, StandardCharsets.UTF_8);

View file

@ -26,9 +26,12 @@ public class ACIDProvider {
private int kernelAccessControlSize;
private byte[] reserved2;
private FSAccessControlProvider fsAccessControlProvider;
public ACIDProvider(byte[] acidBytes) throws Exception{
if (acidBytes.length < 0x240)
throw new Exception("ACI0 size is too short");
throw new Exception("ACIDProvider -> ACI0 size is too short");
rsa2048signature = Arrays.copyOfRange(acidBytes, 0, 0x100);
rsa2048publicKey = Arrays.copyOfRange(acidBytes, 0x100, 0x200);
magicNum = new String(acidBytes, 0x200, 0x4, StandardCharsets.UTF_8);
@ -47,6 +50,9 @@ public class ACIDProvider {
kernelAccessControlOffset = getLEint(acidBytes, 0x230);
kernelAccessControlSize = getLEint(acidBytes, 0x234);
reserved2 = Arrays.copyOfRange(acidBytes, 0x238, 0x240);
if (fsAccessControlOffset > serviceAccessControlOffset || serviceAccessControlOffset > kernelAccessControlOffset )
throw new Exception("ACIDProvider -> blocks inside the ACID are not sorted in ascending order. Only ascending order supported.");
fsAccessControlProvider = new FSAccessControlProvider(Arrays.copyOfRange(acidBytes, fsAccessControlOffset, fsAccessControlOffset+fsAccessControlSize));
}
public byte[] getRsa2048signature() { return rsa2048signature; }
@ -67,4 +73,7 @@ public class ACIDProvider {
public int getKernelAccessControlOffset() { return kernelAccessControlOffset; }
public int getKernelAccessControlSize() { return kernelAccessControlSize; }
public byte[] getReserved2() { return reserved2; }
public FSAccessControlProvider getFSAccessControlProvider() { return fsAccessControlProvider; }
}

View file

@ -0,0 +1,26 @@
package konogonka.Tools.NPDM;
import java.util.Arrays;
/**
* For ACID Provider
* */
public class FSAccessControlProvider {
private byte version;
private byte[] padding;
private byte[] permissionsBitmask; // ??? Where each byte representing 255-long bit-bask of the thing it representing. Like 0x01 bit-mask for ApplicationInfo
private byte[] reserved;
public FSAccessControlProvider(byte[] bytes) {
version = bytes[0];
padding = Arrays.copyOfRange(bytes, 1, 0x4);
permissionsBitmask = Arrays.copyOfRange(bytes, 0x4, 0xC);
reserved = Arrays.copyOfRange(bytes, 0xC, 0x2C);
}
public byte getVersion() { return version; }
public byte[] getPadding() { return padding; }
public byte[] getPermissionsBitmask() { return permissionsBitmask; }
public byte[] getReserved() { return reserved; }
}

File diff suppressed because it is too large Load diff

View file

@ -439,447 +439,6 @@
</VBox>
</content>
</TitledPane>
<TitledPane text="ACID">
<content>
<VBox spacing="5.0">
<children>
<GridPane gridLinesVisible="true">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="430.0" minWidth="300.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="100.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<AnchorPane styleClass="customTitleGrid" GridPane.columnIndex="1">
<children>
<Label layoutX="38.0" layoutY="6.0" text="Size" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font name="System Bold" size="13.0" />
</font>
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</AnchorPane>
<AnchorPane styleClass="customTitleGrid" GridPane.columnIndex="2">
<children>
<Label layoutX="14.0" layoutY="7.0" text="Description" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font name="System Bold" size="13.0" />
</font>
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</AnchorPane>
<AnchorPane styleClass="customTitleGrid" GridPane.columnIndex="3">
<children>
<Label layoutY="6.0" text="Value" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font name="System Bold" size="13.0" />
</font>
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</AnchorPane>
<AnchorPane styleClass="customTitleGrid">
<children>
<Label layoutX="2.0" layoutY="7.0" text="Offset" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font name="System Bold" size="13.0" />
</font>
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</AnchorPane>
<Label text="0x0" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x100" GridPane.columnIndex="1" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="5">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0xE" GridPane.rowIndex="5">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0xD" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0xC" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x100" GridPane.columnIndex="1" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x100" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x20C" GridPane.rowIndex="6">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x1" GridPane.columnIndex="1" GridPane.rowIndex="6">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x20D" GridPane.rowIndex="7">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x1" GridPane.columnIndex="1" GridPane.rowIndex="7">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x20E" GridPane.rowIndex="8">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x1" GridPane.columnIndex="1" GridPane.rowIndex="8">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x20F" GridPane.rowIndex="9">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x1" GridPane.columnIndex="1" GridPane.rowIndex="9">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x210" GridPane.rowIndex="10">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="10">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x218" GridPane.rowIndex="11">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="11">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="RSA-2048 signature over the data starting at 0x100*" GridPane.columnIndex="2" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="RSA-2048 public key for the second NCA signature" GridPane.columnIndex="2" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Magicnum &quot;ACID&quot;" GridPane.columnIndex="2" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x220" GridPane.rowIndex="12">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="12">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x224" GridPane.rowIndex="13">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="13">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x228" GridPane.rowIndex="14">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="16">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="15">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x22C" GridPane.rowIndex="15">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x230" GridPane.rowIndex="16">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Flag 1 (UnqualifiedApproval)" GridPane.columnIndex="2" GridPane.rowIndex="7">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="14">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Data size" GridPane.columnIndex="2" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x234" GridPane.rowIndex="17">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="17">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Reserved (1)" GridPane.columnIndex="2" GridPane.rowIndex="5">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Flag 0 (ProductionFlag)" GridPane.columnIndex="2" GridPane.rowIndex="6">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Flag 2**" GridPane.columnIndex="2" GridPane.rowIndex="8">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Flag 3**" GridPane.columnIndex="2" GridPane.rowIndex="9">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="TitleIdRange_Min" GridPane.columnIndex="2" GridPane.rowIndex="10">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="TitleIdRange_Max" GridPane.columnIndex="2" GridPane.rowIndex="11">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="FS Access Control offset" GridPane.columnIndex="2" GridPane.rowIndex="12">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Service Access Control size" GridPane.columnIndex="2" GridPane.rowIndex="15">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="FS Access Control size" GridPane.columnIndex="2" GridPane.rowIndex="13">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Service Access Control offset" GridPane.columnIndex="2" GridPane.rowIndex="14">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Kernel Access Control offset" GridPane.columnIndex="2" GridPane.rowIndex="16">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidMagicNumLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Kernel Access Control size" GridPane.columnIndex="2" GridPane.rowIndex="17">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidDataSizeLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidReserved1Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="5">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFlag1Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="6">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFlag2Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="7">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFlag3Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="8">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFlag4Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="9">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidTitleRangeMinLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="10">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidServiceAccessControlOffsetLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="14">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidServiceAccessControlSizeLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="15">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidKernelAccessControlOffsetLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="16">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidKernelAccessControlSizeLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="17">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<TextField fx:id="acidRsa2048publicKeyTf" GridPane.columnIndex="3" GridPane.rowIndex="2" />
<TextField fx:id="acidRsa2048signatureTf" GridPane.columnIndex="3" GridPane.rowIndex="1" />
<Label text="0x238" GridPane.rowIndex="18">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="18">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Reserved (2)" GridPane.columnIndex="2" GridPane.rowIndex="18">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidReserved2Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="18">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidTitleRangeMaxLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="11">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFsAccessControlOffsetLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="12">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFsAccessControlSizeLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="13">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</GridPane>
<Label text="* with the size field from 0x204" />
<Label text="** [5.0.0+] bit2-3: PoolPartition? For applets set to 0b01, for sysmodules set to 0b10. Exceptions: &quot;starter&quot; is set to 0, &quot;nvservices&quot; is set to 3" />
</children>
</VBox>
</content>
</TitledPane>
<TitledPane text="ACI0">
<content>
<GridPane gridLinesVisible="true">
@ -1175,6 +734,449 @@
</children>
</GridPane>
</content>
</TitledPane>
<TitledPane text="ACID">
<content>
<VBox spacing="5.0">
<children>
<GridPane gridLinesVisible="true">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="60.0" minWidth="55.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="430.0" minWidth="300.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="100.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="30.0" minHeight="30.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<AnchorPane styleClass="customTitleGrid" GridPane.columnIndex="1">
<children>
<Label layoutX="38.0" layoutY="6.0" text="Size" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font name="System Bold" size="13.0" />
</font>
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</AnchorPane>
<AnchorPane styleClass="customTitleGrid" GridPane.columnIndex="2">
<children>
<Label layoutX="14.0" layoutY="7.0" text="Description" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font name="System Bold" size="13.0" />
</font>
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</AnchorPane>
<AnchorPane styleClass="customTitleGrid" GridPane.columnIndex="3">
<children>
<Label layoutY="6.0" text="Value" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font name="System Bold" size="13.0" />
</font>
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</AnchorPane>
<AnchorPane styleClass="customTitleGrid">
<children>
<Label layoutX="2.0" layoutY="7.0" text="Offset" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<font>
<Font name="System Bold" size="13.0" />
</font>
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</AnchorPane>
<Label text="0x0" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x100" GridPane.columnIndex="1" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="5">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x208" GridPane.rowIndex="5">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x204" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x200" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x100" GridPane.columnIndex="1" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x100" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x20C" GridPane.rowIndex="6">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x1" GridPane.columnIndex="1" GridPane.rowIndex="6">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x20D" GridPane.rowIndex="7">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x1" GridPane.columnIndex="1" GridPane.rowIndex="7">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x20E" GridPane.rowIndex="8">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x1" GridPane.columnIndex="1" GridPane.rowIndex="8">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x20F" GridPane.rowIndex="9">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x1" GridPane.columnIndex="1" GridPane.rowIndex="9">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x210" GridPane.rowIndex="10">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="10">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x218" GridPane.rowIndex="11">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="11">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="RSA-2048 signature over the data starting at 0x100*" GridPane.columnIndex="2" GridPane.rowIndex="1">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="RSA-2048 public key for the second NCA signature" GridPane.columnIndex="2" GridPane.rowIndex="2">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Magicnum &quot;ACID&quot;" GridPane.columnIndex="2" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x220" GridPane.rowIndex="12">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="12">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x224" GridPane.rowIndex="13">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="13">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x228" GridPane.rowIndex="14">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="16">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="15">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x22C" GridPane.rowIndex="15">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x230" GridPane.rowIndex="16">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Flag 1 (UnqualifiedApproval)" GridPane.columnIndex="2" GridPane.rowIndex="7">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="14">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Data size" GridPane.columnIndex="2" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x234" GridPane.rowIndex="17">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x4" GridPane.columnIndex="1" GridPane.rowIndex="17">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Reserved (1)" GridPane.columnIndex="2" GridPane.rowIndex="5">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Flag 0 (ProductionFlag)" GridPane.columnIndex="2" GridPane.rowIndex="6">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Flag 2**" GridPane.columnIndex="2" GridPane.rowIndex="8">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Flag 3**" GridPane.columnIndex="2" GridPane.rowIndex="9">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="TitleIdRange_Min" GridPane.columnIndex="2" GridPane.rowIndex="10">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="TitleIdRange_Max" GridPane.columnIndex="2" GridPane.rowIndex="11">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="FS Access Control offset ***" GridPane.columnIndex="2" GridPane.rowIndex="12">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Service Access Control size" GridPane.columnIndex="2" GridPane.rowIndex="15">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="FS Access Control size" GridPane.columnIndex="2" GridPane.rowIndex="13">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Service Access Control offset ***" GridPane.columnIndex="2" GridPane.rowIndex="14">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Kernel Access Control offset ***" GridPane.columnIndex="2" GridPane.rowIndex="16">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidMagicNumLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="3">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Kernel Access Control size" GridPane.columnIndex="2" GridPane.rowIndex="17">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidDataSizeLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="4">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidReserved1Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="5">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFlag1Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="6">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFlag2Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="7">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFlag3Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="8">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFlag4Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="9">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidTitleRangeMinLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="10">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidServiceAccessControlOffsetLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="14">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidServiceAccessControlSizeLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="15">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidKernelAccessControlOffsetLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="16">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidKernelAccessControlSizeLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="17">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<TextField fx:id="acidRsa2048publicKeyTf" GridPane.columnIndex="3" GridPane.rowIndex="2" />
<TextField fx:id="acidRsa2048signatureTf" GridPane.columnIndex="3" GridPane.rowIndex="1" />
<Label text="0x238" GridPane.rowIndex="18">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="0x8" GridPane.columnIndex="1" GridPane.rowIndex="18">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label text="Reserved (2)" GridPane.columnIndex="2" GridPane.rowIndex="18">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidReserved2Lbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="18">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidTitleRangeMaxLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="11">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFsAccessControlOffsetLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="12">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
<Label fx:id="acidFsAccessControlSizeLbl" text="-" GridPane.columnIndex="3" GridPane.rowIndex="13">
<padding>
<Insets left="5.0" right="5.0" />
</padding>
</Label>
</children>
</GridPane>
<Label text="* with the size field from 0x204" />
<Label text="** [5.0.0+] bit2-3: PoolPartition? For applets set to 0b01, for sysmodules set to 0b10. Exceptions: &quot;starter&quot; is set to 0, &quot;nvservices&quot; is set to 3" />
<Label text="*** Inside of ACID block" />
<fx:include fx:id="FSAccessControlTable" source="FSAccessControlTable.fxml" />
</children>
</VBox>
</content>
</TitledPane>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />