diff --git a/tests/common.c b/tests/common.c index 2486586..6fbab1f 100644 --- a/tests/common.c +++ b/tests/common.c @@ -62,394 +62,3 @@ void print_hex(const char* what, const void* v, const unsigned long l) } 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 -} diff --git a/tests/common.h b/tests/common.h index 4650d0c..483060f 100644 --- a/tests/common.h +++ b/tests/common.h @@ -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 register_algs(void); -void setup_math(void); - #endif /* DEMOS_COMMON_H_ */ diff --git a/tests/prng_test.c b/tests/prng_test.c new file mode 100644 index 0000000..15d953d --- /dev/null +++ b/tests/prng_test.c @@ -0,0 +1,45 @@ +#include + +#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; +} diff --git a/tests/test.c b/tests/test.c index 85165d8..69d7c1a 100644 --- a/tests/test.c +++ b/tests/test.c @@ -30,6 +30,7 @@ static const struct { LTC_TEST_FN(katja_test), LTC_TEST_FN(file_test), LTC_TEST_FN(multi_test), + LTC_TEST_FN(prng_test), }; #if defined(_WIN32) @@ -62,6 +63,182 @@ static ulong64 epoch_usec(void) #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 x, pass = 0, fail = 0, nop = 0; diff --git a/tests/tomcrypt_test.h b/tests/tomcrypt_test.h index e830b14..63364e4 100644 --- a/tests/tomcrypt_test.h +++ b/tests/tomcrypt_test.h @@ -51,6 +51,7 @@ int misc_test(void); int base64_test(void); int file_test(void); int multi_test(void); +int prng_test(void); #ifdef LTC_PKCS_1 extern const struct ltc_prng_descriptor no_prng_desc;