annotate src/lib-dcrypt/test-crypto.c @ 22346:bfe785a8ae62

lib-storage: Clarify keywords handling in mail_save_finish
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Thu, 29 Jun 2017 13:22:32 +0300
parents d7227df3624d
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 21389
diff changeset
1 /* Copyright (c) 2016-2017 Dovecot authors, see the included COPYING file */
21264
8f33680c6722 global: Added missing copyright notices.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 21232
diff changeset
2
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
3 #include "lib.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
4 #include "buffer.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
5 #include "str.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
6 #include "dcrypt.h"
20596
9a2ac2a69648 lib-dcrypt: add dcrypt-iostream.h
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20581
diff changeset
7 #include "dcrypt-iostream.h"
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
8 #include "ostream.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
9 #include "ostream-encrypt.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
10 #include "istream.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
11 #include "iostream-temp.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
12 #include "randgen.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
13 #include "test-common.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
14 #include "hex-binary.h"
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
15 #include <fcntl.h>
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
16 #include <sys/stat.h>
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
17 #include <stdio.h>
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
18
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
19
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
20 static
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
21 void test_cipher_test_vectors(void)
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
22 {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
23 static struct {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
24 const char *key;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
25 const char *iv;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
26 const char *pt;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
27 const char *ct;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
28 } vectors[] =
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
29 {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
30 { "2b7e151628aed2a6abf7158809cf4f3c", "000102030405060708090a0b0c0d0e0f", "6bc1bee22e409f96e93d7e117393172a", "7649abac8119b246cee98e9b12e9197d" },
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
31 { "2b7e151628aed2a6abf7158809cf4f3c", "7649ABAC8119B246CEE98E9B12E9197D", "ae2d8a571e03ac9c9eb76fac45af8e51", "5086cb9b507219ee95db113a917678b2" }
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
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 test_begin("test_cipher_test_vectors");
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 buffer_t *key,*iv,*pt,*ct,*res_enc,*res_dec;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
38
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
39 key = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
40 iv = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
41 pt = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
42 ct = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
43
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
44 res_enc = buffer_create_dynamic(pool_datastack_create(), 32);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
45 res_dec = buffer_create_dynamic(pool_datastack_create(), 32);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
46
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
47 for(size_t i = 0; i < N_ELEMENTS(vectors); i++) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
48 struct dcrypt_context_symmetric *ctx;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
49
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
50 buffer_set_used_size(key, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
51 buffer_set_used_size(iv, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
52 buffer_set_used_size(pt, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
53 buffer_set_used_size(ct, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
54 buffer_set_used_size(res_enc, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
55 buffer_set_used_size(res_dec, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
56
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
57 hex_to_binary(vectors[i].key, key);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
58 hex_to_binary(vectors[i].iv, iv);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
59 hex_to_binary(vectors[i].pt, pt);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
60 hex_to_binary(vectors[i].ct, ct);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
61
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
62 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
63 test_assert_failed("dcrypt_ctx_sym_create", __FILE__, __LINE__-1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
64 continue;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
65 }
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_padding(ctx, FALSE);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
68
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
69 dcrypt_ctx_sym_set_key(ctx, key->data, key->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
70 dcrypt_ctx_sym_set_iv(ctx, iv->data, iv->used);
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_init(ctx, NULL), i);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
73
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
74 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
75 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
76
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
77 test_assert_idx(buffer_cmp(ct, res_enc), i);
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 dcrypt_ctx_sym_destroy(&ctx);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
80
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
81 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
82 test_assert_failed("dcrypt_ctx_sym_create", __FILE__, __LINE__-1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
83 continue;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
84 }
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_padding(ctx, FALSE);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
87
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
88 dcrypt_ctx_sym_set_key(ctx, key->data, key->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
89 dcrypt_ctx_sym_set_iv(ctx, iv->data, iv->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
90
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
91 test_assert_idx(dcrypt_ctx_sym_init(ctx, NULL), i);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
92 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
93 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
94
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
95 test_assert_idx(buffer_cmp(pt, res_dec), i);
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 dcrypt_ctx_sym_destroy(&ctx);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
98 }
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 test_end();
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
101 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
102
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
103 static
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
104 void test_cipher_aead_test_vectors(void)
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
105 {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
106 struct dcrypt_context_symmetric *ctx;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
107 const char *error = NULL;
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 test_begin("test_cipher_aead_test_vectors");
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
110
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
111 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
112 test_assert_failed("dcrypt_ctx_sym_create", __FILE__, __LINE__-1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
113 return;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
114 }
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 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
117
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
118 key = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
119 iv = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
120 aad = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
121 pt = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
122 ct = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
123 tag = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
124 res = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
125 tag_res = buffer_create_dynamic(pool_datastack_create(), 16);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
126
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
127 hex_to_binary("feffe9928665731c6d6a8f9467308308", key);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
128 hex_to_binary("cafebabefacedbaddecaf888", iv);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
129 hex_to_binary("d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255", pt);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
130 hex_to_binary("42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985", ct);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
131 hex_to_binary("4d5c2af327cd64a62cf35abd2ba6fab4", tag);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
132
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
133 dcrypt_ctx_sym_set_key(ctx, key->data, key->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
134 dcrypt_ctx_sym_set_iv(ctx, iv->data, iv->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
135 dcrypt_ctx_sym_set_aad(ctx, aad->data, aad->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
136 test_assert(dcrypt_ctx_sym_init(ctx, &error));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
137 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
138 test_assert(dcrypt_ctx_sym_final(ctx, res, &error));
20402
b5bc1e6b0574 lib-dcrypt: Check for all the return values in unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20398
diff changeset
139 test_assert(dcrypt_ctx_sym_get_tag(ctx, tag_res));
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
140
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
141 test_assert(buffer_cmp(ct, res) == TRUE);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
142 test_assert(buffer_cmp(tag, tag_res) == TRUE);
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 dcrypt_ctx_sym_destroy(&ctx);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
145
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
146 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
147 test_assert_failed("dcrypt_ctx_sym_create", __FILE__, __LINE__-1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
148 } else {
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 buffer_set_used_size(res, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
151
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
152 dcrypt_ctx_sym_set_key(ctx, key->data, key->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
153 dcrypt_ctx_sym_set_iv(ctx, iv->data, iv->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
154 dcrypt_ctx_sym_set_aad(ctx, aad->data, aad->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
155 dcrypt_ctx_sym_set_tag(ctx, tag->data, tag->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
156 test_assert(dcrypt_ctx_sym_init(ctx, &error));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
157 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
158 test_assert(dcrypt_ctx_sym_final(ctx, res, &error));
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 test_assert(buffer_cmp(pt, res) == TRUE);
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 dcrypt_ctx_sym_destroy(&ctx);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
163 }
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 test_end();
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
166 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
167
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
168 static
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
169 void test_hmac_test_vectors(void)
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
170 {
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
171 test_begin("test_hmac_test_vectors");
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
172
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
173 buffer_t *pt, *ct, *key, *res;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
174 pt = buffer_create_dynamic(pool_datastack_create(), 50);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
175 key = buffer_create_dynamic(pool_datastack_create(), 20);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
176 ct = buffer_create_dynamic(pool_datastack_create(), 32);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
177 res = buffer_create_dynamic(pool_datastack_create(), 32);
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 hex_to_binary("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", key);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
180 hex_to_binary("dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd", pt);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
181 hex_to_binary("773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe", res);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
182
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
183 struct dcrypt_context_hmac *hctx;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
184 if (!dcrypt_ctx_hmac_create("sha256", &hctx, NULL)) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
185 test_assert_failed("dcrypt_ctx_hmac_create", __FILE__, __LINE__-1);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
186 } else {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
187 dcrypt_ctx_hmac_set_key(hctx, key->data, key->used);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
188 test_assert(dcrypt_ctx_hmac_init(hctx, NULL));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
189 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
190 test_assert(dcrypt_ctx_hmac_final(hctx, ct, NULL));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
191 test_assert(buffer_cmp(ct, res));
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
192 dcrypt_ctx_hmac_destroy(&hctx);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
193 }
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
194
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
195 test_end();
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
196 }
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
197
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
198 static
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
199 void test_load_v1_keys(void)
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
200 {
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
201 test_begin("test_load_v1_keys");
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
202
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
203 const char *error = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
204 const char *data1 = "1\t716\t1\t0567e6bf9579813ae967314423b0fceb14bda24749303923de9a9bb9370e0026f995901a57e63113eeb2baf0c940e978d00686cbb52bd5014bc318563375876255\t0300E46DA2125427BE968EB3B649910CDC4C405E5FFDE18D433A97CABFEE28CEEFAE9EE356C792004FFB80981D67E741B8CC036A34235A8D2E1F98D1658CFC963D07EB\td0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0\t7c9a1039ea2e4fed73e81dd3ffc3fa22ea4a28352939adde7bf8ea858b00fa4f";
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
205
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
206 enum dcrypt_key_format format;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
207 enum dcrypt_key_version version;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
208 enum dcrypt_key_kind kind;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
209 enum dcrypt_key_encryption_type encryption_type;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
210 const char *encryption_key_hash = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
211 const char *key_hash = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
212
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
213 bool ret = dcrypt_key_string_get_info(data1, &format, &version,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
214 &kind, &encryption_type, &encryption_key_hash,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
215 &key_hash, &error);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
216
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
217 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
218 test_assert(error == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
219 test_assert(format == DCRYPT_FORMAT_DOVECOT);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
220 test_assert(version == DCRYPT_KEY_VERSION_1);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
221 test_assert(kind == DCRYPT_KEY_KIND_PRIVATE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
222 test_assert(encryption_type == DCRYPT_KEY_ENCRYPTION_TYPE_KEY);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
223 test_assert(strcmp(encryption_key_hash, "d0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0") == 0);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
224 test_assert(strcmp(key_hash, "7c9a1039ea2e4fed73e81dd3ffc3fa22ea4a28352939adde7bf8ea858b00fa4f") == 0);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
225
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
226 const char* data2 = "1\t716\t0301EB00973C4EFC8FCECA4EA33E941F50B561199A5159BCB6C2EED9DD1D62D65E38A254979D89E28F0C28883E71EE2AD264CD16B863FA094A8F6F69A56B62E8918040\t7c9a1039ea2e4fed73e81dd3ffc3fa22ea4a28352939adde7bf8ea858b00fa4f";
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
227
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
228 error = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
229 encryption_key_hash = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
230 key_hash = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
231
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
232 ret = dcrypt_key_string_get_info(data2, &format, &version,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
233 &kind, &encryption_type, &encryption_key_hash,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
234 &key_hash, &error);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
235
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
236 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
237 test_assert(error == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
238 test_assert(format == DCRYPT_FORMAT_DOVECOT);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
239 test_assert(version == DCRYPT_KEY_VERSION_1);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
240 test_assert(kind == DCRYPT_KEY_KIND_PUBLIC);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
241 test_assert(encryption_type == DCRYPT_KEY_ENCRYPTION_TYPE_NONE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
242 test_assert(encryption_key_hash == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
243 test_assert(strcmp(key_hash, "7c9a1039ea2e4fed73e81dd3ffc3fa22ea4a28352939adde7bf8ea858b00fa4f") == 0);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
244
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
245 /* This is the key that should be able to decrypt key1 */
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
246 const char *data3 = "1\t716\t0\t048FD04FD3612B22D32790C592CF21CEF417EFD2EA34AE5F688FA5B51BED29E05A308B68DA78E16E90B47A11E133BD9A208A2894FD01B0BEE865CE339EA3FB17AC\td0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0";
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
247
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
248 error = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
249 encryption_key_hash = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
250 key_hash = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
251
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
252 ret = dcrypt_key_string_get_info(data3, &format, &version,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
253 &kind, &encryption_type, &encryption_key_hash,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
254 &key_hash, &error);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
255 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
256 test_assert(error == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
257 test_assert(format == DCRYPT_FORMAT_DOVECOT);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
258 test_assert(version == DCRYPT_KEY_VERSION_1);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
259 test_assert(kind == DCRYPT_KEY_KIND_PRIVATE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
260 test_assert(encryption_type == DCRYPT_KEY_ENCRYPTION_TYPE_NONE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
261 test_assert(encryption_key_hash == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
262 test_assert(strcmp(key_hash, "d0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0") == 0);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
263
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
264 /* key3's key_hash should and does match key1's encryption_key_hash */
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
265 struct dcrypt_private_key *pkey = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
266 struct dcrypt_private_key *pkey2 = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
267 pkey = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
268 error = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
269
20573
071903e5586b lib-dcrypt: drop format from key_load_private
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20570
diff changeset
270 ret = dcrypt_key_load_private(&pkey2, data3, NULL, NULL, &error);
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
271 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
272 test_assert(error == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
273
20573
071903e5586b lib-dcrypt: drop format from key_load_private
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20570
diff changeset
274 ret = dcrypt_key_load_private(&pkey, data1, NULL, pkey2, &error);
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
275 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
276 test_assert(error == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
277
20566
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
278 dcrypt_key_unref_private(&pkey2);
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
279 dcrypt_key_unref_private(&pkey);
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
280
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
281 test_end();
20215
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
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
284 static
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
285 void test_load_v1_key(void)
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 test_begin("test_load_v1_key");
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
288
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
289 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
290
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
291 struct dcrypt_private_key *pkey = NULL, *pkey2 = NULL;
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
292 const char *error = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
293
20573
071903e5586b lib-dcrypt: drop format from key_load_private
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20570
diff changeset
294 test_assert(dcrypt_key_load_private(&pkey, "1\t716\t0\t048FD04FD3612B22D32790C592CF21CEF417EFD2EA34AE5F688FA5B51BED29E05A308B68DA78E16E90B47A11E133BD9A208A2894FD01B0BEE865CE339EA3FB17AC\td0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0", NULL, NULL, &error));
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
295 if (pkey != NULL) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
296 buffer_set_used_size(key_1, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
297 /* check that key_id matches */
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
298 struct dcrypt_public_key *pubkey = NULL;
20398
cf3bb56f9ce9 lib-dcrypt: dcrypt_key_convert_private_to_public() can no longer fail.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20376
diff changeset
299 dcrypt_key_convert_private_to_public(pkey, &pubkey);
20402
b5bc1e6b0574 lib-dcrypt: Check for all the return values in unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20398
diff changeset
300 test_assert(dcrypt_key_store_public(pubkey, DCRYPT_FORMAT_DOVECOT, key_1, NULL));
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
301 buffer_set_used_size(key_1, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
302 dcrypt_key_id_public(pubkey, "sha256", key_1, &error);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
303 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
304
20566
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
305 dcrypt_key_unref_public(&pubkey);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
306 pkey2 = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
307
20573
071903e5586b lib-dcrypt: drop format from key_load_private
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20570
diff changeset
308 test_assert(dcrypt_key_load_private(&pkey2, "1\t716\t1\t0567e6bf9579813ae967314423b0fceb14bda24749303923de9a9bb9370e0026f995901a57e63113eeb2baf0c940e978d00686cbb52bd5014bc318563375876255\t0300E46DA2125427BE968EB3B649910CDC4C405E5FFDE18D433A97CABFEE28CEEFAE9EE356C792004FFB80981D67E741B8CC036A34235A8D2E1F98D1658CFC963D07EB\td0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0\t7c9a1039ea2e4fed73e81dd3ffc3fa22ea4a28352939adde7bf8ea858b00fa4f", NULL, pkey, &error));
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
309 if (pkey2 != NULL) {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
310 buffer_set_used_size(key_1, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
311 /* check that key_id matches */
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
312 struct dcrypt_public_key *pubkey = NULL;
20398
cf3bb56f9ce9 lib-dcrypt: dcrypt_key_convert_private_to_public() can no longer fail.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20376
diff changeset
313 dcrypt_key_convert_private_to_public(pkey2, &pubkey);
20402
b5bc1e6b0574 lib-dcrypt: Check for all the return values in unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20398
diff changeset
314 test_assert(dcrypt_key_store_public(pubkey, DCRYPT_FORMAT_DOVECOT, key_1, NULL));
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
315 buffer_set_used_size(key_1, 0);
20402
b5bc1e6b0574 lib-dcrypt: Check for all the return values in unit tests
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20398
diff changeset
316 test_assert(dcrypt_key_id_public_old(pubkey, key_1, &error));
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
317 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
318
20566
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
319 dcrypt_key_unref_public(&pubkey);
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
320 dcrypt_key_unref_private(&pkey2);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
321 }
20566
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
322 dcrypt_key_unref_private(&pkey);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
323 }
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 test_end();
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
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
328 static
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
329 void test_load_v1_public_key(void)
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
330 {
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
331 test_begin("test_load_v1_public_key");
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
332
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
333 const char* data1 = "1\t716\t030131D8A5FD5167947A0AE9CB112ADED6526654635AA5887051EE2364414B60FF32EBA8FA0BBE9485DBDE8794BBBCB44BBFC0D662A4287A848BA570D4E5E45A11FE0F\td0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0";
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
334
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
335 const char* error = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
336 const char* key_hash = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
337 const char* encryption_key_hash = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
338
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
339 enum dcrypt_key_format format;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
340 enum dcrypt_key_version version;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
341 enum dcrypt_key_kind kind;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
342 enum dcrypt_key_encryption_type encryption_type;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
343
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
344 bool ret = dcrypt_key_string_get_info(data1, &format, &version,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
345 &kind, &encryption_type, &encryption_key_hash,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
346 &key_hash, &error);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
347
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
348 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
349 test_assert(error == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
350 test_assert(format == DCRYPT_FORMAT_DOVECOT);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
351 test_assert(version == DCRYPT_KEY_VERSION_1);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
352 test_assert(kind == DCRYPT_KEY_KIND_PUBLIC);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
353 test_assert(encryption_type == DCRYPT_KEY_ENCRYPTION_TYPE_NONE);
20417
4da83dd8b95c lib-dcrypt: Make static analyzer happier
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20416
diff changeset
354 test_assert(key_hash != NULL && strcmp(key_hash, "d0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0") == 0);
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
355 test_assert(encryption_key_hash == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
356
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
357 struct dcrypt_public_key *pub_key = NULL;
20574
79fa3bdcfc95 lib-dcrypt: drop format from key_load_public
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20573
diff changeset
358 ret = dcrypt_key_load_public(&pub_key, data1, &error);
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
359 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
360 test_assert(error == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
361
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
362 test_assert(dcrypt_key_type_public(pub_key) == DCRYPT_KEY_EC);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
363
20566
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
364 dcrypt_key_unref_public(&pub_key);
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
365 test_assert(pub_key == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
366
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
367 test_end();
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
368 }
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
369
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
370 static
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
371 void test_load_v2_key(void)
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
372 {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
373 const char *keys[] = {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
374 "-----BEGIN PRIVATE KEY-----\n" \
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
375 "MGcCAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcETTBLAgEBBCC25AkD65uhlZXCAdwN\n" \
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
376 "yLJV2ui8A/CUyqyEMrezvwgMO6EkAyIAAybRUR3MsH0+0PQcDwkrXOJ9aePwzTQV\n" \
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
377 "DN51+n1JCxbI\n" \
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
378 "-----END PRIVATE KEY-----\n",
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
379 "2:1.2.840.10045.3.1.7:0:0000002100b6e40903eb9ba19595c201dc0dc8b255dae8bc03f094caac8432b7b3bf080c3b:ab13d251976dedab546b67354e7678821740dd534b749c2857f66bf62bbaddfd",
20646
90d375d8878e dcrypt: Fix encrypted test keys
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20596
diff changeset
380 "2:1.2.840.10045.3.1.7:2:aes-256-ctr:483bd74fd3d91763:sha256:2048:d44ae35d3af7a2febcb15cde0c3693e7ed98595665ed655a97fa918d346d5c661a6e2339f4:ab13d251976dedab546b67354e7678821740dd534b749c2857f66bf62bbaddfd",
90d375d8878e dcrypt: Fix encrypted test keys
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20596
diff changeset
381 "2:1.2.840.10045.3.1.7:1:aes-256-ctr:2574c10be28a4c09:sha256:2048:a750ec9dea91999f108f943485a20f273f40f75c37fc9bcccdedda514c8243e550d69ce1bd:02237a199d7d945aa6492275a02881071eceec5749caf2485da8c64fb601229098:ab13d251976dedab546b67354e7678821740dd534b749c2857f66bf62bbaddfd:ab13d251976dedab546b67354e7678821740dd534b749c2857f66bf62bbaddfd"
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
382 };
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
383
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
384 test_begin("test_load_v2_key");
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
385 const char *error = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
386 buffer_t *tmp = buffer_create_dynamic(default_pool, 256);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
387
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
388 struct dcrypt_private_key *priv,*priv2;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
389
20573
071903e5586b lib-dcrypt: drop format from key_load_private
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20570
diff changeset
390 test_assert_idx(dcrypt_key_load_private(&priv2, keys[0], NULL, NULL, &error), 0);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
391 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
392 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
393 buffer_set_used_size(tmp, 0);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
394
20573
071903e5586b lib-dcrypt: drop format from key_load_private
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20570
diff changeset
395 test_assert_idx(dcrypt_key_load_private(&priv, keys[1], NULL, NULL, &error), 1);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
396 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
397 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
398 buffer_set_used_size(tmp, 0);
20566
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
399 dcrypt_key_unref_private(&priv);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
400
20573
071903e5586b lib-dcrypt: drop format from key_load_private
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20570
diff changeset
401 test_assert_idx(dcrypt_key_load_private(&priv, keys[2], "This Is Sparta", NULL, &error), 2);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
402 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
403 buffer_set_used_size(tmp, 0);
20566
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
404 dcrypt_key_unref_private(&priv);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
405
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
406 struct dcrypt_public_key *pub = NULL;
20398
cf3bb56f9ce9 lib-dcrypt: dcrypt_key_convert_private_to_public() can no longer fail.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20376
diff changeset
407 dcrypt_key_convert_private_to_public(priv2, &pub);
20573
071903e5586b lib-dcrypt: drop format from key_load_private
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20570
diff changeset
408 test_assert_idx(dcrypt_key_load_private(&priv, keys[3], NULL, priv2, &error), 3);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
409 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
410 buffer_set_used_size(tmp, 0);
20566
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
411 dcrypt_key_unref_private(&priv2);
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
412 dcrypt_key_unref_private(&priv);
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
413 dcrypt_key_unref_public(&pub);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
414
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
415 buffer_free(&tmp);
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
416
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
417 if (error != NULL) error = NULL;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
418
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
419 test_end();
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
420 }
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
421
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
422 static
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
423 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
424 {
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
425 struct dcrypt_public_key *pub = NULL;
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
426 const char *error;
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
427
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
428 test_begin("test_load_v2_public_key");
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
429 const char *key = "2:3058301006072a8648ce3d020106052b810400230344000301c50954e734dd8b410a607764a7057065a45510da52f2c6e28e0cb353b9c389fa8cb786943ae991fce9befed78fb162fbbc615415f06af06c8cc80c37f4e94ff6c7:185a7212542782e239111f9c19d126ad55b18ddaf4883d66afe8d9627c3607d8";
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
430
20574
79fa3bdcfc95 lib-dcrypt: drop format from key_load_public
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20573
diff changeset
431 test_assert(dcrypt_key_load_public(&pub, key, &error));
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
432
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
433 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
434
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
435 if (pub != NULL) {
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
436 test_assert(dcrypt_key_store_public(pub, DCRYPT_FORMAT_DOVECOT, tmp, &error));
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
437 test_assert(strcmp(key, str_c(tmp))==0);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
438 buffer_free(&tmp);
20566
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
439 dcrypt_key_unref_public(&pub);
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
440 }
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
441
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
442 test_end();
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
443 }
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
444
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
445 static
20429
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
446 void test_get_info_v2_key(void) {
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
447 test_begin("test_get_info_v2_key");
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
448
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
449 const char *key = "2:305e301006072a8648ce3d020106052b81040026034a000203fcc90034fa03d6fb79a0fc8b3b43c3398f68e76029307360cdcb9e27bb7e84b3c19dfb7244763bc4d442d216f09b7b7945ed9d182f3156550e9ee30b237a0217dbf79d28975f31:86706b69d1f640011a65d26a42f2ba20a619173644e1cc7475eb1d90966e84dc";
20429
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
450 enum dcrypt_key_format format;
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
451 enum dcrypt_key_version version = DCRYPT_KEY_VERSION_NA;
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
452 enum dcrypt_key_kind kind;
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
453 enum dcrypt_key_encryption_type encryption_type;
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
454 const char *encryption_key_hash = NULL;
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
455 const char *key_hash = NULL;
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
456 const char *error = NULL;
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
457
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
458 test_assert(dcrypt_key_string_get_info(key, &format, &version,
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
459 &kind, &encryption_type, &encryption_key_hash,
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
460 &key_hash, &error));
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
461 test_assert(error == NULL);
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
462 test_assert(format == DCRYPT_FORMAT_DOVECOT);
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
463 test_assert(version == DCRYPT_KEY_VERSION_2);
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
464
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
465 test_assert(kind == DCRYPT_KEY_KIND_PUBLIC);
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
466 test_assert(encryption_type == DCRYPT_KEY_ENCRYPTION_TYPE_NONE);
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
467 test_assert(encryption_key_hash == NULL);
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
468 test_assert(key_hash != NULL && strcmp(key_hash,
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
469 "86706b69d1f640011a65d26a42f2ba20a619173644e1cc7475eb1d90966e84dc") == 0);
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
470
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
471 test_end();
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
472 }
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
473
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
474 static
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
475 void test_gen_and_get_info_rsa_pem(void)
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
476 {
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
477 test_begin("test_gen_and_get_info_rsa_pem");
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
478
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
479 const char *error = NULL;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
480 bool ret = FALSE;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
481 struct dcrypt_keypair pair;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
482 string_t* buf = str_new(default_pool, 4096);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
483
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
484 ret = dcrypt_keypair_generate(&pair, DCRYPT_KEY_RSA, 1024, NULL, NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
485 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
486
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
487 /* test public key */
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
488 enum dcrypt_key_format format;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
489 enum dcrypt_key_version version;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
490 enum dcrypt_key_kind kind;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
491 enum dcrypt_key_encryption_type encryption_type;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
492 const char *encryption_key_hash;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
493 const char *key_hash;
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
494
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
495 ret = dcrypt_key_store_public(pair.pub, DCRYPT_FORMAT_PEM, buf,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
496 &error);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
497 test_assert(ret == TRUE);
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
498
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
499 ret = dcrypt_key_string_get_info(str_c(buf), &format, &version,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
500 &kind, &encryption_type, &encryption_key_hash,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
501 &key_hash, &error);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
502 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
503 test_assert(format == DCRYPT_FORMAT_PEM);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
504 test_assert(version == DCRYPT_KEY_VERSION_NA);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
505
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
506 test_assert(kind == DCRYPT_KEY_KIND_PUBLIC);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
507 test_assert(encryption_type == DCRYPT_KEY_ENCRYPTION_TYPE_NONE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
508 test_assert(encryption_key_hash == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
509 test_assert(key_hash == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
510
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
511 /* test private key */
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
512 buffer_set_used_size(buf, 0);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
513 ret = dcrypt_key_store_private(pair.priv, DCRYPT_FORMAT_PEM, NULL,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
514 buf, NULL, NULL, &error);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
515
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
516 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
517
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
518 ret = dcrypt_key_string_get_info(str_c(buf), &format, &version,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
519 &kind, &encryption_type, &encryption_key_hash,
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
520 &key_hash, &error);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
521
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
522 test_assert(ret == TRUE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
523 test_assert(format == DCRYPT_FORMAT_PEM);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
524 test_assert(version == DCRYPT_KEY_VERSION_NA);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
525
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
526 test_assert(kind == DCRYPT_KEY_KIND_PRIVATE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
527
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
528 test_assert(encryption_type == DCRYPT_KEY_ENCRYPTION_TYPE_NONE);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
529 test_assert(encryption_key_hash == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
530 test_assert(key_hash == NULL);
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
531
20566
6ebb03fc9a25 dcrypt: Update API for testing
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20498
diff changeset
532 dcrypt_keypair_unref(&pair);
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
533 buffer_free(&buf);
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
534
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
535 test_end();
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
536 }
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
537
20498
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
538 static
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
539 void test_get_info_rsa_private_key(void)
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
540 {
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
541 test_begin("test_get_info_rsa_private_key");
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
542
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
543 const char *key = "-----BEGIN RSA PRIVATE KEY-----\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
544 "MIICXQIBAAKBgQC89q02I9NezBLQ+otn5XLYE7S+GsKUz59ogr45DA/6MI9jey0W\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
545 "56SeWQ1FJD1vDhAx/TRBMfOmhcIPsBjc5sakYOawPdoiqLjOIlO+iHwnbbmLuMsq\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
546 "ue09vgvZsKjuTr2F5DOFQY43Bq/Nd+4bjHJItdOM58+xwA2I/8vDbtI8jwIDAQAB\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
547 "AoGBAJCUrTMfdjqyKjN7f+6ewKBTc5eBIiB6O53ba3B6qj7jqNKVDIrZ8jq2KFEe\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
548 "yWKPgBS/h5vafHKNJU6bjmp2qMUJPB7PTA876eDo0cq9PplUqihiTlXJFwNQYtF+\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
549 "o27To5t25+5qdSAj657+lQfFT9Xn9fzYHDmotURxH10FgFkBAkEA+7Ny6lBTeb3W\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
550 "LnP0UPfPzQLilEr8u81PLWe69RGtsEaMQHGpHOl4e+bvvVYbG1cgxwxI1m01uR9r\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
551 "qpD3qLUdrQJBAMAw6UvN8R+opYTZzwqK7Nliil2QZMPmXM04SV1iFq26NM60w2Fm\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
552 "HqOOh0EbpSWsFtIgxJFWoZOtrguxqCJuUqsCQF3EoXf3StHczhDqM8eCOpD2lTCH\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
553 "qxXPy8JvlW+9EUbNUWykq0rRE4idJQ0VKe4KjHR6+Buh/dSkhvi5Hvpj1tUCQHRv\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
554 "LWeXZLVhXqWVrzEb6VHpuRnmGKX2MdLCfu/sNQEbBlMUgCnJzFYaSybOsMaZ81lq\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
555 "MKw8Z7coSYEcKFhzrfECQQD7l+4Bhy8Zuz6VoGGIZwIhxkJrImBFmaUwx8N6jg20\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
556 "sgDRYwCoGkGd7B8uIHZLJoWzSSutHiu5i5PYUy5VT1yT\n"
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
557 "-----END RSA PRIVATE KEY-----\n";
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
558
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
559 const char *error = NULL;
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
560
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
561 test_assert(!dcrypt_key_string_get_info(key, NULL, NULL,
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
562 NULL, NULL, NULL, NULL, &error));
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
563 test_assert(error != NULL && strstr(error, "pkey") != NULL);
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
564
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
565 test_end();
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
566 }
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
567
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
568 static
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
569 void test_get_info_invalid_keys(void) {
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
570 test_begin("test_get_info_invalid_keys");
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
571
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
572 const char *key = "1:716:030131D8A5FD5167947A0AE9CB112ADED6526654635AA5887051EE2364414B60FF32EBA8FA0BBE9485DBDE8794BBBCB44BBFC0D662A4287A848BA570D4E5E45A11FE0F:d0cfaca5d335f9edc41c84bb47465184cb0e2ec3931bebfcea4dd433615e77a0";
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
573 const char *error = NULL;
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
574
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
575 test_assert(dcrypt_key_string_get_info(key, NULL, NULL,
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
576 NULL, NULL, NULL, NULL, &error) == FALSE);
20581
e8a810c9c96c lib-dcrypt: don't give strstr NULL in test-crypto
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20576
diff changeset
577 test_assert(error != NULL && strstr(error, "tab") != NULL);
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
578
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
579 key = "2\t305e301006072a8648ce3d020106052b81040026034a000203fcc90034fa03d6fb79a0fc8b3b43c3398f68e76029307360cdcb9e27bb7e84b3c19dfb7244763bc4d442d216f09b7b7945ed9d182f3156550e9ee30b237a0217dbf79d28975f31\t86706b69d1f640011a65d26a42f2ba20a619173644e1cc7475eb1d90966e84dc";
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
580 error = NULL;
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
581
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
582 test_assert(dcrypt_key_string_get_info(key, NULL, NULL,
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
583 NULL, NULL, NULL, NULL, &error) == FALSE);
20581
e8a810c9c96c lib-dcrypt: don't give strstr NULL in test-crypto
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20576
diff changeset
584 test_assert(error != NULL && strstr(error, "colon") != NULL);
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
585
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
586 key = "2";
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
587 error = NULL;
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
588
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
589 test_assert(dcrypt_key_string_get_info(key, NULL, NULL,
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
590 NULL, NULL, NULL, NULL, &error) == FALSE);
20581
e8a810c9c96c lib-dcrypt: don't give strstr NULL in test-crypto
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20576
diff changeset
591 test_assert(error != NULL && strstr(error, "Unknown") != NULL);
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
592
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
593 test_end();
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
594 }
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
595
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
596 static
20871
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
597 void test_get_info_key_encrypted(void) {
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
598 test_begin("test_get_info_key_encrypted");
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
599
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
600 struct dcrypt_keypair p1, p2;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
601 const char *error = NULL;
20876
1cd9d3679d04 lib-dcrypt: change unit test ec curve to secp521r1
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20873
diff changeset
602 bool ret = dcrypt_keypair_generate(&p1, DCRYPT_KEY_EC, 0, "secp521r1", &error);
20871
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
603 test_assert(ret == TRUE);
20876
1cd9d3679d04 lib-dcrypt: change unit test ec curve to secp521r1
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20873
diff changeset
604 ret = dcrypt_keypair_generate(&p2, DCRYPT_KEY_EC, 0, "secp521r1", &error);
20871
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
605 test_assert(ret == TRUE);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
606
20872
4c571ff37f8f lib-dcrypt: str_new to t_str_new in some test-crypto tests
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20871
diff changeset
607 string_t* buf = t_str_new(4096);
20871
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
608
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
609 buffer_set_used_size(buf, 0);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
610 ret = dcrypt_key_store_private(p1.priv, DCRYPT_FORMAT_DOVECOT, "ecdh-aes-256-ctr", buf, NULL, p2.pub, &error);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
611 test_assert(ret == TRUE);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
612
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
613 enum dcrypt_key_format format;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
614 enum dcrypt_key_version version;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
615 enum dcrypt_key_kind kind;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
616 enum dcrypt_key_encryption_type enc_type;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
617 const char *enc_hash;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
618 const char *key_hash;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
619
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
620 ret = dcrypt_key_string_get_info(str_c(buf), &format, &version,
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
621 &kind, &enc_type, &enc_hash, &key_hash, &error);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
622 test_assert(ret == TRUE);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
623 test_assert(format == DCRYPT_FORMAT_DOVECOT);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
624 test_assert(version == DCRYPT_KEY_VERSION_2);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
625 test_assert(kind == DCRYPT_KEY_KIND_PRIVATE);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
626 test_assert(enc_type == DCRYPT_KEY_ENCRYPTION_TYPE_KEY);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
627 test_assert(enc_hash != NULL);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
628 test_assert(key_hash != NULL);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
629
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
630 dcrypt_keypair_unref(&p1);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
631 dcrypt_keypair_unref(&p2);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
632
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
633 test_end();
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
634 }
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
635
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
636 static
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
637 void test_get_info_pw_encrypted(void) {
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
638 test_begin("test_get_info_pw_encrypted");
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
639
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
640 struct dcrypt_keypair p1;
21389
59437f8764c6 global: Replaced all instances of memset(p, 0, sizeof(*p)) with the new i_zero() macro.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 21264
diff changeset
641 i_zero(&p1);
20871
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
642 const char *error;
20876
1cd9d3679d04 lib-dcrypt: change unit test ec curve to secp521r1
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20873
diff changeset
643 bool ret = dcrypt_keypair_generate(&p1, DCRYPT_KEY_EC, 0, "secp521r1", &error);
20871
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
644 test_assert(ret == TRUE);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
645
20872
4c571ff37f8f lib-dcrypt: str_new to t_str_new in some test-crypto tests
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20871
diff changeset
646 string_t* buf = t_str_new(4096);
20871
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
647 ret = dcrypt_key_store_private(p1.priv, DCRYPT_FORMAT_DOVECOT, "aes-256-ctr", buf, "pw", NULL, &error);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
648 test_assert(ret == TRUE);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
649
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
650 enum dcrypt_key_format format;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
651 enum dcrypt_key_version version;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
652 enum dcrypt_key_kind kind;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
653 enum dcrypt_key_encryption_type enc_type;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
654 const char *enc_hash;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
655 const char *key_hash;
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
656
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
657 ret = dcrypt_key_string_get_info(str_c(buf), &format, &version,
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
658 &kind, &enc_type, &enc_hash, &key_hash, &error);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
659 test_assert(ret == TRUE);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
660 test_assert(format == DCRYPT_FORMAT_DOVECOT);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
661 test_assert(version == DCRYPT_KEY_VERSION_2);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
662 test_assert(kind == DCRYPT_KEY_KIND_PRIVATE);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
663 test_assert(enc_type == DCRYPT_KEY_ENCRYPTION_TYPE_PASSWORD);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
664 test_assert(enc_hash == NULL);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
665 test_assert(key_hash != NULL);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
666
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
667 dcrypt_keypair_unref(&p1);
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
668
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
669 test_end();
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
670 }
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
671
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
672 static
20896
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
673 void test_password_change(void) {
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
674 test_begin("test_password_change");
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
675
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
676 const char *pw1 = "first password";
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
677 struct dcrypt_keypair orig;
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
678 const char *error = NULL;
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
679
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
680 bool ret = dcrypt_keypair_generate(&orig, DCRYPT_KEY_EC, 0, "secp521r1", &error);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
681 test_assert(ret == TRUE);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
682
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
683 string_t *buf = t_str_new(4096);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
684 ret = dcrypt_key_store_private(orig.priv, DCRYPT_FORMAT_DOVECOT, "aes-256-ctr", buf, pw1, NULL, &error);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
685 test_assert(ret == TRUE);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
686
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
687 /* load the pw-encrypted key */
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
688 struct dcrypt_private_key *k1_priv = NULL;
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
689 ret = dcrypt_key_load_private(&k1_priv, str_c(buf), pw1, NULL, &error);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
690 test_assert(ret == TRUE);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
691
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
692 /* encrypt a key with the pw-encrypted key k1 */
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
693 struct dcrypt_keypair k2;
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
694 ret = dcrypt_keypair_generate(&k2, DCRYPT_KEY_EC, 0, "secp521r1", &error);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
695 test_assert(ret == TRUE);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
696
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
697 string_t *buf2 = t_str_new(4096);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
698 struct dcrypt_public_key *k1_pub = NULL;
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
699 dcrypt_key_convert_private_to_public(k1_priv, &k1_pub);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
700 ret = dcrypt_key_store_private(k2.priv, DCRYPT_FORMAT_DOVECOT, "ecdh-aes-256-ctr", buf2, NULL, k1_pub, &error);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
701 test_assert(ret == TRUE);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
702
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
703 /* change the password */
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
704 const char *pw2 = "second password";
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
705 string_t *buf3 = t_str_new(4096);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
706
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
707 /* encrypt k1 with pw2 */
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
708 ret = dcrypt_key_store_private(k1_priv, DCRYPT_FORMAT_DOVECOT, "aes-256-ctr", buf3, pw2, NULL, &error);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
709 test_assert(ret == TRUE);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
710
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
711 /* load the pw2 encrypted key */
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
712 struct dcrypt_private_key *k2_priv = NULL;
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
713 ret = dcrypt_key_load_private(&k2_priv, str_c(buf3), pw2, NULL, &error);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
714 test_assert(ret == TRUE);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
715
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
716 /* load the key that was encrypted with pw1 using the pw2 encrypted key */
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
717 struct dcrypt_private_key *k3_priv = NULL;
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
718 ret = dcrypt_key_load_private(&k3_priv, str_c(buf2), NULL, k2_priv, &error);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
719 test_assert(ret == TRUE);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
720
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
721 dcrypt_key_unref_private(&k1_priv);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
722 dcrypt_key_unref_public(&k1_pub);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
723 dcrypt_key_unref_private(&k2_priv);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
724 dcrypt_key_unref_private(&k3_priv);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
725 dcrypt_keypair_unref(&orig);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
726 dcrypt_keypair_unref(&k2);
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
727
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
728 test_end();
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
729 }
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
730
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
731 static
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
732 void test_load_invalid_keys(void) {
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
733 test_begin("test_load_invalid_keys");
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
734
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
735 const char *error = NULL;
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
736 const char *key = "1:716:0301EB00973C4EFC8FCECA4EA33E941F50B561199A5159BCB6C2EED9DD1D62D65E38A254979D89E28F0C28883E71EE2AD264CD16B863FA094A8F6F69A56B62E8918040:7c9a1039ea2e4fed73e81dd3ffc3fa22ea4a28352939adde7bf8ea858b00fa4f";
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
737 struct dcrypt_public_key *pub_key = NULL;
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
738
20574
79fa3bdcfc95 lib-dcrypt: drop format from key_load_public
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20573
diff changeset
739 bool ret = dcrypt_key_load_public(&pub_key, key, &error);
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
740 test_assert(ret == FALSE);
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
741 test_assert(error != NULL);
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
742
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
743 error = NULL;
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
744 key = "2:305e301006072a8648ce3d020106052b81040026034a000203fcc90034fa03d6fb79a0fc8b3b43c3398f68e76029307360cdcb9e27bb7e84b3c19dfb7244763bc4d442d216f09b7b7945ed9d182f3156550e9ee30b237a0217dbf79d28975f31:86706b69d1f640011a65d26a42f2ba20a619173644e1cc7475eb1d90966e84dc";
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
745 struct dcrypt_private_key *priv_key = NULL;
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
746
20573
071903e5586b lib-dcrypt: drop format from key_load_private
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20570
diff changeset
747 ret = dcrypt_key_load_private(&priv_key, key, NULL, NULL, &error);
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
748 test_assert(ret == FALSE);
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
749 test_assert(error != NULL);
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
750
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
751 test_end();
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
752 }
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
753
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
754 int main(void) {
21232
7bb1cb2102d4 lib-dcrypt: Use module_dir setting
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20896
diff changeset
755 struct dcrypt_settings set = {
7bb1cb2102d4 lib-dcrypt: Use module_dir setting
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20896
diff changeset
756 .module_dir = ".libs"
7bb1cb2102d4 lib-dcrypt: Use module_dir setting
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20896
diff changeset
757 };
21482
d7227df3624d lib-dcrypt: If dcrypt can't be initialized, log also the reason.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
758 const char *error;
21232
7bb1cb2102d4 lib-dcrypt: Use module_dir setting
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20896
diff changeset
759
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
760 random_init();
21482
d7227df3624d lib-dcrypt: If dcrypt can't be initialized, log also the reason.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
761 if (!dcrypt_initialize(NULL, &set, &error)) {
d7227df3624d lib-dcrypt: If dcrypt can't be initialized, log also the reason.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 21390
diff changeset
762 i_error("No functional dcrypt backend found - skipping tests: %s", error);
20576
6e584af6f758 lib-dcrypt: Skip checks if no backend found
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20574
diff changeset
763 return 0;
6e584af6f758 lib-dcrypt: Skip checks if no backend found
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20574
diff changeset
764 }
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
765
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
766 static void (*test_functions[])(void) = {
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
767 test_cipher_test_vectors,
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
768 test_cipher_aead_test_vectors,
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
769 test_hmac_test_vectors,
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
770 test_load_v1_keys,
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
771 test_load_v1_key,
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
772 test_load_v1_public_key,
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
773 test_load_v2_key,
20326
71285f4d97dd dcrypt: Add test for public key loading
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20215
diff changeset
774 test_load_v2_public_key,
20429
ba3484993516 lib-dcrypt: correctly set version 2 on key info
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20417
diff changeset
775 test_get_info_v2_key,
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
776 test_gen_and_get_info_rsa_pem,
20498
43c279a779f5 lib-dcrypt: tell in error_r that RSA key has to be converted to pkey
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20429
diff changeset
777 test_get_info_rsa_private_key,
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
778 test_get_info_invalid_keys,
20871
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
779 test_get_info_key_encrypted,
536d185e3794 lib-dcrypt: enc_key and pw must be NULL on storing unencrypted private key
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20646
diff changeset
780 test_get_info_pw_encrypted,
20896
fbdf07d53d13 lib-dcrypt: add a test for password change
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20876
diff changeset
781 test_password_change,
20570
fe9af2fb0dae lib-dcrypt: change v2 key field separator to ':'
Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
parents: 20566
diff changeset
782 test_load_invalid_keys,
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
783 NULL
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
784 };
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
785
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
786 int ret = test_run(test_functions);
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
787
20416
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
788 dcrypt_deinitialize();
fd85f5b85819 dcrypt: Add tests for v1 and v2 public keys and RSA
Aki Tuomi <aki.tuomi@dovecot.fi>
parents: 20402
diff changeset
789 random_deinit();
20215
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
790
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
791 return ret;
389c5094c2a8 lib-dcrypt: Initial implementation
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
diff changeset
792 }