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

📄 pgptestsymmetriccipher.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
字号:
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.

	$Id: pgpTestSymmetricCipher.c,v 1.2 2002/08/06 20:11:17 dallen Exp $
____________________________________________________________________________*/

#include "pgpSymmetricCipher.h"
#include "pgpErrors.h"
#include "pgpTest.h"



	  
	static PGPUInt32
GetKeySizeForAlgorithm( PGPCipherAlgorithm	algorithm )
{
	PGPUInt32	keySize	= 0;
	
	switch( algorithm )
	{
		default:
			pgpTestDebugMsg( "unknown algorithm" );
			break;
		
		case kPGPCipherAlgorithm_IDEA:
		case kPGPCipherAlgorithm_CAST5:
			keySize	= 128 / 8 ;
			break;
		
		case kPGPCipherAlgorithm_3DES:
			keySize	= 192 / 8 ;
			break;
			
	}
	return( keySize );
}


	static void
TestSymmetricCipherAlg(
	PGPContextRef		context,
	PGPCipherAlgorithm	algorithm )
{
	PGPError						err	= kPGPError_NoErr;
	PGPSymmetricCipherContextRef	symmetricRef	= NULL;
	
	err	= PGPNewSymmetricCipherContext( context, algorithm, &symmetricRef );
	if ( IsntPGPError( err ) )
	{
		PGPSymmetricCipherContextRef	tempRef;
		PGPSize							keySize;
		PGPSize							blockSize;
		PGPByte							key[ 32 ];
		#define kBlockSize		8
		PGPByte							clearText[ kBlockSize ];
		PGPByte							cipherText[ kBlockSize ];
		PGPByte							decryptedText[ kBlockSize ];
		
		pgpTestAssert( GetKeySizeForAlgorithm( algorithm) <= sizeof( key ) );
		
		err	= PGPCopySymmetricCipherContext( symmetricRef, &tempRef );
		pgpTestAssert( IsntPGPError( err ) );
		if ( IsntPGPError( err ) )
		{
			err	= PGPFreeSymmetricCipherContext( tempRef );
			pgpTestAssert( IsntPGPError( err ) );
		}
		
		err	= PGPGetSymmetricCipherSizes( symmetricRef, &keySize, &blockSize );
		pgpTestAssert( IsntPGPError( err ) );
		pgpTestAssert( keySize == GetKeySizeForAlgorithm( algorithm) );
		pgpTestAssert( blockSize == kBlockSize );
		
		/* key shoudld be inited to random value */
		err	= PGPInitSymmetricCipher( symmetricRef, key );
		pgpTestAssert( IsntPGPError( err ) );
		
		err	= PGPSymmetricCipherEncrypt( symmetricRef, clearText, cipherText );
		pgpTestAssert( IsntPGPError( err ) );
		
		err	= PGPSymmetricCipherDecrypt( symmetricRef,
				cipherText, decryptedText );
		pgpTestAssert( IsntPGPError( err ) ||
			err == kPGPError_FeatureNotAvailable );
		err	= kPGPError_NoErr;
		
		err	= PGPFreeSymmetricCipherContext( symmetricRef );
		pgpTestAssert( IsntPGPError( err ) );
	}
	
	pgpTestAssert( IsntPGPError( err ) );
}



	void
TestSymmetricCipher( PGPContextRef context )
{
	PGPError						err	= kPGPError_NoErr;
	PGPUInt32						testIndex;

	(void)err;
#if 0	/* keep; use to test bad params */
	{
	PGPSymmetricCipherContextRef	symmetricRef	= NULL;
	err	= PGPNewSymmetricCipher( NULL,
			kPGPCipherAlgorithm_IDEA, &symmetricRef );
	pgpTestAssert(  err == kPGPError_BadParams );
	
	err	= PGPNewSymmetricCipher( context, kPGPCipherAlgorithm_None, NULL );
	pgpTestAssert(  err == kPGPError_BadParams );
	
	err	= PGPNewSymmetricCipher( context,
			kPGPCipherAlgorithm_None, &symmetricRef );
	pgpTestAssert(  err == kPGPError_BadParams );
	}
#endif

	
	/* create a lot of them */
	#define kNumTests		10
	for( testIndex = 0; testIndex < kNumTests; ++testIndex )
	{
		TestSymmetricCipherAlg( context, kPGPCipherAlgorithm_IDEA );
		TestSymmetricCipherAlg( context, kPGPCipherAlgorithm_3DES );
		TestSymmetricCipherAlg( context, kPGPCipherAlgorithm_CAST5 );
	}
	#undef kNumTests
}


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