summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2013-09-07 10:06:46 +0200
committerWerner Koch <wk@gnupg.org>2013-09-19 16:43:33 +0200
commit2fe084873333c4d67bcfba0b527d63cd3cff6c47 (patch)
tree802673cb71da04f7a1d85c5d8cb2d6d455dbbff9 /tests
parentb3f3d47d347c14ed41d755cee580f000309b9c03 (diff)
downloadlibgcrypt-2fe084873333c4d67bcfba0b527d63cd3cff6c47.tar.gz
tests: Beautify some diagnostics.
* tests/benchmark.c (ecc_bench): Print the key sexp in very verbose mode. (main): Add option --pk-count. * tests/keygen.c: Add Elgamal generation and improved diagnostics. * tests/t-ed25519.c (check_ed25519): Print running number of tests done. Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/benchmark.c34
-rw-r--r--tests/keygen.c298
-rw-r--r--tests/t-ed25519.c26
3 files changed, 265 insertions, 93 deletions
diff --git a/tests/benchmark.c b/tests/benchmark.c
index 1fa2676e..5d1434ac 100644
--- a/tests/benchmark.c
+++ b/tests/benchmark.c
@@ -928,6 +928,8 @@ ecc_bench (int iterations, int print_header)
if (err)
die ("creating %d bit ECC key failed: %s\n",
p_size, gcry_strerror (err));
+ if (verbose > 2)
+ show_sexp ("ECC key:\n", key_pair);
pub_key = gcry_sexp_find_token (key_pair, "public-key", 0);
if (! pub_key)
@@ -961,7 +963,15 @@ ecc_bench (int iterations, int print_header)
gcry_sexp_release (sig);
err = gcry_pk_sign (&sig, data, sec_key);
if (err)
- die ("signing failed: %s\n", gpg_strerror (err));
+ {
+ if (verbose)
+ {
+ putc ('\n', stderr);
+ show_sexp ("signing key:\n", sec_key);
+ show_sexp ("signed data:\n", data);
+ }
+ die ("signing failed: %s\n", gpg_strerror (err));
+ }
}
stop_timer ();
printf (" %s", elapsed_time ());
@@ -1065,6 +1075,7 @@ main( int argc, char **argv )
int use_random_daemon = 0;
int with_progress = 0;
int debug = 0;
+ int pk_count = 100;
buffer_alignment = 1;
@@ -1152,6 +1163,15 @@ main( int argc, char **argv )
argc--; argv++;
}
}
+ else if (!strcmp (*argv, "--pk-count"))
+ {
+ argc--; argv++;
+ if (argc)
+ {
+ pk_count = atoi(*argv);
+ argc--; argv++;
+ }
+ }
else if (!strcmp (*argv, "--alignment"))
{
argc--; argv++;
@@ -1225,9 +1245,9 @@ main( int argc, char **argv )
putchar ('\n');
cipher_bench (NULL);
putchar ('\n');
- rsa_bench (100, 1, no_blinding);
- dsa_bench (100, 0);
- ecc_bench (100, 0);
+ rsa_bench (pk_count, 1, no_blinding);
+ dsa_bench (pk_count, 0);
+ ecc_bench (pk_count, 0);
putchar ('\n');
mpi_bench ();
putchar ('\n');
@@ -1269,17 +1289,17 @@ main( int argc, char **argv )
else if ( !strcmp (*argv, "rsa"))
{
gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
- rsa_bench (100, 1, no_blinding);
+ rsa_bench (pk_count, 1, no_blinding);
}
else if ( !strcmp (*argv, "dsa"))
{
gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
- dsa_bench (100, 1);
+ dsa_bench (pk_count, 1);
}
else if ( !strcmp (*argv, "ecc"))
{
gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
- ecc_bench (100, 1);
+ ecc_bench (pk_count, 1);
}
else
{
diff --git a/tests/keygen.c b/tests/keygen.c
index eed62e1b..b955116c 100644
--- a/tests/keygen.c
+++ b/tests/keygen.c
@@ -28,58 +28,119 @@
#include "../src/gcrypt-int.h"
+#define PGM "keygen"
+
+#define xmalloc(a) gcry_xmalloc ((a))
+#define xcalloc(a,b) gcry_xcalloc ((a),(b))
+#define xstrdup(a) gcry_xstrdup ((a))
+#define xfree(a) gcry_free ((a))
+#define pass() do { ; } while (0)
+
static int verbose;
static int debug;
static int error_count;
+
static void
-show ( const char *format, ... )
+die (const char *format, ...)
{
- va_list arg_ptr ;
+ va_list arg_ptr ;
- va_start( arg_ptr, format ) ;
- vfprintf (stderr, format, arg_ptr );
- va_end(arg_ptr);
+ fflush (stdout);
+ fprintf (stderr, "%s: ", PGM);
+ va_start( arg_ptr, format ) ;
+ vfprintf (stderr, format, arg_ptr );
+ va_end(arg_ptr);
+ if (*format && format[strlen(format)-1] != '\n')
+ putc ('\n', stderr);
+ exit (1);
}
static void
-fail ( const char *format, ... )
+fail (const char *format, ...)
{
- va_list arg_ptr ;
+ va_list arg_ptr;
- va_start( arg_ptr, format ) ;
- vfprintf (stderr, format, arg_ptr );
- va_end(arg_ptr);
- error_count++;
+ fflush (stdout);
+ fprintf (stderr, "%s: ", PGM);
+ /* if (wherestr) */
+ /* fprintf (stderr, "%s: ", wherestr); */
+ va_start (arg_ptr, format);
+ vfprintf (stderr, format, arg_ptr);
+ va_end (arg_ptr);
+ if (*format && format[strlen(format)-1] != '\n')
+ putc ('\n', stderr);
+ error_count++;
+ if (error_count >= 50)
+ die ("stopped after 50 errors.");
+}
+
+static void
+show (const char *format, ...)
+{
+ va_list arg_ptr;
+
+ fprintf (stderr, "%s: ", PGM);
+ va_start (arg_ptr, format);
+ vfprintf (stderr, format, arg_ptr);
+ if (*format && format[strlen(format)-1] != '\n')
+ putc ('\n', stderr);
+ va_end (arg_ptr);
}
+
+static void
+show_note (const char *format, ...)
+{
+ va_list arg_ptr;
+
+ if (!verbose && getenv ("srcdir"))
+ fputs (" ", stderr); /* To align above "PASS: ". */
+ else
+ fprintf (stderr, "%s: ", PGM);
+ va_start (arg_ptr, format);
+ vfprintf (stderr, format, arg_ptr);
+ if (*format && format[strlen(format)-1] != '\n')
+ putc ('\n', stderr);
+ va_end (arg_ptr);
+}
+
+
static void
-die ( const char *format, ... )
+show_sexp (const char *prefix, gcry_sexp_t a)
{
- va_list arg_ptr ;
+ char *buf;
+ size_t size;
+
+ fprintf (stderr, "%s: ", PGM);
+ if (prefix)
+ fputs (prefix, stderr);
+ size = gcry_sexp_sprint (a, GCRYSEXP_FMT_ADVANCED, NULL, 0);
+ buf = xmalloc (size);
- va_start( arg_ptr, format ) ;
- vfprintf (stderr, format, arg_ptr );
- va_end(arg_ptr);
- exit (1);
+ gcry_sexp_sprint (a, GCRYSEXP_FMT_ADVANCED, buf, size);
+ fprintf (stderr, "%.*s", (int)size, buf);
+ gcry_free (buf);
}
static void
-print_mpi (const char *text, gcry_mpi_t a)
+show_mpi (const char *prefix, gcry_mpi_t a)
{
char *buf;
void *bufaddr = &buf;
gcry_error_t rc;
+ fprintf (stderr, "%s: ", PGM);
+ if (prefix)
+ fputs (prefix, stderr);
rc = gcry_mpi_aprint (GCRYMPI_FMT_HEX, bufaddr, NULL, a);
if (rc)
- fprintf (stderr, "%s=[error printing number: %s]\n",
- text, gpg_strerror (rc));
+ fprintf (stderr, "[error printing number: %s]\n", gpg_strerror (rc));
else
{
- fprintf (stderr, "%s=0x%s\n", text, buf);
+ fprintf (stderr, "%s\n", buf);
gcry_free (buf);
}
}
@@ -103,11 +164,11 @@ check_generated_rsa_key (gcry_sexp_t key, unsigned long expected_e)
else if (!expected_e)
{
if (verbose)
- print_mpi ("e", e);
+ show_mpi ("public exponent: ", e);
}
else if ( gcry_mpi_cmp_ui (e, expected_e))
{
- print_mpi ("e", e);
+ show_mpi ("public exponent: ", e);
fail ("public exponent is not %lu\n", expected_e);
}
gcry_sexp_release (list);
@@ -125,68 +186,41 @@ check_generated_rsa_key (gcry_sexp_t key, unsigned long expected_e)
fail ("gcry_pk_testkey failed: %s\n", gpg_strerror (rc));
gcry_sexp_release (skey);
}
+}
- }
static void
check_rsa_keys (void)
{
gcry_sexp_t keyparm, key;
int rc;
- int i;
-
- /* Check that DSA generation works and that it can grok the qbits
- argument. */
- if (verbose)
- fprintf (stderr, "creating 5 1024 bit DSA keys\n");
- for (i=0; i < 5; i++)
- {
- rc = gcry_sexp_new (&keyparm,
- "(genkey\n"
- " (dsa\n"
- " (nbits 4:1024)\n"
- " ))", 0, 1);
- if (rc)
- die ("error creating S-expression: %s\n", gpg_strerror (rc));
- rc = gcry_pk_genkey (&key, keyparm);
- gcry_sexp_release (keyparm);
- if (rc)
- die ("error generating DSA key: %s\n", gpg_strerror (rc));
- gcry_sexp_release (key);
- if (verbose)
- fprintf (stderr, " done\n");
- }
if (verbose)
- fprintf (stderr, "creating 1536 bit DSA key\n");
+ show ("creating 1024 bit RSA key\n");
rc = gcry_sexp_new (&keyparm,
"(genkey\n"
- " (dsa\n"
- " (nbits 4:1536)\n"
- " (qbits 3:224)\n"
+ " (rsa\n"
+ " (nbits 4:1024)\n"
" ))", 0, 1);
if (rc)
die ("error creating S-expression: %s\n", gpg_strerror (rc));
rc = gcry_pk_genkey (&key, keyparm);
gcry_sexp_release (keyparm);
if (rc)
- die ("error generating DSA key: %s\n", gpg_strerror (rc));
- if (debug)
- {
- char buffer[20000];
- gcry_sexp_sprint (key, GCRYSEXP_FMT_ADVANCED, buffer, sizeof buffer);
- if (verbose)
- printf ("=============================\n%s\n"
- "=============================\n", buffer);
- }
+ die ("error generating RSA key: %s\n", gpg_strerror (rc));
+ if (verbose > 1)
+ show_sexp ("1024 bit RSA key:\n", key);
+ check_generated_rsa_key (key, 65537);
gcry_sexp_release (key);
+
if (verbose)
- fprintf (stderr, "creating 1024 bit RSA key\n");
+ show ("creating 512 bit RSA key with e=257\n");
rc = gcry_sexp_new (&keyparm,
"(genkey\n"
" (rsa\n"
- " (nbits 4:1024)\n"
+ " (nbits 3:512)\n"
+ " (rsa-use-e 3:257)\n"
" ))", 0, 1);
if (rc)
die ("error creating S-expression: %s\n", gpg_strerror (rc));
@@ -195,17 +229,16 @@ check_rsa_keys (void)
if (rc)
die ("error generating RSA key: %s\n", gpg_strerror (rc));
- check_generated_rsa_key (key, 65537);
+ check_generated_rsa_key (key, 257);
gcry_sexp_release (key);
-
if (verbose)
- fprintf (stderr, "creating 512 bit RSA key with e=257\n");
+ show ("creating 512 bit RSA key with default e\n");
rc = gcry_sexp_new (&keyparm,
"(genkey\n"
" (rsa\n"
" (nbits 3:512)\n"
- " (rsa-use-e 3:257)\n"
+ " (rsa-use-e 1:0)\n"
" ))", 0, 1);
if (rc)
die ("error creating S-expression: %s\n", gpg_strerror (rc));
@@ -214,27 +247,82 @@ check_rsa_keys (void)
if (rc)
die ("error generating RSA key: %s\n", gpg_strerror (rc));
- check_generated_rsa_key (key, 257);
+ check_generated_rsa_key (key, 0); /* We don't expect a constant exponent. */
gcry_sexp_release (key);
+}
+
+
+static void
+check_elg_keys (void)
+{
+ gcry_sexp_t keyparm, key;
+ int rc;
if (verbose)
- fprintf (stderr, "creating 512 bit RSA key with default e\n");
+ show ("creating 1024 bit Elgamal key\n");
rc = gcry_sexp_new (&keyparm,
"(genkey\n"
- " (rsa\n"
- " (nbits 3:512)\n"
- " (rsa-use-e 1:0)\n"
+ " (elg\n"
+ " (nbits 4:1024)\n"
" ))", 0, 1);
if (rc)
die ("error creating S-expression: %s\n", gpg_strerror (rc));
rc = gcry_pk_genkey (&key, keyparm);
gcry_sexp_release (keyparm);
if (rc)
- die ("error generating RSA key: %s\n", gpg_strerror (rc));
-
- check_generated_rsa_key (key, 0); /* We don't expect a constant exponent. */
+ die ("error generating Elgamal key: %s\n", gpg_strerror (rc));
+ if (verbose > 1)
+ show_sexp ("1024 bit Elgamal key:\n", key);
gcry_sexp_release (key);
+}
+
+
+static void
+check_dsa_keys (void)
+{
+ gcry_sexp_t keyparm, key;
+ int rc;
+ int i;
+ /* Check that DSA generation works and that it can grok the qbits
+ argument. */
+ if (verbose)
+ show ("creating 5 1024 bit DSA keys\n");
+ for (i=0; i < 5; i++)
+ {
+ rc = gcry_sexp_new (&keyparm,
+ "(genkey\n"
+ " (dsa\n"
+ " (nbits 4:1024)\n"
+ " ))", 0, 1);
+ if (rc)
+ die ("error creating S-expression: %s\n", gpg_strerror (rc));
+ rc = gcry_pk_genkey (&key, keyparm);
+ gcry_sexp_release (keyparm);
+ if (rc)
+ die ("error generating DSA key: %s\n", gpg_strerror (rc));
+ if (!i && verbose > 1)
+ show_sexp ("1024 bit DSA key:\n", key);
+ gcry_sexp_release (key);
+ }
+
+ if (verbose)
+ show ("creating 1536 bit DSA key\n");
+ rc = gcry_sexp_new (&keyparm,
+ "(genkey\n"
+ " (dsa\n"
+ " (nbits 4:1536)\n"
+ " (qbits 3:224)\n"
+ " ))", 0, 1);
+ if (rc)
+ die ("error creating S-expression: %s\n", gpg_strerror (rc));
+ rc = gcry_pk_genkey (&key, keyparm);
+ gcry_sexp_release (keyparm);
+ if (rc)
+ die ("error generating DSA key: %s\n", gpg_strerror (rc));
+ if (verbose > 1)
+ show_sexp ("1536 bit DSA key:\n", key);
+ gcry_sexp_release (key);
}
@@ -285,7 +373,7 @@ check_ecc_keys (void)
for (testno=0; curves[testno]; testno++)
{
if (verbose)
- fprintf (stderr, "creating ECC key using curve %s\n", curves[testno]);
+ show ("creating ECC key using curve %s\n", curves[testno]);
rc = gcry_sexp_build (&keyparm, NULL,
"(genkey(ecc(curve %s)))", curves[testno]);
if (rc)
@@ -296,8 +384,11 @@ check_ecc_keys (void)
die ("error generating ECC key using curve %s: %s\n",
curves[testno], gpg_strerror (rc));
+ if (verbose > 1)
+ show_sexp ("ECC key:\n", key);
+
if (!strcmp (curves[testno], "Ed25519"))
- show ("Note: gcry_pk_testkey does not yet work for Ed25519\n");
+ show_note ("note: gcry_pk_testkey does not yet work for Ed25519\n");
else
check_generated_ecc_key (key);
@@ -314,7 +405,7 @@ check_nonce (void)
int oops=0;
if (verbose)
- fprintf (stderr, "checking gcry_create_nonce\n");
+ show ("checking gcry_create_nonce\n");
gcry_create_nonce (a, sizeof a);
for (i=0; i < 10; i++)
@@ -365,10 +456,49 @@ progress_cb (void *cb_data, const char *what, int printchar,
int
main (int argc, char **argv)
{
- if (argc > 1 && !strcmp (argv[1], "--verbose"))
- verbose = 1;
- else if (argc > 1 && !strcmp (argv[1], "--debug"))
- verbose = debug = 1;
+ int last_argc = -1;
+ int with_progress = 0;
+
+ if (argc)
+ { argc--; argv++; }
+
+ while (argc && last_argc != argc )
+ {
+ last_argc = argc;
+ if (!strcmp (*argv, "--"))
+ {
+ argc--; argv++;
+ break;
+ }
+ else if (!strcmp (*argv, "--help"))
+ {
+ fputs ("usage: " PGM " [options]\n"
+ "Options:\n"
+ " --verbose be verbose\n"
+ " --debug flyswatter\n"
+ " --progress print progress indicators\n",
+ stdout);
+ exit (0);
+ }
+ else if (!strcmp (*argv, "--verbose"))
+ {
+ verbose++;
+ argc--; argv++;
+ }
+ else if (!strcmp (*argv, "--debug"))
+ {
+ verbose += 2;
+ debug++;
+ argc--; argv++;
+ }
+ else if (!strcmp (*argv, "--progress"))
+ {
+ argc--; argv++;
+ with_progress = 1;
+ }
+ else if (!strncmp (*argv, "--", 2))
+ die ("unknown option '%s'", *argv);
+ }
if (!gcry_check_version (GCRYPT_VERSION))
die ("version mismatch\n");
@@ -378,10 +508,12 @@ main (int argc, char **argv)
gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1u , 0);
/* No valuable keys are create, so we can speed up our RNG. */
gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);
- if (verbose)
- gcry_set_progress_handler ( progress_cb, NULL );
+ if (with_progress)
+ gcry_set_progress_handler (progress_cb, NULL);
check_rsa_keys ();
+ check_elg_keys ();
+ check_dsa_keys ();
check_ecc_keys ();
check_nonce ();
diff --git a/tests/t-ed25519.c b/tests/t-ed25519.c
index baa6a7ad..f816fda9 100644
--- a/tests/t-ed25519.c
+++ b/tests/t-ed25519.c
@@ -32,6 +32,7 @@
#include "stopwatch.h"
#define PGM "t-ed25519"
+#define N_TESTS 1024
#define my_isascii(c) (!((c) & 0x80))
#define digitp(p) (*(p) >= '0' && *(p) <= '9')
@@ -83,7 +84,7 @@ fail (const char *format, ...)
if (*format && format[strlen(format)-1] != '\n')
putc ('\n', stderr);
error_count++;
- if (error_count)
+ if (error_count >= 50)
die ("stopped after 50 errors.");
}
@@ -104,6 +105,23 @@ show (const char *format, ...)
static void
+show_note (const char *format, ...)
+{
+ va_list arg_ptr;
+
+ if (!verbose && getenv ("srcdir"))
+ fputs (" ", stderr); /* To align above "PASS: ". */
+ else
+ fprintf (stderr, "%s: ", PGM);
+ va_start (arg_ptr, format);
+ vfprintf (stderr, format, arg_ptr);
+ if (*format && format[strlen(format)-1] != '\n')
+ putc ('\n', stderr);
+ va_end (arg_ptr);
+}
+
+
+static void
show_sexp (const char *prefix, gcry_sexp_t a)
{
char *buf;
@@ -427,6 +445,8 @@ check_ed25519 (void)
hexdowncase (sig);
one_test (testno, sk, pk, msg, sig);
ntests++;
+ if (!(ntests % 256))
+ show_note ("%d of %d tests done\n", ntests, N_TESTS);
xfree (pk); pk = NULL;
xfree (sk); sk = NULL;
xfree (msg); msg = NULL;
@@ -439,8 +459,8 @@ check_ed25519 (void)
xfree (msg);
xfree (sig);
- if (ntests != 1024)
- fail ("did %d tests but expected 1024", ntests);
+ if (ntests != N_TESTS)
+ fail ("did %d tests but expected %s", ntests, N_TESTS);
fclose (fp);
xfree (fname);