aboutsummaryrefslogtreecommitdiffstats
path: root/sm/call-agent.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2003-06-27 20:53:09 +0000
committerWerner Koch <[email protected]>2003-06-27 20:53:09 +0000
commitf5db59fc21f172a2a71ed0c10f249efaa7ad794e (patch)
tree4d6e8c746037a053f972c2da4da1575bb076e4fd /sm/call-agent.c
parentFinished the bulk of changes for gnupg 1.9. This included switching (diff)
downloadgnupg-f5db59fc21f172a2a71ed0c10f249efaa7ad794e.tar.gz
gnupg-f5db59fc21f172a2a71ed0c10f249efaa7ad794e.zip
Key generation and signing using the OpenPGP card does rudimentary work.
Diffstat (limited to 'sm/call-agent.c')
-rw-r--r--sm/call-agent.c88
1 files changed, 11 insertions, 77 deletions
diff --git a/sm/call-agent.c b/sm/call-agent.c
index 31d9ba71c..4d26e3450 100644
--- a/sm/call-agent.c
+++ b/sm/call-agent.c
@@ -26,15 +26,17 @@
#include <unistd.h>
#include <time.h>
#include <assert.h>
-#include <gcrypt.h>
#ifdef HAVE_LOCALE_H
#include <locale.h>
#endif
-#include <assuan.h>
#include "gpgsm.h"
+#include <gcrypt.h>
+#include <assuan.h>
#include "i18n.h"
#include "keydb.h" /* fixme: Move this to import.c */
+#include "../common/membuf.h"
+
static ASSUAN_CONTEXT agent_ctx = NULL;
static int force_pipe_server = 0;
@@ -54,77 +56,9 @@ struct genkey_parm_s {
struct learn_parm_s {
int error;
ASSUAN_CONTEXT ctx;
- struct membuf *data;
+ membuf_t *data;
};
-struct membuf {
- size_t len;
- size_t size;
- char *buf;
- int out_of_core;
-};
-
-
-
-/* A simple implemnation of a dynamic buffer. Use init_membuf() to
- create a buffer, put_membuf to append bytes and get_membuf to
- release and return the buffer. Allocation errors are detected but
- only returned at the final get_membuf(), this helps not to clutter
- the code with out of core checks. */
-
-static void
-init_membuf (struct membuf *mb, int initiallen)
-{
- mb->len = 0;
- mb->size = initiallen;
- mb->out_of_core = 0;
- mb->buf = xtrymalloc (initiallen);
- if (!mb->buf)
- mb->out_of_core = 1;
-}
-
-static void
-put_membuf (struct membuf *mb, const void *buf, size_t len)
-{
- if (mb->out_of_core)
- return;
-
- if (mb->len + len >= mb->size)
- {
- char *p;
-
- mb->size += len + 1024;
- p = xtryrealloc (mb->buf, mb->size);
- if (!p)
- {
- mb->out_of_core = 1;
- return;
- }
- mb->buf = p;
- }
- memcpy (mb->buf + mb->len, buf, len);
- mb->len += len;
-}
-
-static void *
-get_membuf (struct membuf *mb, size_t *len)
-{
- char *p;
-
- if (mb->out_of_core)
- {
- xfree (mb->buf);
- mb->buf = NULL;
- return NULL;
- }
-
- p = mb->buf;
- *len = mb->len;
- mb->buf = NULL;
- mb->out_of_core = 1; /* don't allow a reuse */
- return p;
-}
-
/* Try to connect to the agent via socket or fork it off and work by
@@ -354,7 +288,7 @@ start_agent (void)
static AssuanError
membuf_data_cb (void *opaque, const void *buffer, size_t length)
{
- struct membuf *data = opaque;
+ membuf_t *data = opaque;
if (buffer)
put_membuf (data, buffer, length);
@@ -373,7 +307,7 @@ gpgsm_agent_pksign (const char *keygrip,
{
int rc, i;
char *p, line[ASSUAN_LINELENGTH];
- struct membuf data;
+ membuf_t data;
size_t len;
*r_buf = NULL;
@@ -448,7 +382,7 @@ gpgsm_agent_pkdecrypt (const char *keygrip,
{
int rc;
char line[ASSUAN_LINELENGTH];
- struct membuf data;
+ membuf_t data;
struct cipher_parm_s cipher_parm;
size_t n, len;
char *buf, *endp;
@@ -534,7 +468,7 @@ gpgsm_agent_genkey (KsbaConstSexp keyparms, KsbaSexp *r_pubkey)
{
int rc;
struct genkey_parm_s gk_parm;
- struct membuf data;
+ membuf_t data;
size_t len;
char *buf;
@@ -710,7 +644,7 @@ learn_cb (void *opaque, const void *buffer, size_t length)
keydb_store_cert (cert, 1, NULL);
}
else if (rc)
- log_error ("invalid certificate: %s\n", gnupg_strerror (rc));
+ log_error ("invalid certificate: %s\n", gpg_strerror (rc));
else
{
int existed;
@@ -735,7 +669,7 @@ gpgsm_agent_learn ()
{
int rc;
struct learn_parm_s learn_parm;
- struct membuf data;
+ membuf_t data;
size_t len;
rc = start_agent ();