summaryrefslogtreecommitdiffstats
path: root/openpgp-ffi/examples
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2019-03-21 12:58:33 +0100
committerJustus Winter <justus@sequoia-pgp.org>2019-03-21 14:59:26 +0100
commite3cb52fede1872f93371677224201228a62ae6ce (patch)
tree8da0c8d89a69e3d8ae6d165ee7505ed5647d2b0f /openpgp-ffi/examples
parentc04b985e0fe6f6b92b799702b290a521a8f5a912 (diff)
openpgp-ffi: Reify the decryption wrapper.
- See #154.
Diffstat (limited to 'openpgp-ffi/examples')
-rw-r--r--openpgp-ffi/examples/decrypt-with.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/openpgp-ffi/examples/decrypt-with.c b/openpgp-ffi/examples/decrypt-with.c
index b54de0fc..ae5e871d 100644
--- a/openpgp-ffi/examples/decrypt-with.c
+++ b/openpgp-ffi/examples/decrypt-with.c
@@ -89,11 +89,12 @@ get_secret_keys_cb (void *cookie_opaque,
int
main (int argc, char **argv)
{
- pgp_status_t rc;
pgp_error_t err;
pgp_tpk_t tpk;
pgp_reader_t source;
- pgp_writer_t sink;
+ pgp_reader_t plaintext;
+ uint8_t buf[1024];
+ ssize_t nread;
if (argc != 2)
error (1, 0, "Usage: %s <keyfile> <cipher >plain", argv[0]);
@@ -104,20 +105,24 @@ main (int argc, char **argv)
source = pgp_reader_from_fd (STDIN_FILENO);
assert (source);
- sink = pgp_writer_from_fd (STDOUT_FILENO);
- assert (sink);
struct decrypt_cookie cookie = {
.key = tpk,
.get_secret_keys_called = 0,
};
- rc = pgp_decrypt (&err, source, sink,
- get_public_keys_cb, get_secret_keys_cb,
- check_signatures_cb, &cookie);
- if (rc)
- error (1, 0, "pgp_decrypt: %s", pgp_error_to_string (err));
+ plaintext = pgp_decryptor_new (&err, source,
+ get_public_keys_cb, get_secret_keys_cb,
+ check_signatures_cb, &cookie);
+ if (! plaintext)
+ error (1, 0, "pgp_decryptor_new: %s", pgp_error_to_string (err));
+
+ while ((nread = pgp_reader_read (&err, plaintext, buf, sizeof buf)) > 0) {
+ write (STDOUT_FILENO, buf, nread);
+ }
+ if (nread < 0)
+ error (1, 0, "pgp_reader_read: %s", pgp_error_to_string (err));
- pgp_writer_free (sink);
+ pgp_reader_free (plaintext);
pgp_reader_free (source);
pgp_tpk_free (tpk);
return 0;