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

📄 keygen.c

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

	$Id: KeyGen.c,v 1.24 2002/10/30 18:06:01 pbj Exp $
____________________________________________________________________________*/

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

#include "PGPadminHelp.h"
#include "pgpClientLib.h"
#include "pgpBuild.h"
#include "pgpUtilities.h"
#include "pgpLDAP.h"

#define SECONDS_PER_DAY		86400

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

static DWORD aHelpIds[] = {
	IDC_ALLOW_KEYGEN,		IDH_PGPADMIN_ALLOW_KEYGEN,
	IDC_SETKEYGEN,			IDH_PGPADMIN_SETKEYGEN,
	IDC_RADIO_ELGAMAL,		IDH_PGPADMIN_DHTYPE,
	IDC_RADIO_RSA,			IDH_PGPADMIN_RSATYPE,
	IDC_RADIO_RSALEGACY,	IDH_PGPADMIN_RSALEGACYTYPE,
	IDC_RADIO_NEVER,		IDH_PGPADMIN_NEVEREXPIRES,
	IDC_RADIO_EXPIRES,		IDH_PGPADMIN_EXPIRES,
	IDC_EXPIREDAYS,			IDH_PGPADMIN_EXPIRATIONDATE,
	IDC_RADIO_1024,			IDH_PGPADMIN_1024BITS,
	IDC_RADIO_1536,			IDH_PGPADMIN_1536BITS,
	IDC_RADIO_2048,			IDH_PGPADMIN_2048BITS,
	IDC_RADIO_3072,			IDH_PGPADMIN_3072BITS,
	IDC_RADIO_CUSTOM,		IDH_PGPADMIN_CUSTOMBITS,
	IDC_CUSTOM_BITS,		IDH_PGPADMIN_CUSTOMBITS,
	IDC_KEYGENCERTREQ,		IDH_PGPADMIN_KEYGENCERTREQUEST,
	IDC_ALLOWMANREQ,		IDH_PGPADMIN_ALLOWMANUALREQUEST,
	IDC_CATYPE,				IDH_PGPADMIN_CATYPE,
	IDC_ALWAYSSEND,			IDH_PGPADMIN_ALWAYSSEND,
	IDC_AUTORECON,			IDH_PGPADMIN_AUTORECONSTRUCTION,
	IDC_RECONSERVER,		IDH_PGPADMIN_RECONSTRUCTIONSERVER,
	IDC_AUTOSIGNCA,			IDH_PGPADMIN_AUTOSIGNROOTCAKEY,
	IDC_ADDATTRIBUTES,		IDH_PGPADMIN_ADDATTRIBUTES,
	IDC_SMARTCARD,			IDH_PGPADMIN_SMARTCARD,
	IDC_KEYTYPEGROUP,		-1,
	IDC_KEYEXPIREGROUP,		-1,
	IDC_EXPIRESPIN,			-1,
	IDC_EXPIRATIONDATE,		-1,
	IDC_KEYSIZEGROUP,		-1,
	IDC_X509GROUP,			-1,
	IDC_MISCGROUP,			-1,
    0,0
};


BOOL CALLBACK KeyGenDlgProc(HWND hwndDlg, 
							UINT uMsg, 
							WPARAM wParam, 
							LPARAM lParam)
{
	BOOL			bReturnCode = FALSE;
	pgpConfigInfo *	pConfig		= NULL;
	char			szKeySize[10];
	int				nIndex;
	char			szCA[255];

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

	switch(uMsg)
	{
	case WM_INITDIALOG:
		CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
		pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA);
		SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_RESETCONTENT, 0, 0);
		
		LoadString(g_hInstance, IDS_CAINVALID, szCA, sizeof(szCA));
		nIndex = SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_ADDSTRING, 0, 
					(LPARAM) szCA);
		
		SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETITEMDATA, nIndex, 
			kPGPKeyServerClass_Invalid);

		if (pConfig->nCAType == kPGPKeyServerClass_Invalid)
			SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETCURSEL, nIndex, 0);

		LoadString(g_hInstance, IDS_CANETTOOLS, szCA, sizeof(szCA));
		nIndex = SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_ADDSTRING, 0, 
					(LPARAM) szCA);
		
		SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETITEMDATA, nIndex, 
			kPGPKeyServerClass_NetToolsCA);
		
		if (pConfig->nCAType == kPGPKeyServerClass_NetToolsCA)
			SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETCURSEL, nIndex, 0);

		LoadString(g_hInstance, IDS_CAVERISIGN, szCA, sizeof(szCA));
		nIndex = SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_ADDSTRING, 0, 
					(LPARAM) szCA);
		
		SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETITEMDATA, nIndex, 
			kPGPKeyServerClass_Verisign);
		
		if (pConfig->nCAType == kPGPKeyServerClass_Verisign)
			SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETCURSEL, nIndex, 0);

		LoadString(g_hInstance, IDS_CAENTRUST, szCA, sizeof(szCA));
		nIndex = SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_ADDSTRING, 0, 
					(LPARAM) szCA);
		
		SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETITEMDATA, nIndex, 
			kPGPKeyServerClass_Entrust);
		
		if (pConfig->nCAType == kPGPKeyServerClass_Entrust)
			SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETCURSEL, nIndex, 0);

		LoadString(g_hInstance, IDS_CANETSCAPE, szCA, sizeof(szCA));
		nIndex = SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_ADDSTRING, 0, 
					(LPARAM) szCA);
		
		SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETITEMDATA, nIndex, 
			kPGPKeyServerClass_Netscape);
		
		if (pConfig->nCAType == kPGPKeyServerClass_Netscape)
			SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETCURSEL, nIndex, 0);

		LoadString(g_hInstance, IDS_CAMICROSOFT, szCA, sizeof(szCA));
		nIndex = SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_ADDSTRING, 0, 
					(LPARAM) szCA);
		
		SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETITEMDATA, nIndex, 
			kPGPKeyServerClass_Microsoft);
		
		if (pConfig->nCAType == kPGPKeyServerClass_Microsoft)
			SendDlgItemMessage(hwndDlg, IDC_CATYPE, CB_SETCURSEL, nIndex, 0);

		SendMessage(GetDlgItem(hwndDlg, IDC_EXPIRESPIN), UDM_SETRANGE, 0, 
			MAKELONG(999, 1));

		sInitGUI(hwndDlg, pConfig);
		break;

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

	case WM_NOTIFY:
		{
			LPNMHDR pnmh;

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

			case PSN_KILLACTIVE:
				{
					char szErrorMsg[255];
					char szTitle[255];
					BOOL bError = FALSE;
					int nLength;
					HWND hwndCtrl;

					bReturnCode = TRUE;
					LoadString(g_hInstance, IDS_TITLE, szTitle, 254);

					// Check data validity

					if (pConfig->bSetKeyGen)
					{
						if (pConfig->keyType == kPGPPublicKeyAlgorithm_RSA)
						{
							if ((pConfig->nKeySize < 1024) || 
								(pConfig->nKeySize > 2048))
							{
								LoadString(g_hInstance, 
									IDS_E_MINKEYSIZERANGERSA, szErrorMsg, 254);
								hwndCtrl = GetDlgItem(hwndDlg, 
											IDC_CUSTOM_BITS);
								bError = TRUE;
							}
						}
						else
						{
							if ((pConfig->nKeySize < 1024) || 
								(pConfig->nKeySize > 4096))
							{
								LoadString(g_hInstance, 
									IDS_E_MINKEYSIZERANGE, szErrorMsg, 254);
								hwndCtrl = GetDlgItem(hwndDlg, 
											IDC_CUSTOM_BITS);
								bError = TRUE;
							}
						}

						if (bError)
						{
							MessageBox(hwndDlg, szErrorMsg, szTitle, MB_OK);
							SetFocus(hwndCtrl);
							SetWindowLong(hwndDlg, DWL_MSGRESULT, -1);
						}
					}

					if (pConfig->szReconServer)
					{
						PGPFreeData(pConfig->szReconServer);
						pConfig->szReconServer = NULL;
					}

					nLength = GetWindowTextLength(GetDlgItem(hwndDlg, 
								IDC_RECONSERVER));

					if (nLength)
					{
						pConfig->szReconServer = (char *)
							PGPNewData(pConfig->memoryMgr,
								nLength + 1,
								kPGPMemoryMgrFlags_Clear);

						GetWindowText(GetDlgItem(hwndDlg, IDC_RECONSERVER),
							pConfig->szReconServer, nLength + 1);

						pConfig->szReconServer[nLength] = 0;
					}

					if ((pConfig->szReconServer) &&
						(pConfig->szReconServer[0]))
					{
						PGPldapURLDesc*		pURLDesc	= NULL;
						PGPldapContextRef	ldap;
						PGPError			err;

						PGPNewLDAPContext (pConfig->pgpContext, &ldap);
						err = PGPldapURLParse (ldap, pConfig->szReconServer, &pURLDesc);
						if (err == kPGPError_LDAPNoDN)
							pConfig->nReconServerType = kPGPKeyServerClass_PGP;
						else
							pConfig->nReconServerType = kPGPKeyServerClass_LDAPX509;

						if (pURLDesc)
							PGPFreeLDAPURLDesc (pURLDesc);

						PGPFreeLDAPContext (ldap);
					}

					break;
				}

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

	case WM_COMMAND:
		if (pConfig == NULL)
			break;

		switch (LOWORD(wParam))
		{
		case IDC_ALLOW_KEYGEN:
			if (IsDlgButtonChecked(hwndDlg, IDC_ALLOW_KEYGEN) == BST_CHECKED)
				pConfig->bAllowKeyGen = TRUE;
			else
				pConfig->bAllowKeyGen = FALSE;

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

		case IDC_SETKEYGEN:
			if (IsDlgButtonChecked(hwndDlg, IDC_SETKEYGEN) == BST_CHECKED)
				pConfig->bSetKeyGen = TRUE;
			else
			{
				pConfig->bSetKeyGen = FALSE;
				pConfig->bUseSmartCard = FALSE;
			}

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

		case IDC_SMARTCARD:
			if (IsDlgButtonChecked(hwndDlg, IDC_SMARTCARD) == BST_CHECKED)
				pConfig->bUseSmartCard = TRUE;
			else
				pConfig->bUseSmartCard = FALSE;

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

		case IDC_RADIO_ELGAMAL:
		case IDC_RADIO_RSA:
		case IDC_RADIO_RSALEGACY:
			if (IsDlgButtonChecked(hwndDlg, IDC_RADIO_ELGAMAL) == BST_CHECKED)
				pConfig->keyType = kPGPPublicKeyAlgorithm_DSA;
			else
			{
				if (IsDlgButtonChecked(hwndDlg, IDC_RADIO_RSA) == 
					BST_CHECKED)
					pConfig->keyType = kPGPPublicKeyAlgorithm_RSASignOnly;
				else
				{
					char szWarnMsg[255];
					char szTitle[255];

					LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
					LoadString(g_hInstance, IDS_W_RSALEGACY, szWarnMsg, 254);
					MessageBox(hwndDlg, szWarnMsg, szTitle, MB_ICONINFORMATION);
					pConfig->keyType = kPGPPublicKeyAlgorithm_RSA;

					if (pConfig->nKeySize > 2048)
						pConfig->nKeySize = 2048;
				}
			}

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

		case IDC_RADIO_NEVER:
		case IDC_RADIO_EXPIRES:
			if (IsDlgButtonChecked(hwndDlg, IDC_RADIO_NEVER) == BST_CHECKED)
				pConfig->keyExpiration = 0;
			else
			{
				SYSTEMTIME stExpire;
				PGPTime oneYear;

				GetLocalTime(&stExpire);
				stExpire.wYear++;
				SystemTimeToPGPTime(&stExpire, &oneYear);
				pConfig->keyExpiration = oneYear - PGPGetTime();
			}

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

		case IDC_EXPIREDAYS:
			{
				char szBuffer[4];
				PGPUInt32 nValue;

				GetWindowText(GetDlgItem(hwndDlg, IDC_EXPIREDAYS), 
					szBuffer, 4);
				nValue = atoi(szBuffer) * SECONDS_PER_DAY;
				if (!nValue && 
					(IsDlgButtonChecked(hwndDlg, IDC_RADIO_EXPIRES) == BST_CHECKED))
				{
					char szErrMsg[255];
					char szTitle[255];

⌨️ 快捷键说明

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