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

@ -2,8 +2,9 @@
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using ImageMagick;
using MinecraftClient.Protocol.Handlers;
using MinecraftClient.Protocol.Message;
using static MinecraftClient.Protocol.Message.LastSeenMessageList;
namespace MinecraftClient.Protocol.Keys
{
@ -111,6 +112,33 @@ namespace MinecraftClient.Protocol.Keys
return data.ToArray();
}
public static byte[] GetSignatureData_1_19_3(string message, Guid playerUuid, Guid chatUuid, int messageIndex, DateTimeOffset timestamp, ref byte[] salt, AcknowledgedMessage[] lastSeenMessages)
{
List<byte> data = new();
// net.minecraft.network.message.SignedMessage#update
data.AddRange(DataTypes.GetInt(1));
// message link
// net.minecraft.network.message.MessageLink#update
data.AddRange(DataTypes.GetUUID(playerUuid));
data.AddRange(DataTypes.GetUUID(chatUuid));
data.AddRange(DataTypes.GetInt(messageIndex));
// message body
// net.minecraft.network.message.MessageBody#update
data.AddRange(salt);
data.AddRange(DataTypes.GetLong(timestamp.ToUnixTimeSeconds()));
byte[] messageBytes = Encoding.UTF8.GetBytes(message);
data.AddRange(DataTypes.GetInt(messageBytes.Length));
data.AddRange(messageBytes);
data.AddRange(DataTypes.GetInt(lastSeenMessages.Length));
foreach (AcknowledgedMessage ack in lastSeenMessages)
data.AddRange(ack.signature);
return data.ToArray();
}
public static byte[] GetSignatureData(byte[]? precedingSignature, Guid sender, byte[] bodySign)
{
List<byte> data = new();