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

📄 kmkeyops.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 3 页
字号:
			MapWindowPoints (NULL, hDlg, (LPPOINT)&rc, 2);
			ImageList_Draw (pccs->hIml, IDX_TRUSTEDCERT, hdc, 
							rc.left-22, rc.top, ILD_TRANSPARENT);

			GetWindowRect (GetDlgItem (hDlg, IDC_META), &rc);
			MapWindowPoints (NULL, hDlg, (LPPOINT)&rc, 2);
			ImageList_Draw (pccs->hIml, IDX_METACERT, hdc, 
							rc.left-22, rc.top, ILD_TRANSPARENT);

			ReleaseDC (hDlg, hdc);
		}
		break;

	case WM_COMMAND:

		switch (LOWORD(wParam)) {
		case IDCANCEL:
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			pccs->bSyncWithServer = FALSE;
			ImageList_Destroy (pccs->hIml);
			EndDialog (hDlg, 1);
			break;

		case IDOK:
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			if (!(pccs->bExpandedChoices)) {
				pccs->bExpires = FALSE;
				if (IsDlgButtonChecked (hDlg, IDC_EXPORTABLECHECK) 
														== BST_CHECKED) 
				{
					pccs->iSigType = SIG_EXPORTABLE;
				}
				else {
					pccs->iSigType = SIG_NONEXPORTABLE;
				}
			}
			else {
				if (IsDlgButtonChecked (hDlg, IDC_NEVEREXPIRES) 
														== BST_CHECKED)
					pccs->bExpires = FALSE;
				else {
					SYSTEMTIME st;
					pccs->bExpires = TRUE;
					SendMessage (pccs->hwndDTPicker, DTM_GETSYSTEMTIME, 0, 
									(LPARAM)&st);
					PGPclSystemTimeToDays (&st, &(pccs->iExpireDays));
				}
			}
			GetDlgItemText (hDlg, IDC_DOMAIN, 
							pccs->szDomain, sizeof(pccs->szDomain));
			ImageList_Destroy (pccs->hIml);
			EndDialog (hDlg, 0);
			break;

		case IDC_EXPORTABLECHECK :
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			if (IsDlgButtonChecked (hDlg, IDC_EXPORTABLECHECK) 
													== BST_CHECKED) {
				pccs->iSigType = SIG_EXPORTABLE;
			}
			else {
				pccs->iSigType = SIG_NONEXPORTABLE;
			}
			break;

		case IDC_NONEXPORTABLE :
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			pccs->iSigType = SIG_NONEXPORTABLE;
			EnableWindow (GetDlgItem (hDlg, IDC_DOMAIN), FALSE);
			break;

		case IDC_EXPORTABLE :
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			pccs->iSigType = SIG_EXPORTABLE;
			EnableWindow (GetDlgItem (hDlg, IDC_DOMAIN), FALSE);
			break;

		case IDC_TRUSTED :
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			pccs->iSigType = SIG_TRUST;
			EnableWindow (GetDlgItem (hDlg, IDC_DOMAIN), TRUE);
			break;

		case IDC_META :
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			pccs->iSigType = SIG_META;
			EnableWindow (GetDlgItem (hDlg, IDC_DOMAIN), FALSE);
			break;

		case IDC_NEVEREXPIRES :
		case IDC_EXPIRES :
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			if (IsDlgButtonChecked (hDlg, IDC_EXPIRES) == BST_CHECKED) {
				SYSTEMTIME st;
				EnableWindow (pccs->hwndDTPicker, TRUE);

				SendMessage (pccs->hwndDTPicker, DTM_GETSYSTEMTIME,
										0, (LPARAM)&st);
				PGPclSystemTimeToDays (&st, &(pccs->iExpireDays));
				if (pccs->iExpireDays > 0) 
					EnableWindow (GetDlgItem (hDlg, IDOK), TRUE);
				else 
					EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
			}
			else {
				EnableWindow (pccs->hwndDTPicker, FALSE);
				EnableWindow (GetDlgItem (hDlg, IDOK), TRUE);
			}
			break;

		case IDC_MORECHOICES :
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			pccs->bExpandedChoices = TRUE;
			ShowWindow (GetDlgItem (hDlg, IDC_MORECHOICES), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_EXPORTABLECHECK), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_FEWERCHOICES), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_SIGTYPE), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_NONEXPORTABLE), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_EXPORTABLE), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_TRUSTED), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_META), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_EXPIRATION), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_NEVEREXPIRES), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_EXPIRES), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_DOMAINTEXT), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_DOMAIN), SW_SHOW);
			ShowWindow (pccs->hwndDTPicker, SW_SHOW);

			// user "fewer" button as desired Y location
			hwndControl = GetDlgItem (hDlg, IDC_FEWERCHOICES);
			GetWindowRect (hwndControl, &rectControl);
			MapWindowPoints (NULL, hDlg, (LPPOINT)&rectControl, 2);

			GetWindowRect (hDlg, &rc);
			iOffset = rc.bottom-rc.top;
			GetClientRect (hDlg, &rc);
			iOffset -= rc.bottom;
			iOffset += (rectControl.bottom - rectControl.top) / 2;

			iNewY = rectControl.top;
			iNewWindowHeight = rectControl.bottom + iOffset;

			// move OK Button
			hwndControl = GetDlgItem (hDlg, IDOK);
			GetWindowRect (hwndControl, &rectControl);
			MapWindowPoints (NULL, hDlg, (LPPOINT)&rectControl, 2);
			MoveWindow(	hwndControl, 
						rectControl.left,
						iNewY,
						rectControl.right - rectControl.left,
						rectControl.bottom - rectControl.top,
						TRUE);

			// move Cancel Button
			hwndControl = GetDlgItem (hDlg, IDCANCEL);
			GetWindowRect (hwndControl, &rectControl);
			MapWindowPoints (NULL, hDlg, (LPPOINT)&rectControl, 2);
			MoveWindow(	hwndControl, 
						rectControl.left,
						iNewY,
						rectControl.right - rectControl.left,
						rectControl.bottom - rectControl.top,
						TRUE);

			// move Help Button
			hwndControl = GetDlgItem (hDlg, IDHELP);
			GetWindowRect (hwndControl, &rectControl);
			MapWindowPoints (NULL, hDlg, (LPPOINT)&rectControl, 2);
			MoveWindow(	hwndControl, 
						rectControl.left,
						iNewY,
						rectControl.right - rectControl.left,
						rectControl.bottom - rectControl.top,
						TRUE);

			// set radio buttons
			CheckRadioButton (hDlg, IDC_NONEXPORTABLE, IDC_META, 
								IDC_NONEXPORTABLE + pccs->iSigType);
			EnableWindow (GetDlgItem (hDlg, IDC_DOMAIN), 
								(pccs->iSigType == SIG_META));

			// size Window 
			GetWindowRect (hDlg, &rectControl);
			MoveWindow(	hDlg, 
						rectControl.left,
						rectControl.top,
						rectControl.right - rectControl.left,
						iNewWindowHeight,
						TRUE);

			break;

		case IDC_FEWERCHOICES :
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			pccs->bExpandedChoices = FALSE;
			ShowWindow (GetDlgItem (hDlg, IDC_MORECHOICES), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_EXPORTABLECHECK), SW_SHOW);
			ShowWindow (GetDlgItem (hDlg, IDC_FEWERCHOICES), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_SIGTYPE), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_NONEXPORTABLE), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_EXPORTABLE), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_TRUSTED), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_META), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_EXPIRATION), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_NEVEREXPIRES), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_EXPIRES), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_DOMAINTEXT), SW_HIDE);
			ShowWindow (GetDlgItem (hDlg, IDC_DOMAIN), SW_HIDE);
			ShowWindow (pccs->hwndDTPicker, SW_HIDE);

			// user "more" button as desired Y location
			hwndControl = GetDlgItem (hDlg, IDC_MORECHOICES);
			GetWindowRect (hwndControl, &rectControl);
			MapWindowPoints (NULL, hDlg, (LPPOINT)&rectControl, 2);

			GetWindowRect (hDlg, &rc);
			iOffset = rc.bottom-rc.top;
			GetClientRect (hDlg, &rc);
			iOffset -= rc.bottom;
			iOffset += (rectControl.bottom - rectControl.top) / 2;

			iNewY = rectControl.top;
			iNewWindowHeight = rectControl.bottom + iOffset;

			// move OK Button
			hwndControl = GetDlgItem (hDlg, IDOK);
			GetWindowRect (hwndControl, &rectControl);
			MapWindowPoints (NULL, hDlg, (LPPOINT)&rectControl, 2);
			MoveWindow(	hwndControl, 
						rectControl.left,
						iNewY,
						rectControl.right - rectControl.left,
						rectControl.bottom - rectControl.top,
						TRUE);

			// move Cancel Button
			hwndControl = GetDlgItem (hDlg, IDCANCEL);
			GetWindowRect (hwndControl, &rectControl);
			MapWindowPoints (NULL, hDlg, (LPPOINT)&rectControl, 2);
			MoveWindow(	hwndControl, 
						rectControl.left,
						iNewY,
						rectControl.right - rectControl.left,
						rectControl.bottom - rectControl.top,
						TRUE);

			// move Help Button
			hwndControl = GetDlgItem (hDlg, IDHELP);
			GetWindowRect (hwndControl, &rectControl);
			MapWindowPoints (NULL, hDlg, (LPPOINT)&rectControl, 2);
			MoveWindow(	hwndControl, 
						rectControl.left,
						iNewY,
						rectControl.right - rectControl.left,
						rectControl.bottom - rectControl.top,
						TRUE);

			// set radio buttons
			if (pccs->iSigType == SIG_EXPORTABLE) 
				CheckDlgButton (hDlg, IDC_EXPORTABLECHECK, BST_CHECKED);
			else
				CheckDlgButton (hDlg, IDC_EXPORTABLECHECK, BST_UNCHECKED);

			// size Window 
			GetWindowRect (hDlg, &rectControl);
			MoveWindow(	hDlg, 
						rectControl.left,
						rectControl.top,
						rectControl.right - rectControl.left,
						iNewWindowHeight,
						TRUE);
			break;

		case IDHELP :
			pccs = (PCERTIFYCONFIRMSTRUCT)GetWindowLong (hDlg, GWL_USERDATA);
			WinHelp (hDlg, pccs->pKM->szHelpFile, HELP_CONTEXT, 
						IDH_PGPKM_SIGNDIALOG); 
			break;

		}
		return TRUE;
	}
	return FALSE;
}


//	_______________________________________________
//
//  Certify selected key or userid

BOOL 
KMCertifyKeyOrUserID (PKEYMAN pKM) 
{
	CHAR					sz256[256];
	PGPError				err;
	CERTIFYSTRUCT			cs;
	CERTIFYCONFIRMSTRUCT	ccs;
	PGPPrefRef				prefref;

	// initialize structures
	cs.lpfnCallback = sCertifySingleObject;
	cs.pKM = pKM;
	cs.bItemModified = FALSE;
	cs.keySigning = NULL;
	cs.pPasskey = NULL;
	
	ccs.pKM = pKM;
	ccs.iSigType = SIG_NONEXPORTABLE;
	ccs.bExpires = FALSE;
	ccs.iExpireDays = 0;

	PGPclOpenClientPrefs (PGPGetContextMemoryMgr (pKM->Context), &prefref);
	PGPGetPrefBoolean (prefref, kPGPPrefKeyServerSyncOnKeySign, 
						&(ccs.bSyncWithServer));
	PGPclCloseClientPrefs (prefref, FALSE);

	if (DialogBoxParam (g_hInst, MAKEINTRESOURCE(IDD_SIGNCONFIRM),
		pKM->hWndParent, sSignKeyDlgProc, (LPARAM)&ccs)) {
		return FALSE;
	}

	// convert user-entered signature type to flags to pass
	// and setup domain regular expression
	switch (ccs.iSigType) {
	case SIG_NONEXPORTABLE :
		cs.bExportable = FALSE;
		cs.uTrustLevel = 0;
		cs.szRegExpression[0] = '\0';
		break;

	case SIG_EXPORTABLE :
		cs.bExportable = TRUE;
		cs.uTrustLevel = 0;
		cs.szRegExpression[0] = '\0';
		break;

	case SIG_TRUST :
		cs.bExportable = TRUE;
		cs.uTrustLevel = 1;
		if (ccs.szDomain[0])
			sDomainToRegExpression (ccs.szDomain, cs.szRegExpression);
		else
			cs.szRegExpression[0] = '\0';
		break;

	case SIG_META :
		cs.bExportable = FALSE;
		cs.uTrustLevel = 2;
		cs.szRegExpression[0] = '\0';
		break;
	}

	// convert expiration info to expire days
	if ((ccs.bExpires) && (ccs.iExpireDays > 0))
		cs.uExpireDays = (UINT)ccs.iExpireDays;
	else
		cs.uExpireDays = 0;

	// get valid passphrase
	LoadString (g_hInst, IDS_SIGNKEYPASSPHRASE, sz256, 256);
	err = KMGetSigningKeyPhrase (pKM->Context, pKM->tlsContext, 
						pKM->hWndParent, sz256, 
						pKM->KeySetMain, FALSE, &cs.keySigning,
						NULL, &cs.pPasskey, &cs.sizePasskey);

	if (IsntPGPError (err)) {

		// update from server
		if (ccs.bSyncWithServer) {
			if (!KMGetFromServerInternal (pKM, FALSE, FALSE, FALSE)) {
				if (KMMessageBox (pKM->hWndParent, IDS_CAPTION, 
									IDS_QUERYCONTINUESIGNING, 
									MB_YESNO|MB_ICONEXCLAMATION) == IDNO) {
					if (cs.pPasskey) {
						KMFreePasskey (cs.pPasskey, cs.sizePasskey);
						cs.pPasskey = NULL;
					}
					return FALSE;
				}
			}
		}

		// call callback for all selected items
		TreeList_IterateSelected (pKM->hWndTree, &cs);

		// changes have been made; save them and update all validities
		if (cs.bItemModified) {
			KMCommitKeyRingChanges (pKM);
			KMLoadKeyRingIntoTree (pKM, FALSE, FALSE, FALSE);
			InvalidateRect (pKM->hWndTree, NULL, TRUE);

			// send key to server, if selected
			if (ccs.bSyncWithServer) {
				KMSendToServer (pKM, PGPCL_DEFAULTSERVER);
			}
		}
	}

	if (cs.pPasskey) {
		KMFreePasskey (cs.pPasskey, cs.sizePasskey);
		cs.pPasskey = NULL;
	}
	return (cs.bItemModified);
}


//	_______________________________________________
//
//  Enable selected key

BOOL 
KMEnableKey (PKEYMAN pKM, PGPKeyRef key) 
{
	if (IsntPGPError (PGPclErrorBox (NULL, PGPEnableKey (key)))) {
		KMCommitKeyRingChanges (pKM);
		KMUpdateKeyInTree (pKM, key, FALSE);
		return TRUE;
	}
	return FALSE;
}


//	_______________________________________________
//
//  Disable selected key

BOOL 
KMDisableKey (PKEYMAN pKM, PGPKeyRef key) 
{
	if (IsntPGPError (PGPclErrorBox (NULL, PGPDisableKey (key)))) {
		KMCommitKeyRingChanges (pKM);
		KMUpdateKeyInTree (pKM, key, FALSE);
		return TRUE;
	}
	return FALSE;
}


//	_______________________________________________
//
//	Delete All dialog message procedure

static BOOL CALLBACK 
sDeleteAllDlgProc (
		HWND	hWndDlg, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	PDELETESTRUCT pds;

	switch (uMsg) {

	case WM_INITDIALOG :
		SetWindowLong (hWndDlg, GWL_USERDATA, lParam);
		pds = (PDELETESTRUCT)lParam;
		SetDlgItemText (hWndDlg, IDC_STRING, pds->pszPrompt);
		SetFocus (GetDlgItem (hWndDlg, IDNO));
		return FALSE;

    case WM_HELP: 
		pds = (PDELETESTRUCT)GetWindowLong (hWndDlg, GWL_USERDATA);
        WinHelp (((LPHELPINFO) lParam)->hItemHandle, pds->pKM->szHelpFile, 
            HELP_WM_HELP, (DWORD) (LPSTR) aDeleteAllIds); 
        break; 
 
    case WM_CONTEXTMENU:
		pds = (PDELETESTRUCT)GetWindowLong (hWndDlg, GWL_USERDATA);
        WinHelp ((HWND) wParam, pds->pKM->szHelpFile, HELP_CONTEXTMENU, 
            (DWORD) (LPVOID) aDeleteAllIds); 
        break; 

	case WM_COMMAND:

		switch (LOWORD(wParam)) {
		case IDCANCEL:
			pds = (PDELETESTRUCT)GetWindowLong (hWndDlg, GWL_USERDATA);
			pds->bItemNotDeleted = TRUE;
			EndDialog (hWndDlg, IDCANCEL);
			break;

		case IDOK:
		case IDYES:
			EndDialog (hWndDlg, IDYES);
			break;

		case IDNO:
			EndDialog (hWndDlg, IDNO);
			break;

		case IDC_YESTOALL :
			pds = (PDELETESTRUCT)GetWindowLong (hWndDlg, GWL_USERDATA);
			pds->bDeleteAll = TRUE;
			EndDialog (hWndDlg, IDYES);
			break;
		}
		return TRUE;
	}
	return FALSE;
}


//	_______________________________________________
//
//  Ask user for delete confirmation

static INT 
sDeleteConfirm (
		TL_TREEITEM*	lptli, 
		INT				iPromptID, 
		PDELETESTRUCT	pds) 
{
	CHAR sz256[256];
	CHAR sz512[512];
	INT iRetVal;

	if (pds->bDeleteAll) return IDYES;

	LoadString (g_hInst, iPromptID, sz256, 256); 
	wsprintf (sz512, sz256, lptli->pszText);

	if (KMMultipleSelected (pds->pKM)) {
		pds->pszPrompt = sz512;
		iRetVal = DialogBoxParam (g_hInst, MAKEINTRESOURCE (IDD_DELETEALL), 
			pds->pKM->hWndParent, sDeleteAllDlgProc, (LPARAM)pds);
		if (!pds->bItemNotDeleted && (iRetVal == IDNO)) {
			pds->bItemNotDeleted = TRUE;
			pds->hPostDeleteFocusItem = lptli->hItem;
		}
	}
	else {
		LoadString (g_hInst, IDS_DELCONFCAPTION, sz256, 256);
		iRetVal = MessageBox (pds->pKM->hWndParent, sz512, sz256,
				MB_YESNO|MB_TASKMODAL|MB_DEFBUTTON2|MB_ICONWARNING);
	}

	return iRetVal;
}


//	_______________________________________________
//
//  Get handle of nearby item
//
//	lptli	= pointer to TreeList item

static HTLITEM 
sGetAdjacentItem (
		HWND			hWndTree, 
		TL_TREEITEM*	lptli) 

⌨️ 快捷键说明

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