From 32e06d22c906f66f6cb94c942da0ab06bce53f14 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Tue, 8 Jan 2019 12:35:22 +0100 Subject: ffi: Add armor example. --- ffi/examples/.gitignore | 1 + ffi/examples/Makefile | 2 +- ffi/examples/armor.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 ffi/examples/armor.c (limited to 'ffi') diff --git a/ffi/examples/.gitignore b/ffi/examples/.gitignore index 396865df..17a9b656 100644 --- a/ffi/examples/.gitignore +++ b/ffi/examples/.gitignore @@ -4,3 +4,4 @@ keyserver reader parser encrypt-for +armor diff --git a/ffi/examples/Makefile b/ffi/examples/Makefile index d27526ad..4ca01078 100644 --- a/ffi/examples/Makefile +++ b/ffi/examples/Makefile @@ -5,7 +5,7 @@ CARGO_TARGET_DIR ?= $(shell pwd)/../../target # We currently only support absolute paths. CARGO_TARGET_DIR := $(abspath $(CARGO_TARGET_DIR)) -TARGETS = example keyserver configure reader parser encrypt-for +TARGETS = example keyserver configure reader parser encrypt-for armor CFLAGS = -I../include -O0 -g -Wall -Werror LDFLAGS = -L$(CARGO_TARGET_DIR)/debug -lsequoia_ffi diff --git a/ffi/examples/armor.c b/ffi/examples/armor.c new file mode 100644 index 00000000..a2643667 --- /dev/null +++ b/ffi/examples/armor.c @@ -0,0 +1,72 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include + +#include + +const char *armored = + "-----BEGIN PGP ARMORED FILE-----\n" + "Key0: Value0\n" + "Key1: Value1\n" + "\n" + "SGVsbG8gd29ybGQh\n" + "=s4Gu\n" + "-----END PGP ARMORED FILE-----\n"; + +int +main (int argc, char **argv) +{ + sq_error_t err; + sq_context_t ctx; + sq_reader_t bytes; + sq_reader_t armor; + sq_armor_kind_t kind; + char message[12]; + sq_armor_header_t *header; + size_t header_len; + + ctx = sq_context_new ("org.sequoia-pgp.example", &err); + if (ctx == NULL) + error (1, 0, "Initializing sequoia failed: %s", + sq_error_string (err)); + + bytes = sq_reader_from_bytes ((uint8_t *) armored, strlen (armored)); + armor = sq_armor_reader_new (bytes, SQ_ARMOR_KIND_ANY); + + header = sq_armor_reader_headers (ctx, armor, &header_len); + if (header == NULL) + error (1, 0, "Getting headers failed: %s", + sq_error_string (err)); + + assert (header_len == 2); + assert (strcmp (header[0].key, "Key0") == 0 + && strcmp (header[0].value, "Value0") == 0); + assert (strcmp (header[1].key, "Key1") == 0 + && strcmp (header[1].value, "Value1") == 0); + for (size_t i = 0; i < header_len; i++) + { + free (header[i].key); + free (header[i].value); + } + free (header); + + kind = sq_armor_reader_kind (armor); + assert (kind == SQ_ARMOR_KIND_FILE); + + if (sq_reader_read (ctx, armor, (uint8_t *) message, 12) < 0) + { + err = sq_context_last_error (ctx); + error (1, 0, "Reading failed: %s", + sq_error_string (err)); + } + + assert (memcmp (message, "Hello world!", 12) == 0); + + sq_reader_free (armor); + sq_reader_free (bytes); + sq_context_free (ctx); + return 0; +} -- cgit v1.2.3