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

Side by Side Diff: components/variations/variations_seed_store.cc

Issue 1679873005: Switch SignatureVerifier to taking an algorithm enum. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix iOS build Created 4 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
« no previous file with comments | « components/update_client/component_unpacker.cc ('k') | crypto/ec_signature_creator_unittest.cc » ('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 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/variations/variations_seed_store.h" 5 #include "components/variations/variations_seed_store.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 21 matching lines...) Expand all
32 // Signature verification is disabled on mobile platforms for now, since it 32 // Signature verification is disabled on mobile platforms for now, since it
33 // adds about ~15ms to the startup time on mobile (vs. a couple ms on desktop). 33 // adds about ~15ms to the startup time on mobile (vs. a couple ms on desktop).
34 bool SignatureVerificationEnabled() { 34 bool SignatureVerificationEnabled() {
35 #if defined(OS_IOS) || defined(OS_ANDROID) 35 #if defined(OS_IOS) || defined(OS_ANDROID)
36 return false; 36 return false;
37 #else 37 #else
38 return true; 38 return true;
39 #endif 39 #endif
40 } 40 }
41 41
42 // This is the algorithm ID for ECDSA with SHA-256. Parameters are ABSENT.
43 // RFC 5758:
44 // ecdsa-with-SHA256 OBJECT IDENTIFIER ::= { iso(1) member-body(2)
45 // us(840) ansi-X9-62(10045) signatures(4) ecdsa-with-SHA2(3) 2 }
46 // ...
47 // When the ecdsa-with-SHA224, ecdsa-with-SHA256, ecdsa-with-SHA384, or
48 // ecdsa-with-SHA512 algorithm identifier appears in the algorithm field
49 // as an AlgorithmIdentifier, the encoding MUST omit the parameters
50 // field. That is, the AlgorithmIdentifier SHALL be a SEQUENCE of one
51 // component, the OID ecdsa-with-SHA224, ecdsa-with-SHA256, ecdsa-with-
52 // SHA384, or ecdsa-with-SHA512.
53 // See also RFC 5480, Appendix A.
54 const uint8_t kECDSAWithSHA256AlgorithmID[] = {
55 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02,
56 };
57
58 // The ECDSA public key of the variations server for verifying variations seed 42 // The ECDSA public key of the variations server for verifying variations seed
59 // signatures. 43 // signatures.
60 const uint8_t kPublicKey[] = { 44 const uint8_t kPublicKey[] = {
61 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 45 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01,
62 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 46 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00,
63 0x04, 0x51, 0x7c, 0x31, 0x4b, 0x50, 0x42, 0xdd, 0x59, 0xda, 0x0b, 0xfa, 0x43, 47 0x04, 0x51, 0x7c, 0x31, 0x4b, 0x50, 0x42, 0xdd, 0x59, 0xda, 0x0b, 0xfa, 0x43,
64 0x44, 0x33, 0x7c, 0x5f, 0xa1, 0x0b, 0xd5, 0x82, 0xf6, 0xac, 0x04, 0x19, 0x72, 48 0x44, 0x33, 0x7c, 0x5f, 0xa1, 0x0b, 0xd5, 0x82, 0xf6, 0xac, 0x04, 0x19, 0x72,
65 0x6c, 0x40, 0xd4, 0x3e, 0x56, 0xe2, 0xa0, 0x80, 0xa0, 0x41, 0xb3, 0x23, 0x7b, 49 0x6c, 0x40, 0xd4, 0x3e, 0x56, 0xe2, 0xa0, 0x80, 0xa0, 0x41, 0xb3, 0x23, 0x7b,
66 0x71, 0xc9, 0x80, 0x87, 0xde, 0x35, 0x0d, 0x25, 0x71, 0x09, 0x7f, 0xb4, 0x15, 50 0x71, 0xc9, 0x80, 0x87, 0xde, 0x35, 0x0d, 0x25, 0x71, 0x09, 0x7f, 0xb4, 0x15,
67 0x2b, 0xff, 0x82, 0x4d, 0xd3, 0xfe, 0xc5, 0xef, 0x20, 0xc6, 0xa3, 0x10, 0xbf, 51 0x2b, 0xff, 0x82, 0x4d, 0xd3, 0xfe, 0xc5, 0xef, 0x20, 0xc6, 0xa3, 0x10, 0xbf,
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 return VARIATIONS_SEED_SIGNATURE_ENUM_SIZE; 318 return VARIATIONS_SEED_SIGNATURE_ENUM_SIZE;
335 319
336 if (base64_seed_signature.empty()) 320 if (base64_seed_signature.empty())
337 return VARIATIONS_SEED_SIGNATURE_MISSING; 321 return VARIATIONS_SEED_SIGNATURE_MISSING;
338 322
339 std::string signature; 323 std::string signature;
340 if (!base::Base64Decode(base64_seed_signature, &signature)) 324 if (!base::Base64Decode(base64_seed_signature, &signature))
341 return VARIATIONS_SEED_SIGNATURE_DECODE_FAILED; 325 return VARIATIONS_SEED_SIGNATURE_DECODE_FAILED;
342 326
343 crypto::SignatureVerifier verifier; 327 crypto::SignatureVerifier verifier;
344 if (!verifier.VerifyInit( 328 if (!verifier.VerifyInit(crypto::SignatureVerifier::ECDSA_SHA256,
345 kECDSAWithSHA256AlgorithmID, sizeof(kECDSAWithSHA256AlgorithmID), 329 reinterpret_cast<const uint8_t*>(signature.data()),
346 reinterpret_cast<const uint8_t*>(signature.data()), signature.size(), 330 signature.size(), kPublicKey,
347 kPublicKey, arraysize(kPublicKey))) { 331 arraysize(kPublicKey))) {
348 return VARIATIONS_SEED_SIGNATURE_INVALID_SIGNATURE; 332 return VARIATIONS_SEED_SIGNATURE_INVALID_SIGNATURE;
349 } 333 }
350 334
351 verifier.VerifyUpdate(reinterpret_cast<const uint8_t*>(seed_bytes.data()), 335 verifier.VerifyUpdate(reinterpret_cast<const uint8_t*>(seed_bytes.data()),
352 seed_bytes.size()); 336 seed_bytes.size());
353 if (verifier.VerifyFinal()) 337 if (verifier.VerifyFinal())
354 return VARIATIONS_SEED_SIGNATURE_VALID; 338 return VARIATIONS_SEED_SIGNATURE_VALID;
355 return VARIATIONS_SEED_SIGNATURE_INVALID_SEED; 339 return VARIATIONS_SEED_SIGNATURE_INVALID_SEED;
356 } 340 }
357 341
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 } 528 }
545 return true; 529 return true;
546 } 530 }
547 531
548 void VariationsSeedStore::ReportUnsupportedSeedFormatError() { 532 void VariationsSeedStore::ReportUnsupportedSeedFormatError() {
549 RecordSeedStoreHistogram( 533 RecordSeedStoreHistogram(
550 VARIATIONS_SEED_STORE_FAILED_UNSUPPORTED_SEED_FORMAT); 534 VARIATIONS_SEED_STORE_FAILED_UNSUPPORTED_SEED_FORMAT);
551 } 535 }
552 536
553 } // namespace variations 537 } // namespace variations
OLDNEW
« no previous file with comments | « components/update_client/component_unpacker.cc ('k') | crypto/ec_signature_creator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698