• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 COMPONENTS_NACL_BROWSER_NACL_VALIDATION_CACHE_H_
6 #define COMPONENTS_NACL_BROWSER_NACL_VALIDATION_CACHE_H_
7 
8 #include <vector>
9 
10 #include "base/containers/mru_cache.h"
11 
12 class Pickle;
13 
14 namespace nacl {
15 
16 class NaClValidationCache {
17  public:
18   NaClValidationCache();
19   ~NaClValidationCache();
20 
21   // Get the key used for HMACing validation signatures.  This should be a
22   // string of cryptographically secure random bytes.
GetValidationCacheKey()23   const std::string& GetValidationCacheKey() const {
24     return validation_cache_key_;
25   }
26 
27   // Is the validation signature in the database?
28   bool QueryKnownToValidate(const std::string& signature, bool reorder);
29 
30   // Put the validation signature in the database.
31   void SetKnownToValidate(const std::string& signature);
32 
33   void Reset();
34   void Serialize(Pickle* pickle) const;
35   bool Deserialize(const Pickle* pickle);
36 
37   // Testing functions
size()38   size_t size() const {
39     return validation_cache_.size();
40   }
SetValidationCacheKey(std::string & key)41   void SetValidationCacheKey(std::string& key) {
42     validation_cache_key_ = key;
43   }
GetContents()44   std::vector<std::string> GetContents() const {
45     std::vector<std::string> contents;
46     ValidationCacheType::const_iterator iter = validation_cache_.begin();
47     for (iter = validation_cache_.begin();
48          iter != validation_cache_.end();
49          iter++) {
50       contents.push_back(iter->first);
51     }
52     return contents;
53   }
54 
55  private:
56   bool DeserializeImpl(const Pickle* pickle);
57 
58   typedef base::HashingMRUCache<std::string, bool> ValidationCacheType;
59   ValidationCacheType validation_cache_;
60 
61   std::string validation_cache_key_;
62 
63   DISALLOW_COPY_AND_ASSIGN(NaClValidationCache);
64 };
65 
66 } // namespace nacl
67 
68 #endif  // COMPONENTS_NACL_BROWSER_NACL_VALIDATION_CACHE_H_
69