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

📄 creencryptwizard.cpp

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

        $Id: CReEncryptWizard.cpp,v 1.16 2002/11/05 02:10:53 wjb Exp $
____________________________________________________________________________*/

#include "pgpClassesConfig.h"

#include "CFile.h"
#include "CMutex.h"
#include "CSecureString.h"
#include "CThread.h"

#include "CComboBox.h"
#include "CButton.h"
#include "CDC.h"
#include "CEdit.h"
#include "CUTF8Edit.h"
#include "CIcon.h"
#include "CImageList.h"
#include "CMessageBox.h"
#include "CPath.h"
#include "CPoint.h"
#include "CProgressBar.h"
#include "CRect.h"
#include "CStatic.h"
#include "UModuleInstance.h"

#include "Crypto.h"
#include "UCommonStrings.h"

#include "CPGPclPrefs.h"
#include "CPGPdiskEngine.h"
#include "CPGPGlobalRandomPool.h"

#include "CAlgorithmCombo.h"
#include "CReEncryptWizard.h"
#include "CPassphraseDialog.h"
#include "CPercentDone.h"
#include "CPGPdiskPage.h"
#include "CRandomDataPage.h"
#include "ImageIDs.h"
#include "PGPdiskHelp.h"
#include "Resource.h"

_USING_PGP

_UNNAMED_BEGIN

// Constants

DWORD	ReEncryptWizAlgoPageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_HEADING,			-1, 
	IDC_CURALGO_CAPTION,	IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE_CURALGO, 
	IDC_CURALGO_EDIT,		IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE_CURALGO, 
	IDC_ALGO_CAPTION,		IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE_NEWALGO, 
	IDC_ALGO_COMBO,			IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE_NEWALGO, 
	IDC_SAMEALGO_CHECK,		IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE_SAMEALGO, 
	0,						0
};

DWORD	ReEncryptWizReEncryptPageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_DISKSTATIC3,		-1, 
	IDC_DISKSTATIC4,		-1, 
	IDC_DISKSTATIC5,		-1, 
	IDC_HEADING,			-1, 
	IDC_CURTASK_CAPTION,	IDH_PGPDISKUI_REENCRYPTWIZREENCRYPTPAGE_CURTASK, 
	IDC_CURTASK_TEXT,		IDH_PGPDISKUI_REENCRYPTWIZREENCRYPTPAGE_CURTASK, 
	IDC_CURTASK_BAR,		IDH_PGPDISKUI_REENCRYPTWIZREENCRYPTPAGE_CURTASK, 
	0,						0
};

DWORD	ReEncryptWizDonePageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_HEADING,			-1, 
	IDC_SIDEBAR,			-1, 
	0,						0
};

DWORD	ReEncryptWizIntroPageHelpIDs[]	= 
{
	IDC_DISKSTATIC1,		-1, 
	IDC_DISKSTATIC2,		-1, 
	IDC_HEADING,			-1, 
	IDC_SIDEBAR,			-1, 
	0,						0
};


// Types

struct ReEncryptInfo
{
	CComboError	error;

	const CPGPdiskContext	*pContext;
	CPGPdiskDisk			*pDisk;
	const CSecureString		*pPassphrase;
	PGPBoolean				resumingConversion;
	PGPBoolean				*pReEncryptionBegun;

	CPGPGlobalRandomPool		*pRandomPool;
	PGPdiskEncryptionAlgorithm	algorithm;
};


// Class CReEncryptWizAlgoPage

class CReEncryptWizAlgoPage : public CPGPdiskPage
{
public:
	CReEncryptWizAlgoPage(ReEncryptInfo *pInfo) : mPInfo(pInfo)
	{
		pgpAssertAddrValid(pInfo, ReEncryptInfo);
	}

	~CReEncryptWizAlgoPage()
	{
	}

	PGPUInt16	GetDialogId() const
	{
		return IDD_REWIZ_ALGO;
	}

	void	SavePrefs();

private:
	CAlgorithmCombo	mAlgoCombo;
	CButton			mSameAlgoCheck;
	CUTF8Edit			mCurAlgoEdit;

	ReEncryptInfo	*mPInfo;

	PGPBoolean					mSameAlgoValue;
	PGPdiskEncryptionAlgorithm	mPrevChoice;

	DWORD	GetPageHelpId() const {return IDH_PGPDISKUI_REENCRYPTWIZALGOPAGE;}
	PVOID	GetPageHelpIds() const {return ReEncryptWizAlgoPageHelpIDs;}

	void	InitControls();
	void	OnSameAlgoCheck();

	BOOL		OnCommand(PGPUInt16 notifyCode, PGPUInt16 itemId, HWND ctrl);
	BOOL		OnInitDialog(HWND focusCtrl);
	PGPInt32	OnPsnSetActive();
	PGPInt32	OnPsnWizNext();
};


// Class CReEncryptWizReEncryptPage

class CReEncryptWizReEncryptPage : public CPGPdiskPage
{
private:
	enum {WM_CONVERT_DONE = WM_USER + 10};

public:
	CReEncryptWizReEncryptPage(ReEncryptInfo *pInfo) : mPInfo(pInfo)
	{
		pgpAssertAddrValid(pInfo, ReEncryptInfo);
	}

	~CReEncryptWizReEncryptPage()
	{
	}

	PGPUInt16	GetDialogId() const
	{
		return IDD_REWIZ_REENCRYPT;
	}

private:
	CIcon			mDoingIcon;
	CIcon			mDoneIcon;
	CIcon			mFailedIcon;
	CImageList		mImages;
	CProgressBar	mCurTaskBar;
	CStatic			mCurTaskText;
	CStatic			mTaskIcon1;

	ReEncryptInfo	*mPInfo;

	CPath		mFileName;
	CThread		mReEncryptThread;
	CMutex		mCancelMutex;
	PGPBoolean	mShouldCancel;

	DWORD	GetPageHelpId() const
	{
		return IDH_PGPDISKUI_REENCRYPTWIZREENCRYPTPAGE;
	}

	PVOID	GetPageHelpIds() const {return ReEncryptWizReEncryptPageHelpIDs;}

	PGPBoolean			ReEncryptStatusCallbackAux(PGPUInt32 percent);
	static PGPBoolean	ReEncryptStatusCallback(PGPUInt32 percent, 
		void *userVal);

	void				ReEncryptCallbackAux();
	static void _cdecl	ReEncryptCallback(void *userVal);

	void	InitImages();

	void		OnReEncryptDone();
	BOOL		OnInitDialog(HWND focusCtrl);
	PGPBoolean	OnPsnQueryCancel();
	PGPInt32	OnPsnSetActive();

	PGPBoolean	PreProcess(const CMessage& msg, LRESULT& result);
};


// Class CReEncryptWizDonePage

class CReEncryptWizDonePage : public CPGPdiskPage
{
public:
	CReEncryptWizDonePage(ReEncryptInfo *pInfo) : mPInfo(pInfo)
	{
		pgpAssertAddrValid(pInfo, ReEncryptInfo);
	}

	~CReEncryptWizDonePage()
	{
	}

	PGPUInt16	GetDialogId() const
	{
		return IDD_REWIZ_DONE;
	}

private:
	ReEncryptInfo	*mPInfo;

	DWORD	GetPageHelpId() const {return IDH_PGPDISKUI_REENCRYPTWIZDONEPAGE;}
	PVOID	GetPageHelpIds() const {return ReEncryptWizDonePageHelpIDs;}

	PGPInt32	OnPsnSetActive();
};


// Class CReEncryptWizIntroPage

class CReEncryptWizIntroPage : public CPGPdiskPage
{
public:
	CReEncryptWizIntroPage(ReEncryptInfo *pInfo) : mPInfo(pInfo)
	{
		pgpAssertAddrValid(pInfo, ReEncryptInfo);
	}

	~CReEncryptWizIntroPage()
	{
	}
	
	PGPUInt16	GetDialogId() const
	{
		return IDD_REWIZ_INTRO;
	}

private:
	ReEncryptInfo	*mPInfo;

	DWORD	GetPageHelpId() const
	{
		return IDH_PGPDISKUI_REENCRYPTWIZINTROPAGE;
	}

	PVOID	GetPageHelpIds() const {return ReEncryptWizIntroPageHelpIDs;}

	BOOL		OnInitDialog(HWND focusCtrl);
	PGPInt32	OnPsnSetActive();
};


// Class CReEncryptWizAlgoPage member functions

void 
CReEncryptWizAlgoPage::SavePrefs()
{
	// Select last-used algorithm.
	CPGPclPrefs	prefs(mPInfo->pContext->PGPclPrefs());

	prefs.SetNumber(kPGPPrefDiskLastAlgorithm, mPInfo->algorithm);
}

_UNNAMED_END


// Class CReEncryptWizAlgoPage member functions

void 
CReEncryptWizAlgoPage::InitControls()
{
	mSameAlgoValue = FALSE;
	mSameAlgoCheck.SetCheck(BST_UNCHECKED);

	// Display existing algorithm in static edit box.
	CString	curAlgoText;
	CPGPdiskEngine::GetDiskAlgorithmIdString(mPInfo->algorithm, curAlgoText);

	mCurAlgoEdit.SetWindowText(curAlgoText);

	// Fill in combo box.
	mAlgoCombo.Fill();

	// Don't display existing algorithm in combo box.
	mAlgoCombo.Remove(mPInfo->algorithm);

	// Select last-used algorithm.
	CPGPclPrefs	prefs(mPInfo->pContext->PGPclPrefs());

	mAlgoCombo.Set(static_cast<PGPdiskEncryptionAlgorithm>(
		prefs.GetNumber(kPGPPrefDiskLastAlgorithm)));

	// Disable re-encryption to old CAST algorithm.
	if (mPInfo->algorithm == kPGPdiskOldCAST5Algorithm)
		mSameAlgoCheck.EnableWindow(FALSE);
}

void 
CReEncryptWizAlgoPage::OnSameAlgoCheck()
{
	if (mSameAlgoCheck.GetCheck() == BST_CHECKED)
	{
		mSameAlgoValue = TRUE;
		mPrevChoice = mAlgoCombo.Get();

		mAlgoCombo.Add(mPInfo->algorithm);
		mAlgoCombo.Set(mPInfo->algorithm);

		mAlgoCombo.EnableWindow(FALSE);
	}
	else
	{
		mSameAlgoValue = FALSE;

		mAlgoCombo.Remove(mPInfo->algorithm);
		mAlgoCombo.Set(mPrevChoice);

		mAlgoCombo.EnableWindow(TRUE);
	}
}

BOOL 
CReEncryptWizAlgoPage::OnCommand(
	PGPUInt16	notifyCode, 
	PGPUInt16	itemId, 
	HWND		ctrl)
{
	if (notifyCode == BN_CLICKED)
	{
		switch (itemId)
		{
		case IDC_SAMEALGO_CHECK:
			OnSameAlgoCheck();
			return TRUE;
		}
	}

	return CPGPdiskPage::OnCommand(notifyCode, itemId, ctrl);
}

BOOL 
CReEncryptWizAlgoPage::OnInitDialog(HWND focusCtrl)
{
	CPGPdiskPage::OnInitDialog(focusCtrl);

	// Attach controls.
	mSameAlgoCheck.Subclass(GetDlgItem(IDC_SAMEALGO_CHECK));
	mAlgoCombo.Subclass(GetDlgItem(IDC_ALGO_COMBO));
	mCurAlgoEdit.Subclass(GetDlgItem(IDC_CURALGO_EDIT));

	// Prepare controls.
	InitControls();

	return TRUE;
}

PGPInt32 
CReEncryptWizAlgoPage::OnPsnSetActive()
{
	PGPInt32	result	= CPGPdiskPage::OnPsnSetActive();

	if (result != 0)
		return result;

	SetWizButtons(PSWIZB_BACK | PSWIZB_NEXT);
	mCurAlgoEdit.SetSel(-1, -1);

	return 0;
}

PGPInt32 
CReEncryptWizAlgoPage::OnPsnWizNext()
{
	PGPInt32	result	= CPGPdiskPage::OnPsnWizNext();

	if (result != 0)
		return result;

	if (!mSameAlgoValue)
		mPInfo->algorithm = mAlgoCombo.Get();

	SavePrefs();

	return 0;
}


// Class CReEncryptWizReEncryptPage member functions

PGPBoolean 
CReEncryptWizReEncryptPage::ReEncryptStatusCallbackAux(PGPUInt32 percent)
{
	mCurTaskBar.SetPosWTimeout(percent, 1000);

	mCancelMutex.Enter();
	mCancelMutex.Leave();

	return !mShouldCancel;

⌨️ 快捷键说明

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