Annotation of truecrypt/main/forms/changepassworddialog.cpp, revision 1.1

1.1     ! root        1: /*
        !             2:  Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
        !             3: 
        !             4:  Governed by the TrueCrypt License 2.4 the full text of which is contained
        !             5:  in the file License.txt included in TrueCrypt binary and source code
        !             6:  distribution packages.
        !             7: */
        !             8: 
        !             9: #include "System.h"
        !            10: #include "Main/Main.h"
        !            11: #include "Main/GraphicUserInterface.h"
        !            12: #include "ChangePasswordDialog.h"
        !            13: 
        !            14: namespace TrueCrypt
        !            15: {
        !            16:        ChangePasswordDialog::ChangePasswordDialog (wxWindow* parent, shared_ptr <VolumePath> volumePath, Mode::Enum mode, shared_ptr <VolumePassword> password, shared_ptr <KeyfileList> keyfiles, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles)
        !            17:                : ChangePasswordDialogBase (parent), DialogMode (mode), Path (volumePath)
        !            18:        {
        !            19:                bool enableNewPassword = false;
        !            20:                bool enableNewKeyfiles = false;
        !            21:                bool enablePkcs5Prf = false;
        !            22: 
        !            23:                switch (mode)
        !            24:                {
        !            25:                case Mode::ChangePasswordAndKeyfiles:
        !            26:                        enableNewPassword = true;
        !            27:                        enableNewKeyfiles = true;
        !            28:                        enablePkcs5Prf = true;
        !            29:                        SetTitle (_("Change Volume Password and Keyfiles"));
        !            30:                        break;
        !            31: 
        !            32:                case Mode::ChangeKeyfiles:
        !            33:                        enableNewKeyfiles = true;
        !            34:                        SetTitle (_("Add/Remove Keyfiles to/from Volume"));
        !            35:                        break;
        !            36: 
        !            37:                case Mode::RemoveAllKeyfiles:
        !            38:                        SetTitle (_("Remove All Keyfiles from Volume"));
        !            39:                        break;
        !            40: 
        !            41:                case Mode::ChangePkcs5Prf:
        !            42:                        enablePkcs5Prf = true;
        !            43:                        SetTitle (_("Change Header Key Derivation Algorithm"));
        !            44:                        break;
        !            45: 
        !            46:                default:
        !            47:                        throw ParameterIncorrect (SRC_POS);
        !            48:                }
        !            49: 
        !            50:                CurrentPasswordPanel = new VolumePasswordPanel (this, password, keyfiles);
        !            51:                CurrentPasswordPanel->UpdateEvent.Connect (EventConnector <ChangePasswordDialog> (this, &ChangePasswordDialog::OnPasswordPanelUpdate));
        !            52:                CurrentPasswordPanelSizer->Add (CurrentPasswordPanel, 1, wxALL | wxEXPAND);
        !            53: 
        !            54:                NewPasswordPanel = new VolumePasswordPanel (this, newPassword, newKeyfiles, false, enableNewPassword, enableNewKeyfiles, enableNewPassword, enablePkcs5Prf);
        !            55:                NewPasswordPanel->UpdateEvent.Connect (EventConnector <ChangePasswordDialog> (this, &ChangePasswordDialog::OnPasswordPanelUpdate));
        !            56:                NewPasswordPanelSizer->Add (NewPasswordPanel, 1, wxALL | wxEXPAND);
        !            57:                
        !            58:                if (mode == Mode::RemoveAllKeyfiles)
        !            59:                        NewSizer->Show (false);
        !            60: 
        !            61:                Layout();
        !            62:                Fit();
        !            63:                Center();
        !            64: 
        !            65:                OnPasswordPanelUpdate();
        !            66:                CurrentPasswordPanel->SetFocusToPasswordTextCtrl();
        !            67:        }
        !            68: 
        !            69:        ChangePasswordDialog::~ChangePasswordDialog ()
        !            70:        {
        !            71:                CurrentPasswordPanel->UpdateEvent.Disconnect (this);
        !            72:                NewPasswordPanel->UpdateEvent.Disconnect (this);
        !            73:        }
        !            74: 
        !            75:        void ChangePasswordDialog::OnOKButtonClick (wxCommandEvent& event)
        !            76:        {
        !            77:                try
        !            78:                {
        !            79:                        shared_ptr <VolumePassword> newPassword;
        !            80:                        if (DialogMode == Mode::ChangePasswordAndKeyfiles)
        !            81:                        {
        !            82:                                newPassword = NewPasswordPanel->GetPassword();
        !            83:                                newPassword->CheckPortability();
        !            84: 
        !            85:                                if (newPassword->Size() > 0 && newPassword->Size() < VolumePassword::WarningSizeThreshold
        !            86:                                        && !Gui->AskYesNo (LangString ["PASSWORD_LENGTH_WARNING"], false, true))
        !            87:                                {
        !            88:                                        NewPasswordPanel->SetFocusToPasswordTextCtrl();
        !            89:                                        return;
        !            90:                                }
        !            91:                        }
        !            92:                        else
        !            93:                                newPassword = CurrentPasswordPanel->GetPassword();
        !            94: 
        !            95:                        shared_ptr <KeyfileList> newKeyfiles;
        !            96:                        if (DialogMode == Mode::ChangePasswordAndKeyfiles || DialogMode == Mode::ChangeKeyfiles)
        !            97:                                newKeyfiles = NewPasswordPanel->GetKeyfiles();
        !            98:                        else if (DialogMode != Mode::RemoveAllKeyfiles)
        !            99:                                newKeyfiles = CurrentPasswordPanel->GetKeyfiles();
        !           100: 
        !           101:                        {
        !           102:                                wxBusyCursor busy;
        !           103:                                Core->ChangePassword (Path,     Gui->GetPreferences().DefaultMountOptions.PreserveTimestamps,
        !           104:                                        CurrentPasswordPanel->GetPassword(), CurrentPasswordPanel->GetKeyfiles(),
        !           105:                                        newPassword, newKeyfiles, NewPasswordPanel->GetPkcs5Kdf());
        !           106:                        }
        !           107: 
        !           108:                        switch (DialogMode)
        !           109:                        {
        !           110:                        case Mode::ChangePasswordAndKeyfiles:
        !           111:                                Gui->ShowInfo ("PASSWORD_CHANGED");
        !           112:                                break;
        !           113: 
        !           114:                        case Mode::ChangeKeyfiles:
        !           115:                        case Mode::RemoveAllKeyfiles:
        !           116:                                Gui->ShowInfo ("KEYFILE_CHANGED");
        !           117:                                break;
        !           118: 
        !           119:                        case Mode::ChangePkcs5Prf:
        !           120:                                Gui->ShowInfo ("PKCS5_PRF_CHANGED");
        !           121:                                break;
        !           122: 
        !           123:                        default:
        !           124:                                throw ParameterIncorrect (SRC_POS);
        !           125:                        }
        !           126: 
        !           127:                        EndModal (wxID_OK);
        !           128:                }
        !           129:                catch (UnportablePassword &e)
        !           130:                {
        !           131:                        Gui->ShowError (e);
        !           132:                        NewPasswordPanel->SetFocusToPasswordTextCtrl();
        !           133:                }
        !           134:                catch (PasswordException &e)
        !           135:                {
        !           136:                        Gui->ShowWarning (e);
        !           137:                        CurrentPasswordPanel->SetFocusToPasswordTextCtrl();
        !           138:                }
        !           139:                catch (exception &e)
        !           140:                {
        !           141:                        Gui->ShowError (e);
        !           142:                }
        !           143:        }
        !           144: 
        !           145:        void ChangePasswordDialog::OnPasswordPanelUpdate ()
        !           146:        {
        !           147:                bool ok = true;
        !           148: 
        !           149:                bool passwordEmpty = CurrentPasswordPanel->GetPassword()->IsEmpty();
        !           150:                bool keyfilesEmpty = !CurrentPasswordPanel->GetKeyfiles() || CurrentPasswordPanel->GetKeyfiles()->empty();
        !           151: 
        !           152:                if (passwordEmpty && keyfilesEmpty)
        !           153:                        ok = false;
        !           154: 
        !           155:                if (DialogMode == Mode::RemoveAllKeyfiles && (passwordEmpty || keyfilesEmpty))
        !           156:                        ok = false;
        !           157: 
        !           158:                if (DialogMode == Mode::ChangePasswordAndKeyfiles || DialogMode == Mode::ChangeKeyfiles)
        !           159:                {
        !           160:                        bool newKeyfilesEmpty = !NewPasswordPanel->GetKeyfiles() || NewPasswordPanel->GetKeyfiles()->empty();
        !           161: 
        !           162:                        if (DialogMode == Mode::ChangeKeyfiles
        !           163:                                && (passwordEmpty && newKeyfilesEmpty || keyfilesEmpty && newKeyfilesEmpty))
        !           164:                                ok = false;
        !           165: 
        !           166:                        if (DialogMode == Mode::ChangePasswordAndKeyfiles
        !           167:                                && (NewPasswordPanel->GetPassword()->IsEmpty() && newKeyfilesEmpty || !NewPasswordPanel->PasswordsMatch()))
        !           168:                                ok = false;
        !           169:                }
        !           170: 
        !           171:                OKButton->Enable (ok);
        !           172:        }
        !           173: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.