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

📄 pkreconstruct.c

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

	PKReconstruct.c - show key reconstruction dialog and then do it

	$Id: PKReconstruct.c,v 1.17 2002/08/06 20:09:46 dallen Exp $
____________________________________________________________________________*/
#include "pgpPFLConfig.h"

// project header files
#include "PGPkeysx.h"

// system header files
#include <commdlg.h>

// external globals
extern HINSTANCE		g_hinst;
extern PGPContextRef	g_context;
extern PGPtlsContextRef	g_tlscontext;


//	___________________________________________________
//
//	get the first key from a keyset

static PGPError
sGetFirstKeyInSet(
	PGPKeySetRef	 	keyset,
	PGPKeyDBObjRef*		pkey)
{
	PGPError		err;
	PGPKeyIterRef	keyiter;

	*pkey = kInvalidPGPKeyDBObjRef;

	err = PGPNewKeyIterFromKeySet (keyset, &keyiter);
	if (IsntPGPError (err))
	{
		err = PGPKeyIterNextKeyDBObj (keyiter,
				kPGPKeyDBObjType_Key, pkey);

		if (err == kPGPError_EndOfIteration)
			err = kPGPError_ItemNotFound;

		PGPFreeKeyIter (keyiter);
	}

	return err;
}


//	___________________________________________________
//
//  Query user for key reconstruction information

BOOL
PKReconstructKey (
		PGPKEYSSTRUCT*	ppks)
{
	PGPError			err			= kPGPError_NoErr;
	PGPKeyDBRef			keydb		= kInvalidPGPKeyDBRef;
	BOOL				bReturn		= FALSE;

	PGPKeyDBObjRef		key;
	PGPKeySetRef		keyset;

	PGPclKeyListGetSelectionInfo (ppks->hKL, NULL, &key, NULL, NULL);
	err = PGPclRetrieveReconstructedKeyFromServer (g_context, g_tlscontext, 
			ppks->hwndMain, key, ppks->keydbMain, &keydb);

	if (err == kPGPError_BadPassphrase)
	{
		PKMessageBox (ppks->hwndMain, IDS_CAPTIONALERT, 
				IDS_BADANSWERS, MB_OK|MB_ICONEXCLAMATION);
	}
	else if (err == kPGPError_ItemNotFound)
	{
		PKMessageBox (ppks->hwndMain, IDS_CAPTIONALERT, 
				IDS_KEYNOTONRECONSERVER, MB_OK|MB_ICONEXCLAMATION);
	}
	else if ((err == kPGPError_LDAPNoSuchObject) ||
			 (err == kPGPError_LDAPInvalidCredentials))
	{
		PKMessageBox (ppks->hwndMain, IDS_CAPTIONALERT, 
				IDS_INVALIDRECONUSERID, MB_OK|MB_ICONEXCLAMATION);
	}
	else
		PGPclErrorBox (ppks->hwndMain, err);

	if (IsntPGPError (err) && 
		PGPKeyDBRefIsValid (keydb))
	{
		PKDeletePropertiesWindowForObject (key);
		PGPclKeyListUpdateTree (ppks->hKL,
				kPGPclKeyListRemoveObject, key, FALSE);
		PGPDeleteKeyDBObj (key);

		PGPCopyKeys (PGPPeekKeyDBRootKeySet (keydb), ppks->keydbMain, &keyset);
		if (IsntPGPError (sGetFirstKeyInSet (keyset, &key)))
		{
			PGPSetKeyAxiomatic (key, TRUE,
					PGPOLastOption (g_context));
			PKKeyDBModified (ppks, PK_MOD_INDEX_0);
			PGPclKeyListUpdateTree (ppks->hKL, 
					kPGPclKeyListReplaceObject, key, FALSE);
			PGPclKeyListSetTree (ppks->hKL,
					kPGPclSelectSpecifiedOnly, key);
		}

		PKMessageBox (ppks->hwndMain, IDS_CAPTIONINFO,
				IDS_KEYRECONSTRUCTED, MB_OK|MB_ICONINFORMATION);

		bReturn = TRUE;
	}

	if (PGPKeyDBRefIsValid (keydb))
		PGPFreeKeyDB (keydb);

	return bReturn;
}


//	___________________________________________________
//
//  send reconstruction blob to server

BOOL
PKSendToReconServer (
		PGPKEYSSTRUCT*	ppks)
{
	PGPError			err			= kPGPError_NoErr;
	PGPKeyDBObjRef		key;

	PGPclKeyListGetSelectionInfo (ppks->hKL, NULL, &key, NULL, NULL);
	err = PGPclSendReconstructionBlobToServer (g_context, g_tlscontext, 
			ppks->hwndMain, key, ppks->keydbMain);

	if (IsPGPError (PGPclErrorBox (ppks->hwndMain, err)))
		return FALSE;
	else
		return TRUE;
}


⌨️ 快捷键说明

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