private MTObject Accept(IAuthorizationSession session, MTPQInnerData req) { MTObject result = null; var m_dhPrime = session.DhGetPrime(); var m_a = session.NewDh_ma(); var m_g = session.Dh_mg(); var m_gA = new BigInteger(m_g.ToString()).ModPow(m_a, new BigInteger(1, m_dhPrime)); session.Data.SetNewNoce(req.NewNonce); session.Data.SetDh_ma(m_a); session.Data.Set_mgA(m_gA); var data = new MTServerDhInnerData(); data.ServerTime = (int)(DateTimeHelper.CurrentMsecsFromEpoch() / 1000ul); data.Nonce = req.Nonce; data.ServerNonce = req.ServerNonce; data.G = m_g; data.DhPrime = m_dhPrime; data.GA = m_gA.ToByteArray(); var inner_data = data.ToByteArray(); var sha = inner_data.sha1(); var length = sha.Length + inner_data.Length; byte[] padding = new byte[] { }; if (length % 16 != 0) { padding = new byte[16 - (length % 16)]; } try { var message = sha.Concat(inner_data).Concat(padding).ToArray(); var encryptedAnswer = session.EncryptWithServerNonce(req.ServerNonce.ToByteArray() , req.NewNonce.ToByteArray() , message); result = new MTServerDhParamsOk { EncryptedAnswer = encryptedAnswer, Nonce = req.Nonce, ServerNonce = req.ServerNonce }; } catch (Exception err) { this.logger.LogDebug( $"An error occured while trying to accept 'ReqDHParams': {err.Message}"); } return(result); }
public NetworkAuthorizationRequiredEventsArgs(Settings.IAccount account, IAuthorizationSession session) { this.session = session; this.Account = account; }