mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-10-14 21:22:49 +00:00
1.19.3 Message signing support.
This commit is contained in:
parent
e447fea16b
commit
fe0b268878
13 changed files with 532 additions and 313 deletions
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using MinecraftClient.Protocol.Message;
|
||||
using static MinecraftClient.Protocol.Message.LastSeenMessageList;
|
||||
|
||||
namespace MinecraftClient.Protocol.Keys
|
||||
{
|
||||
|
|
@ -43,7 +44,7 @@ namespace MinecraftClient.Protocol.Keys
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sign message - 1.19.1 and above
|
||||
/// Sign message - 1.19.1 and 1.19.2
|
||||
/// </summary>
|
||||
/// <param name="message">Message content</param>
|
||||
/// <param name="uuid">Sender uuid</param>
|
||||
|
|
@ -64,10 +65,21 @@ namespace MinecraftClient.Protocol.Keys
|
|||
return msgSign;
|
||||
}
|
||||
|
||||
public byte[] SignMessage(string message, DateTimeOffset timestamp, ref byte[] salt, int messageCount, Guid sender, Guid sessionUuid)
|
||||
/// <summary>
|
||||
/// Sign message - 1.19.3 and above
|
||||
/// </summary>
|
||||
/// <param name="message">Message content</param>
|
||||
/// <param name="uuid">Sender uuid</param>
|
||||
/// <param name="timestamp">Timestamp</param>
|
||||
/// <param name="salt">Salt</param>
|
||||
/// <param name="lastSeenMessages">LastSeenMessageList</param>
|
||||
/// <returns>Signature data</returns>
|
||||
public byte[] SignMessage(string message, Guid playerUuid, Guid chatUuid, int messageIndex, DateTimeOffset timestamp, ref byte[] salt, AcknowledgedMessage[] lastSeenMessages)
|
||||
{
|
||||
byte[] data = KeyUtils.GetSignatureData(message, timestamp, ref salt, messageCount, sender, sessionUuid);
|
||||
return SignData(data);
|
||||
byte[] bodySignData = KeyUtils.GetSignatureData_1_19_3(message, playerUuid, chatUuid, messageIndex, timestamp, ref salt, lastSeenMessages);
|
||||
|
||||
return SignData(bodySignData);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue