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 <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;
+}
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;