diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2019-03-21 12:58:33 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2019-03-21 14:59:26 +0100 |
commit | e3cb52fede1872f93371677224201228a62ae6ce (patch) | |
tree | 8da0c8d89a69e3d8ae6d165ee7505ed5647d2b0f /openpgp-ffi/examples | |
parent | c04b985e0fe6f6b92b799702b290a521a8f5a912 (diff) |
openpgp-ffi: Reify the decryption wrapper.
- See #154.
Diffstat (limited to 'openpgp-ffi/examples')
-rw-r--r-- | openpgp-ffi/examples/decrypt-with.c | 25 |
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; |