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

Side by Side Diff: tests/vboot_common2_tests.c

Issue 3027009: Added size param to VerifyData() (Closed) Base URL: ssh://gitrw.chromium.org/vboot_reference.git
Patch Set: Created 10 years, 5 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
« no previous file with comments | « firmware/version.c ('k') | tests/vboot_common3_tests.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 * 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 27 matching lines...) Expand all
38 "PublicKeyToRSA() algorithm"); 38 "PublicKeyToRSA() algorithm");
39 RSAPublicKeyFree(rsa); 39 RSAPublicKeyFree(rsa);
40 } 40 }
41 } 41 }
42 42
43 43
44 static void VerifyDataTest(const VbPublicKey* public_key, 44 static void VerifyDataTest(const VbPublicKey* public_key,
45 const VbPrivateKey* private_key) { 45 const VbPrivateKey* private_key) {
46 46
47 const uint8_t test_data[] = "This is some test data to sign."; 47 const uint8_t test_data[] = "This is some test data to sign.";
48 const uint64_t test_size = sizeof(test_data);
48 VbSignature* sig; 49 VbSignature* sig;
49 RSAPublicKey* rsa; 50 RSAPublicKey* rsa;
50 51
51 sig = CalculateSignature(test_data, sizeof(test_data), private_key); 52 sig = CalculateSignature(test_data, test_size, private_key);
52 rsa = PublicKeyToRSA(public_key); 53 rsa = PublicKeyToRSA(public_key);
53 TEST_NEQ(sig && rsa, 0, "VerifyData() prerequisites"); 54 TEST_NEQ(sig && rsa, 0, "VerifyData() prerequisites");
54 if (!sig || !rsa) 55 if (!sig || !rsa)
55 return; 56 return;
56 57
57 TEST_EQ(VerifyData(test_data, sig, rsa), 0, "VerifyData() ok"); 58 TEST_EQ(VerifyData(test_data, test_size, sig, rsa), 0, "VerifyData() ok");
58 59
59 sig->sig_size -= 16; 60 sig->sig_size -= 16;
60 TEST_EQ(VerifyData(test_data, sig, rsa), 1, "VerifyData() wrong sig size"); 61 TEST_EQ(VerifyData(test_data, test_size, sig, rsa), 1,
62 "VerifyData() wrong sig size");
61 sig->sig_size += 16; 63 sig->sig_size += 16;
62 64
65 TEST_EQ(VerifyData(test_data, test_size - 1, sig, rsa), 1,
66 "VerifyData() input buffer too small");
67
63 GetSignatureData(sig)[0] ^= 0x5A; 68 GetSignatureData(sig)[0] ^= 0x5A;
64 TEST_EQ(VerifyData(test_data, sig, rsa), 1, "VerifyData() wrong sig"); 69 TEST_EQ(VerifyData(test_data, test_size, sig, rsa), 1,
70 "VerifyData() wrong sig");
65 71
66 RSAPublicKeyFree(rsa); 72 RSAPublicKeyFree(rsa);
67 Free(sig); 73 Free(sig);
68 } 74 }
69 75
70 76
71 static void VerifyDigestTest(const VbPublicKey* public_key, 77 static void VerifyDigestTest(const VbPublicKey* public_key,
72 const VbPrivateKey* private_key) { 78 const VbPrivateKey* private_key) {
73 79
74 const uint8_t test_data[] = "This is some other test data to sign."; 80 const uint8_t test_data[] = "This is some other test data to sign.";
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 VbKernelPreambleHeader *h; 117 VbKernelPreambleHeader *h;
112 RSAPublicKey* rsa; 118 RSAPublicKey* rsa;
113 unsigned hsize; 119 unsigned hsize;
114 120
115 /* Create a dummy signature */ 121 /* Create a dummy signature */
116 VbSignature *body_sig = SignatureAlloc(56, 78); 122 VbSignature *body_sig = SignatureAlloc(56, 78);
117 123
118 rsa = PublicKeyToRSA(public_key); 124 rsa = PublicKeyToRSA(public_key);
119 hdr = CreateKernelPreamble(0x1234, 0x100000, 0x300000, 0x4000, body_sig, 125 hdr = CreateKernelPreamble(0x1234, 0x100000, 0x300000, 0x4000, body_sig,
120 0, private_key); 126 0, private_key);
121 TEST_NEQ(hdr && rsa, 0, "VerifyKernelPreamble2() prerequisites"); 127 TEST_NEQ(hdr && rsa, 0, "VerifyKernelPreamble() prerequisites");
122 if (!hdr) 128 if (!hdr)
123 return; 129 return;
124 hsize = (unsigned) hdr->preamble_size; 130 hsize = (unsigned) hdr->preamble_size;
125 h = (VbKernelPreambleHeader*)Malloc(hsize + 16384); 131 h = (VbKernelPreambleHeader*)Malloc(hsize + 16384);
126 132
127 TEST_EQ(VerifyKernelPreamble2(hdr, hsize, rsa), 0, 133 TEST_EQ(VerifyKernelPreamble(hdr, hsize, rsa), 0,
128 "VerifyKernelPreamble2() ok using key"); 134 "VerifyKernelPreamble() ok using key");
129 TEST_NEQ(VerifyKernelPreamble2(hdr, hsize - 1, rsa), 0, 135 TEST_NEQ(VerifyKernelPreamble(hdr, hsize - 1, rsa), 0,
130 "VerifyKernelPreamble2() size--"); 136 "VerifyKernelPreamble() size--");
131 TEST_EQ(VerifyKernelPreamble2(hdr, hsize + 1, rsa), 0, 137 TEST_EQ(VerifyKernelPreamble(hdr, hsize + 1, rsa), 0,
132 "VerifyKernelPreamble2() size++"); 138 "VerifyKernelPreamble() size++");
133 139
134 /* Care about major version but not minor */ 140 /* Care about major version but not minor */
135 Memcpy(h, hdr, hsize); 141 Memcpy(h, hdr, hsize);
136 h->header_version_major++; 142 h->header_version_major++;
137 ReSignKernelPreamble(h, private_key); 143 ReSignKernelPreamble(h, private_key);
138 TEST_NEQ(VerifyKernelPreamble2(h, hsize, rsa), 0, 144 TEST_NEQ(VerifyKernelPreamble(h, hsize, rsa), 0,
139 "VerifyKernelPreamble2() major++"); 145 "VerifyKernelPreamble() major++");
140 146
141 Memcpy(h, hdr, hsize); 147 Memcpy(h, hdr, hsize);
142 h->header_version_major--; 148 h->header_version_major--;
143 ReSignKernelPreamble(h, private_key); 149 ReSignKernelPreamble(h, private_key);
144 TEST_NEQ(VerifyKernelPreamble2(h, hsize, rsa), 0, 150 TEST_NEQ(VerifyKernelPreamble(h, hsize, rsa), 0,
145 "VerifyKernelPreamble2() major--"); 151 "VerifyKernelPreamble() major--");
146 152
147 Memcpy(h, hdr, hsize); 153 Memcpy(h, hdr, hsize);
148 h->header_version_minor++; 154 h->header_version_minor++;
149 ReSignKernelPreamble(h, private_key); 155 ReSignKernelPreamble(h, private_key);
150 TEST_EQ(VerifyKernelPreamble2(h, hsize, rsa), 0, 156 TEST_EQ(VerifyKernelPreamble(h, hsize, rsa), 0,
151 "VerifyKernelPreamble2() minor++"); 157 "VerifyKernelPreamble() minor++");
152 158
153 Memcpy(h, hdr, hsize); 159 Memcpy(h, hdr, hsize);
154 h->header_version_minor--; 160 h->header_version_minor--;
155 ReSignKernelPreamble(h, private_key); 161 ReSignKernelPreamble(h, private_key);
156 TEST_EQ(VerifyKernelPreamble2(h, hsize, rsa), 0, 162 TEST_EQ(VerifyKernelPreamble(h, hsize, rsa), 0,
157 "VerifyKernelPreamble2() minor--"); 163 "VerifyKernelPreamble() minor--");
158 164
159 /* Check signature */ 165 /* Check signature */
160 Memcpy(h, hdr, hsize); 166 Memcpy(h, hdr, hsize);
161 h->preamble_signature.sig_offset = hsize; 167 h->preamble_signature.sig_offset = hsize;
162 ReSignKernelPreamble(h, private_key); 168 ReSignKernelPreamble(h, private_key);
163 TEST_NEQ(VerifyKernelPreamble2(h, hsize, rsa), 0, 169 TEST_NEQ(VerifyKernelPreamble(h, hsize, rsa), 0,
164 "VerifyKernelPreamble2() sig off end"); 170 "VerifyKernelPreamble() sig off end");
165 171
166 Memcpy(h, hdr, hsize); 172 Memcpy(h, hdr, hsize);
167 h->preamble_signature.sig_size--; 173 h->preamble_signature.sig_size--;
168 ReSignKernelPreamble(h, private_key); 174 ReSignKernelPreamble(h, private_key);
169 TEST_NEQ(VerifyKernelPreamble2(h, hsize, rsa), 0, 175 TEST_NEQ(VerifyKernelPreamble(h, hsize, rsa), 0,
170 "VerifyKernelPreamble2() sig too small"); 176 "VerifyKernelPreamble() sig too small");
171 177
172 Memcpy(h, hdr, hsize); 178 Memcpy(h, hdr, hsize);
173 GetSignatureData(&h->body_signature)[0] ^= 0x34; 179 GetSignatureData(&h->body_signature)[0] ^= 0x34;
174 TEST_NEQ(VerifyKernelPreamble2(h, hsize, rsa), 0, 180 TEST_NEQ(VerifyKernelPreamble(h, hsize, rsa), 0,
175 "VerifyKernelPreamble2() sig mismatch"); 181 "VerifyKernelPreamble() sig mismatch");
176 182
177 /* Check that we signed header and body sig */ 183 /* Check that we signed header and body sig */
178 Memcpy(h, hdr, hsize); 184 Memcpy(h, hdr, hsize);
179 h->preamble_signature.data_size = 4; 185 h->preamble_signature.data_size = 4;
180 h->body_signature.sig_offset = 0; 186 h->body_signature.sig_offset = 0;
181 h->body_signature.sig_size = 0; 187 h->body_signature.sig_size = 0;
182 ReSignKernelPreamble(h, private_key); 188 ReSignKernelPreamble(h, private_key);
183 TEST_NEQ(VerifyKernelPreamble2(h, hsize, rsa), 0, 189 TEST_NEQ(VerifyKernelPreamble(h, hsize, rsa), 0,
184 "VerifyKernelPreamble2() didn't sign header"); 190 "VerifyKernelPreamble() didn't sign header");
185 191
186 Memcpy(h, hdr, hsize); 192 Memcpy(h, hdr, hsize);
187 h->body_signature.sig_offset = hsize; 193 h->body_signature.sig_offset = hsize;
188 ReSignKernelPreamble(h, private_key); 194 ReSignKernelPreamble(h, private_key);
189 TEST_NEQ(VerifyKernelPreamble2(h, hsize, rsa), 0, 195 TEST_NEQ(VerifyKernelPreamble(h, hsize, rsa), 0,
190 "VerifyKernelPreamble2() body sig off end"); 196 "VerifyKernelPreamble() body sig off end");
191 197
192 /* TODO: verify parser can support a bigger header. */ 198 /* TODO: verify parser can support a bigger header. */
193 199
194 Free(h); 200 Free(h);
195 RSAPublicKeyFree(rsa); 201 RSAPublicKeyFree(rsa);
196 Free(hdr); 202 Free(hdr);
197 } 203 }
198 204
199 205
200 int main(int argc, char* argv[]) { 206 int main(int argc, char* argv[]) {
(...skipping 29 matching lines...) Expand all
230 VerifyDigestTest(public_key, private_key); 236 VerifyDigestTest(public_key, private_key);
231 VerifyKernelPreambleTest(public_key, private_key); 237 VerifyKernelPreambleTest(public_key, private_key);
232 238
233 if (public_key) 239 if (public_key)
234 Free(public_key); 240 Free(public_key);
235 if (private_key) 241 if (private_key)
236 Free(private_key); 242 Free(private_key);
237 243
238 return error_code; 244 return error_code;
239 } 245 }
OLDNEW
« no previous file with comments | « firmware/version.c ('k') | tests/vboot_common3_tests.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698