Esempio n. 1
0
static void
test_b64enc_file (const char *fname)
{
  gpg_error_t err;
  struct b64state state;
  FILE *fp;
  char buffer[50];
  size_t nread;

  fp = fname ? fopen (fname, "r") : stdin;
  if (!fp)
    {
      fprintf (stderr, "%s:%d: can't open '%s': %s\n",
               __FILE__, __LINE__, fname? fname:"[stdin]", strerror (errno));
      fail (0);
    }

  err = b64enc_start (&state, stdout, "DATA");
  if (err)
    fail (1);

  while ( (nread = fread (buffer, 1, sizeof buffer, fp)) )
    {
      err = b64enc_write (&state, buffer, nread);
      if (err)
        fail (2);
    }

  err = b64enc_finish (&state);
  if (err)
    fail (3);

  fclose (fp);
  pass ();
}
Esempio n. 2
0
static gpg_error_t
armor_data (char **r_string, const void *data, size_t datalen)
{
  gpg_error_t err;
  struct b64state b64state;
  estream_t fp;
  long length;
  char *buffer;
  size_t nread;

  *r_string = NULL;

  fp = es_fopenmem (0, "rw");
  if (!fp)
    return gpg_error_from_syserror ();

  if ((err=b64enc_start_es (&b64state, fp, "PGP PUBLIC KEY BLOCK"))
      || (err=b64enc_write (&b64state, data, datalen))
      || (err = b64enc_finish (&b64state)))
    {
      es_fclose (fp);
      return err;
    }

  /* FIXME: To avoid the extra buffer allocation estream should
     provide a function to snatch the internal allocated memory from
     such a memory stream.  */
  length = es_ftell (fp);
  if (length < 0)
    {
      err = gpg_error_from_syserror ();
      es_fclose (fp);
      return err;
    }

  buffer = xtrymalloc (length+1);
  if (!buffer)
    {
      err = gpg_error_from_syserror ();
      es_fclose (fp);
      return err;
    }

  es_rewind (fp);
  if (es_read (fp, buffer, length, &nread))
    {
      err = gpg_error_from_syserror ();
      es_fclose (fp);
      return err;
    }
  buffer[nread] = 0;
  es_fclose (fp);

  *r_string = buffer;
  return 0;
}
Esempio n. 3
0
/* Print data as retrieved by the lookup function.  */
static gpg_error_t
data_cb (void *opaque, const void *buffer, size_t length)
{
  gpg_error_t err;
  struct b64state *state = opaque;

  if (buffer)
    {
      err = b64enc_write (state, buffer, length);
      if (err)
        log_error (_("error writing base64 encoding: %s\n"),
                   gpg_strerror (err));
    }
  return 0;
}
Esempio n. 4
0
static void
test_b64enc_pgp (const char *string)
{
  gpg_error_t err;
  struct b64state state;

  if (!string)
    string = "a";

  err = b64enc_start (&state, stdout, "PGP MESSAGE");
  if (err)
    fail (1);

  err = b64enc_write (&state, string, strlen (string));
  if (err)
    fail (2);

  err = b64enc_finish (&state);
  if (err)
    fail (3);

  pass ();
}