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

📄 pnadvanced.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 4 页
字号:
		pIpsec = &(pIkeIpsecProposalPrefs->u.ipsecProposals.t[u]);
		lvi.iItem = u;

		// AH authentication string
		lvi.iSubItem = IPSECCOL_AH;
		switch (pIpsec->ah.authAttr) {
			case kPGPike_AA_None :			ids = IDS_NONE;			break;
			case kPGPike_AA_HMAC_MD5 :		ids = IDS_MD5;			break;
			case kPGPike_AA_HMAC_SHA :		ids = IDS_SHA;			break;
			default :						ids = IDS_UNKNOWN;		break;
		}
		LoadString (g_hinst, ids, sz, sizeof(sz));
		ListView_InsertItem (hwndList, &lvi);

		// ESP hash string
		lvi.iSubItem = IPSECCOL_ESP;
		switch (pIpsec->esp.authAttr) {
			case kPGPike_AA_None :			ids = IDS_NONE;			break;
			case kPGPike_AA_HMAC_MD5	:	ids	= IDS_MD5;			break;
			case kPGPike_AA_HMAC_SHA :		ids = IDS_SHA;			break;
			default :						ids = IDS_UNKNOWN;		break;
		}
		LoadString (g_hinst, ids, sz, sizeof(sz));

		// ESP cipher string
		lvi.iSubItem = IPSECCOL_ESP;
		switch (pIpsec->esp.cipher) {
			case kPGPike_ET_NULL :			ids = IDS_NONE;			break;
			case kPGPike_ET_DES :			ids	= IDS_DES56;		break;
			case kPGPike_ET_DES_IV64 :		ids	= IDS_DES56;		break;
			case kPGPike_ET_3DES :			ids = IDS_3DES;			break;
			case kPGPike_ET_CAST :			ids = IDS_CAST;			break;
			default :						ids = IDS_UNKNOWN;		break;
		}
		if (ids != IDS_NONE)
			PNCommaCat (sz, ids);
		ListView_SetItem (hwndList, &lvi);

		// IPCOMP string
		lvi.iSubItem = IPSECCOL_COMP;
		switch (pIpsec->ipcomp.compAlg) {
			case kPGPike_IC_None :			ids = IDS_NONE;			break;
			case kPGPike_IC_Deflate :		ids = IDS_DEFLATE;		break;
			case kPGPike_IC_LZS :			ids = IDS_LZS;			break;
			default :						ids = IDS_UNKNOWN;		break;
		}
		LoadString (g_hinst, ids, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);
	}
}

//	____________________________________
//
//	dialog proc of IKE proposal dialog

static BOOL CALLBACK
sIkeProposalDlgProc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam)
{
	PGPikeTransform*	pIke;

	switch (uMsg) {
	case WM_INITDIALOG :
	{
		CHAR	sz[32];
		HWND	hwndCombo;
		UINT	u;

		SetWindowLong (hwnd, GWL_USERDATA, lParam);
		pIke = (PGPikeTransform*)GetWindowLong (hwnd, GWL_USERDATA);

		// load combo boxes with text strings
		hwndCombo = GetDlgItem (hwnd, IDC_IKEAUTHCOMBO);
		LoadString (g_hinst, IDS_SHAREDKEY, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_DSSSIGNATURE, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_RSASIGNATURE, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);

		hwndCombo = GetDlgItem (hwnd, IDC_IKEHASHCOMBO);
		LoadString (g_hinst, IDS_SHA, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_MD5, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);

		hwndCombo = GetDlgItem (hwnd, IDC_IKECIPHERCOMBO);
		LoadString (g_hinst, IDS_CAST, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_3DES, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
#if PGPNET_ALLOW_DES56
		LoadString (g_hinst, IDS_DES56, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
#endif //PGPNET_ALLOW_DES56

		hwndCombo = GetDlgItem (hwnd, IDC_IKEDHCOMBO);
#if PGPNET_ALLOW_DH768
		LoadString (g_hinst, IDS_768, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
#endif //PGPNET_ALLOW_DH768
		LoadString (g_hinst, IDS_1024, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_1536, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);

		// initialize combo boxes
		switch (pIke->authMethod) {
			case kPGPike_AM_PreSharedKey :	u = 0;	break;
			case kPGPike_AM_DSS_Sig :		u = 1;	break;
			case kPGPike_AM_RSA_Sig :		u = 2;	break;
			default :						u = 0;	break;
		}
		SendDlgItemMessage (hwnd, IDC_IKEAUTHCOMBO, CB_SETCURSEL, u, 0);

		switch (pIke->hash) {
			case kPGPike_HA_SHA1 :			u = 0;	break;
			case kPGPike_HA_MD5 :			u = 1;	break;
			default :						u = 0;	break;
		}
		SendDlgItemMessage (hwnd, IDC_IKEHASHCOMBO, CB_SETCURSEL, u, 0);

		switch (pIke->cipher) {
			case kPGPike_SC_CAST_CBC :		u = 0;	break;
			case kPGPike_SC_3DES_CBC :		u = 1;	break;
#if PGPNET_ALLOW_DES56
			case kPGPike_SC_DES_CBC :		u = 2;	break;
#endif //PGPNET_ALLOW_DES56
			default :						u = 0;	break;
		}
		SendDlgItemMessage (hwnd, IDC_IKECIPHERCOMBO, CB_SETCURSEL, u, 0);

		switch (pIke->groupID) {
#if PGPNET_ALLOW_DH768
			case kPGPike_GR_MODPOne :		u = 0;	break;
			case kPGPike_GR_MODPTwo :		u = 1;	break;
			case kPGPike_GR_MODPFive :		u = 2;	break;
			default :						u = 1;	break;
#else
			case kPGPike_GR_MODPTwo :		u = 0;	break;
			case kPGPike_GR_MODPFive :		u = 1;	break;
			default :						u = 0;	break;
#endif //PGPNET_ALLOW_DH768
		}
		SendDlgItemMessage (hwnd, IDC_IKEDHCOMBO, CB_SETCURSEL, u, 0);

		return FALSE;
	}

	case WM_HELP: 
		WinHelp (((LPHELPINFO) lParam)->hItemHandle, g_szHelpFile, 
			HELP_WM_HELP, (DWORD) (LPVOID) aIkeIds); 
		break; 
 
	case WM_CONTEXTMENU: 
		WinHelp ((HWND) wParam, g_szHelpFile, HELP_CONTEXTMENU, 
			(DWORD) (LPVOID) aIkeIds); 
		break; 

	case WM_COMMAND :
		pIke = (PGPikeTransform*)GetWindowLong (hwnd, GWL_USERDATA);

		switch (LOWORD (wParam)) {

		case IDOK :
		{
			UINT	u;

			u = SendDlgItemMessage (
						hwnd, IDC_IKEAUTHCOMBO, CB_GETCURSEL, 0, 0);
			switch (u) {
			case 0	:	pIke->authMethod = kPGPike_AM_PreSharedKey;	break;
			case 1	:	pIke->authMethod = kPGPike_AM_DSS_Sig;		break;
			case 2	:	pIke->authMethod = kPGPike_AM_RSA_Sig;		break;
			}

			u = SendDlgItemMessage (
						hwnd, IDC_IKEHASHCOMBO, CB_GETCURSEL, 0, 0);
			switch (u) {
			case 0	:	pIke->hash = kPGPike_HA_SHA1;			break;
			case 1	:	pIke->hash = kPGPike_HA_MD5;			break;
			}

			u = SendDlgItemMessage (
						hwnd, IDC_IKECIPHERCOMBO, CB_GETCURSEL, 0, 0);
			switch (u) {
			case 0	:	pIke->cipher = kPGPike_SC_CAST_CBC;		break;
			case 1	:	pIke->cipher = kPGPike_SC_3DES_CBC;		break;
			case 2	:	pIke->cipher = kPGPike_SC_DES_CBC;		break;
			}

			u = SendDlgItemMessage (
						hwnd, IDC_IKEDHCOMBO, CB_GETCURSEL, 0, 0);
			switch (u) {
#if PGPNET_ALLOW_DH768
			case 0	:	pIke->groupID = kPGPike_GR_MODPOne;		break;
			case 1	:	pIke->groupID = kPGPike_GR_MODPTwo;		break;
			case 2	:	pIke->groupID = kPGPike_GR_MODPFive;	break;
#else
			case 0	:	pIke->groupID = kPGPike_GR_MODPTwo;		break;
			case 1	:	pIke->groupID = kPGPike_GR_MODPFive;	break;
#endif //PGPNET_ALLOW_DH768
			}

			if ((pIke->authMethod == kPGPike_AM_DSS_Sig) &&
				(pIke->hash != kPGPike_HA_SHA1))
			{
				PNMessageBox (hwnd, IDS_CAPTION, IDS_DSSNONSHAWARN,
										MB_OK|MB_ICONEXCLAMATION);
				break;
			}

			if (pIke->cipher == kPGPike_SC_DES_CBC)
			{
				if (PNMessageBox (hwnd, IDS_CAPTION, IDS_DESWARN,
					MB_OKCANCEL|MB_DEFBUTTON2|MB_ICONEXCLAMATION) == IDOK)
					EndDialog (hwnd, 1);
			}
			else
				EndDialog (hwnd, 1);

			break;
		}

		case IDCANCEL :
			EndDialog (hwnd, 0);
			break;
		}
		break;
	}

	return FALSE;
}


//	_____________________________________________________
//
//  display IKE proposal dialog

static VOID
sNewIkeProposalDialog (
		PGPContextRef	context,
		HWND			hwnd,
		POPTIONSSTRUCT	pos)
{
	PGPikeTransform		ike;

	ike.authMethod		= kPGPike_AM_PreSharedKey;
	ike.hash			= kPGPike_HA_SHA1;
	ike.cipher			= kPGPike_SC_CAST_CBC;
	ike.modpGroup		= TRUE;
	ike.groupID			= kPGPike_GR_MODPTwo;

	if (DialogBoxParam (g_hinst, MAKEINTRESOURCE(IDD_IKEPROPOSAL), 
				hwnd, sIkeProposalDlgProc, (LPARAM)&ike))
	{
		PGPikeTransform*	pIke;
		PGPSize				size;
		UINT				uNumProposals;
		
		uNumProposals = ++(pos->pnconfig.IkeIkeProposalPrefs.
										u.ikeProposals.numTransforms);

		size = uNumProposals * sizeof(PGPikeTransform);

		pIke = PGPNewData (PGPGetContextMemoryMgr (context),
										size, kPGPMemoryMgrFlags_Clear);
		if (pIke)
		{
			pos->pnconfig.IkeIkeProposalPrefs.u.ikeProposals.numTransforms = 
											uNumProposals;

			pgpCopyMemory (&ike, pIke, sizeof(PGPikeTransform));
			pgpCopyMemory (
				pos->pnconfig.IkeIkeProposalPrefs.u.ikeProposals.t,
				&pIke[1], (uNumProposals-1)*sizeof(PGPikeTransform));

			PGPFreeData (pos->pnconfig.IkeIkeProposalPrefs.u.ikeProposals.t);
			pos->pnconfig.IkeIkeProposalPrefs.u.ikeProposals.t = pIke;

			sLoadIkeProposalList (hwnd, &pos->pnconfig.IkeIkeProposalPrefs);

			sSelectItem (hwnd, IDC_IKEPROPOSALLIST, 0);
			g_iSelectedIkeItem = 0;
		}
	}
}


//	____________________________________
//
//	dialog proc of IPSEC proposal dialog

static BOOL CALLBACK
sIpsecProposalDlgProc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam)
{
	PGPipsecTransform*	pIpsec;

	switch (uMsg) {
	case WM_INITDIALOG :
	{
		CHAR	sz[32];
		HWND	hwndCombo;
		UINT	u;

		SetWindowLong (hwnd, GWL_USERDATA, lParam);
		pIpsec = (PGPipsecTransform*)GetWindowLong (hwnd, GWL_USERDATA);

		// load combo box strings
		hwndCombo = GetDlgItem (hwnd, IDC_IPSECAHCOMBO);
		LoadString (g_hinst, IDS_SHA, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_MD5, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);

		hwndCombo = GetDlgItem (hwnd, IDC_IPSECESPCIPHERCOMBO);
		LoadString (g_hinst, IDS_NONE, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_CAST, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_3DES, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
#if PGPNET_ALLOW_DES56
		LoadString (g_hinst, IDS_DES56, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
#endif //PGPNET_ALLOW_DES56

		hwndCombo = GetDlgItem (hwnd, IDC_IPSECESPHASHCOMBO);
		LoadString (g_hinst, IDS_NONE, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_SHA, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_MD5, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);

		hwndCombo = GetDlgItem (hwnd, IDC_IPSECCOMPCOMBO);
		LoadString (g_hinst, IDS_LZS, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);
		LoadString (g_hinst, IDS_DEFLATE, sz, sizeof(sz));
		SendMessage (hwndCombo, CB_ADDSTRING, 0, (LPARAM)sz);

		// initialize check boxes
		if (pIpsec->useAH)
		{
			CheckDlgButton (hwnd, IDC_ENABLEAH, BST_CHECKED);
			EnableWindow (GetDlgItem (hwnd, IDC_IPSECAHCOMBO), TRUE);
		}

		if (pIpsec->useESP)
		{
			CheckDlgButton (hwnd, IDC_ENABLEESP, BST_CHECKED);
			EnableWindow (GetDlgItem (hwnd, IDC_IPSECESPCIPHERCOMBO), TRUE);
			EnableWindow (GetDlgItem (hwnd, IDC_IPSECESPHASHCOMBO), TRUE);
		}

		if (pIpsec->useIPCOMP)
		{
			CheckDlgButton (hwnd, IDC_ENABLECOMP, BST_CHECKED);
			EnableWindow (GetDlgItem (hwnd, IDC_IPSECCOMPCOMBO), TRUE);
		}

		// initialize combo boxes
		switch (pIpsec->ah.authAttr) {
			case kPGPike_AA_HMAC_SHA :		u = 0;	break;
			case kPGPike_AA_HMAC_MD5 :		u = 1;	break;
			default :						u = 0;	break;
		}
		SendDlgItemMessage (hwnd, IDC_IPSECAHCOMBO, CB_SETCURSEL, u, 0);

		switch (pIpsec->esp.cipher) {
			case kPGPike_ET_NULL :			u = 0;	break;
			case kPGPike_ET_CAST :			u = 1;	break;
			case kPGPike_ET_3DES :			u = 2;	break;
			case kPGPike_ET_DES :			u = 3;	break;
			case kPGPike_ET_DES_IV64 :		u = 3;	break;
			default :						u = 0;	break;
		}
		SendDlgItemMessage (
					hwnd, IDC_IPSECESPCIPHERCOMBO, CB_SETCURSEL, u, 0);

		switch (pIpsec->esp.authAttr) {
			case kPGPike_AA_None :			u = 0;	break;
			case kPGPike_AA_HMAC_SHA :		u = 1;	break;
			case kPGPike_AA_HMAC_MD5 :		u = 2;	break;
			default :						u = 0;	break;
		}
		SendDlgItemMessage (hwnd, IDC_IPSECESPHASHCOMBO, CB_SETCURSEL, u, 0);

		switch (pIpsec->ipcomp.compAlg) {
			case kPGPike_IC_LZS :			u = 0;	break;
			case kPGPike_IC_Deflate :		u = 1;	break;
			default :						u = 0;	break;
		}
		SendDlgItemMessage (hwnd, IDC_IPSECCOMPCOMBO, CB_SETCURSEL, u, 0);

		return FALSE;
	}

	case WM_HELP: 
		WinHelp (((LPHELPINFO) lParam)->hItemHandle, g_szHelpFile, 
			HELP_WM_HELP, (DWORD) (LPVOID) aIpsecIds); 
		break; 
 
	case WM_CONTEXTMENU: 
		WinHelp ((HWND) wParam, g_szHelpFile, HELP_CONTEXTMENU, 
			(DWORD) (LPVOID) aIpsecIds); 
		break; 

	case WM_COMMAND :
		pIpsec = (PGPipsecTransform*)GetWindowLong (hwnd, GWL_USERDATA);

		switch (LOWORD (wParam)) {

		case IDC_ENABLEAH :
			if (IsDlgButtonChecked (hwnd, IDC_ENABLEAH) == BST_CHECKED)
				EnableWindow (GetDlgItem (hwnd, IDC_IPSECAHCOMBO), TRUE);
			else
				EnableWindow (GetDlgItem (hwnd, IDC_IPSECAHCOMBO), FALSE);
			break;

		case IDC_ENABLEESP :
			if (IsDlgButtonChecked (hwnd, IDC_ENABLEESP) == BST_CHECKED)
			{
				EnableWindow (GetDlgItem (
								hwnd, IDC_IPSECESPHASHCOMBO), TRUE);
				EnableWindow (GetDlgItem (
								hwnd, IDC_IPSECESPCIPHERCOMBO), TRUE);
			}
			else
			{
				EnableWindow (GetDlgItem (
								hwnd, IDC_IPSECESPHASHCOMBO), FALSE);
				EnableWindow (GetDlgItem (
								hwnd, IDC_IPSECESPCIPHERCOMBO), FALSE);
			}
			break;

		case IDC_ENABLECOMP :
			if (IsDlgButtonChecked (hwnd, IDC_ENABLECOMP) == BST_CHECKED)
				EnableWindow (GetDlgItem (hwnd, IDC_IPSECCOMPCOMBO), TRUE);
			else
				EnableWindow (GetDlgItem (hwnd, IDC_IPSECCOMPCOMBO), FALSE);
			break;

		case IDCANCEL :
			EndDialog (hwnd, 0);
			break;

		case IDOK :
		{
			UINT	u;

			if (IsDlgButtonChecked (hwnd, IDC_ENABLEAH) == BST_CHECKED)
			{
				pIpsec->useAH = TRUE;

				u = SendDlgItemMessage (
							hwnd, IDC_IPSECAHCOMBO, CB_GETCURSEL, 0, 0);
				switch (u) {
				case 0	:	
					pIpsec->ah.authAlg = kPGPike_AH_SHA;	
					pIpsec->ah.authAttr = kPGPike_AA_HMAC_SHA;	
					break;

				case 1	:	
					pIpsec->ah.authAlg = kPGPike_AH_MD5;	
					pIpsec->ah.authAttr = kPGPike_AA_HMAC_MD5;	
					break;
				}
			}
			else
			{
				pIpsec->useAH = FALSE;
				pIpsec->ah.authAlg = kPGPike_AH_None;

⌨️ 快捷键说明

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