| Index: net/base/keygen_handler.h
|
| ===================================================================
|
| --- net/base/keygen_handler.h (revision 43288)
|
| +++ net/base/keygen_handler.h (working copy)
|
| @@ -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 @@
|
|
|
| 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);
|
|
|