diff options
| author | Sam Varshavchik | 2013-08-19 16:39:41 -0400 |
|---|---|---|
| committer | Sam Varshavchik | 2013-08-25 14:43:51 -0400 |
| commit | 9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch) | |
| tree | 7a81a04cb51efb078ee350859a64be2ebc6b8813 /gpglib/testgpg.c | |
| parent | a9520698b770168d1f33d6301463bb70a19655ec (diff) | |
| download | courier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2 | |
Initial checkin
Imported from subversion report, converted to git. Updated all paths in
scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'gpglib/testgpg.c')
| -rw-r--r-- | gpglib/testgpg.c | 184 |
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); +} |
