diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2017-01-10 05:25:49 +0100 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2017-01-12 09:42:54 +0100 |
commit | e831198b3b0afbcd21cb9a4b1aef90fa8b198d69 (patch) | |
tree | 5be0a3402375068ef37ce2d5b6b084c5b01d2521 | |
parent | e3d5077939898f691dcecc965e77b81a3443b662 (diff) | |
download | VeraCrypt-e831198b3b0afbcd21cb9a4b1aef90fa8b198d69.tar.gz VeraCrypt-e831198b3b0afbcd21cb9a4b1aef90fa8b198d69.zip |
Windows: Fix Streebog not recognized by /hash command line switch but making hash names matching more generic.
-rw-r--r-- | src/Common/Crypto.c | 5 | ||||
-rw-r--r-- | src/Common/Crypto.h | 4 | ||||
-rw-r--r-- | src/Format/Tcformat.c | 18 | ||||
-rw-r--r-- | src/Mount/Mount.c | 18 |
4 files changed, 26 insertions, 19 deletions
diff --git a/src/Common/Crypto.c b/src/Common/Crypto.c index 808c8af7..6c2b2e84 100644 --- a/src/Common/Crypto.c +++ b/src/Common/Crypto.c @@ -762,16 +762,17 @@ Hash *HashGet (int id) return 0; } - +#ifdef _WIN32 int HashGetIdByName (wchar_t *name) { int i; for (i = 0; Hashes[i].Id != 0; i++) - if (wcscmp (Hashes[i].Name, name) == 0) + if (_wcsicmp (Hashes[i].Name, name) == 0) return Hashes[i].Id; return 0; } +#endif const wchar_t *HashGetName (int hashId) { diff --git a/src/Common/Crypto.h b/src/Common/Crypto.h index 8e8bace7..9aba0eae 100644 --- a/src/Common/Crypto.h +++ b/src/Common/Crypto.h @@ -363,7 +363,9 @@ BOOL EAIsModeSupported (int ea, int testedMode); #ifndef TC_WINDOWS_BOOT const wchar_t *HashGetName (int hash_algo_id); - +#ifdef _WIN32 +int HashGetIdByName (wchar_t *name); +#endif Hash *HashGet (int id); void HashGetName2 (wchar_t *buf, int hashId); BOOL HashIsDeprecated (int hashId); diff --git a/src/Format/Tcformat.c b/src/Format/Tcformat.c index d83d9f49..02210b15 100644 --- a/src/Format/Tcformat.c +++ b/src/Format/Tcformat.c @@ -9000,20 +9000,22 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine) if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs, szTmp, ARRAYSIZE (szTmp))) { - if (_wcsicmp(szTmp, L"sha512") == 0 || _wcsicmp(szTmp, L"sha-512") == 0) + /* match against special names first */ + if (_wcsicmp(szTmp, L"sha512") == 0) CmdVolumePkcs5 = SHA512; - else if (_wcsicmp(szTmp, L"whirlpool") == 0) - CmdVolumePkcs5 = WHIRLPOOL; - else if (_wcsicmp(szTmp, L"sha256") == 0 || _wcsicmp(szTmp, L"sha-256") == 0) + else if (_wcsicmp(szTmp, L"sha256") == 0) CmdVolumePkcs5 = SHA256; - else if (_wcsicmp(szTmp, L"ripemd160") == 0 || _wcsicmp(szTmp, L"ripemd-160") == 0) + else if (_wcsicmp(szTmp, L"ripemd160") == 0) CmdVolumePkcs5 = RIPEMD160; else { - CmdVolumePkcs5 = 0; - AbortProcess ("COMMAND_LINE_ERROR"); + /* match using internal hash names */ + CmdVolumePkcs5 = HashGetIdByName (szTmp); + if (0 == CmdVolumePkcs5) + { + AbortProcess ("COMMAND_LINE_ERROR"); + } } - } else AbortProcess ("COMMAND_LINE_ERROR"); diff --git a/src/Mount/Mount.c b/src/Mount/Mount.c index 28a43acf..e90a0571 100644 --- a/src/Mount/Mount.c +++ b/src/Mount/Mount.c @@ -8836,20 +8836,22 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine) if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs, szTmp, ARRAYSIZE (szTmp))) { - if (_wcsicmp(szTmp, L"sha512") == 0 || _wcsicmp(szTmp, L"sha-512") == 0) + /* match against special names first */ + if (_wcsicmp(szTmp, L"sha512") == 0) CmdVolumePkcs5 = SHA512; - else if (_wcsicmp(szTmp, L"whirlpool") == 0) - CmdVolumePkcs5 = WHIRLPOOL; - else if (_wcsicmp(szTmp, L"sha256") == 0 || _wcsicmp(szTmp, L"sha-256") == 0) + else if (_wcsicmp(szTmp, L"sha256") == 0) CmdVolumePkcs5 = SHA256; - else if (_wcsicmp(szTmp, L"ripemd160") == 0 || _wcsicmp(szTmp, L"ripemd-160") == 0) + else if (_wcsicmp(szTmp, L"ripemd160") == 0) CmdVolumePkcs5 = RIPEMD160; else { - CmdVolumePkcs5 = 0; - AbortProcess ("COMMAND_LINE_ERROR"); + /* match using internal hash names */ + CmdVolumePkcs5 = HashGetIdByName (szTmp); + if (0 == CmdVolumePkcs5) + { + AbortProcess ("COMMAND_LINE_ERROR"); + } } - } else AbortProcess ("COMMAND_LINE_ERROR"); |