re-structure tests/common.c

This commit is contained in:
Steffen Jaeckel 2017-06-08 11:51:36 +02:00
parent 4ceb82bf54
commit da3b61c7b6
5 changed files with 223 additions and 394 deletions

View File

@ -62,394 +62,3 @@ void print_hex(const char* what, const void* v, const unsigned long l)
} }
prng_state yarrow_prng; prng_state yarrow_prng;
/*
* unregister ciphers, hashes & prngs
*/
static void _unregister_all(void)
{
#ifdef LTC_RIJNDAEL
unregister_cipher(&aes_desc);
#endif
#ifdef LTC_BLOWFISH
unregister_cipher(&blowfish_desc);
#endif
#ifdef LTC_XTEA
unregister_cipher(&xtea_desc);
#endif
#ifdef LTC_RC5
unregister_cipher(&rc5_desc);
#endif
#ifdef LTC_RC6
unregister_cipher(&rc6_desc);
#endif
#ifdef LTC_SAFERP
unregister_cipher(&saferp_desc);
#endif
#ifdef LTC_TWOFISH
unregister_cipher(&twofish_desc);
#endif
#ifdef LTC_SAFER
unregister_cipher(&safer_k64_desc);
unregister_cipher(&safer_sk64_desc);
unregister_cipher(&safer_k128_desc);
unregister_cipher(&safer_sk128_desc);
#endif
#ifdef LTC_RC2
unregister_cipher(&rc2_desc);
#endif
#ifdef LTC_DES
unregister_cipher(&des_desc);
unregister_cipher(&des3_desc);
#endif
#ifdef LTC_CAST5
unregister_cipher(&cast5_desc);
#endif
#ifdef LTC_NOEKEON
unregister_cipher(&noekeon_desc);
#endif
#ifdef LTC_SKIPJACK
unregister_cipher(&skipjack_desc);
#endif
#ifdef LTC_KHAZAD
unregister_cipher(&khazad_desc);
#endif
#ifdef LTC_ANUBIS
unregister_cipher(&anubis_desc);
#endif
#ifdef LTC_KSEED
unregister_cipher(&kseed_desc);
#endif
#ifdef LTC_KASUMI
unregister_cipher(&kasumi_desc);
#endif
#ifdef LTC_MULTI2
unregister_cipher(&multi2_desc);
#endif
#ifdef LTC_CAMELLIA
unregister_cipher(&camellia_desc);
#endif
#ifdef LTC_TIGER
unregister_hash(&tiger_desc);
#endif
#ifdef LTC_MD2
unregister_hash(&md2_desc);
#endif
#ifdef LTC_MD4
unregister_hash(&md4_desc);
#endif
#ifdef LTC_MD5
unregister_hash(&md5_desc);
#endif
#ifdef LTC_SHA1
unregister_hash(&sha1_desc);
#endif
#ifdef LTC_SHA224
unregister_hash(&sha224_desc);
#endif
#ifdef LTC_SHA256
unregister_hash(&sha256_desc);
#endif
#ifdef LTC_SHA384
unregister_hash(&sha384_desc);
#endif
#ifdef LTC_SHA512
unregister_hash(&sha512_desc);
#endif
#ifdef LTC_SHA512_224
unregister_hash(&sha512_224_desc);
#endif
#ifdef LTC_SHA512_256
unregister_hash(&sha512_256_desc);
#endif
#ifdef LTC_SHA3
unregister_hash(&sha3_224_desc);
unregister_hash(&sha3_256_desc);
unregister_hash(&sha3_384_desc);
unregister_hash(&sha3_512_desc);
#endif
#ifdef LTC_RIPEMD128
unregister_hash(&rmd128_desc);
#endif
#ifdef LTC_RIPEMD160
unregister_hash(&rmd160_desc);
#endif
#ifdef LTC_RIPEMD256
unregister_hash(&rmd256_desc);
#endif
#ifdef LTC_RIPEMD320
unregister_hash(&rmd320_desc);
#endif
#ifdef LTC_WHIRLPOOL
unregister_hash(&whirlpool_desc);
#endif
#ifdef LTC_BLAKE2S
unregister_hash(&blake2s_128_desc);
unregister_hash(&blake2s_160_desc);
unregister_hash(&blake2s_224_desc);
unregister_hash(&blake2s_256_desc);
#endif
#ifdef LTC_BLAKE2B
unregister_hash(&blake2b_160_desc);
unregister_hash(&blake2b_256_desc);
unregister_hash(&blake2b_384_desc);
unregister_hash(&blake2b_512_desc);
#endif
#ifdef LTC_CHC_HASH
unregister_hash(&chc_desc);
#endif
unregister_prng(&yarrow_desc);
#ifdef LTC_FORTUNA
unregister_prng(&fortuna_desc);
#endif
#ifdef LTC_RC4
unregister_prng(&rc4_desc);
#endif
#ifdef LTC_CHACHA20_PRNG
unregister_prng(&chacha20_prng_desc);
#endif
#ifdef LTC_SOBER128
unregister_prng(&sober128_desc);
#endif
} /* _cleanup() */
#ifdef LTC_PRNG_ENABLE_LTC_RNG
static unsigned long my_test_rng_read;
static unsigned long my_test_rng(unsigned char *buf, unsigned long len,
void (*callback)(void))
{
unsigned long n;
LTC_UNUSED_PARAM(callback);
for (n = 0; n < len; ++n) {
buf[n] = 4;
}
my_test_rng_read += n;
return n;
}
#endif
void register_algs(void)
{
#ifdef LTC_PRNG_ENABLE_LTC_RNG
unsigned long before;
#endif
int err;
atexit(_unregister_all);
#ifdef LTC_RIJNDAEL
#ifdef ENCRYPT_ONLY
/* alternative would be
* register_cipher (&rijndael_enc_desc);
*/
register_cipher (&aes_enc_desc);
#else
/* alternative would be
* register_cipher (&rijndael_desc);
*/
register_cipher (&aes_desc);
#endif
#endif
#ifdef LTC_BLOWFISH
register_cipher (&blowfish_desc);
#endif
#ifdef LTC_XTEA
register_cipher (&xtea_desc);
#endif
#ifdef LTC_RC5
register_cipher (&rc5_desc);
#endif
#ifdef LTC_RC6
register_cipher (&rc6_desc);
#endif
#ifdef LTC_SAFERP
register_cipher (&saferp_desc);
#endif
#ifdef LTC_TWOFISH
register_cipher (&twofish_desc);
#endif
#ifdef LTC_SAFER
register_cipher (&safer_k64_desc);
register_cipher (&safer_sk64_desc);
register_cipher (&safer_k128_desc);
register_cipher (&safer_sk128_desc);
#endif
#ifdef LTC_RC2
register_cipher (&rc2_desc);
#endif
#ifdef LTC_DES
register_cipher (&des_desc);
register_cipher (&des3_desc);
#endif
#ifdef LTC_CAST5
register_cipher (&cast5_desc);
#endif
#ifdef LTC_NOEKEON
register_cipher (&noekeon_desc);
#endif
#ifdef LTC_SKIPJACK
register_cipher (&skipjack_desc);
#endif
#ifdef LTC_ANUBIS
register_cipher (&anubis_desc);
#endif
#ifdef LTC_KHAZAD
register_cipher (&khazad_desc);
#endif
#ifdef LTC_KSEED
register_cipher (&kseed_desc);
#endif
#ifdef LTC_KASUMI
register_cipher (&kasumi_desc);
#endif
#ifdef LTC_MULTI2
register_cipher (&multi2_desc);
#endif
#ifdef LTC_CAMELLIA
register_cipher (&camellia_desc);
#endif
#ifdef LTC_TIGER
register_hash (&tiger_desc);
#endif
#ifdef LTC_MD2
register_hash (&md2_desc);
#endif
#ifdef LTC_MD4
register_hash (&md4_desc);
#endif
#ifdef LTC_MD5
register_hash (&md5_desc);
#endif
#ifdef LTC_SHA1
register_hash (&sha1_desc);
#endif
#ifdef LTC_SHA224
register_hash (&sha224_desc);
#endif
#ifdef LTC_SHA256
register_hash (&sha256_desc);
#endif
#ifdef LTC_SHA384
register_hash (&sha384_desc);
#endif
#ifdef LTC_SHA512
register_hash (&sha512_desc);
#endif
#ifdef LTC_SHA512_224
register_hash (&sha512_224_desc);
#endif
#ifdef LTC_SHA512_256
register_hash (&sha512_256_desc);
#endif
#ifdef LTC_SHA3
register_hash (&sha3_224_desc);
register_hash (&sha3_256_desc);
register_hash (&sha3_384_desc);
register_hash (&sha3_512_desc);
#endif
#ifdef LTC_RIPEMD128
register_hash (&rmd128_desc);
#endif
#ifdef LTC_RIPEMD160
register_hash (&rmd160_desc);
#endif
#ifdef LTC_RIPEMD256
register_hash (&rmd256_desc);
#endif
#ifdef LTC_RIPEMD320
register_hash (&rmd320_desc);
#endif
#ifdef LTC_WHIRLPOOL
register_hash (&whirlpool_desc);
#endif
#ifdef LTC_BLAKE2S
register_hash(&blake2s_128_desc);
register_hash(&blake2s_160_desc);
register_hash(&blake2s_224_desc);
register_hash(&blake2s_256_desc);
#endif
#ifdef LTC_BLAKE2S
register_hash(&blake2b_160_desc);
register_hash(&blake2b_256_desc);
register_hash(&blake2b_384_desc);
register_hash(&blake2b_512_desc);
#endif
#ifdef LTC_CHC_HASH
register_hash(&chc_desc);
if ((err = chc_register(register_cipher(&aes_desc))) != CRYPT_OK) {
fprintf(stderr, "chc_register error: %s\n", error_to_string(err));
exit(EXIT_FAILURE);
}
#endif
#ifndef LTC_YARROW
#error This demo requires Yarrow.
#endif
register_prng(&yarrow_desc);
#ifdef LTC_FORTUNA
register_prng(&fortuna_desc);
#endif
#ifdef LTC_RC4
register_prng(&rc4_desc);
#endif
#ifdef LTC_CHACHA20_PRNG
register_prng(&chacha20_prng_desc);
#endif
#ifdef LTC_SOBER128
register_prng(&sober128_desc);
#endif
#ifdef LTC_SPRNG
register_prng(&sprng_desc);
#endif
#ifdef LTC_PRNG_ENABLE_LTC_RNG
ltc_rng = my_test_rng;
before = my_test_rng_read;
if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT_OK) {
fprintf(stderr, "rng_make_prng with 'my_test_rng' failed: %s\n", error_to_string(err));
exit(EXIT_FAILURE);
}
if (before == my_test_rng_read) {
fprintf(stderr, "somehow there was no read from the ltc_rng! %lu == %lu\n", before, my_test_rng_read);
exit(EXIT_FAILURE);
}
ltc_rng = NULL;
#endif
if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT_OK) {
fprintf(stderr, "rng_make_prng failed: %s\n", error_to_string(err));
exit(EXIT_FAILURE);
}
if (strcmp("CRYPT_OK", error_to_string(err))) {
exit(EXIT_FAILURE);
}
}
void setup_math(void)
{
#ifdef USE_LTM
ltc_mp = ltm_desc;
#elif defined(USE_TFM)
ltc_mp = tfm_desc;
#elif defined(USE_GMP)
ltc_mp = gmp_desc;
#elif defined(EXT_MATH_LIB)
extern ltc_math_descriptor EXT_MATH_LIB;
ltc_mp = EXT_MATH_LIB;
#else
fprintf(stderr, "No MPI provider available\n");
exit(EXIT_FAILURE);
#endif
}

View File

@ -23,7 +23,4 @@ void run_cmd(int res, int line, char *file, char *cmd, const char *algorithm);
void print_hex(const char* what, const void* v, const unsigned long l); void print_hex(const char* what, const void* v, const unsigned long l);
void register_algs(void);
void setup_math(void);
#endif /* DEMOS_COMMON_H_ */ #endif /* DEMOS_COMMON_H_ */

45
tests/prng_test.c Normal file
View File

@ -0,0 +1,45 @@
#include <tomcrypt_test.h>
#ifdef LTC_PRNG_ENABLE_LTC_RNG
static unsigned long my_test_rng_read;
static unsigned long my_test_rng(unsigned char *buf, unsigned long len,
void (*callback)(void))
{
unsigned long n;
LTC_UNUSED_PARAM(callback);
for (n = 0; n < len; ++n) {
buf[n] = 4;
}
my_test_rng_read += n;
return n;
}
#endif
int prng_test(void)
{
int err = CRYPT_NOP;
#ifdef LTC_PRNG_ENABLE_LTC_RNG
unsigned long before;
unsigned long (*previous)(unsigned char *, unsigned long , void (*)(void)) = ltc_rng;
ltc_rng = my_test_rng;
before = my_test_rng_read;
if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT_OK) {
fprintf(stderr, "rng_make_prng with 'my_test_rng' failed: %s\n", error_to_string(err));
exit(EXIT_FAILURE);
}
if (before == my_test_rng_read) {
fprintf(stderr, "somehow there was no read from the ltc_rng! %lu == %lu\n", before, my_test_rng_read);
exit(EXIT_FAILURE);
}
ltc_rng = previous;
#endif
return err;
}

View File

@ -30,6 +30,7 @@ static const struct {
LTC_TEST_FN(katja_test), LTC_TEST_FN(katja_test),
LTC_TEST_FN(file_test), LTC_TEST_FN(file_test),
LTC_TEST_FN(multi_test), LTC_TEST_FN(multi_test),
LTC_TEST_FN(prng_test),
}; };
#if defined(_WIN32) #if defined(_WIN32)
@ -62,6 +63,182 @@ static ulong64 epoch_usec(void)
#endif #endif
} }
/*
* unregister ciphers, hashes & prngs
*/
static void _unregister_all(void)
{
#ifdef LTC_RIJNDAEL
unregister_cipher(&aes_desc);
#endif
#ifdef LTC_BLOWFISH
unregister_cipher(&blowfish_desc);
#endif
#ifdef LTC_XTEA
unregister_cipher(&xtea_desc);
#endif
#ifdef LTC_RC5
unregister_cipher(&rc5_desc);
#endif
#ifdef LTC_RC6
unregister_cipher(&rc6_desc);
#endif
#ifdef LTC_SAFERP
unregister_cipher(&saferp_desc);
#endif
#ifdef LTC_TWOFISH
unregister_cipher(&twofish_desc);
#endif
#ifdef LTC_SAFER
unregister_cipher(&safer_k64_desc);
unregister_cipher(&safer_sk64_desc);
unregister_cipher(&safer_k128_desc);
unregister_cipher(&safer_sk128_desc);
#endif
#ifdef LTC_RC2
unregister_cipher(&rc2_desc);
#endif
#ifdef LTC_DES
unregister_cipher(&des_desc);
unregister_cipher(&des3_desc);
#endif
#ifdef LTC_CAST5
unregister_cipher(&cast5_desc);
#endif
#ifdef LTC_NOEKEON
unregister_cipher(&noekeon_desc);
#endif
#ifdef LTC_SKIPJACK
unregister_cipher(&skipjack_desc);
#endif
#ifdef LTC_KHAZAD
unregister_cipher(&khazad_desc);
#endif
#ifdef LTC_ANUBIS
unregister_cipher(&anubis_desc);
#endif
#ifdef LTC_KSEED
unregister_cipher(&kseed_desc);
#endif
#ifdef LTC_KASUMI
unregister_cipher(&kasumi_desc);
#endif
#ifdef LTC_MULTI2
unregister_cipher(&multi2_desc);
#endif
#ifdef LTC_CAMELLIA
unregister_cipher(&camellia_desc);
#endif
#ifdef LTC_TIGER
unregister_hash(&tiger_desc);
#endif
#ifdef LTC_MD2
unregister_hash(&md2_desc);
#endif
#ifdef LTC_MD4
unregister_hash(&md4_desc);
#endif
#ifdef LTC_MD5
unregister_hash(&md5_desc);
#endif
#ifdef LTC_SHA1
unregister_hash(&sha1_desc);
#endif
#ifdef LTC_SHA224
unregister_hash(&sha224_desc);
#endif
#ifdef LTC_SHA256
unregister_hash(&sha256_desc);
#endif
#ifdef LTC_SHA384
unregister_hash(&sha384_desc);
#endif
#ifdef LTC_SHA512
unregister_hash(&sha512_desc);
#endif
#ifdef LTC_SHA512_224
unregister_hash(&sha512_224_desc);
#endif
#ifdef LTC_SHA512_256
unregister_hash(&sha512_256_desc);
#endif
#ifdef LTC_SHA3
unregister_hash(&sha3_224_desc);
unregister_hash(&sha3_256_desc);
unregister_hash(&sha3_384_desc);
unregister_hash(&sha3_512_desc);
#endif
#ifdef LTC_RIPEMD128
unregister_hash(&rmd128_desc);
#endif
#ifdef LTC_RIPEMD160
unregister_hash(&rmd160_desc);
#endif
#ifdef LTC_RIPEMD256
unregister_hash(&rmd256_desc);
#endif
#ifdef LTC_RIPEMD320
unregister_hash(&rmd320_desc);
#endif
#ifdef LTC_WHIRLPOOL
unregister_hash(&whirlpool_desc);
#endif
#ifdef LTC_BLAKE2S
unregister_hash(&blake2s_128_desc);
unregister_hash(&blake2s_160_desc);
unregister_hash(&blake2s_224_desc);
unregister_hash(&blake2s_256_desc);
#endif
#ifdef LTC_BLAKE2B
unregister_hash(&blake2b_160_desc);
unregister_hash(&blake2b_256_desc);
unregister_hash(&blake2b_384_desc);
unregister_hash(&blake2b_512_desc);
#endif
#ifdef LTC_CHC_HASH
unregister_hash(&chc_desc);
#endif
unregister_prng(&yarrow_desc);
#ifdef LTC_FORTUNA
unregister_prng(&fortuna_desc);
#endif
#ifdef LTC_RC4
unregister_prng(&rc4_desc);
#endif
#ifdef LTC_CHACHA20_PRNG
unregister_prng(&chacha20_prng_desc);
#endif
#ifdef LTC_SOBER128
unregister_prng(&sober128_desc);
#endif
} /* _cleanup() */
static void register_algs(void)
{
int err;
atexit(_unregister_all);
#ifndef LTC_YARROW
#error This demo requires Yarrow.
#endif
register_all_ciphers();
register_all_hashes();
register_all_prngs();
if ((err = rng_make_prng(128, find_prng("yarrow"), &yarrow_prng, NULL)) != CRYPT_OK) {
fprintf(stderr, "rng_make_prng failed: %s\n", error_to_string(err));
exit(EXIT_FAILURE);
}
if (strcmp("CRYPT_OK", error_to_string(err))) {
exit(EXIT_FAILURE);
}
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int x, pass = 0, fail = 0, nop = 0; int x, pass = 0, fail = 0, nop = 0;

View File

@ -51,6 +51,7 @@ int misc_test(void);
int base64_test(void); int base64_test(void);
int file_test(void); int file_test(void);
int multi_test(void); int multi_test(void);
int prng_test(void);
#ifdef LTC_PKCS_1 #ifdef LTC_PKCS_1
extern const struct ltc_prng_descriptor no_prng_desc; extern const struct ltc_prng_descriptor no_prng_desc;