Пример #1
0
	static PGPError
sTestGroupValidity( PGPKeySetRef	keySet )
{
	PGPValidity		validity;
	PGPUInt32		numNotFound;
	PGPError		err	= kPGPError_NoErr;
	PGPGroupSetRef	set;
	PGPContextRef	memoryMgr	= NULL;
	
	err	= PGPNewContext( kPGPsdkAPIVersion, &memoryMgr );
	if ( IsntPGPError( err ) )
	{
		err	= PGPNewGroupSet( memoryMgr, &set );
		if ( IsntPGPError( err ) )
		{
			PGPGroupID	id;
			
			err	= PGPNewGroup( set, "test group", "", &id );
			if ( IsntPGPError( err ) )
				err	= sAddAllKeysToGroup( set, id, keySet );
			
			if ( IsntPGPError( err ) )
			{
				err	= PGPGetGroupLowestValidity( set, id, 
							keySet, &validity, &numNotFound );
			}
			
			PGPFreeGroupSet( set );
		}

		PGPFreeContext( memoryMgr );
	}
	
	return( err );
}
Пример #2
0
DualErr 
CreateGlobalPGPContext()
{
	DualErr	derr;

	if (!PGPContextRefIsValid(GlobalContext))
		derr =  PGPNewContext(kPGPsdkAPIVersion, &GlobalContext);

	return derr;
}
Пример #3
0
int __cdecl _pgp_init()
{
	if(!pgpErrMsg)
		pgpErrMsg = (LPSTR) LocalAlloc(LPTR,pgpErrMsgLen);

	pgpVer = 0;

 	__try {
#if (PGP_WIN32 < 0x700)
		if (CheckPGPError(PGPsdkInit()) || CheckPGPError(PGPsdkUILibInit()))  return 0;
		PGPNewContext(kPGPsdkAPIVersion, &pgpContext);
#else
		if (CheckPGPError(PGPsdkInit(0)) || CheckPGPError(PGPsdkUILibInit(0))) return 0;
		PGPNewContext(kPGPsdk20APIVersion, &pgpContext);
#endif
	}
	__except ( EXCEPTION_EXECUTE_HANDLER ) {
		return 0;
	}

#if (PGP_WIN32 < 0x700)
	PGPGetSDKVersion(&pgpVer);
	int minor = (pgpVer & 0x000FF000 ) >> 12;
	switch(PGPMajorVersion(pgpVer)) {
	case 2:
		pgpVer = 1<<24 | ((minor+1)<<16) | (PGPRevVersion(pgpVer)<<8);
		break;
	case 3:
		pgpVer = 1<<24 | ((minor+5)<<16) | (PGPRevVersion(pgpVer)<<8);
		break;
	default:
		pgpVer = 1<<24 | (minor<<16) | (PGPRevVersion(pgpVer)<<8);
		break;
	}
#else
	pgpVer = PGPGetPGPsdkVersion();
#endif

	return 1;
}
Пример #4
0
int __cdecl _pgp_init()
{
	if (!pgpErrMsg)
		pgpErrMsg = (LPSTR) LocalAlloc(LPTR,pgpErrMsgLen);

	pgpVer = 0;
	#if defined(_WIN64)
		return 0;
	#else
		__try {
			if (CheckPGPError(PGPsdkInit(0)) || CheckPGPError(PGPsdkUILibInit(0))) return 0;
			PGPNewContext(kPGPsdk20APIVersion, &pgpContext);
		}
		__except ( EXCEPTION_EXECUTE_HANDLER ) {
			return 0;
		}

		pgpVer = PGPGetPGPsdkVersion();
		return 1;
	#endif
}
Пример #5
0
	PGPError
TestGroupsUtil()
{
	PGPContextRef	context;
	PGPError		err	= kPGPError_NoErr;
	
	err	= PGPNewContext( kPGPsdkAPIVersion, &context );
	if ( IsntPGPError( err ) )
	{
		PGPKeySetRef	keySet;
		
		err	= PGPOpenDefaultKeyRings( context, 0, &keySet );
		if ( IsntPGPError( err ) )
		{
			err	= sTestGroupValidity( keySet );
			
			PGPFreeKeySet( keySet );
		}
		PGPFreeContext( context );
	}
	
	pgpAssertNoErr( err );
	return( err );
}
Пример #6
0
BOOL InitPGPsc(HWND hwnd,void **PGPsc,void **PGPtls)
{
	PGPError err;
	PGPContextRef context;
	PGPtlsContextRef tls;
	DWORD OLERetVal;

	err=PGPNewContext( kPGPsdkAPIVersion, &context );

	if( IsPGPError(err) )
	{
		if(err == kPGPError_IncompatibleAPI)
		{
			PGPscMessageBox (hwnd,IDS_PGPERROR,IDS_WRONGSDK,
					MB_OK|MB_ICONSTOP);
		}
		else
		if(err == kPGPError_FeatureNotAvailable)
		{
			PGPscMessageBox (hwnd,IDS_PGPERROR,IDS_EVALEXPIRED,
					MB_OK|MB_ICONSTOP);
		}
		else
			PGPclErrorBox(hwnd,err);

		return FALSE;
	}

	if(IsPGPError(PGPclIsExpired(hwnd)))
		return FALSE;

	err=PGPNewTLSContext (context, &tls);

	if( IsPGPError(err) )
	{
		PGPclErrorBox(hwnd,err);
		return FALSE;
	}

	err=PGPclInitLibrary(context);

	if(err==kPGPError_UserAbort)
		return FALSE;

	if( IsPGPError(err) )
	{
		PGPclErrorBox(hwnd,err);
		return FALSE;
	}

	OLERetVal=OleInitialize (NULL);

	switch(OLERetVal)
	{
		case S_OK:
			// The COM library and additional functionality were 
			// initialized successfully on this apartment. 
			break;

		case S_FALSE:
		{
			// The COM library is already initialized on this 
			// apartment.
			break;
		}

		case OLE_E_WRONGCOMPOBJ:
		{
			MessageBox(hwnd,
				"The versions of COMPOBJ.DLL and OLE2.DLL on\n"
				"your machine are incompatible with each other.",
				"OLE Error",MB_OK);
			return FALSE;
		}

		default:
		{
			MessageBox(hwnd,
				"Error initializing OLE.",
				"OLE Error",MB_OK);
			return FALSE;
		}
	}

	*PGPsc=(void *)context;
	*PGPtls=(void *)tls;

	g_uPurgePassphraseCacheMessage = 
		RegisterWindowMessage (PURGEPASSPHRASECACEHMSG);

	return TRUE;
}
Пример #7
0
int main(int argc,char *argv[])
{
    struct pgpmainBones *mainbPtr = &_pgp_mainBones;
    struct pgpargsBones *argsbPtr;
    struct pgpfileBones *filebPtr;
    struct pgpenvBones *envbPtr;
    PGPContextRef mainContext;
    int errorLvl = 0, status;
    PGPError err = PGPsdkInit();
    pgpAssertNoErr(err);

    err = PGPsdkNetworkLibInit();
    pgpAssertNoErr(err);

    err = PGPNewContext( kPGPsdkAPIVersion, &mainContext );
    pgpAssertNoErr(err);

    err = pgpInitSDKPrefsDir( mainContext );
    pgpAssertNoErr(err);

    initMainBones( mainbPtr, mainContext );

    signonMsg(mainbPtr);

    /* link the context and initialize what used to be the global
       variables. */
    argsbPtr = mainbPtr->argsbPtr;
    filebPtr = mainbPtr->filebPtr;
    envbPtr = mainbPtr->envbPtr;
    err = pgpParseArgs( mainbPtr, argc, argv, &errorLvl);
    /* parse the arguments */
    if(err != 0)
        goto ex;

    if (argsbPtr->keyFlag && argsbPtr->keyChar == '\0') {
        keyUsage(filebPtr,&errorLvl);
        goto ex;
    }

    if (argsbPtr->groupFlag && argsbPtr->groupChar == '\0') {
        groupUsage(filebPtr,&errorLvl);
        goto ex;
    }

    /*
     * Write to stdout if explicitly asked to, or in filter mode and
     * no explicit file name was given.
     */
    mainbPtr->outputStdout = argsbPtr->outputFileName ?
        strcmp(argsbPtr->outputFileName, "-") == 0 : envbPtr->filterMode;

#if 1
    /* At request of Peter Simons, use stderr always. Sounds reasonable. */
    /* JIS: Put this code back in... removing it broke too many things */
    if (!mainbPtr->outputStdout)
        filebPtr->pgpout = stdout;
#endif

#if defined(PGP_UNIX) || defined(VMS)
    umask(077); /* Make files default to private */
#endif

    initSignals(); /* Catch signals */

    /* get our groups...*/
    err = pgpInitializeWorkingGroupSet( mainbPtr );

    if (argsbPtr->keyFlag) {
        status = doKeyOpt( mainbPtr, argsbPtr->keyChar, &errorLvl );
        if (status < 0) {
            userError(filebPtr,&errorLvl);
            goto ex;
        }
        errorLvl=status;
        goto ex;
    }

    if(argsbPtr->groupFlag) {
        status = doGroupOpt( mainbPtr, argsbPtr->groupChar, &errorLvl );
        if( status < 0 ) {
            userError(filebPtr,&errorLvl);
            goto ex;
        }
        errorLvl=status;
        goto ex;
    }

    err = pgpProcessArgs(mainbPtr, &errorLvl);

ex:
    err = pgpFinalizeWorkingGroupSet( mainbPtr );

    pgpTearDown( mainbPtr, &errorLvl );

    exit(errorLvl);
    /*NOTREACHED*/
    return errorLvl;
}
Пример #8
0
int
main(int argc, char *argv)
{
	PGPnetKernelHost *result = 0;
	PGPError err;
	PGPInt32 i = 0;
	PGPikeSA ikeSA[100];
	PGPikeSA *sa = 0, ikeSATemplate;
	PGPnetKernelSA *transportSA = 0;
	PGPnetKernelSA *tunnelSA = 0;
	PGPnetKernelHost *kernelHost = 0;
	PGPnetKernelHost *kernelGateway = 0;
	PGPUInt32 spi = 0;
	PGPByte encryptedPacket[32768];
	PGPByte decryptedPacket[32768];
	PGPnetPacket netPacketSrc, netPacketDest;
	PGPikeDOIParams doiParamsTemplate;
	PNCONFIG pnConfig;
	PGPnetKernelConfig tmpConfig;
	PGPnetPMContext *pContext;

    // Initialize the sdk library
    err = PGPNewContext(kPGPsdkAPIVersion, &g_Context);
    if (IsPGPError(err)) {
        if (err == kPGPError_FeatureNotAvailable) {
			fprintf(stderr, "Fatal Error: This version of the PGP SDK has expired");
            g_Context = 0;
            goto end;
        } else {
            fprintf(stderr, "Fatal Error: Couldn't get a context from the PGP SDK");
            g_Context = 0;
            goto end;
        }
    }

    // read in the PGPnet configuration
    memset(&pnConfig, '\0', sizeof(pnConfig));
    err = PGPnetLoadConfiguration(g_Context, &pnConfig);
    if (IsPGPError(err)) {
        fprintf(stderr, "Fatal Error: Unable to load configuration");
        goto end;
    }

///>>> 04jan99 pbj
	tmpConfig.bPGPnetEnabled = pnConfig.bPGPnetEnabled;
///<<<
	tmpConfig.bAllowUnconfigHost = pnConfig.bAllowUnconfigHost;
	tmpConfig.bAttemptUnconfigHost = pnConfig.bAttemptUnconfigHost;

	pContext = malloc(sizeof(PGPnetPMContext));
	memset(pContext, '\0', sizeof(PGPnetPMContext));

	(void) PMAddConfig(pContext, &tmpConfig);

	for (i = 0; i < pnConfig.uHostCount; i++) {
		result = PMAddHost(pContext, &(pnConfig.pHostList[i]));
	}

	for (i = pnConfig.uHostCount-1; i >= 0; i--) {
		result = PMFindHost(pContext, PGPStorageToUInt32(pnConfig.pHostList[i].ipAddress));
	}

	/*
	typedef struct PGPikeSA
	{
		PGPUInt32				ipAddress;
		PGPUInt32				kbLifeTime;	
		PGPUInt32				secLifeTime;
		PGPTime					birthTime;
		
		PGPikeDOI				doi;		

		PGPUInt16				numTransforms;
		PGPikeDOIParams			transform[kPGPike_MaxTransforms];
	} PGPikeSA;

	typedef struct PGPipsecESPTransform
	{
		PGPipsecESPTransformID		cipher;
		PGPipsecAuthAttribute		authAttr;
		PGPipsecEncapsulation		mode;
	} PGPipsecESPTransform;

	typedef struct PGPipsecDOIParams
	{
		PGPipsecSPI             inSPI;
		PGPipsecSPI             outSPI;
		PGPipsecProtocol        protocol;

		union
		{
	        struct
			{
	            PGPipsecAHTransform     t;
				PGPByte                 inAuthKey[kPGPike_AuthMaximumKeySize];
				PGPByte                 outAuthKey[kPGPike_AuthMaximumKeySize];
			} ah;

			struct
			{
	            PGPipsecESPTransform    t;
				PGPByte                 inESPKey[kPGPike_ESPMaximumKeySize];
				PGPByte                 outESPKey[kPGPike_ESPMaximumKeySize];
				PGPByte                 inAuthKey[kPGPike_AuthMaximumKeySize];
				PGPByte                 outAuthKey[kPGPike_AuthMaximumKeySize];
			} esp;

			struct
			{
	            PGPipsecIPCOMPTransform t;
			} ipcomp;
		} u;
	} PGPipsecDOIParams;

	*/

	memmove(&(doiParamsTemplate.u.ipsec.u.esp.inESPKey),
		"This is an ESP Key", 
		kPGPike_ESPMaximumKeySize);
	memmove(&(doiParamsTemplate.u.ipsec.u.esp.outESPKey),
		"This is an ESP Key", 
		kPGPike_ESPMaximumKeySize);

	memmove(&(doiParamsTemplate.u.ipsec.u.esp.inAuthKey),
		"This is an Auth Key", 
		kPGPike_ESPMaximumKeySize);
	memmove(&(doiParamsTemplate.u.ipsec.u.esp.outAuthKey), 
		"This is an Auth Key", 
		kPGPike_AuthMaximumKeySize);

	doiParamsTemplate.u.ipsec.u.esp.t.cipher = kPGPike_ET_CAST;
	doiParamsTemplate.u.ipsec.u.esp.t.authAttr = kPGPike_AA_HMAC_SHA;
	doiParamsTemplate.u.ipsec.u.esp.t.mode = kPGPike_PM_Transport;
	doiParamsTemplate.u.ipsec.protocol = kPGPike_PR_ESP;

	ikeSATemplate.ipAddress = 0;
	ikeSATemplate.kbLifeTime = 1024;
	ikeSATemplate.secLifeTime = 0;
	ikeSATemplate.birthTime = PGPGetTime();
	ikeSATemplate.doi = kPGPike_DOI_IPSEC;
	ikeSATemplate.numTransforms = 1;

	memmove(&(ikeSATemplate.transform[0]), &doiParamsTemplate, sizeof(PGPikeDOIParams));

	for (i = 0; i < pnConfig.uHostCount; i++) {
		sa = &ikeSA[i];

		memset(sa, '\0', sizeof(sa));
		memmove(sa, &ikeSATemplate, sizeof(PGPikeSA));

		sa->ipAddress = PGPStorageToUInt32(pnConfig.pHostList[i].ipAddress);
		PGPUInt32ToStorage(spi++, sa->transform[0].u.ipsec.inSPI);
		PGPUInt32ToStorage(spi++, sa->transform[0].u.ipsec.outSPI);

		PMAddSA(pContext, (unsigned char*)sa);
	}

	for (i = pnConfig.uHostCount-1; i >= 0; i--) {
		transportSA = NULL;
		tunnelSA = NULL;
		kernelHost = NULL;
		kernelGateway = NULL;

		kernelHost = PMFindHost(pContext, PGPStorageToUInt32(pnConfig.pHostList[i].ipAddress));
		if (kernelHost->childOf >= 0)
			kernelGateway = PMFindHost(pContext, PMParentHostIP(pContext, kernelHost));

		if ((kernelHost->hostType == kPGPnetInsecureHost) ||
			(kernelHost->hostType == kPGPnetSecureGateway))
			kernelHost = NULL;

		if (kernelHost != NULL)
			transportSA = PMFindSA(pContext, kernelHost->ipAddress);

		if (kernelGateway != NULL)
			tunnelSA = PMFindSA(pContext, kernelGateway->ipAddress);

		netPacketSrc.allocatedSize = sizeof(originalPacket);
		netPacketSrc.actualSize = sizeof(originalPacket);
		netPacketSrc.data = originalPacket;

		netPacketDest.allocatedSize = 32768;
		netPacketDest.actualSize = 0;
		netPacketDest.data = encryptedPacket;

		err = PGPnetIPsecApplySA(&netPacketSrc, &netPacketDest, transportSA, tunnelSA, FALSE);
		if (IsPGPError(err)) {
			fprintf(stderr, "Error applying SA to outgoing packet: %d\n", err);
			goto end;
		}

		netPacketSrc.allocatedSize = 32768;
		netPacketSrc.actualSize = netPacketDest.actualSize;
		netPacketSrc.data = encryptedPacket;

		netPacketDest.allocatedSize = 32768;
		netPacketDest.actualSize = 0;
		netPacketDest.data = decryptedPacket;

		err = PGPnetIPsecApplySA(&netPacketSrc, &netPacketDest, transportSA, tunnelSA, TRUE);
		if (IsPGPError(err)) {
			fprintf(stderr, "Error applying SA to incoming packet: %d\n", err);
			goto end;
		}
	}

end:
	free(pContext);
	return 0;
}
Пример #9
0
static VOID
sSetHotKeys (HWND hwnd)
{
	PGPInt32		ids			= 0;
	PGPHotKeys		hotkeys;
	PGPHotKeys*		phks;
	PGPPrefRef		prefref;
	PGPSize			size;
	PGPError		err;
	PGPContextRef	context;

	err = PGPNewContext (kPGPsdkAPIVersion, &context);
	if (IsPGPError (err))
		return;

	err = PGPclOpenClientPrefs (PGPGetContextMemoryMgr (context), &prefref);
	if (IsPGPError (err))
		return;

	memcpy (&hotkeys, &sDefaultHotKeys, sizeof(hotkeys));
	err = PGPGetPrefData (prefref, kPGPPrefHotKeyData, &size, &phks);

	if (IsntPGPError (err))
	{
		if (size == sizeof (hotkeys))
			memcpy (&hotkeys, phks, size);

		PGPDisposePrefData (prefref, phks);
	}

	if (!sSetSingleHotKey (hwnd, kPurgePassphraseCache, 
			hotkeys.hotkeyPurgePassphraseCache))
	{
		hotkeys.hotkeyPurgePassphraseCache &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETPURGEHOTKEY;
		goto done;
	}

	if (!sSetSingleHotKey (hwnd, kEncryptCurrentWindow, 
			hotkeys.hotkeyEncrypt))
	{
		hotkeys.hotkeyEncrypt &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETENCRYPTHOTKEY;
		goto done;
	}

	if (!sSetSingleHotKey (hwnd, kSignCurrentWindow, 
			hotkeys.hotkeySign))
	{
		hotkeys.hotkeySign &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETSIGNHOTKEY;
		goto done;
	}

	if (!sSetSingleHotKey (hwnd, kEncryptSignCurrentWindow, 
			hotkeys.hotkeyEncryptSign))
	{
		hotkeys.hotkeyEncryptSign &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETENCRYPTSIGNHOTKEY;
		goto done;
	}

	if (!sSetSingleHotKey (hwnd, kDecryptCurrentWindow, 
			hotkeys.hotkeyDecrypt))
	{
		hotkeys.hotkeyDecrypt &= ~kPGPHotKeyEnabled;
		ids = IDS_CANNOTSETDECRYPTHOTKEY;
		goto done;
	}

///	if (!sSetSingleHotKey (hwnd, kUnmountPGPDisks, 
///			hotkeys.hotkeyDiskUnmount))
///	{
///		ids = IDS_CANNOTSETUNMOUNTHOTKEY;
///		goto done;
///	}

done:
	if (ids)
	{
		PGPSetPrefData (
				prefref, kPGPPrefHotKeyData, sizeof(hotkeys), &hotkeys);
		PGPclCloseClientPrefs (prefref, TRUE);

		PTMessageBox (hwnd, IDS_CAPTION, ids, MB_ICONEXCLAMATION|MB_OK);

		PGPclPreferences (context, hwnd, PGPCL_HOTKEYPREFS, NULL);
	}
	else
		PGPclCloseClientPrefs (prefref, FALSE);

	PGPFreeContext (context);
}