OLD | NEW |
1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
4 * | 4 * |
5 * Tests for firmware image library. | 5 * Tests for firmware image library. |
6 */ | 6 */ |
7 | 7 |
8 #include <stdio.h> | 8 #include <stdio.h> |
9 #include <stdlib.h> | 9 #include <stdlib.h> |
10 | 10 |
(...skipping 22 matching lines...) Expand all Loading... |
33 VbKeyBlockHeader *h; | 33 VbKeyBlockHeader *h; |
34 unsigned hsize; | 34 unsigned hsize; |
35 | 35 |
36 hdr = KeyBlockCreate(data_key, private_key, 0x1234); | 36 hdr = KeyBlockCreate(data_key, private_key, 0x1234); |
37 TEST_NEQ((size_t)hdr, 0, "KeyBlockVerify() prerequisites"); | 37 TEST_NEQ((size_t)hdr, 0, "KeyBlockVerify() prerequisites"); |
38 if (!hdr) | 38 if (!hdr) |
39 return; | 39 return; |
40 hsize = (unsigned) hdr->key_block_size; | 40 hsize = (unsigned) hdr->key_block_size; |
41 h = (VbKeyBlockHeader*)Malloc(hsize + 1024); | 41 h = (VbKeyBlockHeader*)Malloc(hsize + 1024); |
42 | 42 |
43 TEST_EQ(KeyBlockVerify(hdr, hsize, NULL), 0, | 43 TEST_EQ(KeyBlockVerify(hdr, hsize, NULL, 1), 0, |
44 "KeyBlockVerify() ok using checksum"); | 44 "KeyBlockVerify() ok using checksum"); |
45 TEST_EQ(KeyBlockVerify(hdr, hsize, public_key), 0, | 45 TEST_EQ(KeyBlockVerify(hdr, hsize, public_key, 0), 0, |
46 "KeyBlockVerify() ok using key"); | 46 "KeyBlockVerify() ok using key"); |
| 47 TEST_NEQ(KeyBlockVerify(hdr, hsize, NULL, 0), 0, |
| 48 "KeyBlockVerify() missing key"); |
47 | 49 |
48 TEST_NEQ(KeyBlockVerify(hdr, hsize - 1, NULL), 0, "KeyBlockVerify() size--"); | 50 TEST_NEQ(KeyBlockVerify(hdr, hsize - 1, NULL, 1), 0, |
49 TEST_EQ(KeyBlockVerify(hdr, hsize + 1, NULL), 0, "KeyBlockVerify() size++"); | 51 "KeyBlockVerify() size--"); |
| 52 TEST_EQ(KeyBlockVerify(hdr, hsize + 1, NULL, 1), 0, |
| 53 "KeyBlockVerify() size++"); |
50 | 54 |
51 Memcpy(h, hdr, hsize); | 55 Memcpy(h, hdr, hsize); |
52 h->magic[0] &= 0x12; | 56 h->magic[0] &= 0x12; |
53 TEST_NEQ(KeyBlockVerify(h, hsize, NULL), 0, "KeyBlockVerify() magic"); | 57 TEST_NEQ(KeyBlockVerify(h, hsize, NULL, 1), 0, "KeyBlockVerify() magic"); |
54 | 58 |
55 /* Care about major version but not minor */ | 59 /* Care about major version but not minor */ |
56 Memcpy(h, hdr, hsize); | 60 Memcpy(h, hdr, hsize); |
57 h->header_version_major++; | 61 h->header_version_major++; |
58 ReChecksumKeyBlock(h); | 62 ReChecksumKeyBlock(h); |
59 TEST_NEQ(KeyBlockVerify(h, hsize, NULL), 0, "KeyBlockVerify() major++"); | 63 TEST_NEQ(KeyBlockVerify(h, hsize, NULL, 1), 0, "KeyBlockVerify() major++"); |
60 | 64 |
61 Memcpy(h, hdr, hsize); | 65 Memcpy(h, hdr, hsize); |
62 h->header_version_major--; | 66 h->header_version_major--; |
63 ReChecksumKeyBlock(h); | 67 ReChecksumKeyBlock(h); |
64 TEST_NEQ(KeyBlockVerify(h, hsize, NULL), 0, "KeyBlockVerify() major--"); | 68 TEST_NEQ(KeyBlockVerify(h, hsize, NULL, 1), 0, "KeyBlockVerify() major--"); |
65 | 69 |
66 Memcpy(h, hdr, hsize); | 70 Memcpy(h, hdr, hsize); |
67 h->header_version_minor++; | 71 h->header_version_minor++; |
68 ReChecksumKeyBlock(h); | 72 ReChecksumKeyBlock(h); |
69 TEST_EQ(KeyBlockVerify(h, hsize, NULL), 0, "KeyBlockVerify() minor++"); | 73 TEST_EQ(KeyBlockVerify(h, hsize, NULL, 1), 0, "KeyBlockVerify() minor++"); |
70 | 74 |
71 Memcpy(h, hdr, hsize); | 75 Memcpy(h, hdr, hsize); |
72 h->header_version_minor--; | 76 h->header_version_minor--; |
73 ReChecksumKeyBlock(h); | 77 ReChecksumKeyBlock(h); |
74 TEST_EQ(KeyBlockVerify(h, hsize, NULL), 0, "KeyBlockVerify() minor--"); | 78 TEST_EQ(KeyBlockVerify(h, hsize, NULL, 1), 0, "KeyBlockVerify() minor--"); |
75 | 79 |
76 /* Check hash */ | 80 /* Check hash */ |
77 Memcpy(h, hdr, hsize); | 81 Memcpy(h, hdr, hsize); |
78 h->key_block_checksum.sig_offset = hsize; | 82 h->key_block_checksum.sig_offset = hsize; |
79 ReChecksumKeyBlock(h); | 83 ReChecksumKeyBlock(h); |
80 TEST_NEQ(KeyBlockVerify(h, hsize, NULL), 0, | 84 TEST_NEQ(KeyBlockVerify(h, hsize, NULL, 1), 0, |
81 "KeyBlockVerify() checksum off end"); | 85 "KeyBlockVerify() checksum off end"); |
82 | 86 |
83 Memcpy(h, hdr, hsize); | 87 Memcpy(h, hdr, hsize); |
84 h->key_block_checksum.sig_size /= 2; | 88 h->key_block_checksum.sig_size /= 2; |
85 ReChecksumKeyBlock(h); | 89 ReChecksumKeyBlock(h); |
86 TEST_NEQ(KeyBlockVerify(h, hsize, NULL), 0, | 90 TEST_NEQ(KeyBlockVerify(h, hsize, NULL, 1), 0, |
87 "KeyBlockVerify() checksum too small"); | 91 "KeyBlockVerify() checksum too small"); |
88 | 92 |
89 Memcpy(h, hdr, hsize); | 93 Memcpy(h, hdr, hsize); |
90 GetPublicKeyData(&h->data_key)[0] ^= 0x34; | 94 GetPublicKeyData(&h->data_key)[0] ^= 0x34; |
91 TEST_NEQ(KeyBlockVerify(h, hsize, NULL), 0, | 95 TEST_NEQ(KeyBlockVerify(h, hsize, NULL, 1), 0, |
92 "KeyBlockVerify() checksum mismatch"); | 96 "KeyBlockVerify() checksum mismatch"); |
93 | 97 |
94 /* Check signature */ | 98 /* Check signature */ |
95 Memcpy(h, hdr, hsize); | 99 Memcpy(h, hdr, hsize); |
96 h->key_block_signature.sig_offset = hsize; | 100 h->key_block_signature.sig_offset = hsize; |
97 ReChecksumKeyBlock(h); | 101 ReChecksumKeyBlock(h); |
98 TEST_NEQ(KeyBlockVerify(h, hsize, public_key), 0, | 102 TEST_NEQ(KeyBlockVerify(h, hsize, public_key, 0), 0, |
99 "KeyBlockVerify() sig off end"); | 103 "KeyBlockVerify() sig off end"); |
100 | 104 |
101 Memcpy(h, hdr, hsize); | 105 Memcpy(h, hdr, hsize); |
102 h->key_block_signature.sig_size--; | 106 h->key_block_signature.sig_size--; |
103 ReChecksumKeyBlock(h); | 107 ReChecksumKeyBlock(h); |
104 TEST_NEQ(KeyBlockVerify(h, hsize, public_key), 0, | 108 TEST_NEQ(KeyBlockVerify(h, hsize, public_key, 0), 0, |
105 "KeyBlockVerify() sig too small"); | 109 "KeyBlockVerify() sig too small"); |
106 | 110 |
107 Memcpy(h, hdr, hsize); | 111 Memcpy(h, hdr, hsize); |
108 GetPublicKeyData(&h->data_key)[0] ^= 0x34; | 112 GetPublicKeyData(&h->data_key)[0] ^= 0x34; |
109 TEST_NEQ(KeyBlockVerify(h, hsize, public_key), 0, | 113 TEST_NEQ(KeyBlockVerify(h, hsize, public_key, 0), 0, |
110 "KeyBlockVerify() sig mismatch"); | 114 "KeyBlockVerify() sig mismatch"); |
111 | 115 |
112 /* Check that we signed header and data key */ | 116 /* Check that we signed header and data key */ |
113 Memcpy(h, hdr, hsize); | 117 Memcpy(h, hdr, hsize); |
114 h->key_block_checksum.data_size = 4; | 118 h->key_block_checksum.data_size = 4; |
115 h->data_key.key_offset = 0; | 119 h->data_key.key_offset = 0; |
116 h->data_key.key_size = 0; | 120 h->data_key.key_size = 0; |
117 ReChecksumKeyBlock(h); | 121 ReChecksumKeyBlock(h); |
118 TEST_NEQ(KeyBlockVerify(h, hsize, NULL), 0, | 122 TEST_NEQ(KeyBlockVerify(h, hsize, NULL, 1), 0, |
119 "KeyBlockVerify() didn't sign header"); | 123 "KeyBlockVerify() didn't sign header"); |
120 | 124 |
121 Memcpy(h, hdr, hsize); | 125 Memcpy(h, hdr, hsize); |
122 h->data_key.key_offset = hsize; | 126 h->data_key.key_offset = hsize; |
123 ReChecksumKeyBlock(h); | 127 ReChecksumKeyBlock(h); |
124 TEST_NEQ(KeyBlockVerify(h, hsize, NULL), 0, | 128 TEST_NEQ(KeyBlockVerify(h, hsize, NULL, 1), 0, |
125 "KeyBlockVerify() data key off end"); | 129 "KeyBlockVerify() data key off end"); |
126 | 130 |
127 /* TODO: verify parser can support a bigger header (i.e., one where | 131 /* TODO: verify parser can support a bigger header (i.e., one where |
128 * data_key.key_offset is bigger than expected). */ | 132 * data_key.key_offset is bigger than expected). */ |
129 | 133 |
130 Free(h); | 134 Free(h); |
131 Free(hdr); | 135 Free(hdr); |
132 } | 136 } |
133 | 137 |
134 | 138 |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 | 292 |
289 if (signing_public_key) | 293 if (signing_public_key) |
290 Free(signing_public_key); | 294 Free(signing_public_key); |
291 if (signing_private_key) | 295 if (signing_private_key) |
292 Free(signing_private_key); | 296 Free(signing_private_key); |
293 if (data_public_key) | 297 if (data_public_key) |
294 Free(data_public_key); | 298 Free(data_public_key); |
295 | 299 |
296 return error_code; | 300 return error_code; |
297 } | 301 } |
OLD | NEW |