Exemple #1
0
        internal void HandleS01EncryptionRequest(S01EncryptionRequest s01EncryptionRequest)
        {
            waitingForEncryption = true;
            Console.WriteLine("Server is in online mode!");
            RSACryptoServiceProvider rsaProvider = CryptoHandler.DecodeRSAPublicKey(s01EncryptionRequest.serverKey);

            byte[] secretKey = CryptoHandler.GenerateAESPrivateKey();

            Console.WriteLine("Keys generated");
            if (s01EncryptionRequest.serverId != "-")
            {
                Console.WriteLine("Logging in to Mojang");
                if (!Yggdrasil.SessionCheck(manager.loginParams.UUID, manager.loginParams.SessionId, CryptoHandler.getServerHash(s01EncryptionRequest.serverId, s01EncryptionRequest.serverKey, secretKey)))
                {
                    Console.WriteLine("Mojang authentication failed");
                    return;
                }
                else
                {
                    Console.WriteLine("Mojang authentication succesful");
                }
            }

            manager.SendPacket(new C01EncryptionResponse(rsaProvider.Encrypt(secretKey, false), rsaProvider.Encrypt(s01EncryptionRequest.token, false)));

            manager.aesStream = CryptoHandler.getAesStream(manager.tcpClient.GetStream(), secretKey);
            manager.encrypted = true;
        }
Exemple #2
0
        public override ProtobufPacket Handle(EncryptionRequestPacket packet)
        {
            var generator = new CipherKeyGenerator();

            generator.Init(new KeyGenerationParameters(new SecureRandom(), 16 * 8));
            var sharedKey = generator.GenerateKey();

            var hash = GetServerIDHash(packet.PublicKey, sharedKey, packet.ServerID);

            if (!Yggdrasil.JoinSession(Context.AccessToken, Context.SelectedProfile, hash).Result.Response)
            {
                throw new Exception("Yggdrasil error: Not authenticated.");
            }

            var signer = new PKCS1Signer(packet.PublicKey);

            Context.SendPacket(new EncryptionResponsePacket
            {
                SharedSecret = signer.SignData(sharedKey),
                VerifyToken  = signer.SignData(packet.VerifyToken)
            });

            Context.Stream.InitializeEncryption(sharedKey);

            return(null);
        }
Exemple #3
0
        static void Main(string[] args)
        {
            Yggdrasil_CSharp.Yggdrasil yggdrasil = new Yggdrasil();
            var Authenticated = yggdrasil.Login("Blarg", "Blarg");

            if (Authenticated != null)
            {
            }
        }
Exemple #4
0
 public void DeselectYggdrasil()
 {
     if (selectedYggdrasil != null)
     {
         selectedYggdrasil.HideRange();
     }
     selectedYggdrasil = null;
     yggdrasilUI.Hide();
 }
Exemple #5
0
        public DWMain_Win()
        {
            InitializeComponent();


            Logger lLog = new Logger(tLog);

            Yggdrasil = new Yggdrasil();
        }
Exemple #6
0
    // Use this for initialization
    void Start()
    {
        Principal = GameObject.Find ("Principal");
        Yggdrasil = (Yggdrasil)Principal.GetComponent(typeof(Yggdrasil));

        this.Gamagora.SetActive (false);
        this.Quadriction.SetActive (false);
        this.Gamagora.SetActive (true);
        this.NextSplash = Time.time + SplashTime;
    }
Exemple #7
0
    public void SetTarget(Yggdrasil yggdrasil)
    {
        target         = yggdrasil;
        this.yggdrasil = target.yggdrasil;

        transform.position = target.yggdrasil.gameObject.transform.position;

        updateUpgrade();
        updateExtend();

        ui.SetActive(true);
    }
Exemple #8
0
        /// <summary>
        /// Uses a client's stored credentials to verify with Minecraft.net
        /// </summary>
        public async Task <bool> RefreshSession()
        {
            var result = await Yggdrasil.RefreshSession(AccessToken, ClientToken);

            switch (result.Status)
            {
            case YggdrasilResponse.Success:
                AccessToken = result.Info.AccessToken;
                ClientToken = result.Info.ClientToken;
                return(true);

            default:
                return(false);
            }
        }
Exemple #9
0
    public void SelectYggdrasil(Yggdrasil yggdrasil)
    {
        if (selectedYggdrasil == yggdrasil)
        {
            DeselectYggdrasil();
            return;
        }

        selectedYggdrasil = yggdrasil;
        selectedYggdrasil.ShowRange();
        extendable = selectedYggdrasil.yggdrasil;

        DeselectRoot();

        DeselectSpot();

        yggdrasilUI.SetTarget(yggdrasil);
    }
Exemple #10
0
        public override async Task <bool> Login(string login, string password)
        {
            YggLogin    = login;
            YggPassword = password;

            var result = await Yggdrasil.Authenticate(YggLogin, YggPassword);

            switch (result.Status)
            {
            case YggdrasilResponse.Success:
                AccessToken     = result.Info.AccessToken;
                ClientToken     = result.Info.ClientToken;
                SelectedProfile = result.Info.Profile.ID;
                Client.Username = result.Info.Profile.Name;
                return(true);

            default:
                AccessToken     = "None";
                ClientToken     = "None";
                SelectedProfile = "None";
                Client.Username = "******";
                return(false);
            }
        }
Exemple #11
0
        private void loginButton_Click(object sender, EventArgs e)
        {
            Yggdrasil newLogin = new Yggdrasil(userText.Text, passText.Text);

            if (loggedIn)
            {
                Assets            downloadAssets    = new Assets();
                Libraries         downloadLibraries = new Libraries((String)minecraftVersionBox.SelectedItem);
                DownloadMinecraft downloadMinecraft = new DownloadMinecraft((String)minecraftVersionBox.SelectedItem);
                LaunchMinecraft   mc = new LaunchMinecraft(location, Path.Combine(location, "assets"), username, sessionID, optionConsoleBox.Checked, (String)minecraftVersionBox.SelectedItem, downloadLibraries.results, downloadLibraries.launchArgs, downloadLibraries.launchClass);
            }
            else
            {
                Console.WriteLine("Attempting Login!");
                Login.Login login = new Login.Login(userText.Text, passText.Text);
                this.username  = login.username;
                this.sessionID = login.sessionID;
                if (login.error == "Success")
                {
                    LoginSuccessful();
                }
                else
                {
                    switch (login.error)
                    {
                    case "Bad login":
                        MessageBox.Show("Invalid username and/or password.");
                        break;

                    default:
                        MessageBox.Show("Login failed: " + login.error);
                        break;
                    }
                }
            }
        }
Exemple #12
0
 public override async Task <bool> Logout()
 {
     return((await Yggdrasil.Logout(YggLogin, YggPassword)).Response);
 }
Exemple #13
0
 public async Task <bool> Invalidate() => (await Yggdrasil.Invalidate(AccessToken, ClientToken)).Response;
Exemple #14
0
 public async Task <bool> VerifySession() => (await Yggdrasil.VerifySession(AccessToken)).Response;
        public LoginResult LogIn(string username, string password, out SessionToken token)
        {
            token = null;
            if (mojangCredentials == null)
            {
                if (File.Exists(fileName))
                {
                    var bf = new BinaryFormatter();
                    using (var stream = OpenFile(StreamMode.Read))
                    {
                        mojangCredentials = (List <MojangCredential>)bf.Deserialize(stream);
                    }
                }
                else
                {
                    mojangCredentials = new List <MojangCredential>();
                }
            }

            var passwordHash = password.ToBytes().Hash();

            foreach (var credential in mojangCredentials)
            {
                if (credential.Email == username && credential.PasswordHash.EqualsArray(passwordHash))
                {
                    token = credential.LastToken;
                }
            }

            if (token != null)
            {
                if (Yggdrasil.GetTokenValidation(token) == LoginResult.Success)
                {
                    return(LoginResult.Success);
                }
                else
                {
                    Console.WriteLine("Token validation failed");
                }
                if (Yggdrasil.GetNewToken(token, out token) == LoginResult.Success)
                {
                    UpdateToken(username, token);
                    return(LoginResult.Success);
                }
                else
                {
                    Console.WriteLine("Token renew failed");
                }
            }

            var login = Yggdrasil.GetLogin(username, password, out token);

            if (login != LoginResult.Success)
            {
                RemoveToken(username);
                token = null;
                return(login);
            }
            else
            {
                UpdateToken(username, token);
            }

            AddToken(username, passwordHash, token);

            return(LoginResult.Success);
        }