summaryrefslogtreecommitdiffstats
path: root/openpgp-ffi/examples/armor.c
diff options
context:
space:
mode:
Diffstat (limited to 'openpgp-ffi/examples/armor.c')
-rw-r--r--openpgp-ffi/examples/armor.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/openpgp-ffi/examples/armor.c b/openpgp-ffi/examples/armor.c
new file mode 100644
index 00000000..9b965c5b
--- /dev/null
+++ b/openpgp-ffi/examples/armor.c
@@ -0,0 +1,60 @@
+#define _GNU_SOURCE
+#include <assert.h>
+#include <error.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sequoia/openpgp.h>
+
+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_reader_t bytes;
+ sq_reader_t armor;
+ sq_armor_kind_t kind;
+ char message[12];
+ sq_armor_header_t *header;
+ size_t header_len;
+
+ 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 (&err, 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 (&err, armor, (uint8_t *) message, 12) < 0)
+ 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);
+ return 0;
+}