summaryrefslogtreecommitdiff
path: root/common/tests/test-pem.c
diff options
context:
space:
mode:
authorStef Walter <stefw@gnome.org>2013-01-23 12:15:27 +0100
committerStef Walter <stefw@gnome.org>2013-02-05 15:00:25 +0100
commit5df24bf0fb8532e0ebdf5f2366834848fdf6097d (patch)
treeb858952507533e8708650fd61a128eb41aa6819d /common/tests/test-pem.c
parent722efb88cf12261d705e2a6dfb4aceab9ff7b76f (diff)
Implement code for writing PEM
* Based on the gcr code * Bring in base64 output code from BSD * Make sure to output base64 lines of 64 character length since this is what OpenSSL expects
Diffstat (limited to 'common/tests/test-pem.c')
-rw-r--r--common/tests/test-pem.c114
1 files changed, 111 insertions, 3 deletions
diff --git a/common/tests/test-pem.c b/common/tests/test-pem.c
index 65a78d8..54a59d6 100644
--- a/common/tests/test-pem.c
+++ b/common/tests/test-pem.c
@@ -129,7 +129,7 @@ typedef struct {
int input_index;
int output_index;
int parsed;
-} SuccessClosure;
+} Closure;
static void
on_parse_pem_success (const char *type,
@@ -137,7 +137,7 @@ on_parse_pem_success (const char *type,
size_t length,
void *user_data)
{
- SuccessClosure *cl = user_data;
+ Closure *cl = user_data;
CuAssertIntEquals (cl->cu, success_fixtures[cl->input_index].output[cl->output_index].length, length);
CuAssertTrue (cl->cu, memcmp (success_fixtures[cl->input_index].output[cl->output_index].data, contents,
@@ -150,7 +150,7 @@ on_parse_pem_success (const char *type,
static void
test_pem_success (CuTest *cu)
{
- SuccessClosure cl;
+ Closure cl;
int ret;
int i;
int j;
@@ -232,6 +232,113 @@ test_pem_failure (CuTest *cu)
}
}
+typedef struct {
+ const char *input;
+ size_t length;
+ const char *type;
+ const char *output;
+} WriteFixture;
+
+typedef struct {
+ CuTest *cu;
+ WriteFixture *fixture;
+} WriteClosure;
+
+static WriteFixture write_fixtures[] = {
+ {
+ "\x69\x83\x4d\x5e\xab\x21\x95\x5c\x42\x76\x8f\x10\x7c\xa7\x97\x87"
+ "\x71\x94\xcd\xdf\xf2\x9f\x82\xd8\x21\x58\x10\xaf\x1e\x1a",
+ 30, "BLOCK1",
+ "-----BEGIN BLOCK1-----\n"
+ "aYNNXqshlVxCdo8QfKeXh3GUzd/yn4LYIVgQrx4a\n"
+ "-----END BLOCK1-----\n",
+ },
+ {
+ "\x50\x31\x31\x2d\x4b\x49\x54\x0a\x0a\x50\x72\x6f\x76\x69\x64\x65"
+ "\x73\x20\x61\x20\x77\x61\x79\x20\x74\x6f\x20\x6c\x6f\x61\x64\x20"
+ "\x61\x6e\x64\x20\x65\x6e\x75\x6d\x65\x72\x61\x74\x65\x20\x50\x4b"
+ "\x43\x53\x23\x31\x31\x20\x6d\x6f\x64\x75\x6c\x65\x73\x2e\x20\x50"
+ "\x72\x6f\x76\x69\x64\x65\x73\x20\x61\x20\x73\x74\x61\x6e\x64\x61"
+ "\x72\x64\x0a\x63\x6f\x6e\x66\x69\x67\x75\x72\x61\x74\x69\x6f\x6e"
+ "\x20\x73\x65\x74\x75\x70\x20\x66\x6f\x72\x20\x69\x6e\x73\x74\x61"
+ "\x6c\x6c\x69\x6e\x67\x20\x50\x4b\x43\x53\x23\x31\x31\x20\x6d\x6f"
+ "\x64\x75\x6c\x65\x73\x20\x69\x6e\x20\x73\x75\x63\x68\x20\x61\x20"
+ "\x77\x61\x79\x20\x74\x68\x61\x74\x20\x74\x68\x65\x79\x27\x72\x65"
+ "\x0a\x64\x69\x73\x63\x6f\x76\x65\x72\x61\x62\x6c\x65\x2e\x0a\x0a"
+ "\x41\x6c\x73\x6f\x20\x73\x6f\x6c\x76\x65\x73\x20\x70\x72\x6f\x62"
+ "\x6c\x65\x6d\x73\x20\x77\x69\x74\x68\x20\x63\x6f\x6f\x72\x64\x69"
+ "\x6e\x61\x74\x69\x6e\x67\x20\x74\x68\x65\x20\x75\x73\x65\x20\x6f"
+ "\x66\x20\x50\x4b\x43\x53\x23\x31\x31\x20\x62\x79\x20\x64\x69\x66"
+ "\x66\x65\x72\x65\x6e\x74\x0a\x63\x6f\x6d\x70\x6f\x6e\x65\x6e\x74"
+ "\x73\x20\x6f\x72\x20\x6c\x69\x62\x72\x61\x72\x69\x65\x73\x20\x6c"
+ "\x69\x76\x69\x6e\x67\x20\x69\x6e\x20\x74\x68\x65\x20\x73\x61\x6d"
+ "\x65\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x0a",
+ 299, "LONG TYPE WITH SPACES",
+ "-----BEGIN LONG TYPE WITH SPACES-----\n"
+ "UDExLUtJVAoKUHJvdmlkZXMgYSB3YXkgdG8gbG9hZCBhbmQgZW51bWVyYXRlIFBL\n"
+ "Q1MjMTEgbW9kdWxlcy4gUHJvdmlkZXMgYSBzdGFuZGFyZApjb25maWd1cmF0aW9u\n"
+ "IHNldHVwIGZvciBpbnN0YWxsaW5nIFBLQ1MjMTEgbW9kdWxlcyBpbiBzdWNoIGEg\n"
+ "d2F5IHRoYXQgdGhleSdyZQpkaXNjb3ZlcmFibGUuCgpBbHNvIHNvbHZlcyBwcm9i\n"
+ "bGVtcyB3aXRoIGNvb3JkaW5hdGluZyB0aGUgdXNlIG9mIFBLQ1MjMTEgYnkgZGlm\n"
+ "ZmVyZW50CmNvbXBvbmVudHMgb3IgbGlicmFyaWVzIGxpdmluZyBpbiB0aGUgc2Ft\n"
+ "ZSBwcm9jZXNzLgo=\n"
+ "-----END LONG TYPE WITH SPACES-----\n"
+ },
+ {
+ "\x69\x83\x4d\x5e\xab\x21\x95\x5c\x42\x76\x8f\x10\x7c\xa7\x97\x87"
+ "\x71\x94\xcd\xdf\xf2\x9f\x82\xd8\x21\x58\x10\xaf",
+ 28, "BLOCK1",
+ "-----BEGIN BLOCK1-----\n"
+ "aYNNXqshlVxCdo8QfKeXh3GUzd/yn4LYIVgQrw==\n"
+ "-----END BLOCK1-----\n",
+ },
+ {
+ NULL,
+ }
+};
+
+static void
+on_parse_written (const char *type,
+ const unsigned char *contents,
+ size_t length,
+ void *user_data)
+{
+ WriteClosure *cl = user_data;
+
+ CuAssertStrEquals (cl->cu, cl->fixture->type, type);
+ CuAssertIntEquals (cl->cu, cl->fixture->length, length);
+ CuAssertTrue (cl->cu, memcmp (contents, cl->fixture->input, length) == 0);
+}
+
+static void
+test_pem_write (CuTest *cu)
+{
+ WriteFixture *fixture;
+ WriteClosure cl;
+ size_t length;
+ char *output;
+ unsigned int count;
+ int i;
+
+ for (i = 0; write_fixtures[i].input != NULL; i++) {
+ fixture = write_fixtures + i;
+
+ output = p11_pem_write ((unsigned char *)fixture->input,
+ fixture->length,
+ fixture->type, &length);
+ CuAssertStrEquals (cu, fixture->output, output);
+ CuAssertIntEquals (cu, strlen (fixture->output), length);
+
+ cl.fixture = fixture;
+ cl.cu = cu;
+
+ count = p11_pem_parse (output, length, on_parse_written, &cl);
+ CuAssertIntEquals (cu, 1, count);
+
+ free (output);
+ }
+}
+
int
main (void)
{
@@ -241,6 +348,7 @@ main (void)
SUITE_ADD_TEST (suite, test_pem_success);
SUITE_ADD_TEST (suite, test_pem_failure);
+ SUITE_ADD_TEST (suite, test_pem_write);
CuSuiteRun (suite);
CuSuiteSummary (suite, output);