diff --git a/generator/MTProtoGenerator.cs b/generator/MTProtoGenerator.cs index c9e71f0..f326c13 100644 --- a/generator/MTProtoGenerator.cs +++ b/generator/MTProtoGenerator.cs @@ -181,11 +181,11 @@ public class MTProtoGenerator : IIncrementalGenerator break; case "System.Collections.Generic.Dictionary": readTL.AppendLine($"r.{member.Name} = reader.ReadTLDictionary();"); - writeTl.AppendLine($"writer.WriteTLVector({member.Name}.Values.ToArray());"); + writeTl.AppendLine($"writer.WriteTLVector({member.Name}?.Values.ToArray());"); break; case "System.Collections.Generic.Dictionary": readTL.AppendLine($"r.{member.Name} = reader.ReadTLDictionary();"); - writeTl.AppendLine($"writer.WriteTLVector({member.Name}.Values.ToArray());"); + writeTl.AppendLine($"writer.WriteTLVector({member.Name}?.Values.ToArray());"); break; case "object": readTL.AppendLine($"r.{member.Name} = reader.ReadTLObject();"); diff --git a/src/Client.cs b/src/Client.cs index dc054e0..47644e5 100644 --- a/src/Client.cs +++ b/src/Client.cs @@ -1125,7 +1125,7 @@ namespace WTelegram { try { - var users = await this.Users_GetUsers(InputUser.Self); // this calls also reenable incoming Updates + var users = await this.Users_GetUsers(InputUser.Self); // this call also reenable incoming Updates var self = users[0] as User; if (self.id == long.Parse(botToken.Split(':')[0])) { diff --git a/src/Encryption.cs b/src/Encryption.cs index 4025d9e..501920b 100644 --- a/src/Encryption.cs +++ b/src/Encryption.cs @@ -247,10 +247,7 @@ namespace WTelegram var rsaParam = rsa.ExportParameters(false); if (rsaParam.Modulus[0] == 0) rsaParam.Modulus = rsaParam.Modulus[1..]; var publicKey = new RSAPublicKey { n = rsaParam.Modulus, e = rsaParam.Exponent }; - using var memStream = new MemoryStream(280); - using (var writer = new BinaryWriter(memStream)) - writer.WriteTLObject(publicKey); - var bareData = memStream.ToArray(); + var bareData = publicKey.ToBytes(); var fingerprint = BinaryPrimitives.ReadInt64LittleEndian(sha1.ComputeHash(bareData, 4, bareData.Length - 4).AsSpan(12)); // 64 lower-order bits of SHA1 PublicKeys[fingerprint] = publicKey; Helpers.Log(1, $"Loaded a public key with fingerprint {fingerprint:X}"); diff --git a/src/TL.cs b/src/TL.cs index 7c4b65d..b0e2f00 100644 --- a/src/TL.cs +++ b/src/TL.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.IO; using System.IO.Compression; using System.Linq; @@ -48,6 +49,15 @@ namespace TL public static class Serialization { + [EditorBrowsable(EditorBrowsableState.Never)] + public static byte[] ToBytes(this T obj) where T : IObject + { + using var ms = new MemoryStream(384); + using var writer = new BinaryWriter(ms); + writer.WriteTLObject(obj); + return ms.ToArray(); + } + public static void WriteTLObject(this BinaryWriter writer, T obj) where T : IObject { if (obj == null) { writer.WriteTLNull(typeof(T)); return; }