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