From a78a69a6e7d460a5e5aa7adb82c3073cc3b7a48f Mon Sep 17 00:00:00 2001
From: VolcaEM <63682805+VolcaEM@users.noreply.github.com>
Date: Mon, 22 Jun 2020 13:36:55 +0200
Subject: [PATCH] Update NRR structs (#1291)

* Update NRR structs

This was based on Switchbrew page: switchbrew.org/wiki/NRR

* Address review comments
---
 .../HOS/Services/Ro/Types/NRRCertification.cs | 23 +++++++++++++
 .../HOS/Services/Ro/Types/NrrHeader.cs        | 32 +++++++++++--------
 2 files changed, 42 insertions(+), 13 deletions(-)
 create mode 100644 Ryujinx.HLE/HOS/Services/Ro/Types/NRRCertification.cs

diff --git a/Ryujinx.HLE/HOS/Services/Ro/Types/NRRCertification.cs b/Ryujinx.HLE/HOS/Services/Ro/Types/NRRCertification.cs
new file mode 100644
index 0000000000..a95f44f8b2
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Ro/Types/NRRCertification.cs
@@ -0,0 +1,23 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Services.Ro
+{
+    [StructLayout(LayoutKind.Explicit, Size = 0x220)]
+    unsafe struct NRRCertification
+    {
+        [FieldOffset(0)]
+        public ulong ApplicationIdMask;
+
+        [FieldOffset(0x8)]
+        public ulong ApplicationIdPattern;
+
+        [FieldOffset(0x10)]
+        public fixed byte Reserved[0x10];
+
+        [FieldOffset(0x20)]
+        public fixed byte Modulus[0x100];
+
+        [FieldOffset(0x120)]
+        public fixed byte Signature[0x100];
+    }
+}
diff --git a/Ryujinx.HLE/HOS/Services/Ro/Types/NrrHeader.cs b/Ryujinx.HLE/HOS/Services/Ro/Types/NrrHeader.cs
index ec06feb436..af692628e3 100644
--- a/Ryujinx.HLE/HOS/Services/Ro/Types/NrrHeader.cs
+++ b/Ryujinx.HLE/HOS/Services/Ro/Types/NrrHeader.cs
@@ -1,4 +1,4 @@
-using System.Runtime.InteropServices;
+using System.Runtime.InteropServices;
 
 namespace Ryujinx.HLE.HOS.Services.Ro
 {
@@ -8,31 +8,37 @@ namespace Ryujinx.HLE.HOS.Services.Ro
         [FieldOffset(0)]
         public uint Magic;
 
+        [FieldOffset(0x4)]
+        public uint CertificationSignatureKeyGeneration; // 9.0.0+
+
+        [FieldOffset(0x8)]
+        public ulong Reserved;
+
         [FieldOffset(0x10)]
-        public ulong TitleIdMask;
-
-        [FieldOffset(0x18)]
-        public ulong TitleIdPattern;
-
-        [FieldOffset(0x30)]
-        public fixed byte Modulus[0x100];
-
-        [FieldOffset(0x130)]
-        public fixed byte FixedKeySignature[0x100];
+        public NRRCertification Certification;
 
         [FieldOffset(0x230)]
         public fixed byte NrrSignature[0x100];
 
         [FieldOffset(0x330)]
-        public ulong TitleIdMin;
+        public ulong TitleId;
 
         [FieldOffset(0x338)]
         public uint NrrSize;
 
+        [FieldOffset(0x33C)]
+        public byte Type; // 7.0.0+
+
+        [FieldOffset(0x33D)]
+        public fixed byte Reserved2[0x3];
+
         [FieldOffset(0x340)]
         public uint HashOffset;
 
         [FieldOffset(0x344)]
         public uint HashCount;
+
+        [FieldOffset(0x348)]
+        public ulong Reserved3;
     }
-}
\ No newline at end of file
+}