diff options
Diffstat (limited to 'src/Mount/Favorites.cpp')
-rw-r--r-- | src/Mount/Favorites.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/Mount/Favorites.cpp b/src/Mount/Favorites.cpp index c27fed5f..ee34272f 100644 --- a/src/Mount/Favorites.cpp +++ b/src/Mount/Favorites.cpp | |||
@@ -21,6 +21,7 @@ | |||
21 | #include "Resource.h" | 21 | #include "Resource.h" |
22 | #include "Xml.h" | 22 | #include "Xml.h" |
23 | #include "Favorites.h" | 23 | #include "Favorites.h" |
24 | #include "Pkcs5.h" | ||
24 | 25 | ||
25 | using namespace std; | 26 | using namespace std; |
26 | 27 | ||
@@ -98,6 +99,8 @@ namespace VeraCrypt | |||
98 | favorite.SystemEncryption = prop.partitionInInactiveSysEncScope ? true : false; | 99 | favorite.SystemEncryption = prop.partitionInInactiveSysEncScope ? true : false; |
99 | favorite.OpenExplorerWindow = (bExplore == TRUE); | 100 | favorite.OpenExplorerWindow = (bExplore == TRUE); |
100 | favorite.Pim = prop.volumePim; | 101 | favorite.Pim = prop.volumePim; |
102 | favorite.Pkcs5 = prop.pkcs5; | ||
103 | favorite.TrueCryptMode = (prop.pkcs5Iterations == get_pkcs5_iteration_count(prop.pkcs5, 0, TRUE, prop.partitionInInactiveSysEncScope))? 1 : 0; | ||
101 | memcpy (favorite.VolumeID, prop.volumeID, VOLUME_ID_SIZE); | 104 | memcpy (favorite.VolumeID, prop.volumeID, VOLUME_ID_SIZE); |
102 | 105 | ||
103 | if (favorite.VolumePathId.empty() | 106 | if (favorite.VolumePathId.empty() |
@@ -669,6 +672,30 @@ namespace VeraCrypt | |||
669 | favorite.DisconnectedDevice = true; | 672 | favorite.DisconnectedDevice = true; |
670 | } | 673 | } |
671 | 674 | ||
675 | XmlGetAttributeText (xml, "TrueCryptMode", boolVal, sizeof (boolVal)); | ||
676 | if (boolVal[0]) | ||
677 | favorite.TrueCryptMode = (boolVal[0] == '1')? 1 : 0; | ||
678 | else | ||
679 | favorite.TrueCryptMode = -1; | ||
680 | |||
681 | if (favorite.TrueCryptMode) | ||
682 | favorite.Pim = 0; | ||
683 | |||
684 | XmlGetAttributeText (xml, "pkcs5", label, sizeof (label)); | ||
685 | if (label[0]) | ||
686 | favorite.Pkcs5 = strtol (label, NULL, 10); | ||
687 | else | ||
688 | favorite.Pkcs5 = -1; | ||
689 | if ( (favorite.Pkcs5 != -1) | ||
690 | && ( (favorite.Pkcs5 < FIRST_PRF_ID) | ||
691 | || (favorite.Pkcs5 > LAST_PRF_ID) | ||
692 | || (favorite.TrueCryptMode == 1 && (0 == get_pkcs5_iteration_count (favorite.Pkcs5, 0, TRUE, favorite.SystemEncryption? TRUE : FALSE))) | ||
693 | ) | ||
694 | ) | ||
695 | { | ||
696 | favorite.Pkcs5 = -1; | ||
697 | } | ||
698 | |||
672 | favorites.push_back (favorite); | 699 | favorites.push_back (favorite); |
673 | xml++; | 700 | xml++; |
674 | } | 701 | } |
@@ -762,6 +789,14 @@ namespace VeraCrypt | |||
762 | if (favorite.Pim > 0) | 789 | if (favorite.Pim > 0) |
763 | s += L" pim=\"" + IntToWideString(favorite.Pim) + L"\""; | 790 | s += L" pim=\"" + IntToWideString(favorite.Pim) + L"\""; |
764 | 791 | ||
792 | if (favorite.Pkcs5 > 0) | ||
793 | s += L" pkcs5=\"" + IntToWideString(favorite.Pkcs5) + L"\""; | ||
794 | |||
795 | if (favorite.TrueCryptMode > 0) | ||
796 | s += L" TrueCryptMode=\"1\""; | ||
797 | else if (favorite.TrueCryptMode == 0) | ||
798 | s += L" TrueCryptMode=\"0\""; | ||
799 | |||
765 | if (favorite.ReadOnly) | 800 | if (favorite.ReadOnly) |
766 | s += L" readonly=\"1\""; | 801 | s += L" readonly=\"1\""; |
767 | 802 | ||
@@ -871,6 +906,29 @@ namespace VeraCrypt | |||
871 | SetCheckBox (hwndDlg, IDC_FAVORITE_MOUNT_READONLY, favorite.ReadOnly); | 906 | SetCheckBox (hwndDlg, IDC_FAVORITE_MOUNT_READONLY, favorite.ReadOnly); |
872 | SetCheckBox (hwndDlg, IDC_FAVORITE_MOUNT_REMOVABLE, favorite.Removable); | 907 | SetCheckBox (hwndDlg, IDC_FAVORITE_MOUNT_REMOVABLE, favorite.Removable); |
873 | SetCheckBox (hwndDlg, IDC_FAVORITE_USE_VOLUME_ID, favorite.UseVolumeID && bIsDevice); | 908 | SetCheckBox (hwndDlg, IDC_FAVORITE_USE_VOLUME_ID, favorite.UseVolumeID && bIsDevice); |
909 | SetCheckBox (hwndDlg, IDC_TRUECRYPT_MODE, (favorite.TrueCryptMode > 0)? TRUE : FALSE); | ||
910 | |||
911 | /* Populate the PRF algorithms list */ | ||
912 | int nIndex, i, nSelected = 0; | ||
913 | HWND hComboBox = GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID); | ||
914 | SendMessage (hComboBox, CB_RESETCONTENT, 0, 0); | ||
915 | |||
916 | nIndex = (int) SendMessageW (hComboBox, CB_ADDSTRING, 0, (LPARAM) GetString ("AUTODETECTION")); | ||
917 | SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (LPARAM) 0); | ||
918 | |||
919 | for (i = FIRST_PRF_ID; i <= LAST_PRF_ID; i++) | ||
920 | { | ||
921 | if (!favorite.SystemEncryption || (favorite.TrueCryptMode != 1) || (i == RIPEMD160)) | ||
922 | { | ||
923 | nIndex = (int) SendMessage (hComboBox, CB_ADDSTRING, 0, (LPARAM) get_pkcs5_prf_name(i)); | ||
924 | SendMessage (hComboBox, CB_SETITEMDATA, nIndex, (LPARAM) i); | ||
925 | if (favorite.Pkcs5 == i) | ||
926 | nSelected = nIndex; | ||
927 | } | ||
928 | } | ||
929 | |||
930 | if (favorite.Pkcs5 >= 0) | ||
931 | SendMessage (hComboBox, CB_SETCURSEL, nSelected, 0); | ||
874 | 932 | ||
875 | if (IsRepeatedByteArray (0, favorite.VolumeID, sizeof (favorite.VolumeID)) || !bIsDevice) | 933 | if (IsRepeatedByteArray (0, favorite.VolumeID, sizeof (favorite.VolumeID)) || !bIsDevice) |
876 | { | 934 | { |
@@ -898,6 +956,9 @@ namespace VeraCrypt | |||
898 | EnableWindow (GetDlgItem (hwndDlg, IDC_FAVORITE_MOVE_UP), enable); | 956 | EnableWindow (GetDlgItem (hwndDlg, IDC_FAVORITE_MOVE_UP), enable); |
899 | EnableWindow (GetDlgItem (hwndDlg, IDC_FAVORITE_MOVE_DOWN), enable); | 957 | EnableWindow (GetDlgItem (hwndDlg, IDC_FAVORITE_MOVE_DOWN), enable); |
900 | EnableWindow (GetDlgItem (hwndDlg, IDC_FAVORITE_REMOVE), enable); | 958 | EnableWindow (GetDlgItem (hwndDlg, IDC_FAVORITE_REMOVE), enable); |
959 | EnableWindow (GetDlgItem (hwndDlg, IDT_PKCS5_PRF), enable && !favorite.SystemEncryption); | ||
960 | EnableWindow (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), enable && !favorite.SystemEncryption); | ||
961 | EnableWindow (GetDlgItem (hwndDlg, IDC_TRUECRYPT_MODE), enable && !favorite.SystemEncryption); | ||
901 | EnableWindow (GetDlgItem (hwndDlg, IDT_PIM), enable); | 962 | EnableWindow (GetDlgItem (hwndDlg, IDT_PIM), enable); |
902 | EnableWindow (GetDlgItem (hwndDlg, IDC_PIM), enable); | 963 | EnableWindow (GetDlgItem (hwndDlg, IDC_PIM), enable); |
903 | EnableWindow (GetDlgItem (hwndDlg, IDC_SHOW_PIM), enable); | 964 | EnableWindow (GetDlgItem (hwndDlg, IDC_SHOW_PIM), enable); |
@@ -971,6 +1032,29 @@ namespace VeraCrypt | |||
971 | favorite.Pim = GetPim (hwndDlg, IDC_PIM); | 1032 | favorite.Pim = GetPim (hwndDlg, IDC_PIM); |
972 | favorite.UseLabelInExplorer = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_USE_LABEL_IN_EXPLORER) != 0); | 1033 | favorite.UseLabelInExplorer = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_USE_LABEL_IN_EXPLORER) != 0); |
973 | favorite.UseVolumeID = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_USE_VOLUME_ID) != 0); | 1034 | favorite.UseVolumeID = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_USE_VOLUME_ID) != 0); |
1035 | int nSelected = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETCURSEL, 0, 0); | ||
1036 | if (nSelected != CB_ERR) | ||
1037 | favorite.Pkcs5 = (int) SendMessage (GetDlgItem (hwndDlg, IDC_PKCS5_PRF_ID), CB_GETITEMDATA, nSelected, 0); | ||
1038 | else | ||
1039 | favorite.Pkcs5 = -1; | ||
1040 | BOOL selectedTrueCryptMode = (IsDlgButtonChecked (hwndDlg, IDC_TRUECRYPT_MODE) != 0)? 1 : 0; | ||
1041 | if ((favorite.TrueCryptMode >= 0) || selectedTrueCryptMode) | ||
1042 | favorite.TrueCryptMode = selectedTrueCryptMode; | ||
1043 | |||
1044 | if (favorite.TrueCryptMode == 1) | ||
1045 | { | ||
1046 | if ((favorite.Pkcs5 > 0) && !is_pkcs5_prf_supported (favorite.Pkcs5, TRUE, favorite.SystemEncryption? PRF_BOOT_MBR : PRF_BOOT_NO)) | ||
1047 | { | ||
1048 | Error ("ALGO_NOT_SUPPORTED_FOR_TRUECRYPT_MODE", hwndDlg); | ||
1049 | favorite.Pkcs5 = 0; | ||
1050 | } | ||
1051 | |||
1052 | if (favorite.Pim > 0) | ||
1053 | { | ||
1054 | Error ("PIM_NOT_SUPPORTED_FOR_TRUECRYPT_MODE", hwndDlg); | ||
1055 | favorite.Pim = 0; | ||
1056 | } | ||
1057 | } | ||
974 | 1058 | ||
975 | favorite.ReadOnly = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_MOUNT_READONLY) != 0); | 1059 | favorite.ReadOnly = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_MOUNT_READONLY) != 0); |
976 | favorite.Removable = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_MOUNT_REMOVABLE) != 0); | 1060 | favorite.Removable = (IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_MOUNT_REMOVABLE) != 0); |