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

📄 pkgenwiz.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 5 页
字号:
				return FALSE;
			}

			case PGPCL_SERVERDONE : 
					pkgi->bSendComplete = TRUE;
			case PGPCL_SERVERABORT : 
			case PGPCL_SERVERERROR : 
				pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
				{
					PPGPclSERVEREVENT	pEvent = (PPGPclSERVEREVENT)lParam;

					KillTimer (hDlg, PROGRESS_TIMER);
					pkgi->iStatusValue = -1;
					pkgi->iStatusDirection = 1;
					InvalidateRect (hDlg, NULL, FALSE);

					SetDlgItemText (hDlg, IDC_PROGRESSTEXT, 
											pEvent->szmessage);
					PostMessage (GetParent(hDlg), 
						PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT);
					EnableWindow (GetDlgItem (GetParent (hDlg), IDCANCEL),
									FALSE);
					ShowWindow (GetDlgItem (hDlg, IDC_PROGRESS), SW_HIDE);

					PGPFreeKeySet (keysetSend);

					pEvent->cancel = pkgi->bCancelPending;
					return FALSE;
				}

			case PSN_HELP:
				WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT, 
							IDH_PGPPK_WIZ_SEND); 
				break;

			case PSN_QUERYCANCEL:
				pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
				if (!pkgi->bSendComplete) 
				{
					CHAR	sz[128];

					pkgi->bCancelPending = TRUE;
					LoadString (g_hInst, IDS_KW_CANCELING, sz, sizeof(sz));
					SetDlgItemText (hDlg, IDC_PROGRESSTEXT, sz);
					SetWindowLong (hDlg, DWL_MSGRESULT, -1L); 
					bReturnCode = TRUE;
				}
				break;
			}
			break;
		}
	}

	return bReturnCode;
}


//	______________________________________________
//
//  Dialog procedure for querying about sending to keyserver

static LRESULT WINAPI 
sKeyWizardPreSendDlgProc (
		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);

		CheckDlgButton (hDlg, IDC_CHECK_SEND, BST_UNCHECKED);
		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_COMMAND:
		switch (LOWORD (wParam)) {
		case IDC_CHECK_SEND:
			pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);

			if (IsDlgButtonChecked (hDlg, IDC_CHECK_SEND) == BST_CHECKED) 
				pkgi->bDoSend = TRUE;
			else 
				pkgi->bDoSend = FALSE;
			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_NEXT);
			SendDlgItemMessage (hDlg, IDC_WIZBITMAP, STM_SETIMAGE, 
				IMAGE_BITMAP, (LPARAM) pkgi->hBitmap);
			SetWindowLong (hDlg, DWL_MSGRESULT, 0L);
			bReturnCode = TRUE;
			break;

		case PSN_KILLACTIVE :
			pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);

			if (IsDlgButtonChecked (hDlg, IDC_CHECK_SEND) == BST_CHECKED) 
				pkgi->bDoSend = TRUE;
			else 
				pkgi->bDoSend = FALSE;
			SetWindowLong (hDlg, DWL_MSGRESULT, 0L);
			bReturnCode = TRUE;
			break;

		case PSN_HELP:
			WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT, IDH_PGPPK_WIZ_PRESEND); 
			break;

		case PSN_QUERYCANCEL:
			break;
		}
		break;
	}
	}

	return bReturnCode;
}


//	______________________________________________
//
//  Dialog procedure for querying user about signing new
//  key with old key

static LRESULT WINAPI 
sKeyWizardSignOldDlgProc (
		HWND	hDlg, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	PKEYGENINFO		pkgi;
	BOOL			bReturnCode = FALSE;
	PGPBoolean		bNeedsPhrase;
	static HBRUSH	hBrushEdit;

	switch (uMsg) {
	case WM_INITDIALOG:
	{
		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) sWizPhrase3SubclassProc); 

		hBrushEdit = CreateSolidBrush (GetSysColor (COLOR_WINDOW));
		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); 
		DeleteObject (hBrushEdit);
		PKWipeEditBox (hDlg, IDC_EDIT_PASSPHRASE);
		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);
			break;
		}
		break;

	case WM_NOTIFY:
	{
		LPNMHDR pnmh = (LPNMHDR) lParam;

		switch (pnmh->code) {
		case PSN_SETACTIVE:
			pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);

			if (!pkgi->OldKey) 
			{
				SetWindowLong(hDlg, DWL_MSGRESULT, -1L); // skip this page
				bReturnCode = TRUE;
			}
			else 
			{
				PostMessage (GetParent(hDlg), 
					PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT);
				SendDlgItemMessage (hDlg, IDC_WIZBITMAP, STM_SETIMAGE, 
					IMAGE_BITMAP, (LPARAM) pkgi->hBitmap);
				bHideTyping = TRUE;
				CheckDlgButton (hDlg, IDC_CHECK_HIDE_TYPING, BST_CHECKED);
				CheckDlgButton (hDlg, IDC_CHECK_SIGN_KEY, BST_CHECKED);

				PGPGetKeyBoolean (pkgi->OldKey, 
						kPGPKeyPropNeedsPassphrase, &bNeedsPhrase);
				if (!bNeedsPhrase) 
				{
					SetDlgItemText (hDlg, IDC_EDIT_PASSPHRASE, "");
					EnableWindow (GetDlgItem (hDlg,IDC_EDIT_PASSPHRASE),
									FALSE);
					EnableWindow (GetDlgItem (hDlg,IDC_CHECK_HIDE_TYPING),
									FALSE);
				}
				SetWindowLong (hDlg, DWL_MSGRESULT, 0L);
				bReturnCode = TRUE;
			}
			break;

		case PSN_KILLACTIVE:
			if (IsDlgButtonChecked (hDlg, IDC_CHECK_SIGN_KEY) == BST_CHECKED)
			{
				BOOL bAllOk = FALSE;
				PGPUserIDRef UserID;
				CHAR szDummy[4];

				pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);

				if (szPhrase1) 
				{
					secFree (szPhrase1);
					szPhrase1 = NULL;
				}
				lPhrase1Len = SendDlgItemMessage (hDlg, 
								IDC_EDIT_PASSPHRASE, 
								WM_GETTEXTLENGTH, 0, 0) +1;
				szPhrase1 = secAlloc (lPhrase1Len);
				if (szPhrase1) 
					GetDlgItemText (hDlg, IDC_EDIT_PASSPHRASE, 
									szDummy, sizeof(szDummy));

				if (szPhrase1) 
				{
					PGPGetPrimaryUserID (pkgi->Key, &UserID);

					if (UserID) {
						PGPError err = kPGPError_BadPassphrase;

						// make sure we have enough entropy
						PGPclRandom (pkgi->Context, pkgi->hWndWiz, 0);

						err = PGPSignUserID (UserID, pkgi->OldKey, 
							PGPOPassphrase (pkgi->Context, szPhrase1),
							PGPOLastOption (pkgi->Context));
						if (err == kPGPError_BadPassphrase) 
						{
							PKMessageBox (hDlg, IDS_KW_TITLE,
										IDS_KW_BAD_PASSPHRASE, 
										MB_OK | MB_ICONERROR);
						}
						else 
						{
							if (err != kPGPError_NoErr)
								PGPclErrorBox (pkgi->hWndWiz, err);
							else
								bAllOk = TRUE;
						}
					}					   
					secFree (szPhrase1);
					szPhrase1 = NULL;
					PKWipeEditBox (hDlg, IDC_EDIT_PASSPHRASE);
				}
				if (!bAllOk) 
				{
					SetWindowLong (hDlg, DWL_MSGRESULT, -1L);
					bReturnCode = TRUE;
				}
			}
			break;

		case PSN_HELP:
			WinHelp (hDlg, g_szHelpFile, HELP_CONTEXT, 
						IDH_PGPPK_WIZ_SIGNOLD); 
			break;

		case PSN_QUERYCANCEL:
			break;
		}
		break;
	}
	}

	return bReturnCode;
}


//	______________________________________________
//
//  Dialog procedure for actually generating the key(s)

static LRESULT WINAPI 
sKeyWizardGenerationDlgProc (
		HWND	hDlg, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	PKEYGENINFO		pkgi;
	BOOL			bReturnCode = FALSE;
	DWORD			dwThreadID;
	char			szPhaseString[128];
	static BOOL		bAVIPresent;
	static BOOL		bAVIFinished;
	static BOOL		bAVIStarted;

	switch (uMsg) {
	case WM_INITDIALOG:
	{
		PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;

		pkgi = (PKEYGENINFO) ppspMsgRec->lParam;
		SetWindowLong (hDlg, GWL_USERDATA, (LPARAM)pkgi);

		pkgi->uWorkingPhase = IDS_KEYGENPHASE1;
		LoadString (g_hInst, pkgi->uWorkingPhase, 
				   szPhaseString, sizeof(szPhaseString));
		SetDlgItemText (hDlg, IDC_PHASE, szPhaseString);

		pkgi->hWndWiz = hDlg;
		pkgi->bInGeneration = TRUE;

		// Kick off generation proc, here
		_beginthreadex (NULL, 0, 
			(LPTHREAD_START_ROUTINE)sKeyGenerationThread, 
			(void *) pkgi, 0, &dwThreadID);
		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);
		}
		if (!bAVIPresent)
			sDrawSendStatus (GetDlgItem (hDlg, IDC_PROGRESS), pkgi);
		break;

	case KM_M_CHANGEPHASE:
		bReturnCode = TRUE;
		LoadString (g_hInst, lParam, szPhaseString, sizeof(szPhaseString));
		SetDlgItemText (hDlg, IDC_PHASE, szPhaseString);
		break;
	
	case WM_TIMER :
		if (wParam == PROGRESS_TIMER) 
		{
			if (bAVIPresent)
			{
				KillTimer (hDlg, PROGRESS_TIMER);
				bReturnCode = TRUE;
				if (bAVIStarted) 
				{
					if (!bAVIFinished) 
					{
						bAVIFinished = TRUE;
						pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);
						if (!pkgi->bInGeneration) 
							PostMessage (hDlg, KM_M_GENERATION_COMPLETE, 0, 0);
					}
				}
				else 
				{
					bAVIPresent = 
						sStartKeyGenAVI (GetDlgItem (hDlg, IDC_WORKINGAVI));

					if (bAVIPresent)
					{
						ShowWindow (GetDlgItem (hDlg, IDC_WORKINGAVI), SW_SHOW);
						SetTimer (hDlg, PROGRESS_TIMER, AVI_RUNTIME, NULL);
						bAVIStarted = TRUE;
					}
					else
					{
						ShowWindow (GetDlgItem (hDlg, IDC_PROGRESS), SW_SHOW);
						SetTimer (hDlg, PROGRESS_TIMER, LEDTIMERPERIOD, NULL);
					}
				}
			}
			else
			{
				pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);

				pkgi->iStatusValue += pkgi->iStatusDirection;
				if (pkgi->iStatusValue <= 0) 
				{
					pkgi->iStatusValue = 0;
					pkgi->iStatusDirection = 1;
				}
				else if (pkgi->iStatusValue >= NUMLEDS-1) 
				{
					pkgi->iStatusValue = NUMLEDS-1;
					pkgi->iStatusDirection = -1;
				}
				sInvalidateLEDs (hDlg, IDC_PROGRESS);
			}
		}
		break;
	
	case KM_M_GENERATION_COMPLETE:
		pkgi = (PKEYGENINFO)GetWindowLong (hDlg, GWL_USERDATA);

		if (bAVIPresent)
		{
			if (bAVIFinished) 
				Animate_Stop (GetDlgItem (hDlg, IDC_WORKINGAVI));
		}
		else
		{
			KillTimer (hDlg, PROGRESS_TIMER);
			pkgi->iStatusValue = -1;
			pkgi->iStatusDirection = 1;
			InvalidateRect (hDlg, NULL, FALSE);
		}

		if (pkgi->bCancelPending) 
		{
			LoadString (g_hInst, IDS_KW_CANCELING, 
				szPhaseString, sizeof(szPhaseString));
		}
		else 
		{
			if (pkgi->iFinalResult) 
			{
				LoadString (g_hInst, IDS_KW_COMPLETE, 
						szPhaseString, sizeof(szPhaseString));
				SendMessage (GetParent(hDlg), 
						PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT);
			}
			else 
			{
				LoadString (g_hInst, IDS_KW_UNABLETOCOMPLETE, 
						szPhaseString, sizeof(szPhaseString));
			}
		}
		SetDlgItemText (hDlg, IDC_PHASE, szPhaseString);
						
		bReturnCode = TRUE;
		break;
		
	case WM_COMMAND:
		switch (HIWORD(wParam)) {
		case BN_CLICKED:
			if (LOWORD(wParam) == IDC_RADIO_CUSTOM_DAYS) 
				EnableWindow (GetDlgItem (hDlg, IDC_EDIT_CUSTOM_DAYS), TRUE); 
			else 
				EnableWindow (GetDlgItem (hDlg, IDC_EDIT_CUSTOM_DAYS), FALSE); 
			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, 0);
			SendDlgItemMessage (hDlg, IDC_WIZBITMAP, STM_SETIMAGE, 
					IMAGE_BITMAP, (LPARAM) pkgi->hBitmap);
			pkgi->iStatusValue = -1;
			pkgi->iStatusDirection = 1;
			bAVIPresent = TRUE;		// assume TRUE until we test it
			bAVIFinished = FALSE;
			bAVIStarted = FALSE;
			SetTimer (hDlg, PROGRESS_TIMER, 100, NULL);  // delay a few ms

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -