Identify NpTicket platform based on signature identifier instead of issuer ID (#1062)
Some checks failed
Continuous Integration / Build & Test (map[database:true fullName:ubuntu-latest prettyName:Linux webTest:true]) (push) Has been cancelled
Upload Translations to Crowdin / crowdin-sync (push) Has been cancelled
Build Docker Image / Build and Publish (push) Has been cancelled

* Identify platform based on signature identifier instead of issuer id

* Use signature identifier to identify PS3

* Remove extra whitespace
This commit is contained in:
Josh 2024-09-10 14:46:41 -05:00 committed by GitHub
commit 9030d644fa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -78,19 +78,13 @@ public class NPTicket
if (!ticketParser.ParseTicket()) return false; if (!ticketParser.ParseTicket()) return false;
// Create a uint in big endian npTicket.SignatureVerifier = npTicket.TicketSignatureIdentifier switch
uint signatureIdentifier = (uint)(npTicket.TicketSignatureIdentifier[0] << 24 |
npTicket.TicketSignatureIdentifier[1] << 16 |
npTicket.TicketSignatureIdentifier[2] << 8 |
npTicket.TicketSignatureIdentifier[3]);
npTicket.SignatureVerifier = signatureIdentifier switch
{ {
0x5250434E => new RpcnSignatureVerifier(npTicket), [0x71, 0x9F, 0x1D, 0x4A,] => new PsnSignatureVerifier(npTicket), // PSN LBP Signature Identifier
0x719F1D4A => new PsnSignatureVerifier(npTicket), [0x52, 0x50, 0x43, 0x4E,] => new RpcnSignatureVerifier(npTicket), // 'RPCN' in ascii
0x54455354 => new UnitTestSignatureVerifier(npTicket), [0x54, 0x45, 0x53, 0x54,] => new UnitTestSignatureVerifier(npTicket), // 'TEST' in ascii
_ => throw new ArgumentOutOfRangeException(nameof(npTicket), _ => throw new ArgumentOutOfRangeException(nameof(npTicket),
signatureIdentifier, npTicket.TicketSignatureIdentifier,
@"Invalid signature identifier"), @"Invalid signature identifier"),
}; };
@ -159,13 +153,11 @@ public class NPTicket
return null; return null;
} }
// Production PSN Issuer ID: 0x100 npTicket.Platform = npTicket.SignatureVerifier switch
// RPCN Issuer ID: 0x33333333
npTicket.Platform = npTicket.IssuerId switch
{ {
0x100 => Platform.PS3, PsnSignatureVerifier => Platform.PS3,
0x33333333 => Platform.RPCS3, RpcnSignatureVerifier => Platform.RPCS3,
0x74657374 => Platform.UnitTest, UnitTestSignatureVerifier => Platform.UnitTest,
_ => Platform.Unknown, _ => Platform.Unknown,
}; };