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