public static TLEncryptedTransportMessage Decrypt(TLEncryptedTransportMessage transportMessage, byte[] authKey)
        {
            var keyIV = Utils.GetDecryptKeyIV(authKey, transportMessage.MsgKey);

            transportMessage.Data = Utils.AesIge(transportMessage.Data, keyIV.Item1, keyIV.Item2, false);

            return(transportMessage);
        }
Ejemplo n.º 2
0
        public override TLObject FromBytes(byte[] bytes, ref int position)
        {
            var response = new TLEncryptedTransportMessage();

            response.AuthKeyId = GetObject <TLLong>(bytes, ref position);
            response.MsgKey    = bytes.SubArray(position, 16);

            position     += 16;
            response.Data = bytes.SubArray(position, bytes.Length - position);
            position      = bytes.Length;
            return(response);
        }
Ejemplo n.º 3
0
        public static TLEncryptedTransportMessage Decrypt(TLEncryptedTransportMessage transportMessage, byte[] authKey)
        {
            var keyIV = TLUtils.GetDecryptKeyIV(authKey, transportMessage.MsgKey);

            transportMessage.Data = Utils.AesIge(transportMessage.Data, keyIV.Item1, keyIV.Item2, false);

            //var msgKey = TLUtils.GetDecryptMsgKey(authKey, transportMessage.Data);
            //if (!TLUtils.ByteArraysEqual(msgKey, transportMessage.MsgKey))
            //{
            //    transportMessage.Data = null;
            //}

            return(transportMessage);
        }
        public override TLObject FromBytes(byte[] bytes, ref int position)
        {
            var response = new TLEncryptedTransportMessage();

            response.AuthKeyId = GetObject <TLLong>(bytes, ref position);
            //TLUtils.WriteLine("AuthKeyId: " + response.AuthKeyId);
            response.MsgKey = bytes.SubArray(position, 16);
            //TLUtils.WriteLine("MsgKey: " + BitConverter.ToString(response.MsgKey));


            TLUtils.WriteLine(string.Format("\n<<--Parse TLEncryptedTransportMessage AuthKeyId {0}, MsgKey {1}\n----------------------------", response.AuthKeyId, BitConverter.ToString(response.MsgKey)));
            //TLUtils.WriteLine("----------------------------");

            position     += 16;
            response.Data = bytes.SubArray(position, bytes.Length - position);
            position      = bytes.Length;
            return(response);
        }
        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);
        }
Ejemplo n.º 6
0
        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
        }