diff --git a/testsuite/testutils.c b/testsuite/testutils.c
index 87cec2ffc84e05fe67899c315e0c9dec716302d5..9cb0698938a1c28db7979302668c6374fda5b14f 100644
--- a/testsuite/testutils.c
+++ b/testsuite/testutils.c
@@ -507,5 +507,33 @@ test_dsa(const struct dsa_public_key *pub,
   dsa_signature_clear(&signature);
 }
 
+void
+test_dsa_key(struct dsa_public_key *pub,
+	     struct dsa_private_key *key)
+{
+  mpz_t t;
+
+  mpz_init(t);
+
+  ASSERT(mpz_sizeinbase(pub->q, 2) == 160);
+  ASSERT(mpz_sizeinbase(pub->p, 2) >= DSA_MINIMUM_BITS);
+  
+  ASSERT(mpz_probab_prime_p(pub->p, 10));
+
+  ASSERT(mpz_probab_prime_p(pub->q, 10));
+
+  mpz_fdiv_r(t, pub->p, pub->q);
+
+  ASSERT(0 == mpz_cmp_ui(t, 1));
+
+  ASSERT(mpz_cmp_ui(pub->g, 1) > 0);
+  
+  mpz_powm(t, pub->g, pub->q, pub->p);
+  ASSERT(0 == mpz_cmp_ui(t, 1));
+  
+  mpz_powm(t, pub->g, key->x, pub->p);
+  ASSERT(0 == mpz_cmp(t, pub->y));
+};
+
 #endif /* WITH_PUBLIC_KEY */
 
diff --git a/testsuite/testutils.h b/testsuite/testutils.h
index 8defa091087925bba67116ba1300be4fd4e5ac87..64d22eeb2f2752bea39280c39c6036451a1569bf 100644
--- a/testsuite/testutils.h
+++ b/testsuite/testutils.h
@@ -91,6 +91,10 @@ void
 test_dsa(const struct dsa_public_key *pub,
 	 const struct dsa_private_key *key);
 
+void
+test_dsa_key(struct dsa_public_key *pub,
+	     struct dsa_private_key *key);
+
 #endif /* WITH_PUBLIC_KEY */
 
 #define H2(d, s) decode_hex((d), (s))