| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_INTERNAL_AUTH_H_ |
| #define CHROME_BROWSER_INTERNAL_AUTH_H_ |
| |
| #include <map> |
| #include <string> |
| |
| #include "base/gtest_prod_util.h" |
| #include "base/macros.h" |
| |
| namespace chrome { |
| |
| // Call InternalAuthVerification methods on any thread. |
| class InternalAuthVerification { |
| public: |
| // Used by consumer of passport in order to verify credentials. |
| static bool VerifyPassport( |
| const std::string& passport, |
| const std::string& domain, |
| const std::map<std::string, std::string>& var_value_map); |
| |
| private: |
| friend class InternalAuthGeneration; |
| friend class InternalAuthVerificationService; |
| friend class InternalAuthGenerationService; |
| FRIEND_TEST_ALL_PREFIXES(InternalAuthTest, ExpirationAndBruteForce); |
| |
| // We allow for easy separation of InternalAuthVerification and |
| // InternalAuthGeneration so the only thing they share (besides time) is |
| // a key (regenerated infrequently). |
| static void ChangeKey(const std::string& key); |
| |
| #ifdef UNIT_TEST |
| static void set_verification_window_seconds(int seconds) { |
| verification_window_seconds_ = seconds; |
| } |
| #endif |
| |
| static int get_verification_window_ticks(); |
| |
| static int verification_window_seconds_; |
| |
| DISALLOW_IMPLICIT_CONSTRUCTORS(InternalAuthVerification); |
| }; |
| |
| // Not thread-safe. Make all calls on the same thread (UI thread). |
| class InternalAuthGeneration { |
| private: |
| FRIEND_TEST_ALL_PREFIXES(InternalAuthTest, BasicGeneration); |
| FRIEND_TEST_ALL_PREFIXES(InternalAuthTest, DoubleGeneration); |
| FRIEND_TEST_ALL_PREFIXES(InternalAuthTest, BadGeneration); |
| FRIEND_TEST_ALL_PREFIXES(InternalAuthTest, BasicVerification); |
| FRIEND_TEST_ALL_PREFIXES(InternalAuthTest, BruteForce); |
| FRIEND_TEST_ALL_PREFIXES(InternalAuthTest, ExpirationAndBruteForce); |
| FRIEND_TEST_ALL_PREFIXES(InternalAuthTest, ChangeKey); |
| |
| // Generates passport; do this only after successful check of credentials. |
| static std::string GeneratePassport( |
| const std::string& domain, |
| const std::map<std::string, std::string>& var_value_map); |
| |
| // Used only by tests. |
| static void GenerateNewKey(); |
| }; |
| |
| } // namespace chrome |
| |
| #endif // CHROME_BROWSER_INTERNAL_AUTH_H_ |