diff options
Diffstat (limited to 'net/base/keygen_handler.h')
-rw-r--r-- | net/base/keygen_handler.h | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/net/base/keygen_handler.h b/net/base/keygen_handler.h index 1ed023e..f88ffd5 100644 --- a/net/base/keygen_handler.h +++ b/net/base/keygen_handler.h @@ -1,12 +1,16 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2010 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 NET_BASE_KEYGEN_HANDLER_H_ #define NET_BASE_KEYGEN_HANDLER_H_ +#include <map> #include <string> +#include "base/lock.h" +#include "base/singleton.h" + namespace net { // This class handles keypair generation for generating client @@ -16,6 +20,54 @@ namespace net { class KeygenHandler { public: + // This class stores the relative location for a given private key. It does + // not store the private key, or a handle to the private key, on the basis + // that the key may be located on a smart card or device which may not be + // present at the time of retrieval. + class KeyLocation { + public: +#if defined(OS_WIN) + std::wstring container_name; + std::wstring provider_name; +#elif defined(OS_MACOSX) + std::string keychain_path; +#elif defined(USE_NSS) + std::string slot_name; +#endif + + // Only used by unit tests. + bool Equals(const KeyLocation& location) const; + }; + + // This class stores information about the keys the KeygenHandler has + // generated, so that the private keys can be properly associated with any + // certificates that might be sent to the client based on those keys. + // TODO(wtc): consider adding a Remove() method. + class Cache { + public: + static Cache* GetInstance(); + void Insert(const std::string& public_key_info, + const KeyLocation& location); + + // True if the |public_key_info| was located and the location stored into + // |*location|. + bool Find(const std::string& public_key_info, KeyLocation* location); + + private: + typedef std::map<std::string, KeyLocation> KeyLocationMap; + + // Obtain an instance of the KeyCache by using GetInstance(). + Cache() {} + friend struct DefaultSingletonTraits<Cache>; + + Lock lock_; + + // The key cache. You must obtain |lock_| before using |cache_|. + KeyLocationMap cache_; + + DISALLOW_COPY_AND_ASSIGN(Cache); + }; + // Creates a handler that will generate a key with the given key size // and incorporate the |challenge| into the Netscape SPKAC structure. inline KeygenHandler(int key_size_in_bits, const std::string& challenge); |