Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Unified Diff: net/base/openssl_private_key_store.h

Issue 12220104: Wire up SSL client authentication for OpenSSL/Android through the net/ stack (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/base/openssl_private_key_store.h
diff --git a/net/base/openssl_private_key_store.h b/net/base/openssl_private_key_store.h
index edd54f38aa150159336a088bbc74475106a0c211..a0c9b2361da7524683a48147095eb60f6c0bac56 100644
--- a/net/base/openssl_private_key_store.h
+++ b/net/base/openssl_private_key_store.h
@@ -14,13 +14,11 @@ class GURL;
namespace net {
+class X509Certificate;
+
// Defines an abstract store for private keys; the OpenSSL library does not
// provide this service so it is left to individual platforms to provide it.
//
-// The contract is that the private key will be stored in an appropriate secure
-// system location, and be available to the SSLClientSocketOpenSSL when using a
-// client certificate created against the associated public key for client
-// authentication.
class OpenSSLPrivateKeyStore {
public:
// Platforms must define this factory function as appropriate.
@@ -28,16 +26,34 @@ class OpenSSLPrivateKeyStore {
virtual ~OpenSSLPrivateKeyStore() {}
- // Called to store a private key generated via <keygen> while visiting |url|.
- // Does not takes ownership of |pkey|, the caller reamins responsible to
- // EVP_PKEY_free it. (Internally, a copy maybe made or the reference count
- // incremented).
+ // Called to store a private/public key pair, generated via <keygen> while
+ // visiting |url|, to an appropriate secure system location.
+ // Increments |pkey|'s reference count, so the caller is still responsible
+ // for calling EVP_PKEY_free on it.
+ // |url| is the corresponding server URL.
+ // |pkey| is the key pair handle.
// Returns false if an error occurred whilst attempting to store the key.
- virtual bool StorePrivateKey(const GURL& url, EVP_PKEY* pkey) = 0;
+ virtual bool StoreKeyPair(const GURL& url, EVP_PKEY* pkey) = 0;
+
+ // Record the association between a certificate and its private key.
+ // This method should be called _before_ FetchPrivateKey to ensure that
+ // the private key is returned when it is called later.
+ // |cert| is a handle to a certificate object.
+ // |private_key| is an OpenSSL EVP_PKEY that corresponds to the
+ // certificate's private key.
+ // Returns false if an error occured.
+ // This function does not take ownership of the private_key, but may
+ // increment its internal reference count.
Ryan Sleevi 2013/02/12 00:25:17 comment nit: That is the very definition of taking
digit1 2013/02/12 15:05:25 I'll rephrase that. I was just paraphrasing the or
+ virtual bool RecordClientCertPrivateKey(const X509Certificate& cert,
+ EVP_PKEY* private_key) = 0;
Ryan Sleevi 2013/02/12 20:12:58 Nowhere in Chromium do we pass a "const X509Certif
digit1 2013/02/13 18:24:34 I think a simple grep would show otherwise. Howeve
- // Given a |public_key| part returns the corresponding private key, or NULL
- // if no key found. Does NOT return ownership.
- virtual EVP_PKEY* FetchPrivateKey(EVP_PKEY* public_key) = 0;
+ // Given a certificate's |public_key|, return the corresponding private
+ // key that has been recorded previously by RecordClientCertPrivateKey().
+ // |public_key| must contain the certificate's public key.
+ // Returns a handle to the private key's EVP_PKEY object. Caller must
+ // call EVP_PKEY_free() to free it.
Ryan Sleevi 2013/02/12 00:25:17 Can you not return a scoped_ptr<EVP_PKEY, EVP_PKEY
digit1 2013/02/13 18:24:34 Done.
+ virtual EVP_PKEY* FetchClientCertPrivateKey(
+ const X509Certificate& cert) = 0;
protected:
OpenSSLPrivateKeyStore() {}

Powered by Google App Engine
This is Rietveld 408576698