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 (); }
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; }
/* 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; }
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 (); }