Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: src/platform/vboot_reference/tests/test_common.c

Issue 1280002: Move test utility functions to a common place. (Closed)
Patch Set: . Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 * Common functions used by tests. 5 * Common functions used by tests.
6 */ 6 */
7 7
8 #include "test_common.h" 8 #include "test_common.h"
9 9
10 #include <stdio.h> 10 #include <stdio.h>
11 11
12 #include "file_keys.h"
13 #include "rsa_utility.h"
14 #include "utility.h"
15
12 /* ANSI Color coding sequences. */ 16 /* ANSI Color coding sequences. */
13 #define COL_GREEN "\e[1;32m" 17 #define COL_GREEN "\e[1;32m"
14 #define COL_RED "\e[0;31m]" 18 #define COL_RED "\e[0;31m"
15 #define COL_STOP "\e[m" 19 #define COL_STOP "\e[m"
16 20
17 /* Global test success flag. */ 21 /* Global test success flag. */
18 int gTestSuccess = 1; 22 int gTestSuccess = 1;
19 23
20 int TEST_EQ(int result, int expected_result, char* testname) { 24 int TEST_EQ(int result, int expected_result, char* testname) {
21 if (result == expected_result) { 25 if (result == expected_result) {
22 fprintf(stderr, "%s Test " COL_GREEN " PASSED\n" COL_STOP, testname); 26 fprintf(stderr, "%s Test " COL_GREEN " PASSED\n" COL_STOP, testname);
23 return 1; 27 return 1;
24 } 28 }
25 else { 29 else {
26 fprintf(stderr, "%s Test " COL_RED " FAILED\n" COL_STOP, testname); 30 fprintf(stderr, "%s Test " COL_RED " FAILED\n" COL_STOP, testname);
27 gTestSuccess = 0; 31 gTestSuccess = 0;
28 return 0; 32 return 0;
29 } 33 }
30 } 34 }
35
36 FirmwareImage* GenerateTestFirmwareImage(int algorithm,
37 const uint8_t* firmware_sign_key,
38 int firmware_key_version,
39 int firmware_version,
40 int firmware_len,
41 const char* root_key_file,
42 const char* firmware_key_file) {
43 FirmwareImage* image = FirmwareImageNew();
44
45 Memcpy(image->magic, FIRMWARE_MAGIC, FIRMWARE_MAGIC_SIZE);
46 image->firmware_sign_algorithm = algorithm;
47 image->firmware_sign_key = (uint8_t*) Malloc(
48 RSAProcessedKeySize(image->firmware_sign_algorithm));
49 Memcpy(image->firmware_sign_key, firmware_sign_key,
50 RSAProcessedKeySize(image->firmware_sign_algorithm));
51 image->firmware_key_version = firmware_key_version;
52
53 /* Update correct header length. */
54 image->header_len = GetFirmwareHeaderLen(image);
55
56 /* Calculate SHA-512 digest on header and populate header_checksum. */
57 CalculateFirmwareHeaderChecksum(image, image->header_checksum);
58
59 /* Populate firmware and preamble with dummy data. */
60 image->firmware_version = firmware_version;
61 image->firmware_len = firmware_len;
62 image->preamble_signature = image->firmware_signature = NULL;
63 Memset(image->preamble, 'P', FIRMWARE_PREAMBLE_SIZE);
64 image->firmware_data = Malloc(image->firmware_len);
65 Memset(image->firmware_data, 'F', image->firmware_len);
66
67 /* Generate and populate signatures. */
68 if (!AddFirmwareKeySignature(image, root_key_file)) {
69 fprintf(stderr, "Couldn't create key signature.\n");
70 FirmwareImageFree(image);
71 return NULL;
72 }
73
74 if (!AddFirmwareSignature(image, firmware_key_file)) {
75 fprintf(stderr, "Couldn't create firmware and preamble signature.\n");
76 FirmwareImageFree(image);
77 return NULL;
78 }
79 return image;
80 }
81
82 uint8_t* GenerateTestFirmwareBlob(int algorithm,
83 const uint8_t* firmware_sign_key,
84 int firmware_key_version,
85 int firmware_version,
86 int firmware_len,
87 const char* root_key_file,
88 const char* firmware_key_file) {
89 FirmwareImage* image = NULL;
90 uint8_t* firmware_blob = NULL;
91 uint64_t firmware_blob_len = 0;
92
93 image = GenerateTestFirmwareImage(algorithm,
94 firmware_sign_key,
95 firmware_key_version,
96 firmware_version,
97 firmware_len,
98 root_key_file,
99 firmware_key_file);
100 firmware_blob = GetFirmwareBlob(image, &firmware_blob_len);
101 FirmwareImageFree(image);
102 return firmware_blob;
103 }
104
105 uint8_t* GenerateRollbackTestImage(int firmware_key_version,
106 int firmware_version,
107 int is_corrupt) {
108 FirmwareImage* image = NULL;
109 uint64_t len;
110 uint8_t* firmware_blob = NULL;
111 uint8_t* firmware_sign_key = NULL;
112
113 firmware_sign_key = BufferFromFile("testkeys/key_rsa1024.keyb",
114 &len);
115 if (!firmware_sign_key)
116 return NULL;
117 image = GenerateTestFirmwareImage(0, /* RSA1024/SHA1 */
118 firmware_sign_key,
119 firmware_key_version,
120 firmware_version,
121 1, /* Firmware length. */
122 "testkeys/key_rsa8192.pem",
123 "testkeys/key_rsa1024.pem");
124 if (!image)
125 return NULL;
126 if (is_corrupt) {
127 /* Invalidate image. */
128 Memset(image->firmware_data, 'X', image->firmware_len);
129 }
130
131 firmware_blob = GetFirmwareBlob(image, &len);
132 FirmwareImageFree(image);
133 return firmware_blob;
134 }
135
136
137 KernelImage* GenerateTestKernelImage(int firmware_sign_algorithm,
138 int kernel_sign_algorithm,
139 const uint8_t* kernel_sign_key,
140 int kernel_key_version,
141 int kernel_version,
142 int kernel_len,
143 const char* firmware_key_file,
144 const char* kernel_key_file) {
145 KernelImage* image = KernelImageNew();
146
147 Memcpy(image->magic, KERNEL_MAGIC, KERNEL_MAGIC_SIZE);
148 image->header_version = 1;
149 image->firmware_sign_algorithm = firmware_sign_algorithm;
150 image->kernel_sign_algorithm = kernel_sign_algorithm;
151 image->kernel_key_version = kernel_key_version;
152 image->kernel_sign_key = (uint8_t*) Malloc(
153 RSAProcessedKeySize(image->kernel_sign_algorithm));
154 Memcpy(image->kernel_sign_key, kernel_sign_key,
155 RSAProcessedKeySize(image->kernel_sign_algorithm));
156
157 /* Update correct header length. */
158 image->header_len = GetKernelHeaderLen(image);
159
160 /* Calculate SHA-512 digest on header and populate header_checksum. */
161 CalculateKernelHeaderChecksum(image, image->header_checksum);
162
163 /* Populate kernel options and data with dummy data. */
164 image->kernel_version = kernel_version;
165 image->options.version[0] = 1;
166 image->options.version[1] = 0;
167 Memset(image->options.cmd_line, 0, sizeof(image->options.cmd_line));
168 image->options.kernel_len = kernel_len;
169 image->options.kernel_load_addr = 0;
170 image->options.kernel_entry_addr = 0;
171 image->kernel_key_signature = image->kernel_signature = NULL;
172 image->kernel_data = Malloc(kernel_len);
173 Memset(image->kernel_data, 'F', kernel_len);
174
175 /* Generate and populate signatures. */
176 if (!AddKernelKeySignature(image, firmware_key_file)) {
177 fprintf(stderr, "Couldn't create key signature.\n");
178 KernelImageFree(image);
179 return NULL;
180 }
181
182 if (!AddKernelSignature(image, kernel_key_file)) {
183 fprintf(stderr, "Couldn't create kernel option and kernel signature.\n");
184 KernelImageFree(image);
185 return NULL;
186 }
187
188 return image;
189 }
190
191 uint8_t* GenerateTestKernelBlob(int firmware_sign_algorithm,
192 int kernel_sign_algorithm,
193 const uint8_t* kernel_sign_key,
194 int kernel_key_version,
195 int kernel_version,
196 int kernel_len,
197 const char* firmware_key_file,
198 const char* kernel_key_file) {
199 KernelImage* image = NULL;
200 uint8_t* kernel_blob = NULL;
201 uint64_t kernel_blob_len = 0;
202
203 image = GenerateTestKernelImage(firmware_sign_algorithm,
204 kernel_sign_algorithm,
205 kernel_sign_key,
206 kernel_key_version,
207 kernel_version,
208 kernel_len,
209 firmware_key_file,
210 kernel_key_file);
211
212 kernel_blob = GetKernelBlob(image, &kernel_blob_len);
213 KernelImageFree(image);
214 return kernel_blob;
215 }
OLDNEW
« no previous file with comments | « src/platform/vboot_reference/tests/test_common.h ('k') | src/platform/vboot_reference/tests/verify_firmware_fuzz_driver.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698