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
        }