clprefsnetadv.c

来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 2,052 行 · 第 1/4 页

C
2,052
字号
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.

	CLprefsNetAdv.c - handle PGPnet advanced preferences dialog

	$Id: CLprefsNetAdv.c,v 1.16 2002/08/06 20:09:19 dallen Exp $
____________________________________________________________________________*/
#include "pgpPFLConfig.h"

// project header files
#include "PGPclx.h"
#include "PGPvpnHelp.h"
#include "CLprefs.h"
#include "pgpFileSpec.h"

// definitions
#define PGP_ENABLE_EC_GUI	PGP_DEBUG

#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

// external globals
extern HINSTANCE	g_hInst;

static DWORD aAdvIds[] = {			// Help IDs
    IDC_ALLOWCAST,				IDH_PGPCLPREF_ALLOWCAST,
	IDC_ALLOW3DES,				IDH_PGPCLPREF_ALLOW3DES,
	IDC_ALLOWDES,				IDH_PGPCLPREF_ALLOWDES,
	IDC_ALLOWNONECIPHER,		IDH_PGPCLPREF_ALLOWNULLCIPHER,
	IDC_ALLOWSHA1,				IDH_PGPCLPREF_ALLOWSHA,
	IDC_ALLOWMD5,				IDH_PGPCLPREF_ALLOWMD5,
	IDC_ALLOWNONEHASH,			IDH_PGPCLPREF_ALLOWNULLHASH,
	IDC_ALLOW1024,				IDH_PGPCLPREF_ALLOW1024,
	IDC_ALLOW1536,				IDH_PGPCLPREF_ALLOW1536,
	IDC_ALLOWEC163,				0,
	IDC_ALLOWEC283,				0,
	IDC_ALLOWLZS,				IDH_PGPCLPREF_ALLOWLZS,
	IDC_ALLOWDEFLATE,			IDH_PGPCLPREF_ALLOWDEFLATE,
	IDC_DEFAULTS,				IDH_PGPCLPREF_DEFAULTSETTINGS,
	IDC_IKEPROPOSALLIST,		IDH_PGPCLPREF_IKEPROPOSALS,
	IDC_IPSECPROPOSALLIST,		IDH_PGPCLPREF_IPSECPROPOSALS,
	IDC_NEWPROPOSAL,			IDH_PGPCLPREF_NEWPROPOSAL,
	IDC_EDITPROPOSAL,			IDH_PGPCLPREF_EDITPROPOSAL,
	IDC_REMOVEPROPOSAL,			IDH_PGPCLPREF_REMOVEPROPOSAL,
	IDC_PROPOSALUP,				IDH_PGPCLPREF_MOVEPROPOSALUP,
	IDC_PROPOSALDOWN,			IDH_PGPCLPREF_MOVEPROPOSALDOWN,
	IDC_PERFECTSECRECY,			IDH_PGPCLPREF_PERFECTFWDSECRECY,
	0,0
};

static DWORD aIkeIds[] = {			// Help IDs
    IDC_IKEAUTHCOMBO,			IDH_PGPCLPREF_IKEAUTHENTICATION,
    IDC_IKEHASHCOMBO,			IDH_PGPCLPREF_IKEHASH,
    IDC_IKECIPHERCOMBO,			IDH_PGPCLPREF_IKECIPHER,
    IDC_IKEDHCOMBO,				IDH_PGPCLPREF_IKEDIFFIEHELLMAN,
	0,0
};

static DWORD aIpsecIds[] = {		// Help IDs
    IDC_ENABLEAH,				IDH_PGPCLPREF_IPSECAHENABLE,
    IDC_IPSECAHCOMBO,			IDH_PGPCLPREF_IPSECAHHASH,
    IDC_ENABLEESP,				IDH_PGPCLPREF_IPSECESPENABLE,
    IDC_IPSECESPHASHCOMBO,		IDH_PGPCLPREF_IPSECESPHASH,
    IDC_IPSECESPCIPHERCOMBO,	IDH_PGPCLPREF_IPSECESPCIPHER,
    IDC_ENABLECOMP,				IDH_PGPCLPREF_IPSECCOMPENABLE,
    IDC_IPSECCOMPCOMBO,			IDH_PGPCLPREF_IPSECCOMPALGORITHM,
	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 allowed algorithms checkboxes

static VOID
sInitAllowedAlgorithms (
		HWND			hwnd,
		PPREFSDLGSTRUCT	ppds,
		PGPPrefRef		prefref)
{
	// ciphers
	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWCAST)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOWCAST,
			ppds, prefref, kPGPNetPrefAllowCipherCAST);
	}

	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOW3DES)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOW3DES,
			ppds, prefref, kPGPNetPrefAllowCipher3DES);
	}

	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWDES)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOWDES,
			ppds, prefref, kPGPNetPrefAllowCipherDES56);
	}

	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWNONECIPHER)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOWNONECIPHER,
			ppds, prefref, kPGPNetPrefAllowCipherNone);
	}

	// hashes
	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWSHA1)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOWSHA1,
			ppds, prefref, kPGPNetPrefAllowHashSHA1);
	}

	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWMD5)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOWMD5,
			ppds, prefref, kPGPNetPrefAllowHashMD5);
	}

	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWNONEHASH)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOWNONEHASH,
			ppds, prefref, kPGPNetPrefAllowHashNone);
	}

	// compression
	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWLZS)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOWLZS,
			ppds, prefref, kPGPNetPrefAllowCompLZS);
	}

	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWDEFLATE)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOWDEFLATE,
			ppds, prefref, kPGPNetPrefAllowCompDeflate);
	}

	// Diffie-Hellman
	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOW1024)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOW1024,
			ppds, prefref, kPGPNetPrefAllowDH1024);
	}

	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOW1536)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOW1536,
			ppds, prefref, kPGPNetPrefAllowDH1536);
	}

#if PGP_ENABLE_EC_GUI
	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWEC163)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOWEC163,
			ppds, prefref, kPGPNetPrefAllowEC163);
	}

	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWEC283)))
	{
		CLLoadCheckBoxPref (hwnd, IDC_ALLOWEC283,
			ppds, prefref, kPGPNetPrefAllowEC283);
	}
#else
	EnableWindow (GetDlgItem (hwnd, IDC_ALLOWEC163), FALSE);
	ShowWindow (GetDlgItem (hwnd, IDC_ALLOWEC163), SW_HIDE);
	EnableWindow (GetDlgItem (hwnd, IDC_ALLOWEC283), FALSE);
	ShowWindow (GetDlgItem (hwnd, IDC_ALLOWEC283), SW_HIDE);
#endif // PGP_ENABLE_EC_GUI
}


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

static VOID
sSaveAllowedAlgorithms (
		HWND			hwnd,
		PGPPrefRef		prefref)
{
	// ciphers
	CLSaveCheckBoxPref (hwnd, IDC_ALLOWCAST,
			prefref, kPGPNetPrefAllowCipherCAST);

	CLSaveCheckBoxPref (hwnd, IDC_ALLOW3DES,
			prefref, kPGPNetPrefAllowCipher3DES);

	PGPSetPrefBoolean (prefref, kPGPNetPrefAllowCipherDES56, FALSE);

	CLSaveCheckBoxPref (hwnd, IDC_ALLOWNONECIPHER,
			prefref, kPGPNetPrefAllowCipherNone);

	// hashes
	CLSaveCheckBoxPref (hwnd, IDC_ALLOWSHA1,
			prefref, kPGPNetPrefAllowHashSHA1);

	CLSaveCheckBoxPref (hwnd, IDC_ALLOWMD5,
			prefref, kPGPNetPrefAllowHashMD5);

	CLSaveCheckBoxPref (hwnd, IDC_ALLOWNONEHASH,
			prefref, kPGPNetPrefAllowHashNone);

	// compression
	CLSaveCheckBoxPref (hwnd, IDC_ALLOWLZS,
			prefref, kPGPNetPrefAllowCompLZS);

	CLSaveCheckBoxPref (hwnd, IDC_ALLOWDEFLATE,
			prefref, kPGPNetPrefAllowCompDeflate);

	// Diffie-Hellman
	CLSaveCheckBoxPref (hwnd, IDC_ALLOW1024,
			prefref, kPGPNetPrefAllowDH1024);

	CLSaveCheckBoxPref (hwnd, IDC_ALLOW1536,
			prefref, kPGPNetPrefAllowDH1536);

#if PGP_ENABLE_EC_GUI
	CLSaveCheckBoxPref (hwnd, IDC_ALLOWEC163,
			prefref, kPGPNetPrefAllowEC163);

	CLSaveCheckBoxPref (hwnd, IDC_ALLOWEC283,
			prefref, kPGPNetPrefAllowEC283);
#else
	PGPSetPrefBoolean (prefref, kPGPNetPrefAllowEC163, FALSE);
	PGPSetPrefBoolean (prefref, kPGPNetPrefAllowEC283, FALSE);
#endif // PGP_ENABLE_EC_GUI
}

//	____________________________________
//
//	initialize IPSEC groupID combobox

static VOID
sLoadIpsecGroupID (
		HWND			hwnd,
		PPREFSDLGSTRUCT	ppds,
		PGPPrefRef		prefref)
{
	UINT	u;
	INT		iIndex;

	if (IsWindowEnabled (GetDlgItem (hwnd, IDC_PERFECTSECRECY)))
	{
		PGPGetPrefNumber (prefref, kPGPnetPrefIPSECGroupID, &u);

		switch (u) {
			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;
		}

		SendMessage (GetDlgItem (hwnd, IDC_PERFECTSECRECY),
				CB_SETCURSEL, (WPARAM)iIndex, 0);
		CLDisablePrefControl (hwnd, IDC_PERFECTSECRECY,
				ppds, prefref, kPGPnetPrefIPSECGroupID);
	}
}


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

static VOID
sSaveIpsecGroupID (
		HWND			hwnd,
		PGPPrefRef		prefref)
{
	INT		iIndex;
	UINT	u;

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

	switch (iIndex) {
		case 0 :	u = kPGPike_GR_None;		break;
		case 1 :	u = kPGPike_GR_MODPTwo;		break;
		case 2 :	u = kPGPike_GR_MODPFive;	break;
		default :	u = kPGPike_GR_None;		break;
	}

	PGPSetPrefNumber (prefref, kPGPnetPrefIPSECGroupID, u);
}


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

static VOID
sInitIkeProposalListControl (
		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);
}

//	____________________________________
//
//	insert a single entry into list

static VOID
sDisplayIkeProposalList (
		HWND			hwnd,
		PPREFSDLGSTRUCT	ppds)
{
	LVITEM				lvi;
	CHAR				sz[64];
	INT					ids;
	UINT				u;
	HWND				hwndList;

	PGPNetPrefIKEProposalEntry*		pIke;

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

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

	for (u=0; u<ppds->net.uNumIKEProposals; u++)
	{
		pIke = &ppds->net.pIKEProposals[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_UNKNOWNITEM;	break;
		}
		LoadString (g_hInst, ids, sz, sizeof(sz));
		ListView_InsertItem (hwndList, &lvi);

		lvi.mask = LVIF_TEXT;

		// 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_UNKNOWNITEM;	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_UNKNOWNITEM;	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;
#if PGP_ENABLE_EC_GUI
			case kPGPike_GR_ECSix :			ids = IDS_EC163;		break;
			case kPGPike_GR_ECEight :		ids = IDS_EC283;		break;
#endif // PGP_ENABLE_EC_GUI
			default :						ids = IDS_UNKNOWNITEM;	break;
		}
		LoadString (g_hInst, ids, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);
	}
}


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

static VOID
sLoadIkeProposalList (
		HWND			hwnd,
		PPREFSDLGSTRUCT	ppds,
		PGPPrefRef		prefref)
{
	PGPError			err			= kPGPError_NoErr;
	PGPNetPrefIKEProposalEntry*		pProposals;

	if (ppds->net.pIKEProposals)
	{
		PGPFreeData (ppds->net.pIKEProposals);
		ppds->net.uNumIKEProposals = 0;
	}

	err = PGPGetNetIKEProposalPrefs (prefref,
				&pProposals, &ppds->net.uNumIKEProposals);

	if (IsntPGPError (err))
	{
		PGPSize size = sizeof(PGPNetPrefIKEProposalEntry) *
				ppds->net.uNumIKEProposals;
		ppds->net.pIKEProposals = PGPNewData (
				PGPPeekContextMemoryMgr (ppds->context),
				size, kPGPMemoryMgrFlags_Clear);
		if (ppds->net.pIKEProposals)
		{
			pgpCopyMemory (pProposals, ppds->net.pIKEProposals, size);
			sDisplayIkeProposalList (hwnd, ppds);
		}
		PGPFreeData (pProposals);
	}
}


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

static VOID
sInitIpsecProposalListControl (
		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;

⌨️ 快捷键说明

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