pgpfips.c

来自「可以实现对邮件的加密解密以及签名」· C语言 代码 · 共 151 行

C
151
字号
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.

	$Id: pgpFIPS.c,v 1.6 2002/08/06 20:11:14 dallen Exp $
____________________________________________________________________________*/
#include "pgpDSAKey.h"
#include "pgpErrors.h"
#include "pgpFIPSPriv.h"
#include "pgpSDKPriv.h"
#include "pgpSymmetricCipherPriv.h"
#include "pgpUtilities.h"
#include "pgpDebug.h"

static PGPError		sSDKError	 			= kPGPError_NoErr;
static PGPBoolean	sHaveRunAllSelfTests 	= FALSE;
static PGPBoolean	sFIPSModeEnabled 		= FALSE;

	PGPError
PGPGetSDKErrorState(void)
{
	return( sSDKError );
}

	PGPError
PGPResetSDKErrorState(void)
{
	if( pgpFIPSModeEnabled() )
	{
		PGPBoolean	runTests = IsPGPError( sSDKError );

		sSDKError = kPGPError_NoErr;
		
		if( runTests && pgpFIPSModeEnabled() )
		{
			PGPRunAllSDKSelfTests();
		}
	}
	
	return( sSDKError );
}

	void
pgpSetSDKErrorState(PGPError err)
{
	if( pgpFIPSModeEnabled() )
	{
		if( IsntPGPError( sSDKError ) )
			sSDKError = err;
	}
}

	PGPBoolean
pgpHaveRunAllSelfTests(void)
{
	return sHaveRunAllSelfTests;
}

	PGPError
PGPRunSDKSelfTest(PGPsdkSelfTest whichTest)
{
	PGPError	err = kPGPError_NoErr;
	
	if( ! pgpFIPSModeEnabled() )
	{
		pgpDebugMsg( "PGPRunSDKSelfTest: Cannot run self test "
						"without FIPS mode enabled" );
		return kPGPError_BadParams;
	}
	
	pgpEnterPGPErrorFunction();
	
	switch( whichTest )
	{
        /* FIPS140 statetrans PGPRunAllSDKSelfTests.1 */
		case kPGPsdkSelfTest_3DES:
			err = pgpTest3DES();
			break;
	
        /* FIPS140 statetrans PGPRunAllSDKSelfTests.3 */
		case kPGPsdkSelfTest_DSA:
			err = pgpTestDSA();
			break;
			
        /* FIPS140 statetrans PGPRunAllSDKSelfTests.5 */
		case kPGPsdkSelfTest_Integrity:
			err = pgpTestSDKIntegrity();
			break;
			
		default:
			pgpDebugMsg( "PGPRunSDKSelfTest: Invalid test selector" );
			err = kPGPError_BadParams;
			break;
	}
	
	if( IsPGPError( err ) )
		pgpSetSDKErrorState( err );
		
	return( err );
}

    PGPError
PGPRunAllSDKSelfTests(void)
{
	PGPsdkSelfTest	whichTest;
	PGPError		err = kPGPError_NoErr;
	
	/*
	** Set sHaveRunAllSelfTests here so pgpEnterPGPErrorFunction() will not
	** return an error is the self tests have not been run. Note that
	** pgpEnterPGPErrorFunction could still return an error if the SDK is
	** in an error state.
	*/
	
	if( ! pgpFIPSModeEnabled() )
	{
		pgpDebugMsg( "PGPRunAllSDKSelfTests: Cannot run self test "
						"without FIPS mode enabled" );
		return kPGPError_BadParams;
	}

	sHaveRunAllSelfTests = TRUE;
	
	pgpEnterPGPErrorFunction();

	for( whichTest = kPGPsdkSelfTest_FirstTest;
			whichTest <= kPGPsdkSelfTest_LastTest;
				++whichTest )
	{
		err = PGPRunSDKSelfTest( whichTest );
		if( IsPGPError( err ) )
			break;
	}
	
	return( err );
}

	PGPError
PGPEnableFIPSMode(void)
{
	sFIPSModeEnabled = TRUE;
	
	return kPGPError_NoErr;
}

	PGPBoolean
pgpFIPSModeEnabled(void)
{
	return sFIPSModeEnabled;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?