public void Write(TLBinaryWriter to, byte[] authKey) { using (var output = new MemoryStream()) { using (var writer = new TLBinaryWriter(output)) { writer.WriteObject(Query); var buffer = output.ToArray(); var random = new Random(); var length = buffer.Length; int num2 = 16 - length % 16; byte[] array = null; if (num2 > 0 && num2 < 16) { array = new byte[num2]; random.NextBytes(array); } byte[] data2 = buffer; if (array != null) { data2 = buffer.Concat(array).ToArray <byte>(); } var msgKey = TLUtils.GetMsgKey(buffer); var encryptKeyIV = Utils.GetEncryptKeyIV(authKey, msgKey); var data3 = Utils.AesIge(data2, encryptKeyIV.Item1, encryptKeyIV.Item2, true); AuthKeyId = TLUtils.GenerateLongAuthKeyId(authKey); MsgKey = msgKey; var Data = data3; to.Write(AuthKeyId); to.Write(MsgKey); to.Write(Data); } } }
public static TLEncryptedTransportMessage Encrypt(TLEncryptedTransportMessage transportMessage, byte[] authKey) { var random = new Random(); var data = transportMessage.Data; var length = data.Length; var padding = 16 - (length % 16); byte[] paddingBytes = null; if (padding > 0 && padding < 16) { paddingBytes = new byte[padding]; random.NextBytes(paddingBytes); } byte[] dataWithPadding = data; if (paddingBytes != null) { dataWithPadding = data.Concat(paddingBytes).ToArray(); } var msgKey = TLUtils.GetMsgKey(data); var keyIV = Utils.GetEncryptKeyIV(authKey, msgKey); var encryptedData = Utils.AesIge(dataWithPadding, keyIV.Item1, keyIV.Item2, true); //TLUtils.WriteLine("--Compute auth key sha1--"); var authKeyId = TLUtils.GenerateLongAuthKeyId(authKey); transportMessage.AuthKeyId = new TLLong(authKeyId); transportMessage.MsgKey = msgKey; transportMessage.Data = encryptedData; return(transportMessage); }
public static TLEncryptedTransportMessage Encrypt(TLEncryptedTransportMessage transportMessage, byte[] authKey) { #if MTPROTO var random = new SecureRandom(); var data = transportMessage.Data; var length = data.Length; var padding = 16 - (length % 16); byte[] paddingBytes = null; if (padding < 12) { padding += 16; } if (padding >= 12 && padding <= 1024) { paddingBytes = new byte[padding]; random.NextBytes(paddingBytes); } var dataWithPadding = data; if (paddingBytes != null) { dataWithPadding = TLUtils.Combine(data, paddingBytes); } var msgKey = TLUtils.GetEncryptMsgKey(authKey, dataWithPadding); var keyIV = TLUtils.GetEncryptKeyIV(authKey, msgKey); var encryptedData = Utils.AesIge(dataWithPadding, keyIV.Item1, keyIV.Item2, true); var authKeyId = TLUtils.GenerateLongAuthKeyId(authKey); transportMessage.AuthKeyId = new TLLong(authKeyId); transportMessage.MsgKey = msgKey; transportMessage.Data = encryptedData; return(transportMessage); #else var random = new SecureRandom(); var data = transportMessage.Data; var length = data.Length; var padding = 16 - (length % 16); byte[] paddingBytes = null; if (padding > 0 && padding < 16) { paddingBytes = new byte[padding]; random.NextBytes(paddingBytes); } byte[] dataWithPadding = data; if (paddingBytes != null) { dataWithPadding = TLUtils.Combine(data, paddingBytes); } var msgKey = TLUtils.GetMsgKey(data); var keyIV = TLUtils.GetEncryptKeyIV(authKey, msgKey); var encryptedData = Utils.AesIge(dataWithPadding, keyIV.Item1, keyIV.Item2, true); var authKeyId = TLUtils.GenerateLongAuthKeyId(authKey); transportMessage.AuthKeyId = new TLLong(authKeyId); transportMessage.MsgKey = msgKey; transportMessage.Data = encryptedData; return(transportMessage); #endif }