VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Mount/Favorites.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Mount/Favorites.cpp')
-rw-r--r--src/Mount/Favorites.cpp84
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
25using namespace std; 26using 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);