Home | History | Annotate | Download | only in prefs
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_PREFS_PREF_HASH_CALCULATOR_H_
      6 #define CHROME_BROWSER_PREFS_PREF_HASH_CALCULATOR_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 
     12 namespace base {
     13 class Value;
     14 }  // namespace base
     15 
     16 // Calculates and validates preference value hashes.
     17 class PrefHashCalculator {
     18  public:
     19   enum ValidationResult {
     20     INVALID,
     21     VALID,
     22     // Valid under a deprecated but as secure algorithm.
     23     VALID_SECURE_LEGACY,
     24   };
     25 
     26   // Constructs a PrefHashCalculator using |seed| and |device_id|. The same
     27   // parameters must be used in order to successfully validate generated hashes.
     28   // |device_id| may be empty.
     29   PrefHashCalculator(const std::string& seed, const std::string& device_id);
     30 
     31   ~PrefHashCalculator();
     32 
     33   // Calculates a hash value for the supplied preference |path| and |value|.
     34   // |value| may be null if the preference has no value.
     35   std::string Calculate(const std::string& path, const base::Value* value)
     36       const;
     37 
     38   // Validates the provided preference hash using current and legacy hashing
     39   // algorithms.
     40   ValidationResult Validate(const std::string& path,
     41                             const base::Value* value,
     42                             const std::string& hash) const;
     43 
     44  private:
     45   const std::string seed_;
     46   const std::string device_id_;
     47   const std::string legacy_device_id_;
     48 
     49   DISALLOW_COPY_AND_ASSIGN(PrefHashCalculator);
     50 };
     51 
     52 #endif  // CHROME_BROWSER_PREFS_PREF_HASH_CALCULATOR_H_
     53