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

📄 fipstest.cpp

📁 lots Elliptic curve cryptography codes. Use Visual c++ to compile
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// fipstest.cpp - written and placed in the public domain by Wei Dai#include "pch.h"#ifndef CRYPTOPP_IMPORTS#define CRYPTOPP_DEFAULT_NO_DLL#include "dll.h"#ifdef CRYPTOPP_WIN32_AVAILABLE#define _WIN32_WINNT 0x0400#include <windows.h>#if defined(_MSC_VER) && _MSC_VER >= 1400#ifdef _M_IX86#define _CRT_DEBUGGER_HOOK _crt_debugger_hook#else#define _CRT_DEBUGGER_HOOK __crt_debugger_hook#endifextern "C" {_CRTIMP void __cdecl _CRT_DEBUGGER_HOOK(int);}#endif#endif#include <iostream>NAMESPACE_BEGIN(CryptoPP)extern PowerUpSelfTestStatus g_powerUpSelfTestStatus;SecByteBlock g_actualMac;unsigned long g_macFileLocation = 0;// use a random dummy string here, to be searched/replaced later with the real MACstatic const byte s_moduleMac[CryptoPP::HMAC<CryptoPP::SHA1>::DIGESTSIZE] = CRYPTOPP_DUMMY_DLL_MAC;CRYPTOPP_COMPILE_ASSERT(sizeof(s_moduleMac) == CryptoPP::SHA1::DIGESTSIZE);#ifdef CRYPTOPP_WIN32_AVAILABLEstatic HMODULE s_hModule = NULL;#endifconst byte * CRYPTOPP_API GetActualMacAndLocation(unsigned int &macSize, unsigned int &fileLocation){	macSize = (unsigned int)g_actualMac.size();	fileLocation = g_macFileLocation;	return g_actualMac;}void KnownAnswerTest(RandomNumberGenerator &rng, const char *output){	EqualityComparisonFilter comparison;	RandomNumberStore(rng, strlen(output)/2).TransferAllTo(comparison, "0");	StringSource(output, true, new HexDecoder(new ChannelSwitch(comparison, "1")));	comparison.ChannelMessageSeriesEnd("0");	comparison.ChannelMessageSeriesEnd("1");}template <class CIPHER>void X917RNG_KnownAnswerTest(	const char *key, 	const char *seed, 	const char *deterministicTimeVector,	const char *output,	CIPHER *dummy = NULL){#ifdef OS_RNG_AVAILABLE	std::string decodedKey, decodedSeed, decodedDeterministicTimeVector;	StringSource(key, true, new HexDecoder(new StringSink(decodedKey)));	StringSource(seed, true, new HexDecoder(new StringSink(decodedSeed)));	StringSource(deterministicTimeVector, true, new HexDecoder(new StringSink(decodedDeterministicTimeVector)));	AutoSeededX917RNG<CIPHER> rng;	rng.Reseed((const byte *)decodedKey.data(), decodedKey.size(), (const byte *)decodedSeed.data(), (const byte *)decodedDeterministicTimeVector.data());	KnownAnswerTest(rng, output);#else	throw 0;#endif}void KnownAnswerTest(StreamTransformation &encryption, StreamTransformation &decryption, const char *plaintext, const char *ciphertext){	EqualityComparisonFilter comparison;	StringSource(plaintext, true, new HexDecoder(new StreamTransformationFilter(encryption, new ChannelSwitch(comparison, "0"), StreamTransformationFilter::NO_PADDING)));	StringSource(ciphertext, true, new HexDecoder(new ChannelSwitch(comparison, "1")));	StringSource(ciphertext, true, new HexDecoder(new StreamTransformationFilter(decryption, new ChannelSwitch(comparison, "0"), StreamTransformationFilter::NO_PADDING)));	StringSource(plaintext, true, new HexDecoder(new ChannelSwitch(comparison, "1")));	comparison.ChannelMessageSeriesEnd("0");	comparison.ChannelMessageSeriesEnd("1");}template <class CIPHER>void SymmetricEncryptionKnownAnswerTest(	const char *key, 	const char *hexIV, 	const char *plaintext, 	const char *ecb,	const char *cbc,	const char *cfb,	const char *ofb,	const char *ctr,	CIPHER *dummy = NULL){	std::string decodedKey;	StringSource(key, true, new HexDecoder(new StringSink(decodedKey)));	typename CIPHER::Encryption encryption((const byte *)decodedKey.data(), decodedKey.size());	typename CIPHER::Decryption decryption((const byte *)decodedKey.data(), decodedKey.size());	SecByteBlock iv(encryption.BlockSize());	StringSource(hexIV, true, new HexDecoder(new ArraySink(iv, iv.size())));	if (ecb)		KnownAnswerTest(ECB_Mode_ExternalCipher::Encryption(encryption).Ref(), ECB_Mode_ExternalCipher::Decryption(decryption).Ref(), plaintext, ecb);	if (cbc)		KnownAnswerTest(CBC_Mode_ExternalCipher::Encryption(encryption, iv).Ref(), CBC_Mode_ExternalCipher::Decryption(decryption, iv).Ref(), plaintext, cbc);	if (cfb)		KnownAnswerTest(CFB_Mode_ExternalCipher::Encryption(encryption, iv).Ref(), CFB_Mode_ExternalCipher::Decryption(encryption, iv).Ref(), plaintext, cfb);	if (ofb)		KnownAnswerTest(OFB_Mode_ExternalCipher::Encryption(encryption, iv).Ref(), OFB_Mode_ExternalCipher::Decryption(encryption, iv).Ref(), plaintext, ofb);	if (ctr)		KnownAnswerTest(CTR_Mode_ExternalCipher::Encryption(encryption, iv).Ref(), CTR_Mode_ExternalCipher::Decryption(encryption, iv).Ref(), plaintext, ctr);}void KnownAnswerTest(HashTransformation &hash, const char *message, const char *digest){	EqualityComparisonFilter comparison;	StringSource(digest, true, new HexDecoder(new ChannelSwitch(comparison, "1")));	StringSource(message, true, new HashFilter(hash, new ChannelSwitch(comparison, "0")));	comparison.ChannelMessageSeriesEnd("0");	comparison.ChannelMessageSeriesEnd("1");}template <class HASH>void SecureHashKnownAnswerTest(const char *message, const char *digest, HASH *dummy = NULL){	HASH hash;	KnownAnswerTest(hash, message, digest);}template <class MAC>void MAC_KnownAnswerTest(const char *key, const char *message, const char *digest, MAC *dummy = NULL){	std::string decodedKey;	StringSource(key, true, new HexDecoder(new StringSink(decodedKey)));	MAC mac((const byte *)decodedKey.data(), decodedKey.size());	KnownAnswerTest(mac, message, digest);}template <class SCHEME>void SignatureKnownAnswerTest(const char *key, const char *message, const char *signature, SCHEME *dummy = NULL){#ifdef OS_RNG_AVAILABLE	DefaultAutoSeededRNG rng;#else	RandomNumberGenerator &rng = NullRNG();#endif	typename SCHEME::Signer signer(StringSource(key, true, new HexDecoder).Ref());	typename SCHEME::Verifier verifier(signer);	EqualityComparisonFilter comparison;	StringSource(message, true, new SignerFilter(rng, signer, new ChannelSwitch(comparison, "0")));	StringSource(signature, true, new HexDecoder(new ChannelSwitch(comparison, "1")));	comparison.ChannelMessageSeriesEnd("0");	comparison.ChannelMessageSeriesEnd("1");	VerifierFilter verifierFilter(verifier, NULL, VerifierFilter::SIGNATURE_AT_BEGIN | VerifierFilter::THROW_EXCEPTION);	StringSource(signature, true, new HexDecoder(new Redirector(verifierFilter, Redirector::DATA_ONLY)));	StringSource(message, true, new Redirector(verifierFilter));}void EncryptionPairwiseConsistencyTest(const PK_Encryptor &encryptor, const PK_Decryptor &decryptor){	try	{#ifdef OS_RNG_AVAILABLE		DefaultAutoSeededRNG rng;#else		RandomNumberGenerator &rng = NullRNG();#endif		const char *testMessage ="test message";		std::string ciphertext, decrypted;		StringSource(			testMessage, 			true, 			new PK_EncryptorFilter(				rng, 				encryptor, 				new StringSink(ciphertext)));		if (ciphertext == testMessage)			throw 0;		StringSource(			ciphertext, 			true, 			new PK_DecryptorFilter(				rng, 				decryptor, 				new StringSink(decrypted)));		if (decrypted != testMessage)			throw 0;	}	catch (...)	{		throw SelfTestFailure(encryptor.AlgorithmName() + ": pairwise consistency test failed");	}}void SignaturePairwiseConsistencyTest(const PK_Signer &signer, const PK_Verifier &verifier){	try	{#ifdef OS_RNG_AVAILABLE		DefaultAutoSeededRNG rng;#else		RandomNumberGenerator &rng = NullRNG();#endif		StringSource(			"test message", 			true, 			new SignerFilter(				rng, 				signer, 				new VerifierFilter(verifier, NULL, VerifierFilter::THROW_EXCEPTION),				true));	}	catch (...)	{		throw SelfTestFailure(signer.AlgorithmName() + ": pairwise consistency test failed");	}}template <class SCHEME>void SignaturePairwiseConsistencyTest(const char *key, SCHEME *dummy = NULL){	typename SCHEME::Signer signer(StringSource(key, true, new HexDecoder).Ref());	typename SCHEME::Verifier verifier(signer);	SignaturePairwiseConsistencyTest(signer, verifier);}MessageAuthenticationCode * NewIntegrityCheckingMAC(){	byte key[] = {0x47, 0x1E, 0x33, 0x96, 0x65, 0xB1, 0x6A, 0xED, 0x0B, 0xF8, 0x6B, 0xFD, 0x01, 0x65, 0x05, 0xCC};	return new HMAC<SHA1>(key, sizeof(key));}bool IntegrityCheckModule(const char *moduleFilename, const byte *expectedModuleMac, SecByteBlock *pActualMac, unsigned long *pMacFileLocation){	std::auto_ptr<MessageAuthenticationCode> mac(NewIntegrityCheckingMAC());	unsigned int macSize = mac->DigestSize();	SecByteBlock tempMac;	SecByteBlock &actualMac = pActualMac ? *pActualMac : tempMac;	actualMac.resize(macSize);	unsigned long tempLocation;	unsigned long &macFileLocation = pMacFileLocation ? *pMacFileLocation : tempLocation;	macFileLocation = 0;	MeterFilter verifier(new HashFilter(*mac, new ArraySink(actualMac, actualMac.size())));//	MeterFilter verifier(new FileSink("c:\\dt.tmp"));	std::ifstream moduleStream;#ifdef CRYPTOPP_WIN32_AVAILABLE	HMODULE h;	{	char moduleFilenameBuf[MAX_PATH] = "";	if (moduleFilename == NULL)	{#if (_MSC_VER >= 1400 && !defined(_STLPORT_VERSION))	// ifstream doesn't support wide filename on other compilers		wchar_t wideModuleFilename[MAX_PATH];		if (GetModuleFileNameW(s_hModule, wideModuleFilename, MAX_PATH) > 0)		{			moduleStream.open(wideModuleFilename, std::ios::in | std::ios::binary);			h = GetModuleHandleW(wideModuleFilename);		}		else#endif		{			GetModuleFileNameA(s_hModule, moduleFilenameBuf, MAX_PATH);			moduleFilename = moduleFilenameBuf;		}	}#endif	if (moduleFilename != NULL)	{			moduleStream.open(moduleFilename, std::ios::in | std::ios::binary);#ifdef CRYPTOPP_WIN32_AVAILABLE			h = GetModuleHandleA(moduleFilename);			moduleFilename = NULL;	}#endif	}	if (!moduleStream)	{

⌨️ 快捷键说明

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