Mercurial > dovecot > core-2.2
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 |
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 } |