📄 pgppassphrasedialog.cpp
字号:
if(options->mPrompt)
SetDlgItemText (hDlg, IDC_PROMPTSTRING, options->mPrompt);
gpp->bHideText = TRUE;
CheckDlgButton (hDlg, IDC_HIDETYPING, BST_CHECKED);
SetCapsLockMessageState(hDlg);
SetForegroundWindow (hDlg);
// Force focus to passphrase box
SetFocus(GetDlgItem(hDlg, IDC_PHRASE1));
break;
}
case WM_KEYUP:
{
SetCapsLockMessageState(hDlg);
break;
}
case WM_HELP:
{
char szHelpFile[MAX_PATH+1];
GetHelpDir(szHelpFile);
WinHelp ((HWND)(((LPHELPINFO) lParam)->hItemHandle), szHelpFile,
HELP_WM_HELP, (DWORD) (LPSTR) aIds);
break;
}
case WM_CONTEXTMENU:
{
char szHelpFile[MAX_PATH+1];
GetHelpDir(szHelpFile);
WinHelp ((HWND) wParam, szHelpFile, HELP_CONTEXTMENU,
(DWORD) (LPVOID) aIds);
break;
}
case WM_QUIT:
case WM_CLOSE:
case WM_DESTROY:
{
HWND hwndPhrase1,hwndPhrase2;
gpp=(GPP *)GetWindowLong (hDlg, GWL_USERDATA);
ClearPassphrases(hDlg,gpp);
hwndPhrase1=GetDlgItem(hDlg, IDC_PHRASE1);
hwndPhrase2=GetDlgItem(hDlg, IDC_PHRASE2);
if(hwndPhrase1)
{
SetWindowLong (hwndPhrase1,
GWL_WNDPROC,
(LONG)gpp->wpOrigPhrase1Proc);
}
if(hwndPhrase2)
{
SetWindowLong (hwndPhrase2,
GWL_WNDPROC,
(LONG)gpp->wpOrigPhrase2Proc);
}
EndDialog(hDlg,kPGPError_UserAbort);
break;
}
case WM_CTLCOLOREDIT:
{
HWND hwndPhrase1,hwndPhrase2;
gpp=(GPP *)GetWindowLong (hDlg, GWL_USERDATA);
hwndPhrase1=GetDlgItem(hDlg, IDC_PHRASE1);
hwndPhrase2=GetDlgItem(hDlg, IDC_PHRASE2);
if(lParam==0)
break;
if (((HWND)lParam == hwndPhrase1) ||
((HWND)lParam == hwndPhrase2))
{
SetBkColor ((HDC)wParam, GetSysColor (COLOR_WINDOW));
if (gpp->bHideText)
SetTextColor ((HDC)wParam, GetSysColor (COLOR_WINDOW));
else
SetTextColor ((HDC)wParam,
GetSysColor (COLOR_WINDOWTEXT));
return (BOOL)CreateSolidBrush (GetSysColor (COLOR_WINDOW));
}
break;
}
case WM_COMMAND:
{
gpp=(GPP *)GetWindowLong (hDlg, GWL_USERDATA);
switch(LOWORD (wParam))
{
case IDCANCEL:
EndDialog (hDlg, kPGPError_UserAbort);
break;
case IDC_HIDETYPING :
{
HWND hwndPhrase1,hwndPhrase2;
hwndPhrase1=GetDlgItem(hDlg, IDC_PHRASE1);
hwndPhrase2=GetDlgItem(hDlg, IDC_PHRASE2);
if (IsDlgButtonChecked (hDlg, IDC_HIDETYPING)
== BST_CHECKED)
gpp->bHideText = TRUE;
else
gpp->bHideText = FALSE;
if(hwndPhrase1!=NULL)
InvalidateRect (hwndPhrase1, NULL, TRUE);
if(hwndPhrase2!=NULL)
InvalidateRect (hwndPhrase2, NULL, TRUE);
break;
}
}
break;
}
}
return FALSE;
}
HWND DisplayOptions(HWND hDlg,PGPOptionListRef options,int y)
{
if(options==NULL)
{
return NULL;
}
else
{
RECT rc;
GetWindowRect(hDlg,&rc);
SetWindowPos (hDlg,
NULL, 0, 0,
rc.right-rc.left,rc.bottom-rc.top+45,
SWP_NOMOVE|SWP_NOZORDER);
return CreateOptionsControl(hDlg,
options,
10,y,
200,71);
}
}
// ****************************************************************************
// ****************************************************************************
// ________________________
//
// Dialog Message procedure
BOOL CALLBACK
pgpPassphraseDlgProc (
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
CPGPPassphraseDialogOptions *options;
GPP *gpp;
INT i;
BOOL Common;
Common=DoCommonCalls (hDlg,uMsg,wParam,lParam);
if(Common)
return Common;
switch (uMsg)
{
case WM_INITDIALOG:
{
gpp=(GPP *)GetWindowLong (hDlg, GWL_USERDATA);
options = (CPGPPassphraseDialogOptions *)
gpp->options;
gpp->iNextTabControl = IDOK;
gpp->wpOrigPhrase1Proc = (WNDPROC) SetWindowLong (
GetDlgItem (hDlg, IDC_PHRASE1),
GWL_WNDPROC,
(LONG) PhraseSubclassProc);
gpp->hwndOptionsControl=DisplayOptions(hDlg,options->mDialogOptions,107);
return FALSE;
}
case WM_COMMAND:
{
gpp=(GPP *)GetWindowLong (hDlg, GWL_USERDATA);
options = (CPGPPassphraseDialogOptions *)
gpp->options;
switch(LOWORD (wParam))
{
case IDOK:
{
FreePassphrases(gpp);
i = SendDlgItemMessage (hDlg, IDC_PHRASE1,
WM_GETTEXTLENGTH, 0, 0) +1;
gpp->szDummy = (char *)secAlloc (gpp->context, i);
if(gpp->szDummy)
{
gpp->pszPassPhrase = (char *)secAlloc (gpp->context, i);
if (gpp->pszPassPhrase)
{
GetDlgItemText (hDlg, IDC_PHRASE1, gpp->szDummy, i);
if(PassphraseLengthAndQualityOK(hDlg,options,gpp->pszPassPhrase))
{
ClearPassphrases(hDlg,gpp);
SaveOptionSettings(gpp->hwndOptionsControl);
EndDialog (hDlg, kPGPError_NoErr);
break;
}
// Passphrase quality not enough
ClearPassphrases(hDlg,gpp);
FreePassphrases(gpp);
break;
}
}
// Couldn't allocate passphrases
ClearPassphrases(hDlg,gpp);
FreePassphrases(gpp);
EndDialog (hDlg, kPGPError_OutOfMemory);
break;
}
}
break;
}
}
return FALSE;
}
// Just a simple decryption
PGPError
pgpPassphraseDialogPlatform(
PGPContextRef context,
CPGPPassphraseDialogOptions *options)
{
if (options->mTextUI) {
return pgpPassphraseCL(context, options);
} else {
PGPError err;
GPP gpp;
memset(&gpp,0x00,sizeof(GPP));
gpp.context=context;
gpp.options=options;
InitRandomKeyHook(&hhookKeyboard, &hhookMouse);
InstallSecurityHooks();
err = DialogBoxParam (gPGPsdkUILibInst,
MAKEINTRESOURCE (IDD_PASSPHRASE),
options->mHwndParent,
(DLGPROC)pgpPassphraseDlgProc, (LPARAM)&gpp);
*(options->mPassphrasePtr)=gpp.pszPassPhrase;
UninstallSecurityHooks();
UninitRandomKeyHook(hhookKeyboard, hhookMouse);
return(err);
}
}
// ________________________
//
// Dialog Message procedure
static PGPBoolean Working=FALSE;
BOOL CALLBACK
pgpDecryptionPassphraseDlgProc (
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
CPGPDecryptionPassphraseDialogOptions *options;
GPP *gpp;
INT i;
DWORD Common;
Common=DoCommonCalls (hDlg,uMsg,wParam,lParam);
if(Common)
return Common;
switch (uMsg)
{
case WM_INITDIALOG:
{
gpp=(GPP *)GetWindowLong (hDlg, GWL_USERDATA);
options = (CPGPDecryptionPassphraseDialogOptions *)
gpp->options;
gpp->iNextTabControl = IDOK;
InitEncryptedToKeyListBox (hDlg, options);
gpp->wpOrigPhrase1Proc = (WNDPROC) SetWindowLong (
GetDlgItem (hDlg, IDC_PHRASE1),
GWL_WNDPROC,
(LONG) PhraseSubclassProc);
gpp->hwndOptionsControl=DisplayOptions(hDlg,options->mDialogOptions,200);
return FALSE;
}
case WM_COMMAND:
{
gpp=(GPP *)GetWindowLong (hDlg, GWL_USERDATA);
options = (CPGPDecryptionPassphraseDialogOptions *)
gpp->options;
switch(LOWORD (wParam))
{
case IDC_KEYLISTBOX:
{
if(HIWORD(wParam)==LBN_DBLCLK)
{
if(!Working)
{
Working=TRUE;
if(IsntNull(options->mMissingKeyIDList))
{
PGPError err;
PGPBoolean haveNewKeys;
err=options->SearchForMissingKeys( hDlg, &haveNewKeys );
PGPsdkUIErrorBox (hDlg,err);
if( haveNewKeys )
{
InitEncryptedToKeyListBox (hDlg, options);
}
}
Working=FALSE;
}
}
break;
}
case IDOK:
{
FreePassphrases(gpp);
i = SendDlgItemMessage (hDlg, IDC_PHRASE1,
WM_GETTEXTLENGTH, 0, 0) +1;
gpp->szDummy = (char *)secAlloc (gpp->context, i);
if(gpp->szDummy)
{
gpp->pszPassPhrase = (char *)secAlloc (gpp->context, i);
if (gpp->pszPassPhrase)
{
CHAR sz[256];
GetDlgItemText (hDlg, IDC_PHRASE1, gpp->szDummy, i);
if(PassphraseLengthAndQualityOK(hDlg,options,gpp->pszPassPhrase))
{
if (!options->mFindMatchingKey)
{
ClearPassphrases(hDlg,gpp);
SaveOptionSettings(gpp->hwndOptionsControl);
EndDialog (hDlg, kPGPError_NoErr);
break;
}
*(options->mPassphraseKeyPtr)=
GetKeyForPassphrase(options->mKeySet,
gpp->pszPassPhrase,FALSE);
if (*(options->mPassphraseKeyPtr)!=NULL)
{
ClearPassphrases(hDlg,gpp);
SaveOptionSettings(gpp->hwndOptionsControl);
EndDialog (hDlg, kPGPError_NoErr);
break;
}
else
{
PGPsdkUIMessageBox (hDlg, IDS_PGPERROR,
IDS_BADDECRYPTPHRASE, MB_OK|MB_ICONEXCLAMATION);
LoadString (gPGPsdkUILibInst, IDS_WRONGDECRYPTPHRASE,
sz, sizeof (sz));
SetDlgItemText (hDlg, IDC_PROMPTSTRING, sz);
}
}
// Bad passphrase/quality
ClearPassphrases(hDlg,gpp);
FreePassphrases(gpp);
break;
}
}
// Couldn't allocate passphrases
ClearPassphrases(hDlg,gpp);
FreePassphrases(gpp);
EndDialog (hDlg, kPGPError_OutOfMemory);
break;
}
}
break;
}
}
return FALSE;
}
// Show the recipients
PGPError
pgpDecryptionPassphraseDialogPlatform(
PGPContextRef context,
CPGPDecryptionPassphraseDialogOptions *options)
{
PGPError err;
GPP gpp;
memset(&gpp,0x00,sizeof(GPP));
gpp.context=context;
gpp.options=options;
InitRandomKeyHook(&hhookKeyboard, &hhookMouse);
InstallSecurityHooks();
err = DialogBoxParam (gPGPsdkUILibInst,
MAKEINTRESOURCE (IDD_PASSPHRASEDECRYPTKEYS),
options->mHwndParent,
(DLGPROC)pgpDecryptionPassphraseDlgProc, (LPARAM)&gpp);
*(options->mPassphrasePtr)=gpp.pszPassPhrase;
UninstallSecurityHooks();
UninitRandomKeyHook(hhookKeyboard, hhookMouse);
return(err);
}
// _________________________________________________________
//
// Dialog Message procedure - get passphrase and signing key
BOOL CALLBACK
pgpSigningPassphraseDlgProc (
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
CPGPSigningPassphraseDialogOptions *options;
GPP *gpp;
INT i;
DWORD Common;
Common=DoCommonCalls (hDlg,uMsg,wParam,lParam);
if(Common)
return Common;
switch (uMsg)
{
case WM_INITDIALOG:
{
gpp=(GPP *)GetWindowLong (hDlg, GWL_USERDATA);
options = (CPGPSigningPassphraseDialogOptions *)
gpp->options;
gpp->iNextTabControl = IDOK;
gpp->wpOrigPhrase1Proc = (WNDPROC) SetWindowLong(
GetDlgItem(hDlg, IDC_PHRASE1),
GWL_WNDPROC,
(LONG) PhraseSubclassProc);
if (InitSigningKeyComboBox (hDlg, options))
{
EnablePassPhraseControl (hDlg);
}
else
{
EndDialog (hDlg, kPGPError_UserAbort);//kPGPError_Win32_NoSecretKeys);
}
gpp->hwndOptionsControl=DisplayOptions(hDlg,options->mDialogOptions,130);
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -