📄 pnadvanced.c
字号:
/*____________________________________________________________________________
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 + -