private void DoLogin(object parameter)
        {
            UIServices.SetBusyState();
            _logger.Info("reset error msg");
            ErrorMsg = string.Empty;

            _logger.Info("starting with login process");

            if (!string.IsNullOrEmpty(_login) && _login.Length >= 6)
            {
                var values = (object[])parameter;
                var passwordBox = values[0] as PasswordBox;

                if (passwordBox != null)
                {
                    _logger.Info("password parameter is not null");

                    string password = passwordBox.Password;

                    if (!string.IsNullOrEmpty(password))
                    {
                        _logger.Info("password is not null or empty");

                        _logger.Info("check for exsisting login");
                        var database = Container.Resolve<IDataAccessLayer>();
                        List<MasterLogin> logins = database.GetAll<MasterLogin>();

                        if (logins.Count == 1)
                        {
                            var login = database.GetSingleByName<MasterLogin>(_login);

                            if (login != null)
                            {
                                _logger.Info("login do exsits");
                                byte[] hashedPassword = _cryptographyService.HashPassword(password, login.Salt);

                                _logger.Info("compare passwords...");
                                if (_cryptographyService.Compare(hashedPassword, login.Password))
                                {
                                    _logger.Info("...login verified.");

                                    OpenMainView(values);
                                }
                                else
                                {
                                    _logger.Error("...login failed.");
                                    ErrorMsg = "Login failed!";
                                }
                            }
                            else
                            {
                                _logger.Error("master login already exists");
                                ErrorMsg = "Master login already exists!";
                            }
                        }
                        else if (logins.Count == 0)
                        {
                            _logger.Info("login do not exsits");

                            byte[] salt = _cryptographyService.GenerateSalt();
                            byte[] hashedPassword = _cryptographyService.HashPassword(password, salt);

                            _cryptographyService.AssignNewKeys();

                            var masterLogin = new MasterLogin
                            {
                                Name = _login,
                                Password = hashedPassword,
                                Salt = salt,
                                PrivateKey = _cryptographyService.GetPrivateKeyAsXml(),
                                PublicKey = _cryptographyService.GetPublicKey(),
                            };

                            database.Insert(masterLogin);

                            OpenMainView(values);
                        }
                    }
                    else
                    {
                        _logger.Error("password is null or empty!");
                        ErrorMsg = "Password is empty!";
                    }
                }
            }
            else
            {
                _logger.Error("login is null, empty or have less then 6 characters!");
                ErrorMsg = "Login have less then 6 characters!";
            }
        }
        public void Insert()
        {
            List<Contact> contacts = _dataAccess.GetAll<Contact>();
            Assert.IsTrue(contacts.Count == 0);

            List<MasterLogin> materLogins = _dataAccess.GetAll<MasterLogin>();
            Assert.IsTrue(materLogins.Count == 0);

            var hybridEncrypter = new HybridRsaAes();
            hybridEncrypter.AssignNewRSAKeys();

            var contact = new Contact
            {
                Name = "Marcel",
                PublicKey = hybridEncrypter.GetPublicRSAKey()
            };
            _dataAccess.Insert(contact);

            contacts = _dataAccess.GetAll<Contact>();
            Assert.IsTrue(contacts.Count == 1);

            var salt = PBKDF2Impl.GenerateSalt();
            hybridEncrypter = new HybridRsaAes();
            hybridEncrypter.AssignNewRSAKeys();

            var materLogin = new MasterLogin
            {
                Name = "MasterMan",
                Password = PBKDF2Impl.HashPassword(Encoding.UTF8.GetBytes("password123"), salt),
                Salt = salt,
                PrivateKey = hybridEncrypter.GetPrivateRSAKeyAsXml(),
                PublicKey = hybridEncrypter.GetPublicRSAKey()
            };
            _dataAccess.Insert(materLogin);

            materLogins = _dataAccess.GetAll<MasterLogin>();
            Assert.IsTrue(materLogins.Count == 1);
        }