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); }
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); }
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); }
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 }