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

📄 scencrypt.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
📖 第 1 页 / 共 2 页
字号:

	err=kPGPError_NoErr;

	context=(PGPContextRef)PGPsc;
	tls=(PGPtlsContextRef)PGPtls;

///	if(IsPGPError(PGPlnIsExpired(hwnd, kPGPlnEncryptSignExpiration)))
///		return FALSE;

	if(!GetCommentLine(context,comment,sizeof(comment),&PrefAlg,
		allowedAlgs, &nNumAlgs))
		return FALSE;

	prds=(PPGPclRecipientDialogStruct)
		malloc(sizeof(PGPclRecipientDialogStruct));

	if(prds)
	{
		memset(prds,0x00,sizeof(PGPclRecipientDialogStruct));

		LoadString (g_hinst, IDS_PGPKEYSELDLG, StrRes, sizeof(StrRes));

		prds->szTitle=StrRes;
		prds->dwDisableFlags=kPGPclDisableAutoMode;
		prds->dwOptions=kPGPclDetachedSignature;

		ms=(MYSTATE *)malloc(sizeof(MYSTATE));

		if(ms)
		{
			memset(ms, 0x00, sizeof(MYSTATE) );

			ms->context=context;
			ms->tlsContext=tls;
			ms->ListHead=ListHead;
			ms->Operation=MS_ENCRYPTFILELIST;
			ms->prds=prds;
			ms->Encrypt=bEncrypt; 
			ms->Sign=bSign;
			ms->comment=comment;
			ms->PrefAlg=PrefAlg;
			ms->allowedAlgs=allowedAlgs; 
			ms->nNumAlgs=nNumAlgs;
			ms->szAppName=szApp;

			if(OpenRings(hwnd,context,&(ms->KeyDB),&(ms->bMutable)))
			{
				err=PGPscProgressDialog(hwnd,DoWorkThread,ms,
						  0,"Encoding File(s)...",
						  "","",IDR_PROGAVI);

				if(prds->keydbSelected)
					PGPFreeKeyDB(prds->keydbSelected);

				FreePhrases(ms);

				PGPFreeKeyDB(ms->KeyDB);
			}
			free(ms);
		}
		free(prds);
	}
	
	PGPscFreeFileList(ListHead);

	if(IsPGPError(err))
		return FALSE;

	return TRUE;
}

PGPError CreateSDAFileListStub (MYSTATE *ms) 
{
	PGPError err;
	BOOL UserCancel;
	char StrRes[256];
	char szPassTitle[256];
	PGPUInt32 iMinPhraseLength;
	PGPUInt32 iMinPhraseQuality;

	iMinPhraseLength=iMinPhraseQuality=0;
	
	// minimum passphrase length
	if(PGPlnEnterprise())
	{
		PGPError prefErr;
		PGPBoolean b;
		PGPPrefRef prefs;
		
		prefErr = PGPclPeekClientLibPrefRefs (&prefs, NULL);
		
		if(IsntPGPError(prefErr))
		{
			prefErr = PGPGetPrefBoolean (prefs, kPGPPrefEnforceMinChars, &b);
			
			if (IsntPGPError(prefErr)&&(b)) 
			{
				PGPGetPrefNumber (prefs, kPGPPrefMinChars, &iMinPhraseLength);
			}
			
			// minimum passphrase quality
			prefErr = PGPGetPrefBoolean (prefs, kPGPPrefEnforceMinQuality, &b);
			
			if(IsntPGPError(prefErr)&&(b)) 
			{
				PGPGetPrefNumber (prefs, kPGPPrefMinQuality, &iMinPhraseQuality);
			}
		}
	}

	if(iMinPhraseLength<1)
		iMinPhraseLength=1;
	
	LoadString (g_hinst, IDS_ENTERPASSPHRASE, StrRes, sizeof(StrRes));
	strcpy(szPassTitle,ms->szAppName);
	strcat(szPassTitle,StrRes);

	LoadString (g_hinst, IDS_ENTERSDAPASS, StrRes, sizeof(StrRes));

	UserCancel = PGPclGetPhrase (ms->context,
		ms->KeyDB,
		ms->hwndWorking,
		StrRes,
		&(ms->ConvPassPhrase), 
		NULL,
		NULL, 
		0,
		NULL,
		NULL,
		kPGPclEncryption,
		NULL,NULL,
		iMinPhraseLength,
		iMinPhraseQuality,
		ms->tlsContext,NULL,szPassTitle);

	if(UserCancel)
		return kPGPError_UserAbort;

	err=SDA(ms);

	return err;
}

BOOL PGPscCreateSDAFileList(HWND hwnd,char *szApp,
					 void *PGPsc,
					 void *PGPtls,
					 FILELIST *ListHead)
{
	PGPContextRef context;
	MYSTATE *ms;
	PGPtlsContextRef tls;
	PGPError err;
	PGPBoolean bAllowConvEncrypt;
	PGPPrefRef prefRef;

	err=kPGPError_NoErr;

	context=(PGPContextRef)PGPsc;
	tls=(PGPtlsContextRef)PGPtls;

///	if(IsPGPError(PGPlnIsExpired(hwnd, kPGPlnEncryptSignExpiration)))
///		return FALSE;

	err=PGPclPeekClientLibPrefRefs(&prefRef,NULL);
	if (IsPGPError (err))
		return FALSE;

	// Allow Conventional
	PGPGetPrefBoolean(prefRef,
		kPGPPrefAllowConventionalEncryption,
		&(bAllowConvEncrypt));

	if(!bAllowConvEncrypt)
	{
		PGPscMessageBox (hwnd,IDS_PGPERROR,IDS_SDANOTALLOWED,
			MB_OK|MB_ICONSTOP);
		return FALSE;
	}

	ms=(MYSTATE *)malloc(sizeof(MYSTATE));

	if(ms)
	{
		memset(ms, 0x00, sizeof(MYSTATE) );

		ms->context=context;
		ms->tlsContext=tls;
		ms->ListHead=ListHead;
		ms->Operation=MS_CREATESDAFILELIST;
		ms->szAppName=szApp;

		err=PGPscProgressDialog(hwnd,DoWorkThread,ms,
						  0,"Encoding File(s)...",
						  "","",IDR_PROGAVI);

		FreePhrases(ms);

		free(ms);
	}
	
	PGPscFreeFileList(ListHead);

	if(IsPGPError(err))
		return FALSE;

	return TRUE;
}

BOOL WeNeedToWordWrap(PGPContextRef context,
					  unsigned short* WordWrapThreshold)
{
	PGPBoolean	bWrapReturn=TRUE;
	PGPUInt32	WrapWidth=72;
	PGPPrefRef	prefRef;
	PGPError err;

	err=PGPclPeekClientLibPrefRefs(&prefRef,NULL);

	if(IsntPGPError(err))
	{
		PGPGetPrefBoolean (prefRef,
			kPGPPrefWordWrapEnable, &bWrapReturn);	
		PGPGetPrefNumber (prefRef, 
			kPGPPrefWordWrapWidth, &WrapWidth);
	}

	*WordWrapThreshold=WrapWidth;

	return bWrapReturn;
}

BOOL WrapBuffer(char **pszOutText,
				char *szInText,
				PGPUInt16 wrapLength)
{
	BOOL RetVal = FALSE;
	PGPError err;
	char *cmdlgBuffer;

	err=PGPclWrapBuffer(
					szInText,
					wrapLength,
					&cmdlgBuffer);

	if(IsntPGPError (err))
	{
		int memamt,length;

		length=strlen(cmdlgBuffer);
		memamt=length+1;

		*pszOutText=(char *)malloc(memamt);
		memcpy(*pszOutText,cmdlgBuffer,length);
		(*pszOutText)[length]=0;
		PGPclFreeWrapBuffer(cmdlgBuffer);
		RetVal = TRUE;
	}

	return RetVal;
}


BOOL WrapIfNecessary(PGPContextRef context,
					 char **pszClipText,DWORD *dwClipSize)
{
	unsigned short WordWrapThreshold;
	char* szWrappedText;
	DWORD dwWrappedSize;

	if(WeNeedToWordWrap(context,&WordWrapThreshold))
	{
		if(TRUE == WrapBuffer(&szWrappedText, 
			*pszClipText,WordWrapThreshold))
		{	
			dwWrappedSize = strlen(szWrappedText);

			memset(*pszClipText,0x00,*dwClipSize);
			free(*pszClipText);
			*pszClipText=szWrappedText;

			*dwClipSize=dwWrappedSize;
		}
	}

	return TRUE;
}

PGPError EncryptClipboardStub (MYSTATE *ms) 
{
	PGPOptionListRef opts;
	PGPContextRef context;
	PGPError err;
	char StrRes[100];

	err=kPGPError_NoErr;

	context=ms->context;

	PGPBuildOptionList(context,&opts,
		PGPOInputBuffer(context,ms->pInput,ms->dwInputSize),
		PGPOAllocatedOutputBuffer(context,
			&(ms->pOutput),MAX_PGPSize ,&(ms->dwOutputSize)),
		PGPOLastOption(context));

	LoadString (g_hinst, IDS_CLIPBOARD, StrRes, sizeof(StrRes));

	err=GenericEncSign(ms,opts,StrRes);

	PGPFreeOptionList(opts);

	return err;
}

BOOL PGPscEncryptClipboard(HWND hwnd,char *szApp,void *PGPsc,void *PGPtls,BOOL Encrypt,BOOL Sign,BOOL bStartingCR)
{
	PGPContextRef context;
	PPGPclRecipientDialogStruct prds;
	char *pInput;
	DWORD dwInputSize;
	UINT ClipboardFormat;
	char comment[80];
	PGPUInt32 PrefAlg;
	PGPCipherAlgorithm allowedAlgs[20];
	int nNumAlgs;
	MYSTATE *ms;
	PGPtlsContextRef tls;
	PGPError err;
	char StrRes[500];

	// Check for files copied into clipboard from explorer
	if(OpenClipboard(hwnd)) 
	{
		if(IsClipboardFormatAvailable(CF_HDROP))
		{
			FILELIST *ListHead;
			HDROP hDrop;

			hDrop=(HDROP)GetClipboardData(CF_HDROP);
			ListHead=PGPscHDropToFileList(hDrop);

			if(ListHead!=0)
			{
				CloseClipboard();

				return PGPscEncryptFileList(hwnd,szApp,
					 PGPsc,PGPtls,ListHead,
					 Encrypt,Sign);
			}
		}
		CloseClipboard();
	}

	err=kPGPError_NoErr;

	context=(PGPContextRef)PGPsc;
	tls=(PGPtlsContextRef)PGPtls;

///	if(IsPGPError(PGPlnIsExpired(hwnd, kPGPlnEncryptSignExpiration)))
///		return FALSE;

	if(!GetCommentLine(context,comment,sizeof(comment),&PrefAlg,
		allowedAlgs, &nNumAlgs))
		return FALSE;

	pInput=RetrieveClipboardData(hwnd, &ClipboardFormat, 
			                     &dwInputSize);

	if(!pInput)
	{
		PGPscMessageBox (hwnd,IDS_PGPERROR,IDS_NOCLIPBOARDCONTENTS,
					MB_OK|MB_ICONSTOP);
	}
	else
	{
		if((ClipboardFormat != CF_TEXT)||(*pInput==0))
		{
			PGPscMessageBox (hwnd,IDS_PGPERROR,IDS_NOCLIPBOARDTEXT,
				MB_OK|MB_ICONSTOP);
		}
		else
		{
			// Don't word wrap if we are encrypting
			if(!Encrypt)
				WrapIfNecessary(context,&pInput,&dwInputSize);

			prds=(PPGPclRecipientDialogStruct)
				malloc(sizeof(PGPclRecipientDialogStruct));

			if(prds)
			{
				memset(prds,0x00,sizeof(PGPclRecipientDialogStruct));

				LoadString (g_hinst, IDS_PGPKEYSELDLG, StrRes, sizeof(StrRes));

				prds->szTitle=StrRes;
				prds->dwOptions=kPGPclASCIIArmor;
				prds->dwDisableFlags=kPGPclDisableASCIIArmor |
					kPGPclDisableWipeOriginal |
					kPGPclDisableAutoMode |
					kPGPclDisableInputIsText;

				ms=(MYSTATE *)malloc(sizeof(MYSTATE));
	
				if(ms)
				{
					memset(ms, 0x00, sizeof(MYSTATE) );

					ms->context=context;
					ms->tlsContext=tls;
					ms->pInput=pInput;
					ms->dwInputSize=dwInputSize;
					ms->Operation=MS_ENCRYPTCLIPBOARD;
					ms->prds=prds;
					ms->Encrypt=Encrypt; 
					ms->Sign=Sign;
					ms->comment=comment;
					ms->PrefAlg=PrefAlg;
					ms->allowedAlgs=allowedAlgs; 
					ms->nNumAlgs=nNumAlgs;
					ms->szAppName=szApp;
					ms->bStartingCR=bStartingCR;

					if(OpenRings(hwnd,context,&(ms->KeyDB),&(ms->bMutable)))
					{	
						err=PGPscProgressDialog(hwnd,DoWorkThread,ms,
							  0,"Encoding Clipboard...",
							  "","",IDR_PROGAVI);
	
						if(prds->keydbSelected)
							PGPFreeKeyDB(prds->keydbSelected);

						FreePhrases(ms);
				
						if((ms->pOutput!=0) && (IsntPGPError(err)))
						{
							if(ms->bStartingCR)
							{
								char *pCR;

								pCR=PGPNewData(PGPPeekContextMemoryMgr (ms->context),
									ms->dwOutputSize+2,0);

								if(pCR)
								{
									strcpy(pCR,"\r\n");
									memcpy(&(pCR[2]),ms->pOutput,ms->dwOutputSize);

									StoreClipboardData(hwnd, pCR, ms->dwOutputSize+2);

									memset(pCR,0x00,ms->dwOutputSize+2);

									PGPFreeData(pCR);
								}
							}
							else
							{
								StoreClipboardData(hwnd, ms->pOutput, ms->dwOutputSize);
							}

							memset(ms->pOutput,0x00,ms->dwOutputSize);
							PGPFreeData(ms->pOutput); // Since auto alloced by CDK
						}

						PGPFreeKeyDB(ms->KeyDB);
					}
					free(ms);
				}
				free(prds);
			}
		}
		memset(pInput,0x00,dwInputSize);
		free(pInput);
	}

	if(IsPGPError(err))
		return FALSE;

	return TRUE;
}

BOOL PGPscEncryptBuffer(HWND hwnd,char *szApp,void *PGPsc,void *PGPtls,
				   BOOL Encrypt,BOOL Sign,
				   char *pInput,DWORD dwInputSize,
				   char **pOutput,DWORD *pdwOutputSize,
				   char **szRecipientArray,DWORD dwNumRecipients,
				   BOOL bForce)
{
	PGPContextRef context;
	PPGPclRecipientDialogStruct prds;
	char comment[80];
	PGPUInt32 PrefAlg;
	PGPCipherAlgorithm allowedAlgs[20];
	int nNumAlgs;
	MYSTATE *ms;
	PGPtlsContextRef tls;
	PGPError err;
	char StrRes[500];

	err=kPGPError_NoErr;

	context=(PGPContextRef)PGPsc;
	tls=(PGPtlsContextRef)PGPtls;

///	if(IsPGPError(PGPlnIsExpired(hwnd, kPGPlnEncryptSignExpiration)))
///		return FALSE;

	if(!GetCommentLine(context,comment,sizeof(comment),&PrefAlg,
		allowedAlgs, &nNumAlgs))
		return FALSE;

//	WrapIfNecessary(context,&pInput,&dwInputSize);

	prds=(PPGPclRecipientDialogStruct)
		malloc(sizeof(PGPclRecipientDialogStruct));

	if(prds)
	{
		memset(prds,0x00,sizeof(PGPclRecipientDialogStruct));

		LoadString (g_hinst, IDS_PGPKEYSELDLG, StrRes, sizeof(StrRes));

		prds->szTitle=StrRes;
		prds->dwOptions=kPGPclASCIIArmor;
		prds->dwDisableFlags=kPGPclDisableASCIIArmor |
			kPGPclDisableWipeOriginal |
			kPGPclDisableInputIsText;

		if(bForce)
			prds->dwDisableFlags|=kPGPclDisableAutoMode;

		prds->dwNumRecipients	= dwNumRecipients;	
		prds->szRecipientArray	= szRecipientArray;

		ms=(MYSTATE *)malloc(sizeof(MYSTATE));
	
		if(ms)
		{
			memset(ms, 0x00, sizeof(MYSTATE) );

			ms->context=context;
			ms->tlsContext=tls;
			ms->pInput=pInput;
			ms->dwInputSize=dwInputSize;
			ms->Operation=MS_ENCRYPTCLIPBOARD;
			ms->prds=prds;
			ms->Encrypt=Encrypt; 
			ms->Sign=Sign;
			ms->comment=comment;
			ms->PrefAlg=PrefAlg;
			ms->allowedAlgs=allowedAlgs; 
			ms->nNumAlgs=nNumAlgs;
			ms->szAppName=szApp;

			if(OpenRings(hwnd,context,&(ms->KeyDB),&(ms->bMutable)))
			{	
				err=PGPscProgressDialog(hwnd,DoWorkThread,ms,
					  0,"Encoding...",
					  "","",IDR_PROGAVI);
	
				if(prds->keydbSelected)
					PGPFreeKeyDB(prds->keydbSelected);

				FreePhrases(ms);
				
				if((ms->pOutput!=0) && (IsntPGPError(err)))
				{
					*pOutput=ms->pOutput;
					*pdwOutputSize=ms->dwOutputSize;
				}

				PGPFreeKeyDB(ms->KeyDB);
			}
			free(ms);
		}
		free(prds);
	}

	if(IsPGPError(err))
		return FALSE;

	return TRUE;
}


/*__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 + -