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

📄 pnadvanced.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 4 页
字号:
/*____________________________________________________________________________
	Copyright (C) 1998 Network Associates, Inc.
	All rights reserved.
	
	PGPadvanced.c - PGPnet advanced options window message procedure
	

	$Id: PNadvanced.c,v 1.30.4.1.2.1 1999/06/29 18:46:09 pbj Exp $
____________________________________________________________________________*/

#include <windows.h>
#include <commctrl.h>
#include "resource.h"
#include "PGPnetApp.h"
#include "PGPnetHelp.h"

#include "pgpBuildFlags.h"

#include "pgpFileSpec.h"
#include "pgpIke.h"


#define OFFSET_FIRST		2
#define OFFSET_OTHER		6

#define MAXPROPOSALS		16

#define	IKEAUTHCOLWIDTH		100
#define	IKEHASHCOLWIDTH		60
#define	IKECIPHERCOLWIDTH	70
#define	IKEDHCOLWIDTH		60

#define	IKECOL_AUTH			0
#define	IKECOL_HASH			1
#define	IKECOL_CIPHER		2
#define	IKECOL_DH			3

#define	IPSECAHCOLWIDTH		60
#define	IPSECESPCOLWIDTH	130
#define	IPSECCOMPCOLWIDTH	60

#define	IPSECCOL_AH			0
#define	IPSECCOL_ESP		1
#define	IPSECCOL_COMP		2

extern HINSTANCE			g_hinst;
extern PGPContextRef		g_context;
extern APPOPTIONSSTRUCT		g_AOS;
extern CHAR					g_szHelpFile[];
extern HWND					g_hwndOptions;

static INT	g_iSelectedIkeItem;
static INT	g_iSelectedIpsecItem;
static INT	g_iFocusedControl;

static DWORD aAdvIds[] = {			// Help IDs
    IDC_ALLOWCAST,				IDH_PNOPTADV_ALLOWCAST, 
	IDC_ALLOW3DES,				IDH_PNOPTADV_ALLOW3DES,
	IDC_ALLOWDES,				IDH_PNOPTADV_ALLOWDES,
	IDC_ALLOWNONECIPHER,		IDH_PNOPTADV_ALLOWNULLCIPHER,
	IDC_ALLOWSHA1,				IDH_PNOPTADV_ALLOWSHA,
	IDC_ALLOWMD5,				IDH_PNOPTADV_ALLOWMD5,
	IDC_ALLOWNONEHASH,			IDH_PNOPTADV_ALLOWNULLHASH,
#if PGPNET_ALLOW_DH768
	IDC_ALLOW768,				IDH_PNOPTADV_ALLOW768,
#endif //PGPNET_ALLOW_DH768
	IDC_ALLOW1024,				IDH_PNOPTADV_ALLOW1024,
	IDC_ALLOW1536,				IDH_PNOPTADV_ALLOW1536,
	IDC_ALLOWLZS,				IDH_PNOPTADV_ALLOWLZS,
	IDC_ALLOWDEFLATE,			IDH_PNOPTADV_ALLOWDEFLATE,
	IDC_DEFAULTS,				IDH_PNOPTADV_DEFAULTSETTINGS,
	IDC_IKEPROPOSALLIST,		IDH_PNOPTADV_IKEPROPOSALS,
	IDC_IPSECPROPOSALLIST,		IDH_PNOPTADV_IPSECPROPOSALS,
	IDC_NEWPROPOSAL,			IDH_PNOPTADV_NEWPROPOSAL,
	IDC_EDITPROPOSAL,			IDH_PNOPTADV_EDITPROPOSAL,
	IDC_REMOVEPROPOSAL,			IDH_PNOPTADV_REMOVEPROPOSAL,
	IDC_PROPOSALUP,				IDH_PNOPTADV_MOVEPROPOSALUP,
	IDC_PROPOSALDOWN,			IDH_PNOPTADV_MOVEPROPOSALDOWN,
	IDC_PERFECTSECRECY,			IDH_PNOPTADV_PERFECTFWDSECRECY,
	0,0
};

static DWORD aIkeIds[] = {			// Help IDs
    IDC_IKEAUTHCOMBO,			IDH_PNNEWIKE_AUTHENTICATION, 
    IDC_IKEHASHCOMBO,			IDH_PNNEWIKE_HASH, 
    IDC_IKECIPHERCOMBO,			IDH_PNNEWIKE_CIPHER, 
    IDC_IKEDHCOMBO,				IDH_PNNEWIKE_DIFFIEHELLMAN, 
	0,0
};

static DWORD aIpsecIds[] = {		// Help IDs
    IDC_ENABLEAH,				IDH_PNNEWIPSEC_AHENABLE, 
    IDC_IPSECAHCOMBO,			IDH_PNNEWIPSEC_AHHASH, 
    IDC_ENABLEESP,				IDH_PNNEWIPSEC_ESPENABLE, 
    IDC_IPSECESPHASHCOMBO,		IDH_PNNEWIPSEC_ESPHASH, 
    IDC_IPSECESPCIPHERCOMBO,	IDH_PNNEWIPSEC_ESPCIPHER, 
    IDC_ENABLECOMP,				IDH_PNNEWIPSEC_COMPENABLE, 
    IDC_IPSECCOMPCOMBO,			IDH_PNNEWIPSEC_COMPALGORITHM, 
	0,0
};

//	____________________________________
//
//	select the specified item

static VOID
sSelectItem (
		HWND	hwnd,
		INT		iControl,
		INT		iItem)
{
	HWND	hwndList;

	hwndList = GetDlgItem (hwnd, iControl);

	ListView_SetItemState (hwndList, iItem, LVIS_SELECTED, LVIS_SELECTED);
	ListView_EnsureVisible (hwndList, iItem, FALSE);
}

//	____________________________________
//
//	initialize IKE proposal list view

static VOID
sInitAllowedAlgorithms (
		HWND			hwnd,
		PGPikeMTPref*	pIkeAlgorithmPrefs)
{
	UINT	uState;

	// ciphers
	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.cast5 ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOWCAST, uState);

	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.tripleDES ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOW3DES, uState);

	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.singleDES ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOWDES, uState);

	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.espNULL ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOWNONECIPHER, uState);

	// hashes
	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.sha1 ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOWSHA1, uState);

	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.md5 ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOWMD5, uState);

	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.noAuth ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOWNONEHASH, uState);

	// compression
	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.lzs ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOWLZS, uState);

	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.deflate ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOWDEFLATE, uState);

	// Diffie-Hellman
#if PGPNET_ALLOW_DH768
	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.modpOne768 ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOW768, uState);
#endif //PGPNET_ALLOW_DH768

	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.modpTwo1024 ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOW1024, uState);

	uState = pIkeAlgorithmPrefs->u.allowedAlgorithms.modpFive1536 ?
				BST_CHECKED : BST_UNCHECKED;
	CheckDlgButton (hwnd, IDC_ALLOW1536, uState);
}


//	____________________________________
//
//	retrieve allowed algorithm prefs from checkbox controls

static VOID
sGetAllowedAlgorithms (
		HWND			hwnd,
		PGPikeMTPref*	pIkeAlgorithmPrefs)
{
	// ciphers
	pIkeAlgorithmPrefs->u.allowedAlgorithms.cast5 =
		(IsDlgButtonChecked (hwnd, IDC_ALLOWCAST) == BST_CHECKED);
	pIkeAlgorithmPrefs->u.allowedAlgorithms.tripleDES =
		(IsDlgButtonChecked (hwnd, IDC_ALLOW3DES) == BST_CHECKED);
#if PGPNET_ALLOW_DES56
	pIkeAlgorithmPrefs->u.allowedAlgorithms.singleDES =
		(IsDlgButtonChecked (hwnd, IDC_ALLOWDES) == BST_CHECKED);
#else
	pIkeAlgorithmPrefs->u.allowedAlgorithms.singleDES = FALSE;
#endif //PGPNET_ALLOW_DES56
	pIkeAlgorithmPrefs->u.allowedAlgorithms.espNULL =
		(IsDlgButtonChecked (hwnd, IDC_ALLOWNONECIPHER) == BST_CHECKED);

	// hashes
	pIkeAlgorithmPrefs->u.allowedAlgorithms.sha1 =
		(IsDlgButtonChecked (hwnd, IDC_ALLOWSHA1) == BST_CHECKED);
	pIkeAlgorithmPrefs->u.allowedAlgorithms.md5 =
		(IsDlgButtonChecked (hwnd, IDC_ALLOWMD5) == BST_CHECKED);
	pIkeAlgorithmPrefs->u.allowedAlgorithms.noAuth =
		(IsDlgButtonChecked (hwnd, IDC_ALLOWNONEHASH) == BST_CHECKED);

	// compression
	pIkeAlgorithmPrefs->u.allowedAlgorithms.lzs =
		(IsDlgButtonChecked (hwnd, IDC_ALLOWLZS) == BST_CHECKED);
	pIkeAlgorithmPrefs->u.allowedAlgorithms.deflate =
		(IsDlgButtonChecked (hwnd, IDC_ALLOWDEFLATE) == BST_CHECKED);

	// Diffie-Hellman
#if PGPNET_ALLOW_DH768
	pIkeAlgorithmPrefs->u.allowedAlgorithms.modpOne768 =
		(IsDlgButtonChecked (hwnd, IDC_ALLOW768) == BST_CHECKED);
#endif //PGPNET_ALLOW_DH768
	pIkeAlgorithmPrefs->u.allowedAlgorithms.modpTwo1024 =
		(IsDlgButtonChecked (hwnd, IDC_ALLOW1024) == BST_CHECKED);
	pIkeAlgorithmPrefs->u.allowedAlgorithms.modpFive1536 =
		(IsDlgButtonChecked (hwnd, IDC_ALLOW1536) == BST_CHECKED);
}


//	____________________________________
//
//	initialize IPSEC groupID combobox

static VOID
sLoadIpsecGroupID (
		HWND			hwnd,
		PGPikeGroupID	groupid)
{
	INT		iIndex;

	switch (groupid) {
#if PGPNET_ALLOW_DH768
		case kPGPike_GR_None :		iIndex = 0; break;
		case kPGPike_GR_MODPOne :	iIndex = 1; break;
		case kPGPike_GR_MODPTwo :	iIndex = 2; break;
		case kPGPike_GR_MODPFive :	iIndex = 3; break;
		default :					iIndex = 0; break;	
#else
		case kPGPike_GR_None :		iIndex = 0; break;
		case kPGPike_GR_MODPTwo :	iIndex = 1; break;
		case kPGPike_GR_MODPFive :	iIndex = 2; break;
		default :					iIndex = 0; break;	
#endif //PGPNET_ALLOW_DH768
	}

	SendMessage (GetDlgItem (hwnd, IDC_PERFECTSECRECY), 
			CB_SETCURSEL, (WPARAM)iIndex, 0);
}

//	____________________________________
//
//	retrieve group ID pref from combobox control

static VOID
sGetIpsecGroupID (
		HWND			hwnd,
		PGPikeGroupID*	pIkeIpsecGroupID)
{
	INT		iIndex;

	iIndex = SendMessage (
			GetDlgItem (hwnd, IDC_PERFECTSECRECY), CB_GETCURSEL, 0, 0);

	switch (iIndex) {
#if PGPNET_ALLOW_DH768
		case 0 :	*pIkeIpsecGroupID = kPGPike_GR_None;		break;
		case 1 :	*pIkeIpsecGroupID = kPGPike_GR_MODPOne;		break;
		case 2 :	*pIkeIpsecGroupID = kPGPike_GR_MODPTwo;		break;
		case 3 :	*pIkeIpsecGroupID = kPGPike_GR_MODPFive;	break;
		default :	*pIkeIpsecGroupID = kPGPike_GR_None;		break;
#else
		case 0 :	*pIkeIpsecGroupID = kPGPike_GR_None;		break;
		case 1 :	*pIkeIpsecGroupID = kPGPike_GR_MODPTwo;		break;
		case 2 :	*pIkeIpsecGroupID = kPGPike_GR_MODPFive;	break;
		default :	*pIkeIpsecGroupID = kPGPike_GR_None;		break;
#endif //PGPNET_ALLOW_DH768
	}
}


//	____________________________________
//
//	initialize IKE proposal list view

static VOID
sInitIkeProposalList (
		HWND	hwnd)
{
	HWND			hwndList;
	LV_COLUMN		lvc;
	CHAR			sz[64];

	hwndList = GetDlgItem (hwnd, IDC_IKEPROPOSALLIST);

	lvc.mask = LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
	lvc.pszText = sz;

	LoadString (g_hinst, IDS_IKEAUTHCOLNAME, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = IKEAUTHCOLWIDTH;
	lvc.iSubItem = IKECOL_AUTH;
	ListView_InsertColumn (hwndList, 0, &lvc);

	LoadString (g_hinst, IDS_IKEHASHCOLNAME, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = IKEHASHCOLWIDTH;
	lvc.iSubItem = IKECOL_HASH;
	ListView_InsertColumn (hwndList, 1, &lvc);

	LoadString (g_hinst, IDS_IKECIPHERCOLNAME, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = IKECIPHERCOLWIDTH;
	lvc.iSubItem = IKECOL_CIPHER;
	ListView_InsertColumn (hwndList, 2, &lvc);

	LoadString (g_hinst, IDS_IKEDHCOLNAME, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = IKEDHCOLWIDTH;
	lvc.iSubItem = IKECOL_DH;
	ListView_InsertColumn (hwndList, 3, &lvc);
}

//	____________________________________
//
//	load IKE proposal list view with entries

static VOID
sLoadIkeProposalList (
		HWND			hwnd,
		PGPikeMTPref*	pIkeIkeProposalPrefs)
{
	HWND				hwndList;
	CHAR				sz[64];
	UINT				u, uNumProposals;
	LV_ITEM				lvi;
	PGPikeTransform*	pIke;
	INT					ids;

	hwndList = GetDlgItem (hwnd, IDC_IKEPROPOSALLIST);
	ListView_DeleteAllItems (hwndList);

	uNumProposals = pIkeIkeProposalPrefs->u.ikeProposals.numTransforms;

	lvi.mask = LVIF_TEXT;
	lvi.pszText = sz;
	lvi.stateMask = 0;

	for (u=0; u<uNumProposals; u++)
	{
		pIke = &(pIkeIkeProposalPrefs->u.ikeProposals.t[u]);
		lvi.iItem = u;

		// authentication string
		lvi.iSubItem = IKECOL_AUTH;
		switch (pIke->authMethod) {
			case kPGPike_AM_None :			ids = IDS_NONE;			break;
			case kPGPike_AM_PreSharedKey :	ids = IDS_SHAREDKEY;	break;
			case kPGPike_AM_DSS_Sig :		ids = IDS_DSSSIGNATURE;	break;
			case kPGPike_AM_RSA_Sig :		ids = IDS_RSASIGNATURE;	break;
			default :						ids = IDS_UNKNOWN;		break;
		}
		LoadString (g_hinst, ids, sz, sizeof(sz));
		ListView_InsertItem (hwndList, &lvi);

		// hash string
		lvi.iSubItem = IKECOL_HASH;
		switch (pIke->hash) {
			case kPGPike_HA_None :			ids = IDS_NONE;			break;
			case kPGPike_HA_MD5 :			ids = IDS_MD5;			break;
			case kPGPike_HA_SHA1 :			ids = IDS_SHA;			break;
			default :						ids = IDS_UNKNOWN;		break;
		}
		LoadString (g_hinst, ids, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);

		// IPCOMP string
		lvi.iSubItem = IKECOL_CIPHER;
		switch (pIke->cipher) {
			case kPGPike_SC_None :			ids = IDS_NONE;			break;
			case kPGPike_SC_DES_CBC :		ids = IDS_DES56;		break;
			case kPGPike_SC_3DES_CBC :		ids = IDS_3DES;			break;
			case kPGPike_SC_CAST_CBC :		ids = IDS_CAST;			break;
			default :						ids = IDS_UNKNOWN;		break;
		}
		LoadString (g_hinst, ids, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);

		// DH string
		lvi.iSubItem = IKECOL_DH;
		switch (pIke->groupID) {
			case kPGPike_GR_None :			ids = IDS_NONE;			break;
			case kPGPike_GR_MODPOne :		ids = IDS_768;			break;
			case kPGPike_GR_MODPTwo :		ids = IDS_1024;			break;
			case kPGPike_GR_MODPFive :		ids = IDS_1536;			break;
			default :						ids = IDS_UNKNOWN;		break;
		}
		LoadString (g_hinst, ids, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);
	}
}

//	____________________________________
//
//	initialize IKE proposal list view

static VOID
sInitIpsecProposalList (
		HWND	hwnd)
{
	HWND			hwndList;
	LV_COLUMN		lvc;
	CHAR			sz[64];

	hwndList = GetDlgItem (hwnd, IDC_IPSECPROPOSALLIST);

	lvc.mask = LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
	lvc.pszText = sz;

	LoadString (g_hinst, IDS_IPSECAHCOLNAME, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = IPSECAHCOLWIDTH;
	lvc.iSubItem = IPSECCOL_AH;
	ListView_InsertColumn (hwndList, 0, &lvc);

	LoadString (g_hinst, IDS_IPSECESPCOLNAME, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = IPSECESPCOLWIDTH;
	lvc.iSubItem = IPSECCOL_ESP;
	ListView_InsertColumn (hwndList, 1, &lvc);

	LoadString (g_hinst, IDS_IPSECCOMPCOLNAME, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = IPSECCOMPCOLWIDTH;
	lvc.iSubItem = IPSECCOL_COMP;
	ListView_InsertColumn (hwndList, 2, &lvc);
}


//	____________________________________
//
//	load IPSEC proposal list view with entries

static VOID
sLoadIpsecProposalList (
		HWND			hwnd,
		PGPikeMTPref*	pIkeIpsecProposalPrefs)
{
	HWND				hwndList;
	CHAR				sz[64];
	UINT				u, uNumProposals;
	LV_ITEM				lvi;
	PGPipsecTransform*	pIpsec;
	INT					ids;

	hwndList = GetDlgItem (hwnd, IDC_IPSECPROPOSALLIST);
	ListView_DeleteAllItems (hwndList);

	uNumProposals = pIkeIpsecProposalPrefs->u.ipsecProposals.numTransforms;

	lvi.mask = LVIF_TEXT;
	lvi.pszText = sz;
	lvi.stateMask = 0;

	for (u=0; u<uNumProposals; u++)
	{

⌨️ 快捷键说明

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