summaryrefslogtreecommitdiffstats
path: root/net/base/keygen_handler.h
diff options
context:
space:
mode:
Diffstat (limited to 'net/base/keygen_handler.h')
-rw-r--r--net/base/keygen_handler.h54
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);