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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 VbFirmwarePreambleHeader *hdr; | 149 VbFirmwarePreambleHeader *hdr; |
150 VbFirmwarePreambleHeader *h; | 150 VbFirmwarePreambleHeader *h; |
151 RSAPublicKey* rsa; | 151 RSAPublicKey* rsa; |
152 unsigned hsize; | 152 unsigned hsize; |
153 | 153 |
154 /* Create a dummy signature */ | 154 /* Create a dummy signature */ |
155 VbSignature *body_sig = SignatureAlloc(56, 78); | 155 VbSignature *body_sig = SignatureAlloc(56, 78); |
156 | 156 |
157 rsa = PublicKeyToRSA(public_key); | 157 rsa = PublicKeyToRSA(public_key); |
158 hdr = CreateFirmwarePreamble(0x1234, kernel_subkey, body_sig, private_key); | 158 hdr = CreateFirmwarePreamble(0x1234, kernel_subkey, body_sig, private_key); |
159 TEST_NEQ(hdr && rsa, 0, "VerifyFirmwarePreamble2() prerequisites"); | 159 TEST_NEQ(hdr && rsa, 0, "VerifyFirmwarePreamble() prerequisites"); |
160 if (!hdr) | 160 if (!hdr) |
161 return; | 161 return; |
162 hsize = (unsigned) hdr->preamble_size; | 162 hsize = (unsigned) hdr->preamble_size; |
163 h = (VbFirmwarePreambleHeader*)Malloc(hsize + 16384); | 163 h = (VbFirmwarePreambleHeader*)Malloc(hsize + 16384); |
164 | 164 |
165 TEST_EQ(VerifyFirmwarePreamble2(hdr, hsize, rsa), 0, | 165 TEST_EQ(VerifyFirmwarePreamble(hdr, hsize, rsa), 0, |
166 "VerifyFirmwarePreamble2() ok using key"); | 166 "VerifyFirmwarePreamble() ok using key"); |
167 TEST_NEQ(VerifyFirmwarePreamble2(hdr, hsize - 1, rsa), 0, | 167 TEST_NEQ(VerifyFirmwarePreamble(hdr, hsize - 1, rsa), 0, |
168 "VerifyFirmwarePreamble2() size--"); | 168 "VerifyFirmwarePreamble() size--"); |
169 TEST_EQ(VerifyFirmwarePreamble2(hdr, hsize + 1, rsa), 0, | 169 TEST_EQ(VerifyFirmwarePreamble(hdr, hsize + 1, rsa), 0, |
170 "VerifyFirmwarePreamble2() size++"); | 170 "VerifyFirmwarePreamble() size++"); |
171 | 171 |
172 /* Care about major version but not minor */ | 172 /* Care about major version but not minor */ |
173 Memcpy(h, hdr, hsize); | 173 Memcpy(h, hdr, hsize); |
174 h->header_version_major++; | 174 h->header_version_major++; |
175 ReSignFirmwarePreamble(h, private_key); | 175 ReSignFirmwarePreamble(h, private_key); |
176 TEST_NEQ(VerifyFirmwarePreamble2(h, hsize, rsa), 0, | 176 TEST_NEQ(VerifyFirmwarePreamble(h, hsize, rsa), 0, |
177 "VerifyFirmwarePreamble2() major++"); | 177 "VerifyFirmwarePreamble() major++"); |
178 | 178 |
179 Memcpy(h, hdr, hsize); | 179 Memcpy(h, hdr, hsize); |
180 h->header_version_major--; | 180 h->header_version_major--; |
181 ReSignFirmwarePreamble(h, private_key); | 181 ReSignFirmwarePreamble(h, private_key); |
182 TEST_NEQ(VerifyFirmwarePreamble2(h, hsize, rsa), 0, | 182 TEST_NEQ(VerifyFirmwarePreamble(h, hsize, rsa), 0, |
183 "VerifyFirmwarePreamble2() major--"); | 183 "VerifyFirmwarePreamble() major--"); |
184 | 184 |
185 Memcpy(h, hdr, hsize); | 185 Memcpy(h, hdr, hsize); |
186 h->header_version_minor++; | 186 h->header_version_minor++; |
187 ReSignFirmwarePreamble(h, private_key); | 187 ReSignFirmwarePreamble(h, private_key); |
188 TEST_EQ(VerifyFirmwarePreamble2(h, hsize, rsa), 0, | 188 TEST_EQ(VerifyFirmwarePreamble(h, hsize, rsa), 0, |
189 "VerifyFirmwarePreamble2() minor++"); | 189 "VerifyFirmwarePreamble() minor++"); |
190 | 190 |
191 Memcpy(h, hdr, hsize); | 191 Memcpy(h, hdr, hsize); |
192 h->header_version_minor--; | 192 h->header_version_minor--; |
193 ReSignFirmwarePreamble(h, private_key); | 193 ReSignFirmwarePreamble(h, private_key); |
194 TEST_EQ(VerifyFirmwarePreamble2(h, hsize, rsa), 0, | 194 TEST_EQ(VerifyFirmwarePreamble(h, hsize, rsa), 0, |
195 "VerifyFirmwarePreamble2() minor--"); | 195 "VerifyFirmwarePreamble() minor--"); |
196 | 196 |
197 /* Check signature */ | 197 /* Check signature */ |
198 Memcpy(h, hdr, hsize); | 198 Memcpy(h, hdr, hsize); |
199 h->preamble_signature.sig_offset = hsize; | 199 h->preamble_signature.sig_offset = hsize; |
200 ReSignFirmwarePreamble(h, private_key); | 200 ReSignFirmwarePreamble(h, private_key); |
201 TEST_NEQ(VerifyFirmwarePreamble2(h, hsize, rsa), 0, | 201 TEST_NEQ(VerifyFirmwarePreamble(h, hsize, rsa), 0, |
202 "VerifyFirmwarePreamble2() sig off end"); | 202 "VerifyFirmwarePreamble() sig off end"); |
203 | 203 |
204 Memcpy(h, hdr, hsize); | 204 Memcpy(h, hdr, hsize); |
205 h->preamble_signature.sig_size--; | 205 h->preamble_signature.sig_size--; |
206 ReSignFirmwarePreamble(h, private_key); | 206 ReSignFirmwarePreamble(h, private_key); |
207 TEST_NEQ(VerifyFirmwarePreamble2(h, hsize, rsa), 0, | 207 TEST_NEQ(VerifyFirmwarePreamble(h, hsize, rsa), 0, |
208 "VerifyFirmwarePreamble2() sig too small"); | 208 "VerifyFirmwarePreamble() sig too small"); |
209 | 209 |
210 Memcpy(h, hdr, hsize); | 210 Memcpy(h, hdr, hsize); |
211 GetPublicKeyData(&h->kernel_subkey)[0] ^= 0x34; | 211 GetPublicKeyData(&h->kernel_subkey)[0] ^= 0x34; |
212 TEST_NEQ(VerifyFirmwarePreamble2(h, hsize, rsa), 0, | 212 TEST_NEQ(VerifyFirmwarePreamble(h, hsize, rsa), 0, |
213 "VerifyFirmwarePreamble2() sig mismatch"); | 213 "VerifyFirmwarePreamble() sig mismatch"); |
214 | 214 |
215 /* Check that we signed header, kernel subkey, and body sig */ | 215 /* Check that we signed header, kernel subkey, and body sig */ |
216 Memcpy(h, hdr, hsize); | 216 Memcpy(h, hdr, hsize); |
217 h->preamble_signature.data_size = 4; | 217 h->preamble_signature.data_size = 4; |
218 h->kernel_subkey.key_offset = 0; | 218 h->kernel_subkey.key_offset = 0; |
219 h->kernel_subkey.key_size = 0; | 219 h->kernel_subkey.key_size = 0; |
220 h->body_signature.sig_offset = 0; | 220 h->body_signature.sig_offset = 0; |
221 h->body_signature.sig_size = 0; | 221 h->body_signature.sig_size = 0; |
222 ReSignFirmwarePreamble(h, private_key); | 222 ReSignFirmwarePreamble(h, private_key); |
223 TEST_NEQ(VerifyFirmwarePreamble2(h, hsize, rsa), 0, | 223 TEST_NEQ(VerifyFirmwarePreamble(h, hsize, rsa), 0, |
224 "VerifyFirmwarePreamble2() didn't sign header"); | 224 "VerifyFirmwarePreamble() didn't sign header"); |
225 | 225 |
226 Memcpy(h, hdr, hsize); | 226 Memcpy(h, hdr, hsize); |
227 h->kernel_subkey.key_offset = hsize; | 227 h->kernel_subkey.key_offset = hsize; |
228 ReSignFirmwarePreamble(h, private_key); | 228 ReSignFirmwarePreamble(h, private_key); |
229 TEST_NEQ(VerifyFirmwarePreamble2(h, hsize, rsa), 0, | 229 TEST_NEQ(VerifyFirmwarePreamble(h, hsize, rsa), 0, |
230 "VerifyFirmwarePreamble2() kernel subkey off end"); | 230 "VerifyFirmwarePreamble() kernel subkey off end"); |
231 | 231 |
232 Memcpy(h, hdr, hsize); | 232 Memcpy(h, hdr, hsize); |
233 h->body_signature.sig_offset = hsize; | 233 h->body_signature.sig_offset = hsize; |
234 ReSignFirmwarePreamble(h, private_key); | 234 ReSignFirmwarePreamble(h, private_key); |
235 TEST_NEQ(VerifyFirmwarePreamble2(h, hsize, rsa), 0, | 235 TEST_NEQ(VerifyFirmwarePreamble(h, hsize, rsa), 0, |
236 "VerifyFirmwarePreamble2() body sig off end"); | 236 "VerifyFirmwarePreamble() body sig off end"); |
237 | 237 |
238 /* TODO: verify parser can support a bigger header. */ | 238 /* TODO: verify parser can support a bigger header. */ |
239 | 239 |
240 Free(h); | 240 Free(h); |
241 RSAPublicKeyFree(rsa); | 241 RSAPublicKeyFree(rsa); |
242 Free(hdr); | 242 Free(hdr); |
243 } | 243 } |
244 | 244 |
245 | 245 |
246 int main(int argc, char* argv[]) { | 246 int main(int argc, char* argv[]) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 | 288 |
289 if (signing_public_key) | 289 if (signing_public_key) |
290 Free(signing_public_key); | 290 Free(signing_public_key); |
291 if (signing_private_key) | 291 if (signing_private_key) |
292 Free(signing_private_key); | 292 Free(signing_private_key); |
293 if (data_public_key) | 293 if (data_public_key) |
294 Free(data_public_key); | 294 Free(data_public_key); |
295 | 295 |
296 return error_code; | 296 return error_code; |
297 } | 297 } |
OLD | NEW |