| 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 |