* Users can check whether they know the correct password for a file
without bulk decrypting it.
* Users can optionally verify the built-in integrity of the file without
writing out the plaintext.
* Progress bar dialog is now hidden when an exception takes place,
solving the problem of continued
progress bar animation underneath an error or informational dialog.
* Internally, the "encrypt/decrypt" bool which is passed around has been
replaced by a four-valued
action enum, including in the DLL API.
* The aescrypt command line executable which invokes the DLL supports a
few extra options to test
the new actions.
diff -urp AESCrypt_source_v309-p2/AESCrypt/AESCrypt.cpp
AESCrypt_source_v309/AESCrypt/AESCrypt.cpp
--- AESCrypt_source_v309-p2/AESCrypt/AESCrypt.cpp 2013-03-09
23:13:54.000000000 -0800
+++ AESCrypt_source_v309/AESCrypt/AESCrypt.cpp 2013-09-06
20:33:44.357519400 -0700
@@ -16,6 +16,7 @@
#include "resource.h"
#include "AESCrypt.h"
#include "AESCryptWorkerThreads.h"
+#include "../AESCrypt32/AESCrypt32.h"
class AESCryptModule : public CAtlDllModuleT< AESCryptModule >
{
@@ -127,9 +128,9 @@ STDAPI DllUnregisterServer(void)
}
__declspec(dllexport) void __cdecl ProcessFiles(StringList *file_list,
- bool encrypt)
+ AESAction action)
{
- AES_Crypt_Worker_Threads.ProcessFiles(file_list, encrypt);
+ AES_Crypt_Worker_Threads.ProcessFiles(file_list, action);
}
__declspec(dllexport) bool __cdecl AESLibBusy()
diff -urp AESCrypt_source_v309-p2/AESCrypt/AESCrypt.rc
AESCrypt_source_v309/AESCrypt/AESCrypt.rc
--- AESCrypt_source_v309-p2/AESCrypt/AESCrypt.rc 2013-09-06
08:22:29.158076700 -0700
+++ AESCrypt_source_v309/AESCrypt/AESCrypt.rc 2013-09-06
20:33:52.299527900 -0700
@@ -122,7 +122,8 @@ BEGIN
EDITTEXT IDC_PASSWDCONFIRM,6,47,208,14,ES_PASSWORD |
ES_AUTOHSCROLL
DEFPUSHBUTTON "OK",IDOK,222,17,50,16
PUSHBUTTON "Cancel",IDCANCEL,222,36,50,16
- CONTROL "Reveal
Typing",IDC_SHOW_TYPING,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,129,7,62,10
+ CONTROL "Reveal
Typing",IDC_SHOW_TYPING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,65,62,10
+ CONTROL "Verify File
Integrity",IDC_VERIFY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,77,65,73,10
END
IDD_PROGRESSDIALOG DIALOGEX 0, 0, 181, 87
diff -urp AESCrypt_source_v309-p2/AESCrypt/AESCryptShellExt.cpp
AESCrypt_source_v309/AESCrypt/AESCryptShellExt.cpp
--- AESCrypt_source_v309-p2/AESCrypt/AESCryptShellExt.cpp 2013-03-09
23:13:54.000000000 -0800
+++ AESCrypt_source_v309/AESCrypt/AESCryptShellExt.cpp 2013-09-06
20:34:48.691688800 -0700
@@ -15,6 +15,7 @@
#include "AESCrypt.h"
#include "AESCryptShellExt.h"
#include "AESCryptWorkerThreads.h"
+#include "../AESCrypt32/AESCrypt32.h"
/*
* Make the global thread class visible in this module.
@@ -295,6 +296,7 @@ HRESULT AESCryptShellExt::QueryContextMe
UINT uFlags)
{
UINT uCmdID = uidFirstCmd;
+ UINT uMenuFirst = uMenuIndex;
// If the flags include CMF_DEFAULTONLY then we shouldn't do
anything.
if (uFlags & CMF_DEFAULTONLY)
@@ -306,15 +308,21 @@ HRESULT AESCryptShellExt::QueryContextMe
if (AES_Files == true)
{
InsertMenu( hmenu,
- uMenuIndex,
+ uMenuIndex++,
MF_STRING | MF_BYPOSITION,
uCmdID++,
_T("AES Decrypt"));
+
+ InsertMenu( hmenu,
+ uMenuIndex++,
+ MF_STRING | MF_BYPOSITION,
+ uCmdID++,
+ _T("AES Check"));
}
else
{
InsertMenu( hmenu,
- uMenuIndex,
+ uMenuIndex++,
MF_STRING | MF_BYPOSITION,
uCmdID++,
_T("AES Encrypt"));
@@ -323,16 +331,18 @@ HRESULT AESCryptShellExt::QueryContextMe
// Insert the bitmap
if (Context_Bitmap != NULL )
{
- SetMenuItemBitmaps( hmenu,
- uMenuIndex,
- MF_BYPOSITION,
- Context_Bitmap,
- NULL);
+ for (UINT i = uMenuFirst; i < uMenuIndex; i++)
+ {
+ SetMenuItemBitmaps( hmenu,
+ i,
+ MF_BYPOSITION,
+ Context_Bitmap,
+ NULL);
+ }
}
- // Tell the shell that we added one menu item
- return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 1);
-
+ // Tell the shell how many items we added
+ return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, uMenuIndex -
uMenuFirst);
}
/*
@@ -368,6 +378,17 @@ HRESULT AESCryptShellExt::GetCommandStri
}
break;
+ case 1:
+ if (AES_Files == true)
+ {
+ help_text = _T("Check AES password and verify file integrity");
+ }
+ else
+ {
+ return E_INVALIDARG;
+ }
+ break;
+
default:
ATLASSERT(0); // should never get here
return E_INVALIDARG;
@@ -415,7 +436,22 @@ HRESULT AESCryptShellExt::GetCommandStri
}
}
break;
-
+ case 1:
+ if (AES_Files == true)
+ {
+ if (uFlags & GCS_UNICODE)
+ {
+ lstrcpynW((LPWSTR) szName, L"AES Verify",
cchMax);
+ }
+ else
+ {
+ lstrcpynA(szName, "AES Verify", cchMax);
+ }
+ }
+ else
+ {
+ return E_INVALIDARG;
+ }
default:
ATLASSERT(0); // should never get here
return E_INVALIDARG;
@@ -434,6 +470,8 @@ HRESULT AESCryptShellExt::GetCommandStri
*/
HRESULT AESCryptShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO pInfo)
{
+ AESAction action = Decrypt;
+
// If lpVerb really points to a string, ignore this function call
and bail out.
if (HIWORD(pInfo->lpVerb) != 0)
{
@@ -443,18 +481,24 @@ HRESULT AESCryptShellExt::InvokeCommand(
// Check that lpVerb is one of our commands (0 or 1)
switch (LOWORD(pInfo->lpVerb))
{
- case 0:
- AES_Crypt_Worker_Threads.ProcessFiles( File_List,
- (Non_AES_Files ==
TRUE));
- // We passed the pointer to AES_Crypt_Worker_Threads,
- // so set it to NULL here to avoid double deletion
- File_List = NULL;
- return S_OK;
- break;
+ case 0:
+ action = (Non_AES_Files ? Encrypt : Decrypt);
+ break;
+ case 1:
+ if (!Non_AES_Files) {
+ action = CheckPassword;
+ break;
+ }
+ // Fallthrough
default:
ATLASSERT(0); // should never get here
return E_INVALIDARG;
- break;
}
+
+ AES_Crypt_Worker_Threads.ProcessFiles( File_List, action );
+ // We passed the pointer to AES_Crypt_Worker_Threads,
+ // so set it to NULL here to avoid double deletion
+ File_List = NULL;
+ return S_OK;
}
diff -urp AESCrypt_source_v309-p2/AESCrypt/AESCryptWorkerThreads.cpp
AESCrypt_source_v309/AESCrypt/AESCryptWorkerThreads.cpp
---
AESCrypt_source_v309-p2/AESCrypt/AESCryptWorkerThreads.cpp 2013-09-06
02:16:14.849193800 -0700
+++ AESCrypt_source_v309/AESCrypt/AESCryptWorkerThreads.cpp 2013-09-06
20:33:44.433029000 -0700
@@ -100,13 +100,13 @@ bool AESCryptWorkerThreads::IsBusy()
*
*/
void AESCryptWorkerThreads::ProcessFiles( StringList *file_list,
- bool encrypt)
+ AESAction action)
{
PasswdDialog dlg;
- if (CheckOverwriteFiles(file_list, encrypt) && // files are not in the
way
- dlg.DoModal(::GetActiveWindow(), (encrypt ? 1 : 0)) == IDOK && //
prompt for password
- StartThread(file_list, dlg.passwd, encrypt)) // start thread
+ if (CheckOverwriteFiles(file_list, action) && // files are not in the
way
+ dlg.DoModal(::GetActiveWindow(), (LPARAM) action) == IDOK && //
prompt for password
+ StartThread(file_list, dlg.passwd, dlg.verifying ? Verify : action))
// start thread
{
// Thread started successfully and now owns file_list
return;
@@ -125,7 +125,7 @@ void AESCryptWorkerThreads::ProcessFiles
*/
bool AESCryptWorkerThreads::StartThread(StringList *file_list,
TCHAR *passwd,
- bool encrypt)
+ AESAction action)
{
WorkerData *worker_data = NULL;
DWORD thread_id;
@@ -135,7 +135,7 @@ bool AESCryptWorkerThreads::StartThread(
{
worker_data = new WorkerData;
worker_data->file_list = file_list;
- worker_data->encrypt = encrypt;
+ worker_data->action = action;
_tcscpy_s(worker_data->passwd, MAX_PASSWD_LEN+1, passwd);
worker_data->aes_crypt_worker_threads = this;
}
@@ -219,7 +219,7 @@ void AESCryptWorkerThreads::ThreadEntry(
// OK, we're in sync with our caller and cleaned up old threads
LeaveCriticalSection(&Critical_Section);
- if (worker_data->encrypt)
+ if (worker_data->action == Encrypt)
{
EncryptFiles( worker_data->file_list,
worker_data->passwd);
@@ -227,7 +227,8 @@ void AESCryptWorkerThreads::ThreadEntry(
else
{
DecryptFiles( worker_data->file_list,
- worker_data->passwd);
+ worker_data->passwd,
+ worker_data->action );
}
// Delete the file list
@@ -284,11 +285,14 @@ DWORD WINAPI ThreadInit(LPVOID lpParamet
*/
bool AESCryptWorkerThreads::CheckOverwriteFiles(
StringList *file_list,
- bool encrypt)
+ AESAction action)
{
+ if (action == CheckPassword || action == Verify)
+ return true;
+
for (StringListIter i = file_list->begin(); i != file_list->end();
i++) {
const String &name = *i;
- String dest = encrypt ? name + _T(".aes") : name.substr(0,
name.length() - 4);
+ String dest = (action == Encrypt) ? name + _T(".aes") :
name.substr(0, name.length() - 4);
BufferedFile check_file;
DWORD result_code = check_file.OpenFile(dest.c_str(), false,
OPEN_EXISTING);
@@ -905,7 +909,8 @@ void AESCryptWorkerThreads::EncryptFiles
*/
void AESCryptWorkerThreads::DecryptFiles(
StringList *file_list,
- TCHAR *passwd)
+ TCHAR *passwd,
+ AESAction action)
{
aes_context aes_ctx;
sha256_context sha_ctx;
@@ -986,9 +991,17 @@ void AESCryptWorkerThreads::DecryptFiles
if (error_abort == false)
{
- result_code = out_buffered_file.OpenFile( out_file,
- true,
- CREATE_NEW);
+ if (action == Decrypt)
+ {
+ result_code = out_buffered_file.OpenFile( out_file,
+ true,
+ CREATE_NEW);
+ }
+ else
+ {
+ result_code = ERROR_SUCCESS;
+ }
+
if (result_code != ERROR_SUCCESS)
{
std::basic_string<TCHAR> message;
@@ -1292,6 +1305,16 @@ void AESCryptWorkerThreads::DecryptFiles
last_clock_time = clock();
current_percent = 0;
last_block_size_read = false;
+
+ if (action == CheckPassword)
+ {
+ throw SystemErrorException(
+ _T("Verified access to ") +
+ in_file +
+ _T("\nThe password is correct"),
+ 0, true);
+ }
+
while(bytes_left > 0)
{
bytes_left -= 16;
@@ -1342,17 +1365,20 @@ void AESCryptWorkerThreads::DecryptFiles
(last_block_size == 0)) ? 16 :
last_block_size;
// Write the decrypted block
- result_code = out_buffered_file.WriteFile(
- buffer,
- n,
-
&bytes_written);
- if (result_code != ERROR_SUCCESS)
- {
- std::basic_string<TCHAR> message;
- message = _T("Unable to write to ");
- message += out_file;
- throw SystemErrorException(message,
result_code);
- }
+ if (action == Decrypt)
+ {
+ result_code = out_buffered_file.WriteFile(
+ buffer,
+ n,
+ &bytes_written);
+ if (result_code != ERROR_SUCCESS)
+ {
+ std::basic_string<TCHAR> message;
+ message = _T("Unable to write to ");
+ message += out_file;
+ throw SystemErrorException(message, result_code);
+ }
+ }
// Update the UI when more than 250ms has
passed
// or when there is no more data to read or
@@ -1385,7 +1411,7 @@ void AESCryptWorkerThreads::DecryptFiles
}
}
- if (error_abort == false)
+ if (error_abort == false && action !=
CheckPassword)
{
if (last_block_size_read == false && version >=
1)
{
@@ -1458,19 +1484,35 @@ void AESCryptWorkerThreads::DecryptFiles
}
}
}
+
+ if (action == Verify)
+ {
+ throw SystemErrorException(
+ _T("Verified integrity of ") +
+ in_file +
+ _T("\nThe password is correct and
the file appears undamaged"),
+ 0, true);
+ }
+
}
catch(SystemErrorException e)
{
- ::ReportError(e.Message,e.Reason);
+ // First, hide the progress dialog, otherwise it lingers and may
keep animating
+ // for a moment even as the new dialog pops up.
+ dlg.ShowWindow(SW_HIDE);
+ dlg.UpdateWindow();
+ DoMessageLoop();
+ ::ReportError(e.Message,e.Reason,e.informative);
error_abort = true;
}
in_buffered_file.CloseFile();
- out_buffered_file.CloseFile();
+ if (action == Decrypt)
+ out_buffered_file.CloseFile();
// We will attempt to cleanup, but we don't care if
this
// really works or not...
- if (error_abort == true)
+ if (error_abort == true && action == Decrypt)
{
DeleteFile(out_file);
}
diff -urp AESCrypt_source_v309-p2/AESCrypt/AESCryptWorkerThreads.h
AESCrypt_source_v309/AESCrypt/AESCryptWorkerThreads.h
--- AESCrypt_source_v309-p2/AESCrypt/AESCryptWorkerThreads.h 2013-09-06
01:43:02.101147000 -0700
+++ AESCrypt_source_v309/AESCrypt/AESCryptWorkerThreads.h 2013-09-06
20:33:44.471533900 -0700
@@ -23,18 +23,19 @@ class AESCryptWorkerThreads
bool StartThread( StringList *file_list,
TCHAR *passwd,
- bool encrypt);
+ AESAction action);
inline void DoMessageLoop();
bool CheckOverwriteFiles( StringList *file_list,
- bool encrypt);
+ AESAction action);
void EncryptFiles( StringList *file_list,
TCHAR *passwd);
void DecryptFiles( StringList *file_list,
- TCHAR *passwd);
+ TCHAR *passwd,
+ AESAction action);
public:
AESCryptWorkerThreads();
@@ -45,7 +46,7 @@ class AESCryptWorkerThreads
// Process files for encryption (true) or decryption (false)
void ProcessFiles( StringList *file_list,
- bool encrypt);
+ AESAction action);
// This should only be called by threads
// spawned by this class.
@@ -56,7 +57,7 @@ struct WorkerData
{
StringList *file_list;
TCHAR passwd[MAX_PASSWD_LEN+1];
- bool encrypt;
+ AESAction action;
HANDLE thread_handle;
AESCryptWorkerThreads *aes_crypt_worker_threads;
};
diff -urp AESCrypt_source_v309-p2/AESCrypt/ErrorHandling.cpp
AESCrypt_source_v309/AESCrypt/ErrorHandling.cpp
--- AESCrypt_source_v309-p2/AESCrypt/ErrorHandling.cpp 2013-03-09
23:13:54.000000000 -0800
+++ AESCrypt_source_v309/AESCrypt/ErrorHandling.cpp 2013-09-06
20:33:44.444030400 -0700
@@ -17,7 +17,8 @@
* Report an error to the user
*/
void ReportError( std::basic_string<TCHAR> message,
- DWORD reason)
+ DWORD reason,
+ bool just_informative)
{
LPTSTR error_string;
@@ -45,7 +46,7 @@ void ReportError( std::basic_string<TC
}
}
- ::MessageBox(NULL,message.c_str(),_T("AES Crypt Error"), MB_OK);
+ ::MessageBox(NULL,message.c_str(), just_informative ? _T("AES Crypt
Notice") : _T("AES Crypt Error"), MB_OK);
}
diff -urp AESCrypt_source_v309-p2/AESCrypt/ErrorHandling.h
AESCrypt_source_v309/AESCrypt/ErrorHandling.h
--- AESCrypt_source_v309-p2/AESCrypt/ErrorHandling.h 2013-03-09
23:13:54.000000000 -0800
+++ AESCrypt_source_v309/AESCrypt/ErrorHandling.h 2013-09-06
20:33:44.478534800 -0700
@@ -11,7 +11,8 @@
/* Global Error Reporting Function */
void ReportError( std::basic_string<TCHAR> message,
- DWORD reason);
+ DWORD reason,
+ bool just_informative = false);
/*
* This class exists to allow us to easily bail out when
@@ -22,9 +23,12 @@ class SystemErrorException
public:
DWORD Reason;
std::basic_string<TCHAR> Message;
+ bool informative;
SystemErrorException( std::basic_string<TCHAR> message,
- DWORD reason = 0)
+ DWORD reason = 0,
+ bool inf = false)
+ : informative(inf)
{
Reason = reason;
Message = message;
diff -urp AESCrypt_source_v309-p2/AESCrypt/PasswdDialog.cpp
AESCrypt_source_v309/AESCrypt/PasswdDialog.cpp
--- AESCrypt_source_v309-p2/AESCrypt/PasswdDialog.cpp 2013-09-06
08:22:36.947565800 -0700
+++ AESCrypt_source_v309/AESCrypt/PasswdDialog.cpp 2013-09-06
20:33:44.449531100 -0700
@@ -13,12 +13,14 @@
#include "stdafx.h"
#include "PasswdDialog.h"
+#include "../AESCrypt32/AESCrypt32.h"
/*
* PasswdDialog Constructor
*/
PasswdDialog::PasswdDialog()
: reveal_typing(false)
+ , verifying(false)
{
}
@@ -36,6 +38,7 @@ LRESULT PasswdDialog::OnInitDialog(UINT
{
HWND window_handle;
HICON hicon;
+ AESAction action = (AESAction) lParam;
CAxDialogImpl<PasswdDialog>::OnInitDialog(uMsg, wParam, lParam,
bHandled);
bHandled = TRUE;
@@ -57,24 +60,39 @@ LRESULT PasswdDialog::OnInitDialog(UINT
EM_SETLIMITTEXT,
MAX_PASSWD_LEN,
0);
- if (lParam)
- {
- encrypting = true;
+
+
+ switch (action) {
+ case Encrypt:
+ encrypting = true;
SendDlgItemMessage( IDC_PASSWDCONFIRM,
EM_SETLIMITTEXT,
MAX_PASSWD_LEN,
0);
- }
- else
- {
- encrypting = false;
+ // Hide verify control
+ window_handle = GetDlgItem(IDC_VERIFY);
+ ::ShowWindow(window_handle, SW_HIDE);
+ break;
+ case Verify:
+ // Check-box the verify control
+ SendDlgItemMessage(IDC_VERIFY, BM_SETCHECK, BST_CHECKED, 0);
+ verifying = true;
+ // fallthrough
+ case CheckPassword:
+ // Show the verify control
+ window_handle = GetDlgItem(IDC_VERIFY);
+ ::ShowWindow(window_handle, SW_SHOW);
+ // fallthrough
+ case Decrypt:
+ encrypting = false;
// Hide the password confirmation controls
window_handle = GetDlgItem(IDC_PASSWDCONFIRM);
::ShowWindow(window_handle, SW_HIDE);
window_handle = GetDlgItem(IDC_ENTERPASSWDCONFIRM);
::ShowWindow(window_handle, SW_HIDE);
+ break;
}
return 1; // Let the system set the focus
@@ -166,3 +184,10 @@ LRESULT PasswdDialog::OnBnClickedShowTyp
return 0;
}
+
+
+LRESULT PasswdDialog::OnBnClickedVerify(WORD /*wNotifyCode*/, WORD
/*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
+{
+ verifying = (SendDlgItemMessage(IDC_VERIFY, BM_GETCHECK, 0, 0) ==
BST_CHECKED);
+ return 0;
+}
diff -urp AESCrypt_source_v309-p2/AESCrypt/PasswdDialog.h
AESCrypt_source_v309/AESCrypt/PasswdDialog.h
--- AESCrypt_source_v309-p2/AESCrypt/PasswdDialog.h 2013-09-06
08:22:36.953566600 -0700
+++ AESCrypt_source_v309/AESCrypt/PasswdDialog.h 2013-09-06
20:33:44.482035200 -0700
@@ -29,6 +29,7 @@ class PasswdDialog : public CAxDialogImp
TCHAR passwd[MAX_PASSWD_LEN+1];
bool encrypting;
bool reveal_typing;
+ bool verifying;
LRESULT password_hide_char;
BEGIN_MSG_MAP(PasswdDialog)
@@ -37,6 +38,7 @@ class PasswdDialog : public CAxDialogImp
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnClickedCancel)
CHAIN_MSG_MAP(CAxDialogImpl<PasswdDialog>)
COMMAND_HANDLER(IDC_SHOW_TYPING, BN_CLICKED, OnBnClickedShowTyping)
+ COMMAND_HANDLER(IDC_VERIFY, BN_CLICKED, OnBnClickedVerify)
END_MSG_MAP()
// Handler prototypes:
@@ -50,5 +52,6 @@ class PasswdDialog : public CAxDialogImp
LRESULT OnClickedCancel(WORD wNotifyCode, WORD wID, HWND
hWndCtl, BOOL& bHandled);
LRESULT OnBnClickedShowTyping(WORD /*wNotifyCode*/, WORD /*wID*/,
HWND /*hWndCtl*/, BOOL& /*bHandled*/);
+ LRESULT OnBnClickedVerify(WORD /*wNotifyCode*/, WORD /*wID*/, HWND
/*hWndCtl*/, BOOL& /*bHandled*/);
};
diff -urp AESCrypt_source_v309-p2/AESCrypt/resource.h
AESCrypt_source_v309/AESCrypt/resource.h
--- AESCrypt_source_v309-p2/AESCrypt/resource.h 2013-09-06
08:24:23.067541300 -0700
+++ AESCrypt_source_v309/AESCrypt/resource.h 2013-09-06
20:33:44.488536100 -0700
@@ -17,6 +17,7 @@
#define IDC_ENCRYPTINGMSG 208
#define IDC_FILENAME 209
#define IDC_SHOW_TYPING 210
+#define IDC_VERIFY 211
// Next default values for new objects
//
@@ -24,7 +25,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 206
#define _APS_NEXT_COMMAND_VALUE 32768
-#define _APS_NEXT_CONTROL_VALUE 211
+#define _APS_NEXT_CONTROL_VALUE 212
#define _APS_NEXT_SYMED_VALUE 105
#endif
#endif
diff -urp AESCrypt_source_v309-p2/AESCrypt/stdafx.h
AESCrypt_source_v309/AESCrypt/stdafx.h
--- AESCrypt_source_v309-p2/AESCrypt/stdafx.h 2013-09-06
01:26:21.891136400 -0700
+++ AESCrypt_source_v309/AESCrypt/stdafx.h 2013-09-06 20:33:44.495537000
-0700
@@ -49,6 +49,7 @@ typedef std::list< String >::iterator St
#include <commctrl.h>
#include <shlobj.h>
#include <string>
+#include "../AESCrypt32/AESCrypt32.h"
// What is the longest password in characters?
#define MAX_PASSWD_LEN 1024
diff -urp AESCrypt_source_v309-p2/AESCrypt32/AESCrypt32.cpp
AESCrypt_source_v309/AESCrypt32/AESCrypt32.cpp
--- AESCrypt_source_v309-p2/AESCrypt32/AESCrypt32.cpp 2013-03-09
23:13:54.000000000 -0800
+++ AESCrypt_source_v309/AESCrypt32/AESCrypt32.cpp 2013-09-06
09:25:10.197668100 -0700
@@ -60,7 +60,7 @@ int APIENTRY _tWinMain( HINSTANCE hInsta
MSG msg;
LPWSTR *szArglist;
int nArgs;
- bool encrypt = false;
+ AESAction action = Decrypt;
StringList *file_list = NULL;
// Allocate memory for the file list
@@ -120,22 +120,22 @@ int APIENTRY _tWinMain( HINSTANCE hInsta
{
if (i==1)
{
- if (!_tcscmp(szArglist[i],_T("/d")))
+ if (!_tcscmp(szArglist[i],_T("/d")) ||
!_tcscmp(szArglist[i],_T("-d")))
{
- encrypt = false;
+ action = Decrypt;
}
- else if (!_tcscmp(szArglist[i],_T("-d")))
+ else if (!_tcscmp(szArglist[i],_T("/e")) ||
!_tcscmp(szArglist[i],_T("-e")))
{
- encrypt = false;
- }
- else if (!_tcscmp(szArglist[i],_T("/e")))
- {
- encrypt = true;
- }
- else if (!_tcscmp(szArglist[i],_T("-e")))
- {
- encrypt = true;
+ action = Encrypt;
}
+ else if (!_tcscmp(szArglist[i],_T("/c")) ||
!_tcscmp(szArglist[i],_T("-e")))
+ {
+ action = CheckPassword;
+ }
+ else if (!_tcscmp(szArglist[i],_T("/v")) ||
!_tcscmp(szArglist[i],_T("-v")))
+ {
+ action = Verify;
+ }
else
{
file_list->push_back(szArglist[i]);
@@ -151,7 +151,7 @@ int APIENTRY _tWinMain( HINSTANCE hInsta
if (file_list->empty())
{
::MessageBox( NULL,
- _T("Usage: aescrypt32 [/d|/e] filename ..."),
+ _T("Usage: aescrypt32 [/d|/e|/c|/v] filename
..."),
MAKEINTRESOURCE(IDS_APP_TITLE),
MB_ICONERROR | MB_OK);
SendMessage(hWnd, WM_DESTROY, 0, 0);
@@ -159,7 +159,7 @@ int APIENTRY _tWinMain( HINSTANCE hInsta
else
{
// Initiate file processing
- ProcessFiles(file_list, encrypt);
+ ProcessFiles(file_list, action);
// The file list will be consumed and freed by the worker
thread
// ultimately processes the list of files.
diff -urp AESCrypt_source_v309-p2/AESCrypt32/AESCrypt32.h
AESCrypt_source_v309/AESCrypt32/AESCrypt32.h
--- AESCrypt_source_v309-p2/AESCrypt32/AESCrypt32.h 2013-03-09
23:13:54.000000000 -0800
+++ AESCrypt_source_v309/AESCrypt32/AESCrypt32.h 2013-09-06
09:59:51.032900600 -0700
@@ -18,8 +18,12 @@
#include "resource.h"
+enum AESAction {
+ Decrypt, Encrypt, CheckPassword, Verify
+};
+
// Externals in the AESCrypt DLL
-bool AESLibBusy();
-void ProcessFiles( StringList *file_list,
- bool encrypt);
+__declspec(dllexport) bool __cdecl AESLibBusy();
+__declspec(dllexport) void __cdecl ProcessFiles( StringList
*file_list,
+ AESAction action);