コード例 #1
0
ファイル: AuthComponent.cs プロジェクト: Refuge89/Vanilla
        private void OnAuthLoginChallenge(LoginSession session, PCAuthLoginChallenge packet)
        {
            account account = Accounts.SingleOrDefault((a) => a.username.ToUpper() == packet.Username.ToUpper());

            // Todo: Error checking
            if (account != null)
            {
                session.AccountName = packet.Username;

                byte[] userBytes = Encoding.UTF8.GetBytes(account.username.ToUpper());
                byte[] passBytes = Encoding.UTF8.GetBytes(account.sha_pass_hash.ToUpper());

                session.Authenticator = new Authenticator();
                session.Authenticator.CalculateX(userBytes, passBytes);
                session.SendPacket(new PSAuthLoginChallange(session.Authenticator));
            }
            else
            {
                session.SendPacket(new PSAuthLoginChallange(AccountStatus.UnknownAccount));
            }
        }
コード例 #2
0
ファイル: AuthComponent.cs プロジェクト: Refuge89/Vanilla
        private void OnAuthLoginProof(LoginSession session, PCAuthLoginProof packet)
        {
            session.Authenticator.CalculateU(packet.A);
            session.Authenticator.CalculateM2(packet.M1);
            session.Authenticator.CalculateAccountHash();

            byte[] sessionKey = session.Authenticator.SRP6.K;

            account account = Accounts.SingleOrDefault(a => a.username.ToUpper() == session.AccountName.ToUpper());

            if (account != null)
            {
                account.sessionkey = Utils.ByteArrayToHex(sessionKey);

                Core.LoginDatabase.SaveChanges();
                session.SendPacket(new PSAuthLoginProof(session.Authenticator));
            }
            else
            {
                session.SendPacket(new PSAuthLoginProof(AccountStatus.UnknownAccount));
            }
        }