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