OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/safe_browsing/safe_browsing_util.h" | 5 #include "chrome/browser/safe_browsing/safe_browsing_util.h" |
6 | 6 |
7 #include "base/base64.h" | |
8 #include "base/logging.h" | 7 #include "base/logging.h" |
9 #include "base/string_util.h" | 8 #include "base/string_util.h" |
10 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
11 #include "chrome/browser/google/google_util.h" | 10 #include "chrome/browser/google/google_util.h" |
12 #include "crypto/hmac.h" | |
13 #include "crypto/sha2.h" | 11 #include "crypto/sha2.h" |
14 #include "googleurl/src/gurl.h" | 12 #include "googleurl/src/gurl.h" |
15 #include "googleurl/src/url_util.h" | 13 #include "googleurl/src/url_util.h" |
16 #include "net/base/escape.h" | 14 #include "net/base/escape.h" |
17 #include "unicode/locid.h" | 15 #include "unicode/locid.h" |
18 | 16 |
19 #if defined(OS_WIN) | 17 #if defined(OS_WIN) |
20 #include "chrome/installer/util/browser_distribution.h" | 18 #include "chrome/installer/util/browser_distribution.h" |
21 #endif | 19 #endif |
22 | 20 |
23 static const int kSafeBrowsingMacDigestSize = 20; | |
24 | |
25 // Continue to this URL after submitting the phishing report form. | 21 // Continue to this URL after submitting the phishing report form. |
26 // TODO(paulg): Change to a Chrome specific URL. | 22 // TODO(paulg): Change to a Chrome specific URL. |
27 static const char kContinueUrlFormat[] = | 23 static const char kContinueUrlFormat[] = |
28 "http://www.google.com/tools/firefox/toolbar/FT2/intl/%s/submit_success.html"; | 24 "http://www.google.com/tools/firefox/toolbar/FT2/intl/%s/submit_success.html"; |
29 | 25 |
30 static const char kReportParams[] = "?tpl=%s&continue=%s&url=%s"; | 26 static const char kReportParams[] = "?tpl=%s&continue=%s&url=%s"; |
31 | 27 |
32 // SBChunk --------------------------------------------------------------------- | 28 // SBChunk --------------------------------------------------------------------- |
33 | 29 |
34 SBChunk::SBChunk() | 30 SBChunk::SBChunk() |
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 } | 468 } |
473 | 469 |
474 bool IsBadbinurlList(const std::string& list_name) { | 470 bool IsBadbinurlList(const std::string& list_name) { |
475 return list_name.compare(kBinUrlList) == 0; | 471 return list_name.compare(kBinUrlList) == 0; |
476 } | 472 } |
477 | 473 |
478 bool IsBadbinhashList(const std::string& list_name) { | 474 bool IsBadbinhashList(const std::string& list_name) { |
479 return list_name.compare(kBinHashList) == 0; | 475 return list_name.compare(kBinHashList) == 0; |
480 } | 476 } |
481 | 477 |
482 static void DecodeWebSafe(std::string* decoded) { | |
483 DCHECK(decoded); | |
484 for (std::string::iterator i(decoded->begin()); i != decoded->end(); ++i) { | |
485 if (*i == '_') | |
486 *i = '/'; | |
487 else if (*i == '-') | |
488 *i = '+'; | |
489 } | |
490 } | |
491 | |
492 bool VerifyMAC(const std::string& key, const std::string& mac, | |
493 const char* data, int data_length) { | |
494 std::string key_copy = key; | |
495 DecodeWebSafe(&key_copy); | |
496 std::string decoded_key; | |
497 base::Base64Decode(key_copy, &decoded_key); | |
498 | |
499 std::string mac_copy = mac; | |
500 DecodeWebSafe(&mac_copy); | |
501 std::string decoded_mac; | |
502 base::Base64Decode(mac_copy, &decoded_mac); | |
503 | |
504 crypto::HMAC hmac(crypto::HMAC::SHA1); | |
505 if (!hmac.Init(decoded_key)) | |
506 return false; | |
507 const std::string data_str(data, data_length); | |
508 unsigned char digest[kSafeBrowsingMacDigestSize]; | |
509 if (!hmac.Sign(data_str, digest, kSafeBrowsingMacDigestSize)) | |
510 return false; | |
511 | |
512 return !memcmp(digest, decoded_mac.data(), kSafeBrowsingMacDigestSize); | |
513 } | |
514 | |
515 GURL GeneratePhishingReportUrl(const std::string& report_page, | 478 GURL GeneratePhishingReportUrl(const std::string& report_page, |
516 const std::string& url_to_report, | 479 const std::string& url_to_report, |
517 bool is_client_side_detection) { | 480 bool is_client_side_detection) { |
518 icu::Locale locale = icu::Locale::getDefault(); | 481 icu::Locale locale = icu::Locale::getDefault(); |
519 const char* lang = locale.getLanguage(); | 482 const char* lang = locale.getLanguage(); |
520 if (!lang) | 483 if (!lang) |
521 lang = "en"; // fallback | 484 lang = "en"; // fallback |
522 const std::string continue_esc = net::EscapeQueryParamValue( | 485 const std::string continue_esc = net::EscapeQueryParamValue( |
523 base::StringPrintf(kContinueUrlFormat, lang), true); | 486 base::StringPrintf(kContinueUrlFormat, lang), true); |
524 const std::string current_esc = net::EscapeQueryParamValue(url_to_report, | 487 const std::string current_esc = net::EscapeQueryParamValue(url_to_report, |
(...skipping 18 matching lines...) Expand all Loading... |
543 void StringToSBFullHash(const std::string& hash_in, SBFullHash* hash_out) { | 506 void StringToSBFullHash(const std::string& hash_in, SBFullHash* hash_out) { |
544 DCHECK_EQ(crypto::kSHA256Length, hash_in.size()); | 507 DCHECK_EQ(crypto::kSHA256Length, hash_in.size()); |
545 memcpy(hash_out->full_hash, hash_in.data(), crypto::kSHA256Length); | 508 memcpy(hash_out->full_hash, hash_in.data(), crypto::kSHA256Length); |
546 } | 509 } |
547 | 510 |
548 std::string SBFullHashToString(const SBFullHash& hash) { | 511 std::string SBFullHashToString(const SBFullHash& hash) { |
549 DCHECK_EQ(crypto::kSHA256Length, sizeof(hash.full_hash)); | 512 DCHECK_EQ(crypto::kSHA256Length, sizeof(hash.full_hash)); |
550 return std::string(hash.full_hash, sizeof(hash.full_hash)); | 513 return std::string(hash.full_hash, sizeof(hash.full_hash)); |
551 } | 514 } |
552 } // namespace safe_browsing_util | 515 } // namespace safe_browsing_util |
OLD | NEW |