📄 scencrypt.c
字号:
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 + -