📄 pkgenwiz.c
字号:
// before drawing AVI
SetWindowLong (hDlg, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
case PSN_KILLACTIVE:
LoadString (g_hInst, IDS_KW_CANCELING,
szPhaseString, sizeof(szPhaseString));
SetDlgItemText (hDlg, IDC_PHASE, szPhaseString);
bAVIFinished = TRUE;
if (bAVIPresent)
Animate_Close (GetDlgItem (hDlg, IDC_WORKINGAVI));
else
KillTimer (hDlg, PROGRESS_TIMER);
break;
case PSN_HELP:
WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT,
IDH_PGPPK_WIZ_GENERATION);
break;
case PSN_QUERYCANCEL:
//If we're generating a key, don't let the user press
//cancel without asking. If he says, "yes, I want to cancel,"
//then we'll still reject the message, but set CancelPending
//to TRUE, so that the next time the library comes around, we
//can nuke the thread. The thread will then clear the
//InGeneration flag and re-send us the cancel message.
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (pkgi->bInGeneration)
{
if (!pkgi->bCancelPending &&
(PKMessageBox (hDlg, IDS_KW_TITLE,
IDS_KW_CONFIRM_CANCEL,
MB_YESNO | MB_ICONQUESTION) == IDYES))
{
if (pkgi->bInGeneration)
{
pkgi->bCancelPending = TRUE;
PostMessage (hDlg, KM_M_GENERATION_COMPLETE,
0, 0L);
}
}
}
if (pkgi->bInGeneration)
{
SetWindowLong (hDlg, DWL_MSGRESULT, 1L);
bReturnCode = TRUE;
}
else
{
SetWindowLong (hDlg, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
}
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for getting entropy
// from user
static LRESULT WINAPI
sKeyWizardRandobitsDlgProc (
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PKEYGENINFO pkgi;
BOOL bReturnCode = FALSE;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pkgi = (PKEYGENINFO) ppspMsgRec->lParam;
SetWindowLong (hDlg, GWL_USERDATA, (LPARAM)pkgi);
break;
}
case WM_PAINT :
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (pkgi->hPalette)
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint (hDlg, &ps);
SelectPalette (hDC, pkgi->hPalette, FALSE);
RealizePalette (hDC);
EndPaint (hDlg, &ps);
}
break;
case WM_MOUSEMOVE:
{
INT iPercentComplete = 0;
FLOAT fTotal, fSoFar;
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (pkgi->lRandomBitsNeeded)
{
fSoFar = (float) PGPGlobalRandomPoolGetEntropy();
fTotal = (float) pkgi->lRandomBitsNeeded;
fSoFar -= (float) pkgi->lOriginalEntropy;
fTotal -= (float) pkgi->lOriginalEntropy;
iPercentComplete = (INT) ((fSoFar / fTotal) * 100.0);
if (fSoFar >= fTotal)
{
pkgi->lRandomBitsNeeded = 0;
iPercentComplete = 100;
hWndCollectEntropy = NULL;
SendMessage (GetParent(hDlg), PSM_SETWIZBUTTONS,
0, PSWIZB_NEXT|PSWIZB_BACK);
}
SendDlgItemMessage (hDlg, IDC_PROGRESS, PBM_SETPOS,
iPercentComplete, 0);
}
break;
}
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch(pnmh->code) {
case PSN_SETACTIVE:
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
PostMessage(GetParent(hDlg), PSM_SETWIZBUTTONS, 0, 0);
SendDlgItemMessage(hDlg, IDC_WIZBITMAP, STM_SETIMAGE,
IMAGE_BITMAP, (LPARAM) pkgi->hBitmap);
{
LONG lTotalBitsNeeded, lRandPoolSize;
PGPBoolean bFastGen;
PGPContextRef ctx = pkgi->Context;
hWndCollectEntropy = hDlg;
// Check to see if there are random bits needed
PGPGetPrefBoolean (pkgi->PrefRefClient,
kPGPPrefFastKeyGen,
&bFastGen);
lTotalBitsNeeded =
PGPGetKeyEntropyNeeded (ctx,
PGPOKeyGenParams (ctx, pkgi->uKeyType,
pkgi->uKeySize),
PGPOKeyGenFast (ctx, bFastGen),
PGPOLastOption (ctx));
if (pkgi->uKeyType == kPGPPublicKeyAlgorithm_DSA)
{
lTotalBitsNeeded +=
PGPGetKeyEntropyNeeded (pkgi->Context,
PGPOKeyGenParams (ctx,
kPGPPublicKeyAlgorithm_ElGamal,
pkgi->uSubKeySize),
PGPOKeyGenFast (ctx, bFastGen),
PGPOLastOption (ctx));
}
lRandPoolSize = PGPGlobalRandomPoolGetSize ();
pkgi->lRandomBitsNeeded =
min (lTotalBitsNeeded, lRandPoolSize);
}
if ((pkgi->lRandomBitsNeeded -
(LONG)PGPGlobalRandomPoolGetEntropy()) > 0)
{
pkgi->lOriginalEntropy = PGPGlobalRandomPoolGetEntropy();
SendDlgItemMessage (hDlg, IDC_PROGRESS,
PBM_SETRANGE, 0, MAKELPARAM(0, 100));
SendDlgItemMessage (hDlg, IDC_PROGRESS,
PBM_SETPOS, 0, 0);
SetWindowLong(hDlg, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
}
else
{
SetWindowLong (hDlg, DWL_MSGRESULT, -1L); // skip page
bReturnCode = TRUE;
hWndCollectEntropy = NULL;
}
break;
case PSN_KILLACTIVE:
SetWindowLong (hDlg, DWL_MSGRESULT, 0);
bReturnCode = TRUE;
hWndCollectEntropy = NULL;
break;
case PSN_HELP:
WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT,
IDH_PGPPK_WIZ_RANDOBITS);
break;
case PSN_QUERYCANCEL:
hWndCollectEntropy = NULL;
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for "Bad Passphrase" dialog
static LRESULT WINAPI
sKeyWizardBadPassphraseDlgProc (
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PKEYGENINFO pkgi;
BOOL bReturnCode = FALSE;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pkgi = (PKEYGENINFO) ppspMsgRec->lParam;
SetWindowLong (hDlg, GWL_USERDATA, (LPARAM)pkgi);
break;
}
case WM_PAINT :
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (pkgi->hPalette)
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint (hDlg, &ps);
SelectPalette (hDC, pkgi->hPalette, FALSE);
RealizePalette (hDC);
EndPaint (hDlg, &ps);
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
BOOL bPhraseOK = TRUE;
INT iShow;
CHAR sz1[128], sz2[128];
switch (pnmh->code) {
case PSN_SETACTIVE:
{
BOOL bRejected;
BOOL bLengthRejected, bQualityRejected, bConfirmRejected;
INT ids;
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (pkgi->uPhraseFlags == 0)
{
SetWindowLong (hDlg, DWL_MSGRESULT, -1L); // skip page
bReturnCode = TRUE;
break;
}
SendDlgItemMessage (hDlg, IDC_WIZBITMAP, STM_SETIMAGE,
IMAGE_BITMAP, (LPARAM) pkgi->hBitmap);
if (pkgi->bMinPhraseLength)
ids = IDS_REQPHRASELENGTH;
else
ids = IDS_SUGPHRASELENGTH;
LoadString (g_hInst, ids, sz1, sizeof(sz1));
wsprintf (sz2, sz1, pkgi->iMinPhraseLength);
SetDlgItemText (hDlg, IDC_BADLENGTH, sz2);
if (pkgi->bMinPhraseQuality)
ids = IDS_REQPHRASEQUALITY;
else
ids = IDS_SUGPHRASEQUALITY;
LoadString (g_hInst, ids, sz1, sizeof(sz1));
wsprintf (sz2, sz1, pkgi->iMinPhraseQuality);
SetDlgItemText (hDlg, IDC_BADQUALITY1, sz2);
bRejected = FALSE;
bLengthRejected = FALSE;
bQualityRejected = FALSE;
bConfirmRejected = FALSE;
if ((pkgi->bMinPhraseLength) &&
(pkgi->uPhraseFlags & BADPHRASE_LENGTH))
{
bLengthRejected = TRUE;
bRejected = TRUE;
}
if ((pkgi->bMinPhraseQuality) &&
(pkgi->uPhraseFlags & BADPHRASE_QUALITY))
{
bQualityRejected = TRUE;
bRejected = TRUE;
}
if (pkgi->uPhraseFlags & BADPHRASE_CONFIRMATION)
{
bConfirmRejected = TRUE;
bRejected = TRUE;
}
if (bRejected)
{
LoadString (g_hInst, IDS_PHRASEREJECTED, sz1, sizeof(sz1));
SetDlgItemText (hDlg, IDC_REJECTTEXT, sz1);
PostMessage (GetParent (hDlg),
PSM_SETWIZBUTTONS, 0, PSWIZB_BACK);
}
else
{
LoadString (g_hInst, IDS_PHRASEWARNED, sz1, sizeof(sz1));
SetDlgItemText (hDlg, IDC_REJECTTEXT, sz1);
PostMessage (GetParent (hDlg),
PSM_SETWIZBUTTONS, 0, PSWIZB_BACK|PSWIZB_NEXT);
}
iShow = SW_HIDE;
if (pkgi->uPhraseFlags & BADPHRASE_LENGTH)
{
if (!bRejected || bLengthRejected)
iShow = SW_SHOW;
}
ShowWindow (GetDlgItem (hDlg, IDC_BADLENGTH), iShow);
ShowWindow (GetDlgItem (hDlg, IDC_BOX1), iShow);
if (iShow == SW_HIDE)
{
if (pkgi->uPhraseFlags & BADPHRASE_CONFIRMATION)
{
if (!bRejected || bConfirmRejected)
iShow = SW_SHOW;
}
ShowWindow (GetDlgItem (hDlg, IDC_BADCONFIRM), iShow);
ShowWindow (GetDlgItem (hDlg, IDC_BOX1), iShow);
}
else
ShowWindow (GetDlgItem (hDlg, IDC_BADCONFIRM), SW_HIDE);
iShow = SW_HIDE;
if (pkgi->uPhraseFlags & BADPHRASE_QUALITY)
{
if (!bRejected || bQualityRejected)
iShow = SW_SHOW;
}
ShowWindow (GetDlgItem (hDlg, IDC_BADQUALITY1), iShow);
ShowWindow (GetDlgItem (hDlg, IDC_BADQUALITY2), iShow);
ShowWindow (GetDlgItem (hDlg, IDC_BOX2), iShow);
SetWindowLong (hDlg, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
}
case PSN_HELP:
WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT,
IDH_PGPPK_WIZ_BADPHRASE);
break;
case PSN_QUERYCANCEL:
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for getting passphrase
// from user
static LRESULT WINAPI
sKeyWizardPassphraseDlgProc (
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PKEYGENINFO pkgi;
BOOL bReturnCode = FALSE;
CHAR szDummy[4];
INT iQuality;
static HBRUSH hBrushEdit;
switch (uMsg) {
case WM_INITDIALOG:
{
CHAR sz1[256], sz2[256];
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pkgi = (PKEYGENINFO) ppspMsgRec->lParam;
SetWindowLong (hDlg, GWL_USERDATA, (LPARAM)pkgi);
wpOrigPhrase1Proc = (WNDPROC) SetWindowLong (GetDlgItem (hDlg,
IDC_EDIT_PASSPHRASE),
GWL_WNDPROC,
(LONG) sWizPhrase1SubclassProc);
wpOrigPhrase2Proc = (WNDPROC) SetWindowLong (GetDlgItem (hDlg,
IDC_EDIT_PASSPHRASE2),
GWL_WNDPROC,
(LONG) sWizPhrase2SubclassProc);
hBrushEdit = CreateSolidBrush (GetSysColor (COLOR_WINDOW));
LoadString (g_hInst, IDS_PHRASELENGTHTEXT, sz1, sizeof(sz1));
wsprintf (sz2, sz1, pkgi->iMinPhraseLength);
SetDlgItemText (hDlg, IDC_PHRASELENGTHTEXT, sz2);
break;
}
case WM_PAINT :
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
if (pkgi->hPalette)
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint (hDlg, &ps);
SelectPalette (hDC, pkgi->hPalette, FALSE);
RealizePalette (hDC);
EndPaint (hDlg, &ps);
}
break;
case WM_CTLCOLOREDIT:
if (((HWND)lParam == GetDlgItem (hDlg, IDC_EDIT_PASSPHRASE)) ||
((HWND)lParam == GetDlgItem (hDlg, IDC_EDIT_PASSPHRASE2)))
{
SetBkColor ((HDC)wParam, GetSysColor (COLOR_WINDOW));
if (bHideTyping)
SetTextColor ((HDC)wParam, GetSysColor (COLOR_WINDOW));
else
SetTextColor ((HDC)wParam, GetSysColor (COLOR_WINDOWTEXT));
return (BOOL)hBrushEdit;
}
break;
case WM_DESTROY:
SetWindowLong(GetDlgItem(hDlg, IDC_EDIT_PASSPHRASE),
GWL_WNDPROC, (LONG)wpOrigPhrase1Proc);
SetWindowLong(GetDlgItem(hDlg, IDC_EDIT_PASSPHRASE2),
GWL_WNDPROC, (LONG)wpOrigPhrase2Proc);
DeleteObject (hBrushEdit);
PKWipeEditBox (hDlg, IDC_EDIT_PASSPHRASE);
PKWipeEditBox (hDlg, IDC_EDIT_PASSPHRASE2);
break;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case IDC_CHECK_HIDE_TYPING:
if (IsDlgButtonChecked (
hDlg, IDC_CHECK_HIDE_TYPING) == BST_CHECKED)
bHideTyping = TRUE;
else
bHideTyping = FALSE;
InvalidateRect (GetDlgItem (hDlg, IDC_EDIT_PASSPHRASE),
NULL, TRUE);
InvalidateRect (GetDlgItem (hDlg, IDC_EDIT_PASSPHRASE2),
NULL, TRUE);
break;
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch (pnmh->code) {
case PSN_SETACTIVE:
pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
PostMessage (GetParent(hDlg),
PSM_SETWIZBUTTONS, 0, PSWIZB_BACK|PSWIZB_NEXT);
SendDlgItemMessage (hDlg, IDC_WIZBITMAP, STM_SETIMAGE,
IMAGE_BITMAP, (LPARAM) pkgi->hBitmap);
SetWindowLong (hDlg, DWL_MSGRESULT, 0L);
bHideTyping = TRUE;
CheckDlgButton (hDlg, IDC_CHECK_HIDE_TYPING, BST_CHECKED);
if (pkgi->bMinPhraseQuality)
{
SendDlgItemMessage (hDlg, IDC_MINPHRASEQUALITY,
PBM_SETRANGE, 0, MAKELPARAM (0, 100));
SendDlgItemMessage (hDlg, IDC_MINPHRASEQUALITY,
PBM_SETPOS, pkgi->iMinPhraseQuality, 0);
}
else
{
ShowWindow (GetDlgItem (hDlg, IDC_MINPHRASEQUALITY),
SW_HIDE);
ShowWindow (GetDlgItem (hDlg, IDC_MINQUALITYTEXT),
SW_HIDE);
}
SendDlgItemMessage (hDlg, IDC_PHRASEQUALITY, PBM_SETRANGE,
0, MAKELPARAM (0, 100));
SendDlgItemMessage (hDlg, IDC_PHRASEQUALITY, PBM_SETPOS,
0, 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -