annotate src/lib-dcrypt/test-crypto.c @ 20376:7e58d005fbe0

lib-dcrypt: Allow specifying crypto_device (OpenSSL engine).
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 20 Jun 2016 13:33:34 +0300
parents 2a05c653d223
children cf3bb56f9ce9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
1 #include "lib.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
2 #include "buffer.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
3 #include "str.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
4 #include "dcrypt.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
5 #include "ostream.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
6 #include "ostream-encrypt.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
7 #include "istream.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
8 #include "istream-decrypt.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
9 #include "iostream-temp.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
10 #include "randgen.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
11 #include "test-common.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
12 #include "hex-binary.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
13 #include <fcntl.h>
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
14 #include <sys/stat.h>
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
15 #include <stdio.h>
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
16
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
17
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
18 static
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
19 void test_cipher_test_vectors(void)
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
20 {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
21 static struct {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
22 const char *key;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
23 const char *iv;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
24 const char *pt;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
25 const char *ct;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
26 } vectors[] =
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
27 {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
28 { "2b7e151628aed2a6abf7158809cf4f3c", "000102030405060708090a0b0c0d0e0f", "6bc1bee22e409f96e93d7e117393172a", "7649abac8119b246cee98e9b12e9197d" },
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
29 { "2b7e151628aed2a6abf7158809cf4f3c", "7649ABAC8119B246CEE98E9B12E9197D", "ae2d8a571e03ac9c9eb76fac45af8e51", "5086cb9b507219ee95db113a917678b2" }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
30 };
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
31
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
32
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
33 test_begin("test_cipher_test_vectors");
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
34
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
35 buffer_t *key,*iv,*pt,*ct,*res_enc,*res_dec;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
36
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
37 key = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
38 iv = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
39 pt = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
40 ct = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
41
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
42 res_enc = buffer_create_dynamic(pool_datastack_create(), 32);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
43 res_dec = buffer_create_dynamic(pool_datastack_create(), 32);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
44
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
45 for(size_t i = 0; i < N_ELEMENTS(vectors); i++) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
46 struct dcrypt_context_symmetric *ctx;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
47
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
48 buffer_set_used_size(key, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
49 buffer_set_used_size(iv, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
50 buffer_set_used_size(pt, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
51 buffer_set_used_size(ct, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
52 buffer_set_used_size(res_enc, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
53 buffer_set_used_size(res_dec, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
54
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
55 hex_to_binary(vectors[i].key, key);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
56 hex_to_binary(vectors[i].iv, iv);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
57 hex_to_binary(vectors[i].pt, pt);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
58 hex_to_binary(vectors[i].ct, ct);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
59
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
60 if (!dcrypt_ctx_sym_create("AES-128-CBC", DCRYPT_MODE_ENCRYPT, &ctx, NULL)) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
61 test_assert_failed("dcrypt_ctx_sym_create", __FILE__, __LINE__-1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
62 continue;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
63 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
64
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
65 dcrypt_ctx_sym_set_padding(ctx, FALSE);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
66
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
67 dcrypt_ctx_sym_set_key(ctx, key->data, key->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
68 dcrypt_ctx_sym_set_iv(ctx, iv->data, iv->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
69
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
70 test_assert_idx(dcrypt_ctx_sym_init(ctx, NULL), i);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
71
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
72 test_assert_idx(dcrypt_ctx_sym_update(ctx, pt->data, pt->used, res_enc, NULL), i);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
73 test_assert_idx(dcrypt_ctx_sym_final(ctx, res_enc, NULL), i);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
74
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
75 test_assert_idx(buffer_cmp(ct, res_enc), i);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
76
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
77 dcrypt_ctx_sym_destroy(&ctx);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
78
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
79 if (!dcrypt_ctx_sym_create("AES-128-CBC", DCRYPT_MODE_DECRYPT, &ctx, NULL)) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
80 test_assert_failed("dcrypt_ctx_sym_create", __FILE__, __LINE__-1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
81 continue;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
82 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
83
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
84 dcrypt_ctx_sym_set_padding(ctx, FALSE);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
85
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
86 dcrypt_ctx_sym_set_key(ctx, key->data, key->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
87 dcrypt_ctx_sym_set_iv(ctx, iv->data, iv->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
88
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
89 test_assert_idx(dcrypt_ctx_sym_init(ctx, NULL), i);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
90 test_assert_idx(dcrypt_ctx_sym_update(ctx, res_enc->data, res_enc->used, res_dec, NULL), i);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
91 test_assert_idx(dcrypt_ctx_sym_final(ctx, res_dec, NULL), i);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
92
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
93 test_assert_idx(buffer_cmp(pt, res_dec), i);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
94
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
95 dcrypt_ctx_sym_destroy(&ctx);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
96 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
97
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
98 test_end();
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
99 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
100
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
101 static
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
102 void test_cipher_aead_test_vectors(void)
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
103 {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
104 struct dcrypt_context_symmetric *ctx;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
105 const char *error = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
106
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
107 test_begin("test_cipher_aead_test_vectors");
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
108
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
109 if (!dcrypt_ctx_sym_create("aes-128-gcm", DCRYPT_MODE_ENCRYPT, &ctx, &error)) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
110 test_assert_failed("dcrypt_ctx_sym_create", __FILE__, __LINE__-1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
111 return;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
112 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
113
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
114 buffer_t *key, *iv, *aad, *pt, *ct, *tag, *tag_res, *res;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
115
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
116 key = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
117 iv = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
118 aad = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
119 pt = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
120 ct = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
121 tag = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
122 res = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
123 tag_res = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
124
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
125 hex_to_binary("feffe9928665731c6d6a8f9467308308", key);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
126 hex_to_binary("cafebabefacedbaddecaf888", iv);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
127 hex_to_binary("d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255", pt);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
128 hex_to_binary("42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985", ct);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
129 hex_to_binary("4d5c2af327cd64a62cf35abd2ba6fab4", tag);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
130
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
131 dcrypt_ctx_sym_set_key(ctx, key->data, key->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
132 dcrypt_ctx_sym_set_iv(ctx, iv->data, iv->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
133 dcrypt_ctx_sym_set_aad(ctx, aad->data, aad->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
134 test_assert(dcrypt_ctx_sym_init(ctx, &error));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
135 test_assert(dcrypt_ctx_sym_update(ctx, pt->data, pt->used, res, &error));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
136 test_assert(dcrypt_ctx_sym_final(ctx, res, &error));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
137 dcrypt_ctx_sym_get_tag(ctx, tag_res);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
138
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
139 test_assert(buffer_cmp(ct, res) == TRUE);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
140 test_assert(buffer_cmp(tag, tag_res) == TRUE);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
141
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
142 dcrypt_ctx_sym_destroy(&ctx);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
143
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
144 if (!dcrypt_ctx_sym_create("aes-128-gcm", DCRYPT_MODE_DECRYPT, &ctx, &error)) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
145 test_assert_failed("dcrypt_ctx_sym_create", __FILE__, __LINE__-1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
146 } else {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
147
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
148 buffer_set_used_size(res, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
149
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
150 dcrypt_ctx_sym_set_key(ctx, key->data, key->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
151 dcrypt_ctx_sym_set_iv(ctx, iv->data, iv->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
152 dcrypt_ctx_sym_set_aad(ctx, aad->data, aad->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
153 dcrypt_ctx_sym_set_tag(ctx, tag->data, tag->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
154 test_assert(dcrypt_ctx_sym_init(ctx, &error));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
155 test_assert(dcrypt_ctx_sym_update(ctx, ct->data, ct->used, res, &error));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
156 test_assert(dcrypt_ctx_sym_final(ctx, res, &error));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
157
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
158 test_assert(buffer_cmp(pt, res) == TRUE);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
159
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
160 dcrypt_ctx_sym_destroy(&ctx);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
161 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
162
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
163 test_end();
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
164 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
165
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
166 static
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
167 void test_hmac_test_vectors(void)
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
168 {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
169 buffer_t *pt, *ct, *key, *res;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
170 pt = buffer_create_dynamic(pool_datastack_create(), 50);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
171 key = buffer_create_dynamic(pool_datastack_create(), 20);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
172 ct = buffer_create_dynamic(pool_datastack_create(), 32);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
173 res = buffer_create_dynamic(pool_datastack_create(), 32);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
174
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
175 hex_to_binary("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", key);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
176 hex_to_binary("dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd", pt);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
177 hex_to_binary("773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe", res);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
178
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
179 struct dcrypt_context_hmac *hctx;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
180 if (!dcrypt_ctx_hmac_create("sha256", &hctx, NULL)) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
181 test_assert_failed("dcrypt_ctx_hmac_create", __FILE__, __LINE__-1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
182 } else {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
183 dcrypt_ctx_hmac_set_key(hctx, key->data, key->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
184 test_assert(dcrypt_ctx_hmac_init(hctx, NULL));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
185 test_assert(dcrypt_ctx_hmac_update(hctx, pt->data, pt->used, NULL));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
186 test_assert(dcrypt_ctx_hmac_final(hctx, ct, NULL));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
187 test_assert(buffer_cmp(ct, res));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
188 dcrypt_ctx_hmac_destroy(&hctx);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
189 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
190 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
191
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
192 static
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
193 void test_load_v1_key(void)
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
194 {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
195 test_begin("test_load_v1_key");
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
196
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
197 buffer_t *key_1 = buffer_create_dynamic(pool_datastack_create(), 128);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
198
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
199 struct dcrypt_private_key *pkey, *pkey2;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
200 const char *error = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
201
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
202 test_assert(dcrypt_key_load_private(&pkey, DCRYPT_FORMAT_DOVECOT, "1\t716\t0\t048FD04FD3612B22D32790C592CF21CEF417EFD2EA34AE5F688FA5B51BED29E05A308B68DA78E16E90B47A11E133BD9A208A2894FD01B0BEE865CE339EA3FB17AC\td0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0", NULL, NULL, &error));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
203 if (pkey != NULL) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
204 buffer_set_used_size(key_1, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
205 /* check that key_id matches */
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
206 struct dcrypt_public_key *pubkey = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
207 dcrypt_key_convert_private_to_public(pkey, &pubkey, &error);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
208 dcrypt_key_store_public(pubkey, DCRYPT_FORMAT_DOVECOT, key_1, NULL);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
209 buffer_set_used_size(key_1, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
210 dcrypt_key_id_public(pubkey, "sha256", key_1, &error);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
211 test_assert(strcmp("792caad4d38c9eb2134a0cbc844eae386116de096a0ccafc98479825fc99b6a1", binary_to_hex(key_1->data, key_1->used)) == 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
212
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
213 dcrypt_key_free_public(&pubkey);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
214 pkey2 = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
216 test_assert(dcrypt_key_load_private(&pkey2, DCRYPT_FORMAT_DOVECOT, "1\t716\t1\t0567e6bf9579813ae967314423b0fceb14bda24749303923de9a9bb9370e0026f995901a57e63113eeb2baf0c940e978d00686cbb52bd5014bc318563375876255\t0300E46DA2125427BE968EB3B649910CDC4C405E5FFDE18D433A97CABFEE28CEEFAE9EE356C792004FFB80981D67E741B8CC036A34235A8D2E1F98D1658CFC963D07EB\td0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0\t7c9a1039ea2e4fed73e81dd3ffc3fa22ea4a28352939adde7bf8ea858b00fa4f", NULL, pkey, &error));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
217 if (pkey2 != NULL) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
218 buffer_set_used_size(key_1, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
219 /* check that key_id matches */
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
220 struct dcrypt_public_key *pubkey = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
221 dcrypt_key_convert_private_to_public(pkey2, &pubkey, &error);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
222 dcrypt_key_store_public(pubkey, DCRYPT_FORMAT_DOVECOT, key_1, NULL);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
223 buffer_set_used_size(key_1, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
224 dcrypt_key_id_public_old(pubkey, key_1, &error);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
225 test_assert(strcmp("7c9a1039ea2e4fed73e81dd3ffc3fa22ea4a28352939adde7bf8ea858b00fa4f", binary_to_hex(key_1->data, key_1->used)) == 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
226
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
227 dcrypt_key_free_public(&pubkey);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
228 dcrypt_key_free_private(&pkey2);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
229 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
230 dcrypt_key_free_private(&pkey);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
231 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
232
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
233 test_end();
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
234 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
235
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
236 static
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
237 void test_load_v2_key(void)
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
238 {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
239 const char *keys[] = {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
240 "-----BEGIN PRIVATE KEY-----\n" \
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
241 "MGcCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcETTBLAgEBBCC25AkD65uhlZXCAdwN\n" \
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
242 "yLJV2ui8A/CUyqyEMrezvwgMO6EkAyIAAybRUR3MsH0+0PQcDwkrXOJ9aePwzTQV\n" \
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
243 "DN51+n1JCxbI\n" \
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
244 "-----END PRIVATE KEY-----\n",
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
245 "2\t1.2.840.10045.3.1.7\t0\t0000002100b6e40903eb9ba19595c201dc0dc8b255dae8bc03f094caac8432b7b3bf080c3b\tab13d251976dedab546b67354e7678821740dd534b749c2857f66bf62bbaddfd",
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
246 "2\t1.2.840.10045.3.1.7\t2\taes-256-ctr\t2b19763d4bbf7754\tsha256\t2048\tc36fa194669a1aec400eae32fbadaa7c58b14f53c464cfbb0a4b61fbe24ab7750637c4025d\tab13d251976dedab546b67354e7678821740dd534b749c2857f66bf62bbaddfd",
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
247 "2\t1.2.840.10045.3.1.7\t1\taes-256-ctr\t7c7f1d12a7c011de\tsha256\t2048\tf5d1de11d58a81b141cf038012a618623e9d7b18062deeb3a4e35872c62ca0837db8688370\t021abfbc5bc4f6cf49c40b9fc388c4616ea079941675f477ee4557df1919626d35\tab13d251976dedab546b67354e7678821740dd534b749c2857f66bf62bbaddfd\tab13d251976dedab546b67354e7678821740dd534b749c2857f66bf62bbaddfd"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
248 };
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
249
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
250 test_begin("test_load_v2_key");
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
251 const char *error = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
252 buffer_t *tmp = buffer_create_dynamic(default_pool, 256);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
253
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
254 struct dcrypt_private_key *priv,*priv2;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
255
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
256 test_assert_idx(dcrypt_key_load_private(&priv2, DCRYPT_FORMAT_PEM, keys[0], NULL, NULL, &error), 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
257 test_assert_idx(dcrypt_key_store_private(priv2, DCRYPT_FORMAT_PEM, NULL, tmp, NULL, NULL, &error), 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
258 test_assert_idx(strcmp(str_c(tmp), keys[0])==0, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
259 buffer_set_used_size(tmp, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
260
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
261 test_assert_idx(dcrypt_key_load_private(&priv, DCRYPT_FORMAT_DOVECOT, keys[1], NULL, NULL, &error), 1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
262 test_assert_idx(dcrypt_key_store_private(priv, DCRYPT_FORMAT_DOVECOT, NULL, tmp, NULL, NULL, &error), 1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
263 test_assert_idx(strcmp(str_c(tmp), keys[1])==0, 1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
264 buffer_set_used_size(tmp, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
265 dcrypt_key_free_private(&priv);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
266
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
267 test_assert_idx(dcrypt_key_load_private(&priv, DCRYPT_FORMAT_DOVECOT, keys[2], "This Is Sparta", NULL, &error), 2);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
268 test_assert_idx(dcrypt_key_store_private(priv, DCRYPT_FORMAT_DOVECOT, "aes-256-ctr", tmp, "This Is Sparta", NULL, &error), 2);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
269 buffer_set_used_size(tmp, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
270 dcrypt_key_free_private(&priv);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
271
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
272 struct dcrypt_public_key *pub = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
273 test_assert_idx(dcrypt_key_convert_private_to_public(priv2, &pub, &error), 3);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
274 test_assert_idx(dcrypt_key_load_private(&priv, DCRYPT_FORMAT_DOVECOT, keys[3], NULL, priv2, &error), 3);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
275 test_assert_idx(dcrypt_key_store_private(priv, DCRYPT_FORMAT_DOVECOT, "ecdh-aes-256-ctr", tmp, NULL, pub, &error), 3);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
276 buffer_set_used_size(tmp, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
277 dcrypt_key_free_private(&priv2);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
278 dcrypt_key_free_private(&priv);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
279 dcrypt_key_free_public(&pub);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
280
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
281 buffer_free(&tmp);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
282
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
283 if (error != NULL) error = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
284
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
285 test_end();
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
286 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
287
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
288 static
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
289 void test_load_v2_public_key(void)
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
290 {
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
291 struct dcrypt_public_key *pub;
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
292 const char *error;
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
293
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
294 test_begin("test_load_v2_public_key");
20338
2a05c653d223 lib-dcrypt: Use a more supported EC curve in unit test
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20334
diff changeset
295 const char *key = "2\t3058301006072a8648ce3d020106052b810400230344000301c50954e734dd8b410a607764a7057065a45510da52f2c6e28e0cb353b9c389fa8cb786943ae991fce9befed78fb162fbbc615415f06af06c8cc80c37f4e94ff6c7";
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
296
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
297 test_assert(dcrypt_key_load_public(&pub, DCRYPT_FORMAT_DOVECOT, key, &error));
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
298
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
299 buffer_t *tmp = buffer_create_dynamic(default_pool, 256);
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
300
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
301 test_assert(dcrypt_key_store_public(pub, DCRYPT_FORMAT_DOVECOT, tmp, &error));
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
302
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
303 test_assert(strcmp(key, str_c(tmp))==0);
20334
48c76b6c84dc lib-dcrypt: Fixed memory leak in test-crypto unit test
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20326
diff changeset
304 buffer_free(&tmp);
48c76b6c84dc lib-dcrypt: Fixed memory leak in test-crypto unit test
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20326
diff changeset
305 dcrypt_key_free_public(&pub);
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
306
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
307 test_end();
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
308 }
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
309
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
310 int main(void) {
20376
7e58d005fbe0 lib-dcrypt: Allow specifying crypto_device (OpenSSL engine).
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20338
diff changeset
311 dcrypt_initialize("openssl", NULL, NULL);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
312 random_init();
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
313 static void (*test_functions[])(void) = {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
314 test_cipher_test_vectors,
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
315 test_cipher_aead_test_vectors,
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
316 test_hmac_test_vectors,
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
317 test_load_v1_key,
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
318 test_load_v2_key,
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
319 test_load_v2_public_key,
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
320 NULL
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
321 };
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
322
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
323 int ret;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
324
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
325 ret = test_run(test_functions);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
326
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
327 return ret;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
328 }