/* -*-c-*-
*
- * $Id: perftest.c,v 1.1 2004/04/21 00:37:32 mdw Exp $
+ * $Id$
*
* Measure performance of various operations (Unix-specific)
*
#include "ec.h"
#include "group.h"
+#include "cc.h"
#include "gcipher.h"
#include "ghash.h"
#include "gmac.h"
+#include "ectab.h"
+#include "ptab.h"
/*----- Options -----------------------------------------------------------*/
/* --- Job table --- */
-typedef struct jobobs {
+typedef struct jobops {
const char *name;
void *(*init)(opts *);
void (*run)(void *);
/*----- Main code ---------------------------------------------------------*/
-static void version(FILE *fp)
+void version(FILE *fp)
{
pquis(fp, "$, Catacomb " VERSION "\n");
}
usage(fp);
pquis(fp, "\n\
Various performance tests.\n\
+\n\
+Options:\n\
+\n\
+-h, --help Show this help text.\n\
+-v, --version Show program version number.\n\
+-u, --usage Show terse usage message.\n\
+-l, --list [ITEM...] List all the various names of things.\n\
+\n\
+-C, --name=NAME Select curve/DH-group/enc/hash name.\n\
+-b, --field-bits Field size for g-prime and rsa.\n\
+-B, --group-bits Group size for g-prime; key size for ksched;\n\
+ data size for enc and hash.\n\
+-n, --factors=COUNT Number of factors for {exp,mul}-sim.\n\
+-i, --intervals=COUNT Number of intervals to run for. [0; forever]\n\
+-t, --time=TIME Length of an interval in seconds. [1]\n\
");
}
+#define LISTS(LI) \
+ LI("Lists", list, \
+ listtab[i].name, listtab[i].name) \
+ LI("Jobs", job, \
+ jobtab[i].name, jobtab[i].name) \
+ LI("Elliptic curves", ec, \
+ ectab[i].name, ectab[i].name) \
+ LI("Diffie-Hellman groups", dh, \
+ ptab[i].name, ptab[i].name) \
+ LI("Encryption algorithms", cipher, \
+ gciphertab[i], gciphertab[i]->name) \
+ LI("Hash functions", hash, \
+ ghashtab[i], ghashtab[i]->name)
+
+MAKELISTTAB(listtab, LISTS)
+
static unsigned uarg(const char *what, const char *p)
{
char *q;
{ "help", 0, 0, 'h' },
{ "version", 0, 0, 'v' },
{ "usage", 0, 0, 'u' },
+ { "list", 0, 0, 'l' },
{ "name", OPTF_ARGREQ, 0, 'C' },
{ "field-bits", OPTF_ARGREQ, 0, 'b' },
{ "group-bits", OPTF_ARGREQ, 0, 'B' },
{ 0, 0, 0, 0 }
};
- i = mdwopt(argc, argv, "hvuC:b:B:n:i:t:", opts, 0, 0, 0);
+ i = mdwopt(argc, argv, "hvulC:b:B:n:i:t:", opts, 0, 0, 0);
if (i < 0) break;
switch (i) {
case 'h': help(stdout); exit(0);
case 'v': version(stdout); exit(0);
case 'u': usage(stdout); exit(0);
+ case 'l': exit(displaylists(listtab, argv + optind));
case 'C': o.name = optarg; break;
case 'b': o.fbits = uarg("field bits", optarg); break;
case 'B': o.gbits = uarg("subgroup bits", optarg); break;