예제 #1
0
        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);
        }
예제 #2
0
 public NetworkAuthorizationRequiredEventsArgs(Settings.IAccount account, IAuthorizationSession session)
 {
     this.session = session;
     this.Account = account;
 }