Refactor NpTicket parser and add NpTicket signature documentation (#784)

* Refactor NpTicket parser and add NpTicket signature documentation

* Update TickerBuilder chaining style

* Fix SectionHeader position returning wrong value

* Don't attempt to parse ticket if it is less than 8 bytes
This commit is contained in:
Josh 2023-06-07 00:16:29 -05:00 committed by GitHub
commit 2f11731a8e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 506 additions and 247 deletions

View file

@ -0,0 +1,48 @@
using LBPUnion.ProjectLighthouse.Tickets;
using LBPUnion.ProjectLighthouse.Tickets.Signature;
using LBPUnion.ProjectLighthouse.Types.Users;
using Xunit;
namespace LBPUnion.ProjectLighthouse.Tests.Unit;
[Trait("Category", "Unit")]
public class TicketTests
{
[Fact]
public void CanReadTicket()
{
TicketBuilder builder = new TicketBuilder()
.SetCountry("br")
.SetUserId(21)
.SetDomain("us")
.SetStatus(0)
.SetIssuerId(0x74657374)
.setExpirationTime(ulong.MaxValue)
.SetUsername("unittest")
.SetIssueTime(0)
.SetTitleId("UP9000-BCUS98245_00");
byte[] ticketData = builder.Build();
NPTicket? ticket = NPTicket.CreateFromBytes(ticketData);
Assert.NotNull(ticket);
Assert.Equal((ulong)0, ticket.IssueTime);
Assert.Equal(ulong.MaxValue, ticket.ExpireTime);
Assert.Equal("unittest", ticket.Username);
Assert.Equal(GameVersion.LittleBigPlanet2, ticket.GameVersion);
Assert.Equal((ulong)0x74657374, ticket.IssuerId);
Assert.Equal((ulong)21, ticket.UserId);
}
[Fact]
public void CanVerifyTicketSignature()
{
TicketBuilder builder = new();
byte[] ticketData = builder.Build();
NPTicket? ticket = NPTicket.CreateFromBytes(ticketData);
Assert.NotNull(ticket);
Assert.True(new UnitTestSignatureVerifier(ticket).ValidateSignature());
}
}