blob: e707daf13160050fddaaf28833402d2412c31045 [file] [log] [blame]
Randall Spanglerd1836442010-06-10 09:59:04 -07001/* 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
3 * found in the LICENSE file.
4 *
5 * Tests for firmware image library.
6 */
7
8#include <stdio.h>
9#include <stdlib.h>
10
11#include "test_common.h"
12#include "vboot_common.h"
13
Randall Spangler81d09962010-06-23 10:15:38 -070014/* Test struct packing */
15static void StructPackingTest(void) {
16 TEST_EQ(EXPECTED_VBPUBLICKEY_SIZE, sizeof(VbPublicKey),
17 "sizeof(VbPublicKey)");
18 TEST_EQ(EXPECTED_VBSIGNATURE_SIZE, sizeof(VbSignature),
19 "sizeof(VbSignature)");
20 TEST_EQ(EXPECTED_VBKEYBLOCKHEADER_SIZE, sizeof(VbKeyBlockHeader),
21 "sizeof(VbKeyBlockHeader)");
22 TEST_EQ(EXPECTED_VBFIRMWAREPREAMBLEHEADER_SIZE,
23 sizeof(VbFirmwarePreambleHeader), "sizeof(VbFirmwarePreambleHeader)");
24 TEST_EQ(EXPECTED_VBKERNELPREAMBLEHEADER_SIZE,
25 sizeof(VbKernelPreambleHeader), "sizeof(VbKernelPreambleHeader)");
26}
27
Randall Spanglerd1836442010-06-10 09:59:04 -070028
29/* Helper functions not dependent on specific key sizes */
Randall Spangler81d09962010-06-23 10:15:38 -070030static void VerifyHelperFunctions(void) {
Randall Spanglerd1836442010-06-10 09:59:04 -070031
32 {
33 uint8_t p[1];
34 TEST_EQ(OffsetOf(p, p), 0, "OffsetOf() equal");
35 TEST_EQ(OffsetOf(p, p+10), 10, "OffsetOf() positive");
36 TEST_EQ(OffsetOf(p, p+0x12345678), 0x12345678, "OffsetOf() large");
37 }
38
39 {
40 VbPublicKey k = {sizeof(k), 2, 3, 4};
41 TEST_EQ(OffsetOf(&k, GetPublicKeyData(&k)), sizeof(k),
42 "GetPublicKeyData() adjacent");
43 TEST_EQ(OffsetOf(&k, GetPublicKeyDataC(&k)), sizeof(k),
44 "GetPublicKeyDataC() adjacent");
45 }
46
47 {
48 VbPublicKey k = {123, 2, 3, 4};
49 TEST_EQ(OffsetOf(&k, GetPublicKeyData(&k)), 123,
50 "GetPublicKeyData() spaced");
51 TEST_EQ(OffsetOf(&k, GetPublicKeyDataC(&k)), 123,
52 "GetPublicKeyDataC() spaced");
53 }
54
55 {
56 uint8_t p[1];
57 TEST_EQ(VerifyMemberInside(p, 20, p, 6, 11, 3), 0, "MemberInside ok 1");
58 TEST_EQ(VerifyMemberInside(p, 20, p+4, 4, 8, 4), 0, "MemberInside ok 2");
59 TEST_EQ(VerifyMemberInside(p, 20, p-4, 4, 8, 4), 1,
60 "MemberInside member before parent");
61 TEST_EQ(VerifyMemberInside(p, 20, p+20, 4, 8, 4), 1,
62 "MemberInside member after parent");
63 TEST_EQ(VerifyMemberInside(p, 20, p, 21, 0, 0), 1,
64 "MemberInside member too big");
65 TEST_EQ(VerifyMemberInside(p, 20, p, 4, 21, 0), 1,
66 "MemberInside data after parent");
67 TEST_EQ(VerifyMemberInside(p, 20, p, 4, -1, 0), 1,
68 "MemberInside data before parent");
69 TEST_EQ(VerifyMemberInside(p, 20, p, 4, 4, 17), 1,
70 "MemberInside data too big");
71 }
72
73 {
74 VbPublicKey k = {sizeof(k), 128, 0, 0};
75 TEST_EQ(VerifyPublicKeyInside(&k, sizeof(k)+128, &k), 0,
76 "PublicKeyInside ok 1");
77 TEST_EQ(VerifyPublicKeyInside(&k - 1, 2*sizeof(k)+128, &k), 0,
78 "PublicKeyInside ok 2");
79 TEST_EQ(VerifyPublicKeyInside(&k, 128, &k), 1,
80 "PublicKeyInside key too big");
81 }
82 {
83 VbPublicKey k = {100, 4, 0, 0};
84 TEST_EQ(VerifyPublicKeyInside(&k, 99, &k), 1,
85 "PublicKeyInside offset too big");
86 }
87 {
88 VbSignature s = {sizeof(s), 128, 2000};
89 TEST_EQ(VerifySignatureInside(&s, sizeof(s)+128, &s), 0,
90 "SignatureInside ok 1");
91 TEST_EQ(VerifySignatureInside(&s - 1, 2*sizeof(s)+128, &s), 0,
92 "SignatureInside ok 2");
93 TEST_EQ(VerifySignatureInside(&s, 128, &s), 1,
94 "SignatureInside sig too big");
95 }
96 {
97 VbSignature s = {100, 4, 0};
98 TEST_EQ(VerifySignatureInside(&s, 99, &s), 1,
99 "SignatureInside offset too big");
100 }
101
102}
103
104
105int main(int argc, char* argv[]) {
106 int error_code = 0;
107
Randall Spangler81d09962010-06-23 10:15:38 -0700108 StructPackingTest();
Randall Spanglerd1836442010-06-10 09:59:04 -0700109 VerifyHelperFunctions();
110
111 if (!gTestSuccess)
112 error_code = 255;
113
114 return error_code;
115}