Index: chrome/browser/internal_auth.cc |
diff --git a/chrome/browser/internal_auth.cc b/chrome/browser/internal_auth.cc |
index 84d543c2d6bbdd7b18227f56623a696d661c5503..f97baeca7c786ffe3bca476eaf0abb7eb02a8f1f 100644 |
--- a/chrome/browser/internal_auth.cc |
+++ b/chrome/browser/internal_auth.cc |
@@ -4,8 +4,11 @@ |
#include "chrome/browser/internal_auth.h" |
+#include <stdint.h> |
+ |
#include <algorithm> |
#include <deque> |
+#include <limits> |
#include "base/base64.h" |
#include "base/lazy_instance.h" |
@@ -26,7 +29,7 @@ typedef std::map<std::string, std::string> VarValueMap; |
// Size of a tick in microseconds. This determines upper bound for average |
// number of passports generated per time unit. This bound equals to |
// (kMicrosecondsPerSecond / TickUs) calls per second. |
-const int64 kTickUs = 10000; |
+const int64_t kTickUs = 10000; |
// Verification window size in ticks; that means any passport expires in |
// (kVerificationWindowTicks * TickUs / kMicrosecondsPerSecond) seconds. |
@@ -77,11 +80,10 @@ const size_t kTickStringLength = 20; |
const size_t kPassportSize = |
BASE64_PER_RAW(kHMACSizeInBytes) + kTickStringLength; |
-int64 GetCurrentTick() { |
- int64 tick = base::Time::Now().ToInternalValue() / kTickUs; |
- if (tick < kVerificationWindowTicks || |
- tick < kKeyRegenerationHardTicks || |
- tick > kint64max - kKeyRegenerationHardTicks) { |
+int64_t GetCurrentTick() { |
+ int64_t tick = base::Time::Now().ToInternalValue() / kTickUs; |
+ if (tick < kVerificationWindowTicks || tick < kKeyRegenerationHardTicks || |
+ tick > std::numeric_limits<int64_t>::max() - kKeyRegenerationHardTicks) { |
return 0; |
} |
return tick; |
@@ -142,7 +144,7 @@ void ConvertVarValueMapToBlob(const VarValueMap& map, std::string* out) { |
void CreatePassport(const std::string& domain, |
const VarValueMap& map, |
- int64 tick, |
+ int64_t tick, |
const crypto::HMAC* engine, |
std::string* out) { |
DCHECK(engine); |
@@ -200,8 +202,8 @@ class InternalAuthVerificationService { |
const std::string& passport, |
const std::string& domain, |
const VarValueMap& map) { |
- int64 current_tick = GetCurrentTick(); |
- int64 tick = PreVerifyPassport(passport, domain, current_tick); |
+ int64_t current_tick = GetCurrentTick(); |
+ int64_t tick = PreVerifyPassport(passport, domain, current_tick); |
if (tick == 0) |
return false; |
if (!IsVarValueMapSane(map)) |
@@ -221,8 +223,8 @@ class InternalAuthVerificationService { |
} |
// Record used tick to prevent reuse. |
- std::deque<int64>::iterator it = std::lower_bound( |
- used_ticks_.begin(), used_ticks_.end(), tick); |
+ std::deque<int64_t>::iterator it = |
+ std::lower_bound(used_ticks_.begin(), used_ticks_.end(), tick); |
DCHECK(it == used_ticks_.end() || *it != tick); |
used_ticks_.insert(it, tick); |
@@ -261,10 +263,9 @@ class InternalAuthVerificationService { |
} |
// Returns tick bound to given passport on success or zero on failure. |
- int64 PreVerifyPassport( |
- const std::string& passport, |
- const std::string& domain, |
- int64 current_tick) { |
+ int64_t PreVerifyPassport(const std::string& passport, |
+ const std::string& domain, |
+ int64_t current_tick) { |
if (passport.size() != kPassportSize || |
!base::IsStringASCII(passport) || |
!IsDomainSane(domain) || |
@@ -279,7 +280,7 @@ class InternalAuthVerificationService { |
std::string tick_decimal = |
passport.substr(BASE64_PER_RAW(kHMACSizeInBytes)); |
DCHECK(tick_decimal.size() == kTickStringLength); |
- int64 tick = 0; |
+ int64_t tick = 0; |
if (!base::StringToInt64(tick_decimal, &tick) || |
tick <= dark_tick_ || |
tick > key_change_tick_ + kKeyRegenerationHardTicks || |
@@ -302,16 +303,16 @@ class InternalAuthVerificationService { |
scoped_ptr<crypto::HMAC> old_engine_; |
// Tick at a time of recent key regeneration. |
- int64 key_change_tick_; |
+ int64_t key_change_tick_; |
// Keeps track of ticks of successfully verified passports to prevent their |
// reuse. Size of this container is kept reasonably low by purging outdated |
// ticks. |
- std::deque<int64> used_ticks_; |
+ std::deque<int64_t> used_ticks_; |
// Some ticks before |dark_tick_| were purged from |used_ticks_| container. |
// That means that we must not trust any tick less than or equal to dark tick. |
- int64 dark_tick_; |
+ int64_t dark_tick_; |
DISALLOW_COPY_AND_ASSIGN(InternalAuthVerificationService); |
}; |
@@ -348,7 +349,7 @@ class InternalAuthGenerationService : public base::ThreadChecker { |
} |
// Returns zero on failure. |
- int64 GetUnusedTick(const std::string& domain) { |
+ int64_t GetUnusedTick(const std::string& domain) { |
DCHECK(CalledOnValidThread()); |
if (engine_ == NULL) { |
NOTREACHED(); |
@@ -357,7 +358,7 @@ class InternalAuthGenerationService : public base::ThreadChecker { |
if (!IsDomainSane(domain)) |
return 0; |
- int64 current_tick = GetCurrentTick(); |
+ int64_t current_tick = GetCurrentTick(); |
if (!used_ticks_.empty() && used_ticks_.back() > current_tick) |
current_tick = used_ticks_.back(); |
for (bool first_iteration = true;; first_iteration = false) { |
@@ -378,9 +379,8 @@ class InternalAuthGenerationService : public base::ThreadChecker { |
// Average speed of GeneratePassport calls exceeds limit. |
return 0; |
} |
- for (int64 tick = current_tick; |
- tick > current_tick - kGenerationWindowTicks; |
- --tick) { |
+ for (int64_t tick = current_tick; |
+ tick > current_tick - kGenerationWindowTicks; --tick) { |
int idx = static_cast<int>(used_ticks_.size()) - |
static_cast<int>(current_tick - tick + 1); |
if (idx < 0 || used_ticks_[idx] != tick) { |
@@ -393,8 +393,9 @@ class InternalAuthGenerationService : public base::ThreadChecker { |
return 0; |
} |
- std::string GeneratePassport( |
- const std::string& domain, const VarValueMap& map, int64 tick) { |
+ std::string GeneratePassport(const std::string& domain, |
+ const VarValueMap& map, |
+ int64_t tick) { |
DCHECK(CalledOnValidThread()); |
if (tick == 0) { |
tick = GetUnusedTick(domain); |
@@ -417,8 +418,8 @@ class InternalAuthGenerationService : public base::ThreadChecker { |
} |
scoped_ptr<crypto::HMAC> engine_; |
- int64 key_regeneration_tick_; |
- std::deque<int64> used_ticks_; |
+ int64_t key_regeneration_tick_; |
+ std::deque<int64_t> used_ticks_; |
DISALLOW_COPY_AND_ASSIGN(InternalAuthGenerationService); |
}; |