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 00000000..a95f44f8 --- /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 ec06feb4..af692628 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 +}