1.19.3 Message signing support.

This commit is contained in:
BruceChen 2023-01-13 16:12:10 +08:00
parent e447fea16b
commit fe0b268878
13 changed files with 532 additions and 313 deletions

View file

@ -20,15 +20,19 @@ namespace MinecraftClient.Protocol
public string? DisplayName;
public bool Listed = true;
// Entity info
public Mapping.Entity? entity;
// For message signature
private readonly PublicKey? PublicKey;
public Guid ChatUuid = Guid.Empty;
private readonly DateTime? KeyExpiresAt;
private PublicKey? PublicKey;
private DateTime? KeyExpiresAt;
private bool lastMessageVerified;
@ -71,6 +75,28 @@ namespace MinecraftClient.Protocol
precedingSignature = null;
}
public void ClearPublicKey()
{
ChatUuid = Guid.Empty;
PublicKey = null;
KeyExpiresAt = null;
}
public void SetPublicKey(Guid chatUuid, long publicKeyExpiryTime, byte[] encodedPublicKey, byte[] publicKeySignature)
{
ChatUuid = chatUuid;
KeyExpiresAt = DateTimeOffset.FromUnixTimeMilliseconds(publicKeyExpiryTime).UtcDateTime;
try
{
PublicKey = new PublicKey(encodedPublicKey, publicKeySignature);
lastMessageVerified = true;
}
catch (System.Security.Cryptography.CryptographicException)
{
PublicKey = null;
}
}
public bool IsMessageChainLegal()
{
return lastMessageVerified;