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

📄 additionaldecryption.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
字号:
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.

	$Id: AdditionalDecryption.c,v 1.13 2002/10/07 16:20:09 wjb Exp $
____________________________________________________________________________*/

#include <windows.h>
#include "PGPadmin.h"
#include <commctrl.h>
#include "resource.h"
#include "Utils.h"
#include "keydrawitem.h"

#include "PGPadminHelp.h"
#include "pgpClientLib.h"

#define MSG_CORRECTLISTBOX	WM_APP + 1

static int nCurSel = 0;

static void sInitGUI(HWND hwndDlg, pgpConfigInfo *pConfig, BOOL bResetKeys);
static BOOL sSaveSelection(HWND hwndDlg, pgpConfigInfo *pConfig);

static DWORD aHelpIds[] = {
	IDC_ADK_TYPE,			IDH_PGPADMIN_ADK_TYPE,
	IDC_ENABLE_ADK,			IDH_PGPADMIN_ENABLEADK,
	IDC_ENFORCE_ADK,		IDH_PGPADMIN_ENFORCEADK,
	IDC_ADK_ID,				IDH_PGPADMIN_ADK_ID,
	IDC_ENFORCE_REMOTEADK,	IDH_PGPADMIN_ENFORCE_REMOTEADK,
	IDC_ADKENABLED,			-1,
	IDC_ADK_LABEL,			-1,
    0,0
};

HFONT g_hFont;

BOOL CALLBACK ADKDlgProc(HWND hwndDlg, 
						 UINT uMsg, 
						 WPARAM wParam, 
						 LPARAM lParam)
{
	BOOL			bReturnCode = FALSE;
	pgpConfigInfo *	pConfig		= NULL;
	HWND			hList;

	g_hCurrentDlgWnd = hwndDlg;
	pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA);
	hList = GetDlgItem(hwndDlg, IDC_ADK_ID);

	switch(uMsg)
	{
	case WM_INITDIALOG:
		{
			int nIndex;
			char szString[255];

			CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
			pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA);

			LoadString(g_hInstance, IDS_INCOMINGMSG, szString, 254);
			nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_ADDSTRING,
						0, (LPARAM) szString);
			SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETITEMDATA, nIndex,
				(LPARAM) IDS_INCOMINGMSG);

			LoadString(g_hInstance, IDS_OUTGOINGMSG, szString, 254);
			nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_ADDSTRING,
						0, (LPARAM) szString);
			SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETITEMDATA, nIndex,
				(LPARAM) IDS_OUTGOINGMSG);

			LoadString(g_hInstance, IDS_PGPDISK, szString, 254);
			nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_ADDSTRING,
						0, (LPARAM) szString);
			SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETITEMDATA, nIndex,
				(LPARAM) IDS_PGPDISK);

			SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETCURSEL, 0, 0);

			// Property sheets use bad unicode font, so we must set
			// it ourselves for listviews
			g_hFont=SetUTF8Font(GetDlgItem(hwndDlg,IDC_ADK_ID));

			sInitGUI(hwndDlg, pConfig, TRUE);
			break;
		}

    case WM_DRAWITEM: 
    {
        KeyDrawItem((LPDRAWITEMSTRUCT) lParam);
        return TRUE;
    }

	case WM_DESTROY:
		FreeKeyring(hwndDlg, IDC_ADK_ID);
		DeleteObject(g_hFont);
		break;

	case WM_HELP:
	case WM_CONTEXTMENU:
		return PGPclHtmlHelp (hwndDlg, uMsg, wParam, lParam, 
				(char *) kPGPclAdminHelpFile, aHelpIds);

	case MSG_CORRECTLISTBOX:
		switch (nCurSel)
		{
		case IDS_INCOMINGMSG:
			SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETCURSEL, 0, 0);
			break;

		case IDS_OUTGOINGMSG:
			SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETCURSEL, 1, 0);
			break;

		case IDS_PGPDISK:
			SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_SETCURSEL, 2, 0);
			break;
		}

		bReturnCode = TRUE;
		break;

	case WM_NOTIFY:
		{
			LPNMHDR pnmh;

			pnmh = (LPNMHDR) lParam;
			switch(pnmh->code)
			{
			case PSN_HELP:
				PGPclHtmlHelp (hwndDlg, kPGPclHelpContext, 0, 0, 
						(char *) kPGPclAdminHelpFile, 
						(DWORD *) IDH_PGPADMIN_ADKDIALOG);
				break;

			case PSN_KILLACTIVE:
				{
					if (!sSaveSelection(hwndDlg, pConfig))
						SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);

					bReturnCode = TRUE;
					break;
				}

			case NM_CLICK:
			case TVN_KEYDOWN:
				if (pnmh->idFrom == IDC_ADK_ID)
					PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
				bReturnCode = CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
				break;

			default:
				bReturnCode = CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
				break;
			}
			
			break;
		}

	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDC_ADK_TYPE:
			switch (HIWORD(wParam))
			{
			case CBN_SELENDOK:
				if (sSaveSelection(hwndDlg, pConfig))
					sInitGUI(hwndDlg, pConfig, TRUE);
				else
					PostMessage(hwndDlg, MSG_CORRECTLISTBOX, 0, 0);

				bReturnCode = TRUE;
				PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
				break;
			}
			break;

		case IDC_ENFORCE_REMOTEADK:
			{
				if (IsDlgButtonChecked(hwndDlg, IDC_ENFORCE_REMOTEADK) == 
					BST_CHECKED)
				{
					pConfig->bEnforceRemoteADK = TRUE;
				}
				else
				{
					pConfig->bEnforceRemoteADK = FALSE;
				}

				bReturnCode = TRUE;
				PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
				break;
			}

		case IDC_ENABLE_ADK:
			{
				int nIndex;
				PGPBoolean bUseADK;

				if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_ADK) == 
					BST_CHECKED)
				{
					bUseADK = TRUE;
				}
				else
				{
					bUseADK = FALSE;
				}
				
				nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, 
							CB_GETCURSEL, 0, 0);
				nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, 
							CB_GETITEMDATA, nIndex, 0);

				switch (nIndex)
				{
				case IDS_INCOMINGMSG:
					pConfig->bUseIncomingADK = bUseADK;
					if (!bUseADK)
						pConfig->bEnforceIncomingADK = FALSE;
					break;

				case IDS_OUTGOINGMSG:
					pConfig->bUseOutgoingADK = bUseADK;
					if (!bUseADK)
						pConfig->bEnforceOutgoingADK = FALSE;
					break;

				case IDS_PGPDISK:
					pConfig->bUseDiskADK = bUseADK;
					break;
				}

				sInitGUI(hwndDlg, pConfig, FALSE);
				bReturnCode = TRUE;
				PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
				break;
			}

		case IDC_ENFORCE_ADK:
			{
				int nIndex;
				PGPBoolean bEnforceADK;

				if (IsDlgButtonChecked(hwndDlg, IDC_ENFORCE_ADK) == 
					BST_CHECKED)
				{
					bEnforceADK = TRUE;
				}
				else
				{
					bEnforceADK = FALSE;
				}
				
				nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, 
							CB_GETCURSEL, 0, 0);
				nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, 
							CB_GETITEMDATA, nIndex, 0);

				switch (nIndex)
				{
				case IDS_INCOMINGMSG:
					pConfig->bEnforceIncomingADK = bEnforceADK;
					break;

				case IDS_OUTGOINGMSG:
					pConfig->bEnforceOutgoingADK = bEnforceADK;
					break;
				}

				bReturnCode = TRUE;
				PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
				break;
			}
		}
		break;

	default:
		bReturnCode = CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
		break;
	}

	return(bReturnCode);
}


static void sInitGUI(HWND hwndDlg, pgpConfigInfo *pConfig, BOOL bResetKeys)
{
	int nIndex;
	PGPBoolean bUseADK;
	PGPBoolean bEnforceADK;
	char szFormat[255];
	char szType[255];
	char szString[255];
	HWND hList;

	hList = GetDlgItem(hwndDlg, IDC_ADK_TYPE);
	nIndex = SendMessage(hList, CB_GETCURSEL, 0, 0);
	SendMessage(hList, CB_GETLBTEXT, nIndex, (LPARAM) &szType);
	nIndex = SendMessage(hList, CB_GETITEMDATA, nIndex, 0);
	nCurSel = nIndex;
	
	LoadString(g_hInstance, IDS_ENABLEADK, szFormat, 254);
	wsprintf(szString, szFormat, szType);
	SetWindowText(GetDlgItem(hwndDlg, IDC_ENABLE_ADK), szString);
	
	LoadString(g_hInstance, IDS_ENFORCEADK, szFormat, 254);
	wsprintf(szString, szFormat, szType);
	SetWindowText(GetDlgItem(hwndDlg, IDC_ENFORCE_ADK), szString);
	
	LoadString(g_hInstance, IDS_ADKLABEL, szFormat, 254);
	wsprintf(szString, szFormat, szType);
	SetWindowText(GetDlgItem(hwndDlg, IDC_ADK_LABEL), szString);
	
	LoadString(g_hInstance, IDS_ADKENABLED, szString, 254);
	strcat(szString, "\r\n     ");
	
	if (pConfig->bUseIncomingADK)
	{
		LoadString(g_hInstance, IDS_INCOMINGMSG, szFormat, 254);
		strcat(szString, szFormat);
		strcat(szString, "\r\n     ");
	}

	if (pConfig->bUseOutgoingADK)
	{
		LoadString(g_hInstance, IDS_OUTGOINGMSG, szFormat, 254);
		strcat(szString, szFormat);
		strcat(szString, "\r\n     ");
	}

	if (pConfig->bUseDiskADK)
	{
		LoadString(g_hInstance, IDS_PGPDISK, szFormat, 254);
		strcat(szString, szFormat);
		strcat(szString, "\r\n     ");
	}

	SetWindowText(GetDlgItem(hwndDlg, IDC_ADKENABLED), szString);

	switch (nIndex)
	{
	case IDS_INCOMINGMSG:
		bUseADK = pConfig->bUseIncomingADK;
		bEnforceADK = pConfig->bEnforceIncomingADK;
		ShowWindow(GetDlgItem(hwndDlg, IDC_ENFORCE_ADK), SW_SHOW);
		if (bResetKeys)
		{
			ShowKeyring(hwndDlg, IDC_ADK_ID, pConfig->pgpContext, 
				pConfig->keyDB, NULL, FALSE, TRUE, TRUE, FALSE);
			SelectKeys(hwndDlg, IDC_ADK_ID, 1, &(pConfig->incomingADKID));
		}
		break;
		
	case IDS_OUTGOINGMSG:
		bUseADK = pConfig->bUseOutgoingADK;
		bEnforceADK = pConfig->bEnforceOutgoingADK;
		ShowWindow(GetDlgItem(hwndDlg, IDC_ENFORCE_ADK), SW_SHOW);
		if (bResetKeys)
		{
			ShowKeyring(hwndDlg, IDC_ADK_ID, pConfig->pgpContext, 
				pConfig->keyDB, NULL, TRUE, TRUE, TRUE, FALSE);
			SelectKeys(hwndDlg, IDC_ADK_ID, 1, &(pConfig->outgoingADKID));
		}
		break;
		
	case IDS_PGPDISK:
		bUseADK = pConfig->bUseDiskADK;
		ShowWindow(GetDlgItem(hwndDlg, IDC_ENFORCE_ADK), SW_HIDE);
		if (bResetKeys)
		{
			ShowKeyring(hwndDlg, IDC_ADK_ID, pConfig->pgpContext, 
				pConfig->keyDB, NULL, TRUE, TRUE, TRUE, FALSE);
			SelectKeys(hwndDlg, IDC_ADK_ID, 1, &(pConfig->diskADKID));
		}
		break;
	}
	
	if (bUseADK)
		CheckDlgButton(hwndDlg, IDC_ENABLE_ADK, BST_CHECKED);
	else
	{
		CheckDlgButton(hwndDlg, IDC_ENABLE_ADK, BST_UNCHECKED);
		ListView_SetItemState(GetDlgItem(hwndDlg, IDC_ADK_ID), -1, 0,
			LVIS_SELECTED);
	}
	
	EnableWindow(GetDlgItem(hwndDlg, IDC_ENFORCE_ADK), bUseADK);
	EnableWindow(GetDlgItem(hwndDlg, IDC_ADK_LABEL), bUseADK);
	EnableWindow(GetDlgItem(hwndDlg, IDC_ADK_ID), bUseADK);

	if (bEnforceADK)
		CheckDlgButton(hwndDlg, IDC_ENFORCE_ADK, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_ENFORCE_ADK, BST_UNCHECKED);

	if (pConfig->bEnforceRemoteADK)
		CheckDlgButton(hwndDlg, IDC_ENFORCE_REMOTEADK, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_ENFORCE_REMOTEADK, BST_UNCHECKED);

	UpdateWindow(hwndDlg);
	return;
}


static BOOL sSaveSelection(HWND hwndDlg, pgpConfigInfo *pConfig)
{
	int	nIndex;
	LV_ITEM lviKey;
	PGPKeyID *pConfigKeyID;
	PGPKeyID *pKeyID;
	HWND hList;
	BOOL bUseADK;
	BOOL bSaveOK = TRUE;
	
	nIndex = nCurSel;

	switch (nIndex)
	{
	case IDS_INCOMINGMSG:
		pConfigKeyID = &(pConfig->incomingADKID);
		bUseADK = pConfig->bUseIncomingADK;
		break;
					
	case IDS_OUTGOINGMSG:
		pConfigKeyID = &(pConfig->outgoingADKID);
		bUseADK = pConfig->bUseOutgoingADK;
		break;
					
	case IDS_PGPDISK:
		pConfigKeyID = &(pConfig->diskADKID);
		bUseADK = pConfig->bUseDiskADK;
		break;
	}

	hList = GetDlgItem(hwndDlg, IDC_ADK_ID);
	
	// Save user data for this page
	nIndex = ListView_GetNextItem(hList, -1, LVNI_SELECTED);
	if (nIndex > -1)
	{
		lviKey.mask = LVIF_PARAM;
		lviKey.iItem = nIndex;
		lviKey.iSubItem = 0;
		ListView_GetItem(hList, &lviKey);

		pKeyID = (PGPKeyID *) lviKey.lParam;
		memcpy(pConfigKeyID->opaqueBytes, pKeyID->opaqueBytes,
			sizeof(pKeyID->opaqueBytes));
	}
	else if (bUseADK)
	{
		char szErrorMsg[255];
		char szTitle[255];

		LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
		LoadString(g_hInstance, IDS_E_SELECTKEY, szErrorMsg, 254);
		MessageBox(hwndDlg, szErrorMsg, szTitle, MB_ICONEXCLAMATION);
		SetFocus(GetDlgItem(hwndDlg, IDC_ADK_ID));

		bSaveOK = FALSE;
	}

	if (bSaveOK)
	{
		nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_GETCURSEL, 0, 0);
		nIndex = SendDlgItemMessage(hwndDlg, IDC_ADK_TYPE, CB_GETITEMDATA, 
					nIndex, 0);
	
		nCurSel = nIndex;
	}
				
	return bSaveOK;
}


/*__Editor_settings____

	Local Variables:
	tab-width: 4
	End:
	vi: ts=4 sw=4
	vim: si
_____________________*/

⌨️ 快捷键说明

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