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

📄 pnaddwiz.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 5 页
字号:
						GetParent (hwnd), PSWIZB_NEXT|PSWIZB_BACK);
			else
				PropSheet_SetWizButtons (
						GetParent (hwnd), PSWIZB_BACK);
		}
		break;

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

		switch(pnmh->code) {
		case PSN_SETACTIVE:
			pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
			PostMessage	(GetParent (hwnd), 
					PSM_SETWIZBUTTONS, 0, PSWIZB_BACK|PSWIZB_NEXT);
			SendDlgItemMessage (hwnd, IDC_WIZBITMAP, STM_SETIMAGE, 
					IMAGE_BITMAP, (LPARAM) pahs->hBitmap);

			// enable/disable the 'Next' button
			if (GetWindowTextLength (GetDlgItem (hwnd, IDC_IDENTITY)) > 0)
				PropSheet_SetWizButtons (
						GetParent (hwnd), PSWIZB_NEXT|PSWIZB_BACK);
			else
				PropSheet_SetWizButtons (
						GetParent (hwnd), PSWIZB_BACK);

			if (!pahs->bSharedSecret)
				SetWindowLong (hwnd, DWL_MSGRESULT, -1L);
			else
			{
				CHAR	sz1[128];
				CHAR	sz2[128];
				CHAR	szPrompt[256];

				switch (pahs->pheNew->identityType) {
				case kPGPike_ID_IPV4_Addr :
				case kPGPike_ID_FQDN :
					SetWindowLong (hwnd, DWL_MSGRESULT, -1L);
					break;

				case kPGPike_ID_UserFDQN :
					PNGetLocalHostInfo (NULL, sz1, sizeof(sz1));
					LoadString (g_hinst, IDS_USERDOMAINNAMEPROMPT, 
									sz2, sizeof(sz2));
					wsprintf (szPrompt, sz2, sz1);
					SetDlgItemText (hwnd, IDC_IDENTITYPROMPT, szPrompt);
					SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
					break;

				case kPGPike_ID_DER_ASN1_DN :
					LoadString (g_hinst, IDS_DISTINGUISHEDNAMEPROMPT, 
									szPrompt, sizeof(szPrompt));
					SetDlgItemText (hwnd, IDC_IDENTITYPROMPT, szPrompt);
					SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
					break;
				}
			}

			bReturnCode = TRUE;
			break;

		case PSN_WIZNEXT :
		{
			PGPByte*	pbyte	= NULL;
			PGPSize		size;
			PGPError	err;

			pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
			GetDlgItemText (hwnd, IDC_IDENTITY, pahs->pheNew->identity,
								sizeof(pahs->pheNew->identity));

			if (pahs->pheNew->identityType == kPGPike_ID_DER_ASN1_DN)
			{

				err = PGPCreateDistinguishedName (
								pahs->context, pahs->pheNew->identity, 
								&pbyte, &size);

				if (err == kPGPError_InvalidDistinguishedName)
					PNMessageBox (hwnd, IDS_CAPTION, IDS_DNINVALID,
										MB_OK|MB_ICONSTOP);
				else
					PGPclErrorBox (hwnd, err);

				if (IsPGPError (err))
				{
					SetFocus (GetDlgItem (hwnd, IDC_IDENTITY));
					SendDlgItemMessage (
							hwnd, IDC_IDENTITY, EM_SETSEL, 0, -1);
					SetWindowLong (hwnd, DWL_MSGRESULT, -1L);
				}
				else
					SetWindowLong (hwnd, DWL_MSGRESULT, 0L);

				if (pbyte)
					PGPFreeData (pbyte);
			}
			else
				SetWindowLong (hwnd, DWL_MSGRESULT, 0L);

			bReturnCode = TRUE;
			break;
		}

		case PSN_QUERYCANCEL:
			break;
		}
		
		break;
	}
	}

	return bReturnCode;
}


//	______________________________________________
//
//	Dialog procedure for asking user to continue with host/subnet

static LRESULT WINAPI 
sAddWizAddMoreDlgProc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam,
		LPARAM	lParam) 
{
	BOOL			bReturnCode = FALSE;
	PADDHOSTSTRUCT	pahs		= NULL;

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

		pahs = (PADDHOSTSTRUCT) ppspMsgRec->lParam;
		SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)pahs);

		// set default state
		CheckRadioButton (hwnd, IDC_CREATEMORE, IDC_NOMORE, IDC_CREATEMORE);
		break;
	}

	case WM_ACTIVATE :
		InvalidateRect (hwnd, NULL, TRUE);
		break;

	case WM_PAINT :
		pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
		if (pahs->hPalette)
		{
			PAINTSTRUCT ps;
			HDC	hDC = BeginPaint (hwnd, &ps);
			SelectPalette (hDC, pahs->hPalette, FALSE);
			RealizePalette (hDC);
			EndPaint (hwnd, &ps);
		}
		break;

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

		switch(pnmh->code) {
		case PSN_SETACTIVE:
		{
			pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
			PostMessage	(GetParent (hwnd), 
					PSM_SETWIZBUTTONS, 0, PSWIZB_BACK|PSWIZB_NEXT);
			SendDlgItemMessage (hwnd, IDC_WIZBITMAP, STM_SETIMAGE, 
					IMAGE_BITMAP, (LPARAM) pahs->hBitmap);

			if (pahs->bFirstTime && 
				(pahs->uHostType != WIZ_GATEWAY)) 
			{
				SetWindowLong (hwnd, DWL_MSGRESULT, -1L); // skip this panel
			}
			else 
			{
				// set text strings
				if (pahs->bFirstTime)
				{
					ShowWindow (GetDlgItem (hwnd, IDC_TEXT1), SW_SHOW);
					ShowWindow (GetDlgItem (hwnd, IDC_FIRSTTIME), SW_SHOW);
					ShowWindow (GetDlgItem (hwnd, IDC_CONTINUE), SW_HIDE);
					CheckRadioButton (hwnd, IDC_CREATEMORE, 
										IDC_NOMORE, IDC_CREATEMORE);
				}
				else
				{
					ShowWindow (GetDlgItem (hwnd, IDC_TEXT1), SW_HIDE);
					ShowWindow (GetDlgItem (hwnd, IDC_FIRSTTIME), SW_HIDE);
					ShowWindow (GetDlgItem (hwnd, IDC_CONTINUE), SW_SHOW);
					CheckRadioButton (hwnd, IDC_CREATEMORE, 
										IDC_NOMORE, IDC_NOMORE);
				}
				SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
			}
			bReturnCode = TRUE;
			break;
		}

		case PSN_WIZNEXT :
			pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
			if (IsDlgButtonChecked (hwnd, IDC_CREATEMORE) == BST_CHECKED)
			{
				INT		iEntry;

				// send message to all panels to reset
				PropSheet_QuerySiblings (GetParent (hwnd), 0, 0);

				// reset data structure
				iEntry = sSaveHostEntry (pahs);
				if (iEntry >= 0)
				{
					if (pahs->bFirstTime) 
						pahs->iSelectedHost = iEntry;
					pahs->bFirstTime = FALSE;
					pahs->bBehindGateway = TRUE;
					pahs->uHostType = WIZ_HOST;
					pahs->szHostName[0] = '\0';
					pahs->dwFoundIPAddress = 0;
					pahs->pheNew->ipAddress = 0;
					pahs->pheNew->ipMask = 0;
					pahs->pheNew->hostName[0]		= '\0';
					pahs->pheNew->identity[0]		= '\0';
					pahs->pheNew->identityIPAddress	= 0;
					pahs->pheNew->sharedSecret[0]	= '\0';

					pahs->bNeedsAuthKey |= (pahs->bSecure && 
											!pahs->bSharedSecret);
					pahs->bSharedSecret = FALSE;

					PropSheet_SetCurSel (GetParent (hwnd), 
											NULL, ADDWIZ_HOSTTYPE);
					SetWindowLong (hwnd, DWL_MSGRESULT, -1L);
				}
				else
					SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
			}
			else
				SetWindowLong (hwnd, DWL_MSGRESULT, 0L);

			bReturnCode = TRUE;
			break;

		case PSN_KILLACTIVE :
			SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
			bReturnCode = TRUE;
			break;

		case PSN_QUERYCANCEL:
			break;
		}
		
		break;
	}
	}

	return bReturnCode;
}


//	____________________________________
//
//	initialize the list view control

static VOID
sInitKeyLists (
		HWND			hwnd,
		PADDHOSTSTRUCT	pahs)
{
	HBITMAP			hBmp; 
	HDC				hDC;
	INT				iNumBits;
	LV_COLUMN		lvc;
	RECT			rc;

	// Initialize the tree view window.
	// First create imagelist and load the appropriate bitmaps based on 
	// current display capabilities.
	hDC = GetDC (NULL);		// DC for desktop
	iNumBits = GetDeviceCaps (hDC, BITSPIXEL) * GetDeviceCaps (hDC, PLANES);
	ReleaseDC (NULL, hDC);

	if (iNumBits <= 8) {
		pahs->hil =	ImageList_Create (16, 16, ILC_COLOR|ILC_MASK, 
										NUM_KEY_BITMAPS, 0); 
		hBmp = LoadBitmap (g_hinst, MAKEINTRESOURCE (IDB_KEYIMG4));
		ImageList_AddMasked (pahs->hil, hBmp, RGB(255, 0, 255));
		DeleteObject (hBmp);
	}
	else {
		pahs->hil =	ImageList_Create (16, 16, ILC_COLOR24|ILC_MASK, 
										NUM_KEY_BITMAPS, 0); 
		hBmp = LoadBitmap (g_hinst, MAKEINTRESOURCE (IDB_KEYIMG24));
		ImageList_AddMasked (pahs->hil, hBmp, RGB(255, 0, 255));
		DeleteObject (hBmp);
	}

	// Associate the image list with the tree view control.
	ListView_SetImageList (
			GetDlgItem (hwnd, IDC_PGPKEYLIST), pahs->hil, LVSIL_SMALL);

	// add columns
	GetClientRect (GetDlgItem (hwnd, IDC_PGPKEYLIST), &rc);
	lvc.mask = LVCF_WIDTH;
	lvc.cx = rc.right - rc.left;
	ListView_InsertColumn (GetDlgItem (hwnd, IDC_PGPKEYLIST), 0, &lvc);
}


//	____________________________________
//
//	put name of key into listview

static VOID
sSetKeyLists (
		HWND			hwnd,
		PADDHOSTSTRUCT	pahs)
{
	LV_ITEM			lvi;
	CHAR			sz[kPGPMaxUserIDSize +1];
	CHAR			szID[kPGPMaxKeyIDStringSize +1];
	UINT			u;
	PGPKeyID		keyid;
	PGPError		err;
	PGPSize			size;
	PGPKeyRef		keyPGP;
	PGPKeyRef		keyX509;
	PGPSigRef		sigX509;
	HICON			hIcon;
	HWND			hwndList;

	hwndList = GetDlgItem (hwnd, IDC_PGPKEYLIST);

	ListView_DeleteAllItems (hwndList);
	SetDlgItemText (hwnd, IDC_X509KEYEDIT, "");

	PGPnetGetConfiguredAuthKeys (g_context, &pahs->pncfg, g_AOS.keysetMain, 
				&keyPGP, &keyX509, &sigX509);

	lvi.mask = LVIF_TEXT|LVIF_IMAGE;
	lvi.iItem = 0;
	lvi.iSubItem = 0;
	lvi.pszText = sz;
	sz[0] = '\0';

	// first the PGP key
	if (pahs->pncfg.uPGPAuthKeyAlg != kPGPPublicKeyAlgorithm_Invalid)
	{
		if (PGPKeyRefIsValid (keyPGP))
		{
			lvi.iImage = PNDetermineKeyIcon (keyPGP, NULL);
			sz[0] = '\0';
			PGPGetPrimaryUserIDNameBuffer (keyPGP, sizeof(sz), sz, &u);
		}
		else
		{
			lvi.iImage = IDX_NONE;
			err = PGPImportKeyID (pahs->pncfg.expkeyidPGPAuthKey, &keyid);
			if (IsntPGPError (err))
			{
				LoadString (g_hinst, IDS_UNKNOWNKEY, sz, sizeof(sz));
				PGPGetKeyIDString (&keyid, 
						kPGPKeyIDString_Abbreviated, szID);
				lstrcat (sz, szID);
			}
		}
		ListView_InsertItem (hwndList, &lvi);
		InvalidateRect (hwndList, NULL, FALSE);
	}

	// then get X509 auth key
	if (pahs->pncfg.uX509AuthKeyAlg != kPGPPublicKeyAlgorithm_Invalid)
	{
		if (PGPKeyRefIsValid (keyX509) &&
			PGPSigRefIsValid (sigX509))
		{
			sz[0] = '\0';
			PGPGetSigPropertyBuffer (sigX509,
						kPGPSigPropX509LongName, sizeof(sz), sz, &size);
			SetDlgItemText (hwnd, IDC_X509KEYEDIT, sz);

			u = PNDetermineCertIcon (sigX509, NULL);
			hIcon = ImageList_GetIcon (pahs->hil, u, ILD_TRANSPARENT);

			SendDlgItemMessage (
						hwnd, IDC_X509ICON, STM_SETICON, (WPARAM)hIcon, 0);		
		}
		else
		{
			err = PGPImportKeyID (pahs->pncfg.expkeyidX509AuthKey, &keyid);
			if (IsntPGPError (err))
			{
				LoadString (g_hinst, IDS_UNKNOWNCERT, sz, sizeof(sz));
				PGPGetKeyIDString (&keyid, 
						kPGPKeyIDString_Abbreviated, szID);
				lstrcat (sz, szID);
				SetDlgItemText (hwnd, IDC_X509KEYEDIT, sz);
			}
		}
	}
}


//	______________________________________________
//
//	Dialog procedure for asking user to set authentication keys

static LRESULT WINAPI 
sAddWizAuthKeysDlgProc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam,
		LPARAM	lParam) 
{
	BOOL			bReturnCode = FALSE;
	PADDHOSTSTRUCT	pahs		= NULL;

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

		pahs = (PADDHOSTSTRUCT) ppspMsgRec->lParam;
		SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)pahs);

#if !PGP_FREEWARE
		ShowWindow (GetDlgItem (hwnd, IDC_X509GROUP), SW_SHOW);
		ShowWindow (GetDlgItem (hwnd, IDC_X509BORDER), SW_SHOW);
		ShowWindow (GetDlgItem (hwnd, IDC_X509ICON), SW_SHOW);
		ShowWindow (GetDlgItem (hwnd, IDC_X509KEYEDIT), SW_SHOW);
		ShowWindow (GetDlgItem (hwnd, IDC_SELECTX509CERT), SW_SHOW);
		EnableWindow (GetDlgItem (hwnd, IDC_SELECTX509CERT), TRUE);
#endif // !PGP_FREEWARE

		// initialize controls
		sInitKeyLists (hwnd, pahs);
		PostMessage (hwnd, WM_APP, 0, 0);
		break;
	}

	case WM_APP :
		pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
		if (g_bAuthAccess)
		{
			sSetKeyLists (hwnd, pahs); 
		}
		break;

	case WM_ACTIVATE :
		InvalidateRect (hwnd, NULL, TRUE);
		break;

	case WM_PAINT :
		pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
		if (pahs->hPalette)
		{
			PAINTSTRUCT ps;
			HDC	hDC = BeginPaint (hwnd, &ps);
			SelectPalette (hDC, pahs->hPalette, FALSE);
			RealizePalette (hDC);
			EndPaint (hwnd, &ps);
		}
		break;

	case WM_DESTROY :
		pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
		ImageList_Destroy (pahs->hil);
		break;

	case WM_COMMAND :
	{
		PGPError	err;
		pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

		switch (LOWORD(wParam)) {
		case IDC_SELECTPGPKEY :
			err = PNSelectPGPKey (g_context, g_AOS.keysetMain, hwnd,
						&pahs->pncfg.uPGPAuthKeyAlg, 
						pahs->pncfg.expkeyidPGPAuthKey);

			PostMessage (hwnd, WM_APP, 0, 0);
			break;

		case IDC_SELECTX509CERT :
		{
			PGPKeyRef	key;
			PGPSigRef	sig;

			err = PGPclSelectX509Cert (g_context, hwnd, NULL,
						g_AOS.keysetMain, 
						PGPCL_CANSIGNKEYSONLY|PGPCL_NOSPLITKEYS,
						&key, &sig);

			if (IsntPGPError (err))
			{
				if (IsntNull (pahs->pncfg.pX509AuthCertIASN))
					PGPFreeData (pahs->pncfg.pX509AuthCertIASN);

				PGPX509CertToExport (g_context, key, sig,
						&(pahs->pncfg.uX509AuthKeyAlg), 
						pahs->pncfg.expkeyidX509AuthKey,
						&(pahs->pncfg.pX509AuthCertIASN),
						&(pahs->pncfg.uX509AuthCertIASNLength));
			}

			PostMessage (hwnd, WM_APP, 0, 0);
			break;
		}
		}
		break;
	}

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

		switch(p

⌨️ 快捷键说明

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