📄 encryptsign.c
字号:
/*____________________________________________________________________________
Copyright (C) 1997 Network Associates Inc. and affiliated companies.
All rights reserved.
$Id: EncryptSign.c,v 1.13 1999/04/13 17:29:55 wjb Exp $
____________________________________________________________________________*/
// System Headers
#include <windows.h>
#include <windowsx.h>
#include <assert.h>
// PGPsdk Headers
#include "pgpConfig.h"
#include "pgpKeys.h"
#include "pgpErrors.h"
#include "pgpWerr.h"
#include "pgpUtilities.h"
#include "pgpMem.h"
#include "pgpSDKPrefs.h"
// Shared Headers
#include "pgpVersionHeader.h"
#include "PGPcl.h"
#include "BlockUtils.h"
#include "Working.h"
#include "Prefs.h"
#include "EncryptSign.h"
#include "WorkingResource.h"
#include "SharedStrings.h"
static int nProgressCount = 0;
static PGPError EncryptSign(HINSTANCE hInst, HWND hwnd, PGPContextRef context,
PGPtlsContextRef tlsContext,
char *szName, char *szModule,
RECIPIENTDIALOGSTRUCT *prds,
PGPOptionListRef ioOptions,
PGPOptionListRef mimeOptions,
PGPOptionListRef *pSignOptions,
BOOL bEncrypt, BOOL bSign, BOOL bBinary);
PGPError EncodeEventHandler(PGPContextRef context,
PGPEvent *event,
PGPUserValue userValue);
static void DisplayErrorCode(char *szFile,
int nLine,
char *szModule,
int nCode);
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;
}
PGPError EncryptSignBuffer(HINSTANCE hInst, HWND hwnd, PGPContextRef context,
PGPtlsContextRef tlsContext,
char *szName, char *szModule,
void *pInput, DWORD dwInSize,
RECIPIENTDIALOGSTRUCT *prds,
PGPOptionListRef mimeOptions,
PGPOptionListRef *pSignOptions,
void **ppOutput, PGPSize *pOutSize, BOOL bEncrypt,
BOOL bSign, BOOL bBinary)
{
PGPError err = kPGPError_NoErr;
PGPMemoryMgrRef memoryMgr = NULL;
PGPOptionListRef options = NULL;
void * pFinalInput = NULL;
long lWrapWidth = 0;
BOOL bInputWrapped = FALSE;
pgpAssert(pInput != NULL);
pgpAssert(prds != NULL);
pgpAssert(prds->OriginalKeySetRef != NULL);
pgpAssert(pSignOptions != NULL);
pgpAssert(ppOutput != NULL);
pgpAssert(pOutSize != NULL);
pgpAssert(PGPRefIsValid(context));
memoryMgr = PGPGetContextMemoryMgr(context);
pFinalInput = pInput;
if (!bBinary)
{
if (ByDefaultWordWrap(memoryMgr, &lWrapWidth))
{
pFinalInput = NULL;
bInputWrapped = WrapBuffer((char **) &pFinalInput,
(char *) pInput, (short) lWrapWidth);
dwInSize = strlen((char *) pFinalInput);
}
}
err = PGPBuildOptionList(context, &options,
PGPOInputBuffer(context, pFinalInput, dwInSize),
PGPOAllocatedOutputBuffer(context,
ppOutput,
INT_MAX,
pOutSize),
PGPOLastOption(context));
if (IsPGPError(err))
{
DisplayErrorCode(__FILE__, __LINE__, szModule, err);
goto EncryptSignBufferError;
}
err = EncryptSign(hInst, hwnd, context, tlsContext, szName, szModule,
prds, options, mimeOptions, pSignOptions, bEncrypt, bSign,
bBinary);
EncryptSignBufferError:
if (bInputWrapped)
free(pFinalInput);
if (options != NULL)
PGPFreeOptionList(options);
return err;
}
PGPError EncryptSignFile(HINSTANCE hInst, HWND hwnd, PGPContextRef context,
PGPtlsContextRef tlsContext,
char *szName, char *szModule, char *szInFile,
RECIPIENTDIALOGSTRUCT *prds,
PGPOptionListRef mimeOptions,
PGPOptionListRef *pSignOptions, char *szOutFile,
BOOL bEncrypt, BOOL bSign, BOOL bBinary)
{
PGPError err = kPGPError_NoErr;
PGPOptionListRef options = NULL;
PGPFileSpecRef inputFile = NULL;
PGPFileSpecRef outputFile = NULL;
pgpAssert(szInFile != NULL);
pgpAssert(prds != NULL);
pgpAssert(prds->OriginalKeySetRef != NULL);
pgpAssert(pSignOptions != NULL);
pgpAssert(szOutFile != NULL);
pgpAssert(PGPRefIsValid(context));
err = PGPNewFileSpecFromFullPath(context, szInFile, &inputFile);
if (IsPGPError(err))
{
DisplayErrorCode(__FILE__, __LINE__, szModule, err);
goto EncryptSignFileError;
}
err = PGPNewFileSpecFromFullPath(context, szOutFile, &outputFile);
if (IsPGPError(err))
{
DisplayErrorCode(__FILE__, __LINE__, szModule, err);
goto EncryptSignFileError;
}
err = PGPBuildOptionList(context, &options,
PGPOInputFile(context, inputFile),
PGPOOutputFile(context, outputFile),
PGPOLastOption(context));
if (IsPGPError(err))
{
DisplayErrorCode(__FILE__, __LINE__, szModule, err);
goto EncryptSignFileError;
}
err = EncryptSign(hInst, hwnd, context, tlsContext, szName, szModule,
prds, options, mimeOptions, pSignOptions, bEncrypt, bSign,
bBinary);
EncryptSignFileError:
if (options != NULL)
PGPFreeOptionList(options);
if (inputFile != NULL)
PGPFreeFileSpec(inputFile);
if (outputFile != NULL)
PGPFreeFileSpec(outputFile);
return err;
}
PGPError EncryptSign(HINSTANCE hInst, HWND hwnd, PGPContextRef context,
PGPtlsContextRef tlsContext,
char *szName, char *szModule,
RECIPIENTDIALOGSTRUCT *prds,
PGPOptionListRef ioOptions,
PGPOptionListRef mimeOptions,
PGPOptionListRef *pSignOptions,
BOOL bEncrypt, BOOL bSign,
BOOL bBinary)
{
PGPError err = kPGPError_NoErr;
PGPMemoryMgrRef memoryMgr = NULL;
PGPKeyRef signKey = NULL;
PGPKeySetRef pubKeySet = NULL;
PGPKeySetRef addedKeys = NULL;
PGPKeySetRef recipKeySet = NULL;
PGPOptionListRef options = NULL;
PGPOptionListRef encryptOptions = NULL;
PGPOptionListRef tempOptions = NULL;
PGPCipherAlgorithm prefAlg = kPGPCipherAlgorithm_CAST5;
PGPCipherAlgorithm allowedAlgs[3];
char * szPassphrase = NULL;
char * szConvPass = NULL;
PGPByte * pPasskey = NULL;
PGPUInt32 nPasskeyLength = 0;
int nPassphraseLen = 0;
int nConvPassLen = 0;
int nNumAlgs = 0;
BOOL bGotPassphrase = FALSE;
BOOL bGotConvPass = FALSE;
HWND hwndWorking = NULL;
char szComment[256];
char szWorkingTitle[256];
UpdateWindow(hwnd);
memoryMgr = PGPGetContextMemoryMgr(context);
// Check for demo expiration
if (PGPclEvalExpired(hwnd, PGPCL_ENCRYPTSIGNEXPIRED) != kPGPError_NoErr)
return kPGPError_UserAbort;
pubKeySet = prds->OriginalKeySetRef;
err = PGPGetDefaultPrivateKey(pubKeySet, &signKey);
if (IsPGPError(err))
{
PGPKeyListRef pubKeyList = NULL;
PGPKeyIterRef pubKeyIter = NULL;
PGPOrderKeySet(pubKeySet, kPGPTrustOrdering, &pubKeyList);
PGPNewKeyIter(pubKeyList, &pubKeyIter);
PGPKeyIterNext(pubKeyIter, &signKey);
PGPFreeKeyIter(pubKeyIter);
PGPFreeKeyList(pubKeyList);
err = kPGPError_NoErr;
}
err = kPGPError_BadPassphrase;
while (err == kPGPError_BadPassphrase)
{
if (IsntNull(szPassphrase))
{
PGPclFreeCachedPhrase(szPassphrase);
szPassphrase = NULL;
}
if (IsntNull(szConvPass))
{
PGPclFreePhrase(szConvPass);
szConvPass = NULL;
}
if (IsNull(mimeOptions))
err = PGPBuildOptionList(context, &options,
PGPOLastOption(context));
else
err = PGPBuildOptionList(context, &options,
mimeOptions,
PGPOLastOption(context));
if (IsPGPError(err))
{
DisplayErrorCode(__FILE__, __LINE__, szModule, err);
goto EncryptSignError;
}
err = PGPBuildOptionList(context, &encryptOptions,
PGPOLastOption(context));
if (IsPGPError(err))
{
DisplayErrorCode(__FILE__, __LINE__, szModule, err);
goto EncryptSignError;
}
if (GetCommentString(memoryMgr, szComment, 254))
{
err = PGPBuildOptionList(context, &tempOptions,
options,
PGPOCommentString(context, szComment),
PGPOLastOption(context));
if (IsPGPError(err))
{
DisplayErrorCode(__FILE__, __LINE__, szModule, err);
goto EncryptSignError;
}
PGPFreeOptionList(options);
options = tempOptions;
}
if (bEncrypt)
{
if (*pSignOptions == NULL)
{
if (prds->dwOptions & PGPCL_ASCIIARMOR)
{
err = PGPBuildOptionList(context, &tempOptions,
encryptOptions,
PGPOArmorOutput(context, TRUE),
PGPOLastOption(context));
if (IsPGPError(err))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -