diff options
author | Werner Koch <[email protected]> | 2001-11-27 17:40:09 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2001-11-27 17:40:09 +0000 |
commit | 944fee70bc3461d80dfe73873f3d66ab0e425e4c (patch) | |
tree | 9d80b776360c32ce54f0326e76141a102f5b4766 /sm/verify.c | |
parent | * assuan-handler.c (assuan_register_input_notify): New. (diff) | |
download | gnupg-944fee70bc3461d80dfe73873f3d66ab0e425e4c.tar.gz gnupg-944fee70bc3461d80dfe73873f3d66ab0e425e4c.zip |
* base64.c: New. Changed all other functions to use this instead
of direct creation of ksba_reader/writer.
* gpgsm.c (main): Set ctrl.auto_encoding unless --no-armor is used.
This way we can feed PEM encoded stuff to --verify.
Diffstat (limited to 'sm/verify.c')
-rw-r--r-- | sm/verify.c | 82 |
1 files changed, 16 insertions, 66 deletions
diff --git a/sm/verify.c b/sm/verify.c index 5b3a5a848..6f4a1d2c0 100644 --- a/sm/verify.c +++ b/sm/verify.c @@ -34,11 +34,6 @@ #include "keydb.h" #include "i18n.h" -struct reader_cb_parm_s { - FILE *fp; -}; - - /* FIXME: Move this to jnlib */ static char * strtimestamp (time_t atime) @@ -46,9 +41,9 @@ strtimestamp (time_t atime) char *buffer = xmalloc (15); if (atime < 0) - { - strcpy (buffer, "????" "-??" "-??"); - } + strcpy (buffer, "????" "-??" "-??"); + else if (!atime) + strcpy (buffer, "none"); else { struct tm *tp; @@ -62,38 +57,6 @@ strtimestamp (time_t atime) - -/* FIXME: We need to write a generic reader callback which should be able - to detect and convert base-64 */ -static int -reader_cb (void *cb_value, char *buffer, size_t count, size_t *nread) -{ - struct reader_cb_parm_s *parm = cb_value; - size_t n; - int c = 0; - - *nread = 0; - if (!buffer) - return -1; /* not supported */ - - for (n=0; n < count; n++) - { - c = getc (parm->fp); - if (c == EOF) - { - if ( ferror (parm->fp) ) - return -1; - if (n) - break; /* return what we have before an EOF */ - return -1; - } - *(byte *)buffer++ = c; - } - - *nread = n; - return 0; -} - /* fixme: duplicated from import.c */ static void store_cert (KsbaCert cert) @@ -192,21 +155,19 @@ int gpgsm_verify (CTRL ctrl, int in_fd, int data_fd) { int i, rc; + Base64Context b64reader = NULL; KsbaError err; - KsbaReader reader = NULL; - KsbaWriter writer = NULL; + KsbaReader reader; KsbaCMS cms = NULL; KsbaStopReason stopreason; KsbaCert cert; KEYDB_HANDLE kh; GCRY_MD_HD data_md = NULL; - struct reader_cb_parm_s rparm; int signer; const char *algoid; int algo; int is_detached; - - memset (&rparm, 0, sizeof rparm); + FILE *fp = NULL; kh = keydb_new (0); if (!kh) @@ -217,29 +178,18 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd) } - rparm.fp = fdopen ( dup (in_fd), "rb"); - if (!rparm.fp) + fp = fdopen ( dup (in_fd), "rb"); + if (!fp) { log_error ("fdopen() failed: %s\n", strerror (errno)); rc = seterr (IO_Error); goto leave; } - /* setup a skaba reader which uses a callback function so that we can - strip off a base64 encoding when necessary */ - reader = ksba_reader_new (); - writer = ksba_writer_new (); - if (!reader || !writer) - { - rc = seterr (Out_Of_Core); - goto leave; - } - - rc = ksba_reader_set_cb (reader, reader_cb, &rparm ); + rc = gpgsm_create_reader (&b64reader, ctrl, fp, &reader); if (rc) { - ksba_reader_release (reader); - rc = map_ksba_err (rc); + log_error ("can't create reader: %s\n", gnupg_strerror (rc)); goto leave; } @@ -250,7 +200,7 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd) goto leave; } - err = ksba_cms_set_reader_writer (cms, reader, writer); + err = ksba_cms_set_reader_writer (cms, reader, NULL); if (err) { log_debug ("ksba_cms_set_reader_writer failed: %s\n", @@ -454,9 +404,9 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd) char *buf, *fpr, *tstr; fpr = gpgsm_get_fingerprint_hexstring (cert, GCRY_MD_SHA1); - tstr = strtimestamp ( 42 /*fixme: get right time */); + tstr = strtimestamp (sigtime); buf = xmalloc ( strlen(fpr) + strlen (tstr) + 100); - sprintf (buf, "%s %s %lu", fpr, tstr, (unsigned long)42 ); + sprintf (buf, "%s %s %lu", fpr, tstr, (unsigned long)sigtime ); xfree (tstr); xfree (fpr); gpgsm_status (ctrl, STATUS_VALIDSIG, buf); @@ -498,11 +448,11 @@ gpgsm_verify (CTRL ctrl, int in_fd, int data_fd) leave: ksba_cms_release (cms); - ksba_reader_release (reader); + gpgsm_destroy_reader (b64reader); keydb_release (kh); gcry_md_close (data_md); - if (rparm.fp) - fclose (rparm.fp); + if (fp) + fclose (fp); return rc; } |