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 }