summaryrefslogtreecommitdiffstats
path: root/gpglib/testgpg.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpglib/testgpg.c')
-rw-r--r--gpglib/testgpg.c184
1 files changed, 184 insertions, 0 deletions
diff --git a/gpglib/testgpg.c b/gpglib/testgpg.c
new file mode 100644
index 0000000..a08620b
--- /dev/null
+++ b/gpglib/testgpg.c
@@ -0,0 +1,184 @@
+/*
+** Copyright 2002-2006 Double Precision, Inc. See COPYING for
+** distribution information.
+*/
+
+
+
+#include "config.h"
+#include "gpglib.h"
+
+#include "unicode/unicode.h"
+#include "numlib/numlib.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static int dump_stdout(const char *p, size_t l, void *dummy)
+{
+ if (l == 0)
+ return 0;
+
+ if (fwrite(p, l, 1, stdout) != 1)
+ exit(1);
+ fflush(stdout);
+ return (0);
+}
+
+static int poll_wait(void *dummy)
+{
+ putchar('*');
+ fflush(stdout);
+ return (0);
+}
+
+static void genkey(const char *d)
+{
+ libmail_gpg_genkey(d, "iso-8859-1",
+ "John Smith",
+ "john@example.com",
+ "Dummy ISO-8859 Tëëst key",
+ 1024,
+ 2048,
+ 12,
+ 'm',
+ "",
+ dump_stdout,
+ poll_wait,
+ NULL);
+}
+
+static int show_key(const char *fingerprint, const char *shortname,
+ const char *key, int invalid,
+ struct gpg_list_info *dummy)
+{
+ printf("Fingerprint: %s\nShort: %s\n%s\n\n",
+ fingerprint,
+ shortname,
+ key);
+ fflush(stdout);
+ return (0);
+}
+
+static void genlist(const char *d, int flag)
+{
+ struct gpg_list_info gli;
+
+ memset(&gli, 0, sizeof(gli));
+
+ libmail_gpg_listkeys(d, flag, show_key, dump_stdout, &gli);
+}
+
+static int expkey(const char *d, const char *f, int flag)
+{
+ return (libmail_gpg_exportkey(d, flag, f, dump_stdout, dump_stdout, NULL));
+}
+
+static int delkey(const char *d, const char *f, int flag)
+{
+ return (libmail_gpg_deletekey(d, flag, f, dump_stdout, NULL));
+}
+
+static int signkey(const char *d, const char *signthis, const char *signwith)
+{
+ return (libmail_gpg_signkey(d, signthis, signwith, -1, dump_stdout, 0, NULL));
+}
+
+static int checksign(const char *d, const char *stuff, const char *sig)
+{
+ return (libmail_gpg_checksign(d, stuff, sig, dump_stdout, NULL));
+}
+
+static int import(const char *filename)
+{
+ FILE *f=fopen(filename, "r");
+ int rc;
+
+ if (!f)
+ {
+ perror(filename);
+ return (1);
+ }
+
+ if ((rc=libmail_gpg_import_start(NULL, 1)) == 0)
+ {
+ char buf[BUFSIZ];
+ int n;
+
+ while ((n=fread(buf, 1, sizeof(buf), f)) > 0)
+ {
+ if ((rc=libmail_gpg_import_do(buf, n,
+ dump_stdout, NULL)) != 0)
+ return (rc);
+ }
+
+ rc=libmail_gpg_import_finish(dump_stdout, NULL);
+ }
+ return (rc);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc < 3)
+ return (0);
+
+ if (strcmp(argv[2], "gen") == 0)
+ {
+ genkey(argv[1]);
+ return (0);
+ }
+
+ if (strcmp(argv[2], "listpub") == 0)
+ {
+ genlist(argv[1], 0);
+ return (0);
+ }
+
+ if (strcmp(argv[2], "listsec") == 0)
+ {
+ genlist(argv[1], 1);
+ return (0);
+ }
+
+ if (strcmp(argv[2], "exppub") == 0 && argc >= 4)
+ {
+ exit(expkey(argv[1], argv[3], 0));
+ return (0);
+ }
+
+ if (strcmp(argv[2], "expsec") == 0 && argc >= 4)
+ {
+ exit(expkey(argv[1], argv[3], 1));
+ return (0);
+ }
+
+ if (strcmp(argv[2], "delpub") == 0 && argc >= 4)
+ {
+ exit (delkey(argv[1], argv[3], 0));
+ return (0);
+ }
+
+ if (strcmp(argv[2], "delsec") == 0 && argc >= 4)
+ {
+ exit (delkey(argv[1], argv[3], 1));
+ return (0);
+ }
+
+ if (strcmp(argv[2], "sign") == 0 && argc >= 5)
+ {
+ exit(signkey(argv[1], argv[3], argv[4]));
+ return (0);
+ }
+
+ if (strcmp(argv[2], "checksign") == 0 && argc >= 5)
+ {
+ exit(checksign(argv[1], argv[3], argv[4]));
+ return (0);
+ }
+
+ if (strcmp(argv[2], "import") == 0)
+ exit(import(argv[1]));
+
+ return (0);
+}