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

📄 shatest.c

📁 PGP.Corporation.PGP.SDK.v3.7.2.rar 此前从本站下载的那个缺少几个lib文件
💻 C
字号:
/*____________________________________________________________________________
SHAtest.c

Copyright (C) 2003,2004 PGP Corporation
All rights reserved.

SHAtest.c - This file contains functions which are used to demo
the  SHA Hashing functions It runs a known answer test using vectors from 
the FIPS-180-2 document.

$Id: SHAtest.c 48493 2006-10-12 21:19:56Z vinnie $
____________________________________________________________________________*/
 

#include <string.h>
#include <stdio.h>

#include "pgpEncode.h"
#include "pgpErrors.h"
#include "pgpKeys.h"
#include "pgpPublicKey.h"
#include "pgpHash.h"
#include "pgpUtilities.h"

#include "optest.h"

/*
Run a specific SHA-1 test and compare against known answer. 
*/

 
static PGPError TestSHAkat( 
						PGPContextRef 		context, 
						PGPHashAlgorithm	algor,
						char				*name,
						char				*msg, 
						PGPSize				msgsize, 
						PGPUInt32			passes, 
						const PGPByte		*expected )
{

 	PGPHashContextRef 		hashref  	= kInvalidPGPHashContextRef;
	PGPError				err 		= kPGPError_NoErr;
	PGPSize  				hashSize;
	PGPByte					hashBuf [64];	

	PGPUInt32  	i;

	if(gVerbose_flag)
		OPTESTPrintF("\t%10s  %ld byte %s\n", hash_algor_table(algor) , msgsize * passes , name  );
		
/* create a SHA  hash context */
 	err = PGPNewHashContext( context, algor, &hashref); CKERR;
  
	err = PGPGetHashSize(hashref,  &hashSize);CKERR;
 	
	if(hashSize > sizeof(hashBuf)) RETERR(kPGPError_BufferTooSmall);
 	
/* calculate the hash..  */
 	for (i = 0; i < passes; i++)
	{
		err =  PGPContinueHash( hashref, msg,  msgsize); CKERR;
 	}
	
/* output the hash */
	err = PGPFinalizeHash(hashref, hashBuf);CKERR;
	
/* check against known answer */
 	err = pgpMemoryEqual(hashBuf, expected, hashSize) ? kPGPError_NoErr : kPGPError_SelfTestFailed;
 	
  if( IsPGPError(err))
	{	
		OPTESTPrintF(" %4s %s %s\n", (IsntPGPError(err)?"":"FAIL"), hash_algor_table(algor),  name);
		OPTESTPrintF("   expected:\n");
		dumpLong((PGPByte*)expected, (int)hashSize);
		OPTESTPrintF("   calculated:\n");
		dumpLong(hashBuf, (int)hashSize);
		OPTESTPrintF("\n");
	}
 
/* no reason to do this other than testing */
	PGPResetHash(hashref);  
 
done:
 	if( PGPHashContextRefIsValid( hashref ) )
			PGPFreeHashContext(hashref);
 
	return err;
	
}
  
 
 	
/*
  Run SHA-1 known answer self test 
*/

PGPError TestSHA(	PGPContextRef context)
{
	PGPError		err 		= kPGPError_NoErr;
	PGPError		err1 	= kPGPError_NoErr;
 	unsigned int i;
	
/* Test vectors, first line from each FIPS-180 SHA-1 known answer test */
	typedef struct  {
			PGPHashAlgorithm	algor;
			char				*name;
			char				*msg;
			int					passes;
			PGPByte*			kat;
		} katvector;
	
	katvector kat_vector_array[] = 
	{
		{
			kPGPHashAlgorithm_SHA,
			"One-Block Message",
			"abc",
			1,
			(PGPByte*)"\xA9\x99\x3E\x36\x47\x06\x81\x6A\xBA\x3E\x25\x71\x78\x50\xC2\x6C"
			"\x9C\xD0\xD8\x9D"
		},
 		{
			kPGPHashAlgorithm_SHA,
			"Multi-Block Message",
			"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
			1,
			(PGPByte*)"\x84\x98\x3E\x44\x1C\x3B\xD2\x6E\xBA\xAE\x4A\xA1\xF9\x51\x29\xE5"
			"\xE5\x46\x70\xF1"
		},
 		{
			kPGPHashAlgorithm_SHA,
			"Long Message",
			"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
			15625,
			(PGPByte*)"\x34\xAA\x97\x3C\xD4\xC4\xDA\xA4\xF6\x1E\xEB\x2B\xDB\xAD\x27\x31"
			"\x65\x34\x01\x6F"
		},
		{
			kPGPHashAlgorithm_SHA256,
			"One-Block Message",
			"abc",
			1,
			(PGPByte*)"\xBA\x78\x16\xBF\x8F\x01\xCF\xEA\x41\x41\x40\xDE\x5D\xAE\x22\x23"
			"\xB0\x03\x61\xA3\x96\x17\x7A\x9C\xB4\x10\xFF\x61\xF2\x00\x15\xAD"
		},
		
		{
			kPGPHashAlgorithm_SHA256,
			"Multi-Block Message",
			"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
			1,
			(PGPByte*)"\x24\x8D\x6A\x61\xD2\x06\x38\xB8\xE5\xC0\x26\x93\x0C\x3E\x60\x39"
			"\xA3\x3C\xE4\x59\x64\xFF\x21\x67\xF6\xEC\xED\xD4\x19\xDB\x06\xC1"
		},
 		{
			kPGPHashAlgorithm_SHA256,
			"Long Message",
			"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
			15625,
			(PGPByte*)"\xCD\xC7\x6E\x5C\x99\x14\xFB\x92\x81\xA1\xC7\xE2\x84\xD7\x3E\x67"
			"\xF1\x80\x9A\x48\xA4\x97\x20\x0E\x04\x6D\x39\xCC\xC7\x11\x2C\xD0"
		},
 		{
			kPGPHashAlgorithm_SHA384,
			"One-Block Message",
			"abc",
			1,
			(PGPByte*)"\xCB\x00\x75\x3F\x45\xA3\x5E\x8B\xB5\xA0\x3D\x69\x9A\xC6\x50\x07"
			"\x27\x2C\x32\xAB\x0E\xDE\xD1\x63\x1A\x8B\x60\x5A\x43\xFF\x5B\xED"
			"\x80\x86\x07\x2B\xA1\xE7\xCC\x23\x58\xBA\xEC\xA1\x34\xC8\x25\xA7"
		},
		{
			kPGPHashAlgorithm_SHA384,
			"Multi-Block Message",
			"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
					"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
			1,
			(PGPByte*)"\x09\x33\x0C\x33\xF7\x11\x47\xE8\x3D\x19\x2F\xC7\x82\xCD\x1B\x47"
			"\x53\x11\x1B\x17\x3B\x3B\x05\xD2\x2F\xA0\x80\x86\xE3\xB0\xF7\x12"
			"\xFC\xC7\xC7\x1A\x55\x7E\x2D\xB9\x66\xC3\xE9\xFA\x91\x74\x60\x39"
		},
			{
			kPGPHashAlgorithm_SHA384,
			"Long Message",
			"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
			15625,
			(PGPByte*)"\x9D\x0E\x18\x09\x71\x64\x74\xCB\x08\x6E\x83\x4E\x31\x0A\x4A\x1C"
			"\xED\x14\x9E\x9C\x00\xF2\x48\x52\x79\x72\xCE\xC5\x70\x4C\x2A\x5B"
			"\x07\xB8\xB3\xDC\x38\xEC\xC4\xEB\xAE\x97\xDD\xD8\x7F\x3D\x89\x85"
		},
		{
			kPGPHashAlgorithm_SHA512,
			"One-Block Message",
			"abc",
			1,
			(PGPByte*)"\xDD\xAF\x35\xA1\x93\x61\x7A\xBA\xCC\x41\x73\x49\xAE\x20\x41\x31"
			"\x12\xE6\xFA\x4E\x89\xA9\x7E\xA2\x0A\x9E\xEE\xE6\x4B\x55\xD3\x9A"
			"\x21\x92\x99\x2A\x27\x4F\xC1\xA8\x36\xBA\x3C\x23\xA3\xFE\xEB\xBD"
			"\x45\x4D\x44\x23\x64\x3C\xE8\x0E\x2A\x9A\xC9\x4F\xA5\x4C\xA4\x9F"
		},
		{
			kPGPHashAlgorithm_SHA512,
			"Multi-Block Message",
			"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
					"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
			1,
			(PGPByte*)"\x8E\x95\x9B\x75\xDA\xE3\x13\xDA\x8C\xF4\xF7\x28\x14\xFC\x14\x3F"
			"\x8F\x77\x79\xC6\xEB\x9F\x7F\xA1\x72\x99\xAE\xAD\xB6\x88\x90\x18"
			"\x50\x1D\x28\x9E\x49\x00\xF7\xE4\x33\x1B\x99\xDE\xC4\xB5\x43\x3A"
			"\xC7\xD3\x29\xEE\xB6\xDD\x26\x54\x5E\x96\xE5\x5B\x87\x4B\xE9\x09"
		},
		{
			kPGPHashAlgorithm_SHA512,
			"Long Message",
			"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
			15625,
			(PGPByte*)"\xE7\x18\x48\x3D\x0C\xE7\x69\x64\x4E\x2E\x42\xC7\xBC\x15\xB4\x63"
			"\x8E\x1F\x98\xB1\x3B\x20\x44\x28\x56\x32\xA8\x03\xAF\xA9\x73\xEB"
			"\xDE\x0F\xF2\x44\x87\x7E\xA6\x0A\x4C\xB0\x43\x2C\xE5\x77\xC3\x1B"
			"\xEB\x00\x9C\x5C\x2C\x49\xAA\x2E\x4E\xAD\xB2\x17\xAD\x8C\xC0\x9B"
		},
	};
	
 
/* run test array */

	for (i = 0; i < sizeof(kat_vector_array)/ sizeof(katvector) ; i++)
	{
		err1 = TestSHAkat(context, 
					kat_vector_array[i].algor,
					kat_vector_array[i].name,
					kat_vector_array[i].msg,
					strlen( (const char *) kat_vector_array[i].msg), 
					kat_vector_array[i].passes,
					kat_vector_array[i].kat ); MARK_ERR(err, err1);;
 	
	}
    	
 	return( err );
 }

⌨️ 快捷键说明

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