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

Side by Side Diff: components/crx_file/crx_file.cc

Issue 2768033002: Use size_t in crypto::SignatureVerifier. (Closed)
Patch Set: . Created 3 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium 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 #include "components/crx_file/crx_file.h" 5 #include "components/crx_file/crx_file.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/files/scoped_file.h" 10 #include "base/files/scoped_file.h"
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 return ValidateError::CRX_PUBLIC_KEY_INVALID; 153 return ValidateError::CRX_PUBLIC_KEY_INVALID;
154 154
155 std::vector<uint8_t> signature(header.signature_size); 155 std::vector<uint8_t> signature(header.signature_size);
156 len = ReadAndHash(&signature.front(), sizeof(uint8_t), header.signature_size, 156 len = ReadAndHash(&signature.front(), sizeof(uint8_t), header.signature_size,
157 file.get(), hash.get()); 157 file.get(), hash.get());
158 if (len < header.signature_size) 158 if (len < header.signature_size)
159 return ValidateError::CRX_SIGNATURE_INVALID; 159 return ValidateError::CRX_SIGNATURE_INVALID;
160 160
161 crypto::SignatureVerifier verifier; 161 crypto::SignatureVerifier verifier;
162 if (!verifier.VerifyInit(crypto::SignatureVerifier::RSA_PKCS1_SHA1, 162 if (!verifier.VerifyInit(crypto::SignatureVerifier::RSA_PKCS1_SHA1,
163 signature.data(), static_cast<int>(signature.size()), 163 signature.data(), signature.size(), key.data(),
164 key.data(), static_cast<int>(key.size()))) { 164 key.size())) {
165 // Signature verification initialization failed. This is most likely 165 // Signature verification initialization failed. This is most likely
166 // caused by a public key in the wrong format (should encode algorithm). 166 // caused by a public key in the wrong format (should encode algorithm).
167 return ValidateError::CRX_SIGNATURE_VERIFICATION_INITIALIZATION_FAILED; 167 return ValidateError::CRX_SIGNATURE_VERIFICATION_INITIALIZATION_FAILED;
168 } 168 }
169 169
170 uint8_t buf[1 << 12] = {}; 170 uint8_t buf[1 << 12] = {};
171 while ((len = ReadAndHash(buf, sizeof(buf[0]), arraysize(buf), file.get(), 171 while ((len = ReadAndHash(buf, sizeof(buf[0]), arraysize(buf), file.get(),
172 hash.get())) > 0) 172 hash.get())) > 0)
173 verifier.VerifyUpdate(buf, static_cast<int>(len)); 173 verifier.VerifyUpdate(buf, len);
174 174
175 if (!verifier.VerifyFinal()) 175 if (!verifier.VerifyFinal())
176 return ValidateError::CRX_SIGNATURE_VERIFICATION_FAILED; 176 return ValidateError::CRX_SIGNATURE_VERIFICATION_FAILED;
177 177
178 std::string public_key_bytes = 178 std::string public_key_bytes =
179 std::string(reinterpret_cast<char*>(&key.front()), key.size()); 179 std::string(reinterpret_cast<char*>(&key.front()), key.size());
180 if (public_key) 180 if (public_key)
181 base::Base64Encode(public_key_bytes, public_key); 181 base::Base64Encode(public_key_bytes, public_key);
182 182
183 std::string id = id_util::GenerateId(public_key_bytes); 183 std::string id = id_util::GenerateId(public_key_bytes);
(...skipping 27 matching lines...) Expand all
211 else if (header.signature_size > kMaxSignatureSize) 211 else if (header.signature_size > kMaxSignatureSize)
212 *error = kInvalidSignatureTooLarge; 212 *error = kInvalidSignatureTooLarge;
213 else if (header.signature_size == 0) 213 else if (header.signature_size == 0)
214 *error = kInvalidSignatureTooSmall; 214 *error = kInvalidSignatureTooSmall;
215 else 215 else
216 valid = true; 216 valid = true;
217 return valid; 217 return valid;
218 } 218 }
219 219
220 } // namespace crx_file 220 } // namespace crx_file
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698