📄 decodeevent.c
字号:
#if HAVE_PRAGMA_MARK
#pragma mark ----- Encryption Event-----
#endif
case kPGPEvent_EncryptionEvent:
{
PGPEventEncryptionData *d = &event->data.encryptionData;
char * cipher = cipher_algor_table(d->cipherAlgorithm);
unsigned int i;
STATUS_LOG ("--> Data is encrypted with the %s Algorithm\n",cipher);
STATUS_LOG (" Session Key: [%d] ", (int)d->sessionKeyLength);
for( i=0; i< d->sessionKeyLength; i++ )
STATUS_LOG("%02x%s", d->sessionKey[i], ((i+1)%4?"":" "));
STATUS_LOG("\n");
}
break;
#if HAVE_PRAGMA_MARK
#pragma mark ----- Decryption Event-----
#endif
case kPGPEvent_DecryptionEvent:
{
PGPEventDecryptionData *d = &event->data.decryptionData;
char * cipher = cipher_algor_table(d->cipherAlgorithm);
unsigned int i;
STATUS_LOG ("--> Data was encrypted with the %s Algorithm\n",cipher);
STATUS_LOG (" Session Key: [%d] ", (int)d->sessionKeyLength);
for( i=0; i< d->sessionKeyLength; i++ )
STATUS_LOG("%02x%s", d->sessionKey[i], ((i+1)%4?"":" "));
STATUS_LOG("\n");
if(info->sessionKey)
{
PGPFreeData(info->sessionKey);
info->sessionKey = NULL;
info->sessionKeySize = 0;
}
info->sessionKey = PGPNewSecureData( PGPGetDefaultMemoryMgr(), d->sessionKeyLength, kPGPMemoryMgrFlags_None);
if( info->sessionKey == NULL)
{
err = kPGPError_OutOfMemory;
goto done;
}
info->sessionKeySize = d->sessionKeyLength;
COPY( d->sessionKey, info->sessionKey, d->sessionKeyLength );
}
break;
#if HAVE_PRAGMA_MARK
#pragma mark ----- Passphrase Event-----
#endif
case kPGPEvent_PassphraseEvent:
{
PGPEventPassphraseData *d = &event->data.passphraseData;
STATUS_LOG("--> Passphrase Event: %s\n", d->fConventional?"Conventional":"");
if(d->keyset)
{
PGPUInt32 numKeys;
err = PGPCountKeys(d->keyset, &numKeys);
STATUS_LOG(" %d key%s: ", numKeys, numKeys==1?"":"s");
if(numKeys)
{
PGPKeyDBObjRef aKey = kInvalidPGPKeyDBObjRef;
if( ! PGPKeyIterRefIsValid( info->keyIter ) )
err = PGPNewKeyIterFromKeySet(d->keyset, &info->keyIter);
while( IsntPGPError( PGPKeyIterNextKeyDBObj( info->keyIter, kPGPKeyDBObjType_Key, &aKey) ) )
{
PGPKeyID keyID;
PGPChar8 outString[ kPGPMaxKeyIDStringSize ];
int i;
PGPGetKeyID( aKey, &keyID );
PGPGetKeyIDString( &keyID, kPGPKeyIDString_Full, outString);
for(i = 0;i < info->keyCount; i++)
if( PGPCompareKeyIDs( &info->key[i].keyID, &keyID) == 0 )
{
STATUS_LOG("trying %s",outString);
err = PGPAddJobOptions( event->job,
PGPOPassphraseBuffer( context, info->key[i].passPhrase,
strlen( info->key[i].passPhrase ) ),
PGPOLastOption( context ) );
goto got_paassphrase;
}
}
got_paassphrase:
STATUS_LOG("\n");
}
}
}
break;
#if HAVE_PRAGMA_MARK
#pragma mark ----- Output Event-----
#endif
case kPGPEvent_OutputEvent:
{
PGPEventOutputData *d = &event->data.outputData;
PGPBoolean isHandled = FALSE;
if(d->suggestedName)
{
char *ext = extname(d->suggestedName);
char baseName[MAX_PATH];
char pathName[MAX_PATH];
PGPBoolean isTAR = FALSE;
baseName[0] = 0;
if ((d->messageType == 'b') && (ext && (strcmp("tar", ext) == 0))) isTAR = TRUE;
if(ext)
{
strncat(baseName, d->suggestedName, ext - d->suggestedName );
baseName[ ext - d->suggestedName-1] = 0;
}
else
strcat(baseName, d->suggestedName);
STATUS_LOG("--> Output Event: (%c %s %s) \"%s\"\n",
d->messageType,(d->forYourEyesOnly?"EYES-ONLY":""),
isTAR?"TAR":"",
d->suggestedName);
switch( info->option)
{
case kDecode_MakeTarCache:
if(isTAR)
{
sprintf(pathName, "%s/%s.tarcache",info->outDir, baseName);
STATUS_LOG (" Making TAR Cache \"%s\"\n", pathName);
if( PGPFileSpecRefIsValid(info->outFile))
{
PGPFreeFileSpec(info->outFile);
info->outFile = NULL;
}
err = PGPNewFileSpecFromFullPath( context, pathName, &info->outFile );
err = PGPAddJobOptions( event->job,
PGPOOutputTARCache(context, info->outFile ),
PGPOLastOption(context));
isHandled = TRUE;
}
break;
case kDecode_UnpackTar:
if(isTAR) /* make a directory to drop the TAR */
{
sprintf(pathName, "%s/%s",info->outDir, baseName);
#ifndef PGP_WIN32
if( (mkdir(pathName, S_IRWXU | S_IRWXG) != 0) && (errno != EEXIST))
#else
if( (_mkdir(pathName) != 0) && (errno != EEXIST))
#endif
{
OPTESTPrintF("mkdir(%s) failed = %d\n",pathName, errno);
err = kPGPError_FileOpFailed;
}
else
{
STATUS_LOG (" Expanding into directory \"%s\"\n", baseName);
if( PGPFileSpecRefIsValid(info->outFile))
{
PGPFreeFileSpec(info->outFile);
info->outFile = NULL;
}
err = PGPNewFileSpecFromFullPath( context, pathName, &info->outFile );
err = PGPAddJobOptions( event->job,
PGPOOutputDirectory(context, info->outFile ),
PGPOLastOption(context));
isHandled = TRUE;
}
}
break;
case kDecode_FileOutput:
sprintf(pathName, "%s/%s",info->outDir, d->suggestedName);
err = PGPNewFileSpecFromFullPath( context, pathName, &info->outFile );
err = PGPAddJobOptions( event->job,
PGPOOutputFile(context, info->outFile ),
PGPOLastOption(context));
isHandled = TRUE;
break;
default:;
}
}
if(!isHandled)
{
if(info->outBuf)
{
PGPFreeData(info->outBuf);
info->outBuf = NULL;
info->outBufSize = 0;
}
err = PGPAddJobOptions( event->job,
PGPOAllocatedOutputBuffer( context, (void*)&info->outBuf, MAX_PGPSize, &info->outBufSize),
PGPOLastOption(context));
}
}
break;
#if HAVE_PRAGMA_MARK
#pragma mark ----- Detached Sig Event-----
#endif
case kPGPEvent_DetachedSignatureEvent:
{
STATUS_LOG ("--> Detached Signature Event:\n");
}
break;
#if HAVE_PRAGMA_MARK
#pragma mark ----- Sig Event-----
#endif
case kPGPEvent_SignatureEvent:
{
PGPEventSignatureData *d = &event->data.signatureData;
PGPUInt16 year, month,day;
OPTESTPrintF ("--> Signature Data:");
if( d->signingKey == NULL) {
OPTESTPrintF (" (unknown signer)");
} else {
char name[256];
PGPSize namelen = sizeof(name);
PGPByte fp[64];
PGPSize fplen;
PGPGetPrimaryUserIDName( d->signingKey, name, sizeof(name), &namelen);
OPTESTPrintF ("\n\t Signed by %s\n", name);
PGPGetKeyDBObjDataProperty(d->signingKey,kPGPKeyProperty_Fingerprint,
&fp,sizeof(fp), &fplen);
FormatFingerprintString(name, fp, fplen) ;
OPTESTPrintF("\t FingerPrint: %s\n", name);
if ( ! d->verified )
OPTESTPrintF( "\t !!!!! WARNING: did not verify !!!!!!!" );
OPTESTPrintF ("\t %schecked, %sverified, %skeyDisabled, "
"%skeyRevoked, %skeyExpired"
"\n\t %skeyMeetsValidityThreshold, validity=%d",
(d->checked?"":"!"),(d->verified?"":"!"),
(d->keyDisabled?"":"!"), (d->keyRevoked?"":"!"),
(d->keyExpired?"":"!"),
(d->keyMeetsValidityThreshold?"":"!"),
d->keyValidity);
}
PGPGetYMDFromPGPTime( d->creationTime,&year, &month,&day);
OPTESTPrintF("\n\t created: %02d/%02d/%04d\n",month,day,year);
}
break;
#if HAVE_PRAGMA_MARK
#pragma mark ----- Recipients Event-----
#endif
case kPGPEvent_RecipientsEvent:
{
PGPEventRecipientsData *d = &event->data.recipientsData;
if(recipdata)PGPFreeData(recipdata);
recipdata = (PGPEventRecipientsData*)
PGPNewData( PGPGetDefaultMemoryMgr(), sizeof(PGPEventRecipientsData) , 0 );
if(recipdata) {
recipdata->recipientSet = d->recipientSet;
recipdata->keyCount = d->keyCount;
recipdata->keyIDArray = d->keyIDArray;
PGPIncKeySetRefCount(d->recipientSet);
}
}
break;
#if HAVE_PRAGMA_MARK
#pragma mark ----- Key Server Event-----
#endif
case kPGPEvent_KeyServerEvent:
{
PGPEventKeyServerData *d = &event->data.keyServerData;
PGPChar8 *host = NULL;
if(PGPKeyServerRefIsValid(d->keyServerRef))
{
#if (! PGP_SYMBIAN) || (! PGP_DEBUG)
PGPGetKeyServerHostName(d->keyServerRef, &host);
#endif
}
STATUS_LOG("--> KeyServer Event: %s %s\n",KeyserverEventTxt[ d->state ], host?host:"");
if(host) PGPFreeData(host);
}
break;
#if HAVE_PRAGMA_MARK
#pragma mark ----- Other Event-----
#endif
default:
STATUS_LOG("--> Other Event :%d\n",event->type);
break;
}
done:
return err;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -