Added CRYTPOPP_ASSERT to cryptest program. The mods also show how to install a debug trap handler such that if CRYPTOPP_ASSERT fires, the program continues
parent
809a3cbb74
commit
929967a042
67
test.cpp
67
test.cpp
|
|
@ -22,6 +22,9 @@
|
||||||
#include "validate.h"
|
#include "validate.h"
|
||||||
#include "bench.h"
|
#include "bench.h"
|
||||||
|
|
||||||
|
// CRYPTOPP_ASSERT
|
||||||
|
#include "trap.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
|
|
@ -56,6 +59,10 @@ USING_NAMESPACE(std)
|
||||||
|
|
||||||
const int MAX_PHRASE_LENGTH=250;
|
const int MAX_PHRASE_LENGTH=250;
|
||||||
|
|
||||||
|
#if !defined(NDEBUG) && defined(CRYPTOPP_UNIX_AVAILABLE)
|
||||||
|
# include <signal.h> // SIGTRAP handler
|
||||||
|
#endif
|
||||||
|
|
||||||
void RegisterFactories();
|
void RegisterFactories();
|
||||||
|
|
||||||
void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed);
|
void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed);
|
||||||
|
|
@ -96,15 +103,61 @@ void FIPS140_GenerateRandomFiles();
|
||||||
|
|
||||||
bool Validate(int, bool, const char *);
|
bool Validate(int, bool, const char *);
|
||||||
|
|
||||||
int (*AdhocTest)(int argc, char *argv[]) = NULL;
|
#if !defined(NDEBUG) && defined(CRYPTOPP_UNIX_AVAILABLE)
|
||||||
|
// Add a SIGTRAP handler for *nix, used by CRYPTOPP_ASSERT.
|
||||||
|
struct DebugTrapHandler
|
||||||
|
{
|
||||||
|
DebugTrapHandler()
|
||||||
|
{
|
||||||
|
// http://pubs.opengroup.org/onlinepubs/007908799/xsh/sigaction.html
|
||||||
|
struct sigaction old_handler, new_handler;
|
||||||
|
memset(&old_handler, 0x00, sizeof(old_handler));
|
||||||
|
memset(&new_handler, 0x00, sizeof(new_handler));
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
ret = sigaction (SIGTRAP, NULL, &old_handler);
|
||||||
|
if (ret != 0) break; // Failed
|
||||||
|
|
||||||
|
// Don't step on another's handler
|
||||||
|
if (old_handler.sa_handler != NULL) break;
|
||||||
|
|
||||||
|
// Set up the structure to specify the null action.
|
||||||
|
new_handler.sa_handler = &DebugTrapHandler::NullHandler;
|
||||||
|
new_handler.sa_flags = 0;
|
||||||
|
|
||||||
|
ret = sigemptyset (&new_handler.sa_mask);
|
||||||
|
if (ret != 0) break; // Failed
|
||||||
|
|
||||||
|
// Install it
|
||||||
|
ret = sigaction (SIGTRAP, &new_handler, NULL);
|
||||||
|
if (ret != 0) break; // Failed
|
||||||
|
|
||||||
|
} while(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void NullHandler(int /*unused*/) { }
|
||||||
|
};
|
||||||
|
|
||||||
|
#if __GNUC__
|
||||||
|
// Specify a relatively low priority to make sure we run before other CTORs
|
||||||
|
// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html#C_002b_002b-Attributes
|
||||||
|
static const DebugTrapHandler g_dummyHandler __attribute__ ((init_priority (110)));
|
||||||
|
#else
|
||||||
|
static const DebugTrapHandler g_dummyHandler;
|
||||||
|
#endif // __GNUC__
|
||||||
|
#endif // CRYPTOPP_UNIX_AVAILABLE and not NDEBUG
|
||||||
|
|
||||||
static OFB_Mode<AES>::Encryption s_globalRNG;
|
static OFB_Mode<AES>::Encryption s_globalRNG;
|
||||||
|
|
||||||
RandomNumberGenerator & GlobalRNG()
|
RandomNumberGenerator & GlobalRNG()
|
||||||
{
|
{
|
||||||
return s_globalRNG;
|
return s_globalRNG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int (*AdhocTest)(int argc, char *argv[]) = NULL;
|
||||||
|
|
||||||
int CRYPTOPP_API main(int argc, char *argv[])
|
int CRYPTOPP_API main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
#ifdef _CRTDBG_LEAK_CHECK_DF
|
#ifdef _CRTDBG_LEAK_CHECK_DF
|
||||||
|
|
@ -238,7 +291,7 @@ int CRYPTOPP_API main(int argc, char *argv[])
|
||||||
|
|
||||||
// compute MAC
|
// compute MAC
|
||||||
member_ptr<MessageAuthenticationCode> pMac(NewIntegrityCheckingMAC());
|
member_ptr<MessageAuthenticationCode> pMac(NewIntegrityCheckingMAC());
|
||||||
assert(pMac->DigestSize() == sizeof(mac));
|
CRYPTOPP_ASSERT(pMac->DigestSize() == sizeof(mac));
|
||||||
MeterFilter f(new HashFilter(*pMac, new ArraySink(mac, sizeof(mac))));
|
MeterFilter f(new HashFilter(*pMac, new ArraySink(mac, sizeof(mac))));
|
||||||
f.AddRangeToSkip(0, checksumPos, 4);
|
f.AddRangeToSkip(0, checksumPos, 4);
|
||||||
f.AddRangeToSkip(0, certificateTableDirectoryPos, 8);
|
f.AddRangeToSkip(0, certificateTableDirectoryPos, 8);
|
||||||
|
|
@ -545,7 +598,7 @@ void DecryptFile(const char *in, const char *out, const char *passPhrase)
|
||||||
|
|
||||||
void SecretShareFile(int threshold, int nShares, const char *filename, const char *seed)
|
void SecretShareFile(int threshold, int nShares, const char *filename, const char *seed)
|
||||||
{
|
{
|
||||||
assert(nShares<=1000);
|
CRYPTOPP_ASSERT(nShares<=1000);
|
||||||
|
|
||||||
RandomPool rng;
|
RandomPool rng;
|
||||||
rng.IncorporateEntropy((byte *)seed, strlen(seed));
|
rng.IncorporateEntropy((byte *)seed, strlen(seed));
|
||||||
|
|
@ -573,7 +626,7 @@ void SecretShareFile(int threshold, int nShares, const char *filename, const cha
|
||||||
|
|
||||||
void SecretRecoverFile(int threshold, const char *outFilename, char *const *inFilenames)
|
void SecretRecoverFile(int threshold, const char *outFilename, char *const *inFilenames)
|
||||||
{
|
{
|
||||||
assert(threshold<=1000);
|
CRYPTOPP_ASSERT(threshold<=1000);
|
||||||
|
|
||||||
SecretRecovery recovery(threshold, new FileSink(outFilename));
|
SecretRecovery recovery(threshold, new FileSink(outFilename));
|
||||||
|
|
||||||
|
|
@ -598,7 +651,7 @@ void SecretRecoverFile(int threshold, const char *outFilename, char *const *inFi
|
||||||
|
|
||||||
void InformationDisperseFile(int threshold, int nShares, const char *filename)
|
void InformationDisperseFile(int threshold, int nShares, const char *filename)
|
||||||
{
|
{
|
||||||
assert(nShares<=1000);
|
CRYPTOPP_ASSERT(nShares<=1000);
|
||||||
|
|
||||||
ChannelSwitch *channelSwitch;
|
ChannelSwitch *channelSwitch;
|
||||||
FileSource source(filename, false, new InformationDispersal(threshold, nShares, channelSwitch = new ChannelSwitch));
|
FileSource source(filename, false, new InformationDispersal(threshold, nShares, channelSwitch = new ChannelSwitch));
|
||||||
|
|
@ -623,7 +676,7 @@ void InformationDisperseFile(int threshold, int nShares, const char *filename)
|
||||||
|
|
||||||
void InformationRecoverFile(int threshold, const char *outFilename, char *const *inFilenames)
|
void InformationRecoverFile(int threshold, const char *outFilename, char *const *inFilenames)
|
||||||
{
|
{
|
||||||
assert(threshold<=1000);
|
CRYPTOPP_ASSERT(threshold<=1000);
|
||||||
|
|
||||||
InformationRecovery recovery(threshold, new FileSink(outFilename));
|
InformationRecovery recovery(threshold, new FileSink(outFilename));
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue