⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pkgenwiz.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 5 页
字号:
													// 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 + -