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

Unified Diff: net/base/openssl_util.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_util.h
diff --git a/net/base/openssl_util.h b/net/base/openssl_util.h
new file mode 100644
index 0000000000000000000000000000000000000000..f7dfdd5a7140fa2ef5607d3e49a3d36e3b83ec8a
--- /dev/null
+++ b/net/base/openssl_util.h
@@ -0,0 +1,73 @@
+// Copyright (c) 2013 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_OPENSSL_UTIL_H
+#define NET_BASE_OPENSSL_UTIL_H
+
+#include <vector>
+
+typedef struct evp_pkey_st EVP_PKEY;
+
+namespace net {
+
+class X509Certificate;
+
+// Helper routine because EVP_PKEY_dup() doesn't exist in the
+// version of OpenSSL used by Chromium at the moment. Avoid future
+// name clases by using a different name too.
+EVP_PKEY* EVP_PKEY_dup(EVP_PKEY* key);
+
+// Helper class to hold a pair of public/private keys with
+// appropriate ownership.
+class OpenSSLKeyPairList {
+public:
+ OpenSSLKeyPairList() {}
+ ~OpenSSLKeyPairList() {}
+
+ // Find the private key corresponding to a given public one.
+ // |public_key| is an EVP_PKEY holding a public key.
+ // Returns the matching EVP_PKEY holding the private key, or NULL if
+ // not found. This increases the returned key's reference count, so
+ // the caller shall call EVP_PKEY_free() on it.
+ EVP_PKEY* FindPrivateKey(EVP_PKEY* public_key);
+
+ // Add a (public/private) key pair
+ // |public_key| is the public key EVP_PKEY. Cannot be NULL.
+ // |private_key| is the private key EVP_PKEY, this can be the same
+ // object than |public_key| is it holds both a public and a private key.
+ // Cannot be NULL.
+ // Returns true on success, false otherwise.
+ // Can be called multiple times with the same data. If there is already
+ // a pair recorded for |public_key|, this returns immediately. Otherwise
+ // this increases the reference counts of both objects.
+ bool AddKeyPair(EVP_PKEY* public_key, EVP_PKEY* private_key);
+
+private:
+ // KeyPair is an internal class used to hold a pair of private / public
+ // EVP_PKEY objects, with appropriate ownership.
+ class KeyPair {
+ public:
+ explicit KeyPair(EVP_PKEY* pub_key, EVP_PKEY* priv_key);
+ KeyPair(const KeyPair& other);
+ ~KeyPair();
+
+ EVP_PKEY* public_key_;
+ EVP_PKEY* private_key_;
+
+ private:
+ KeyPair(); // intentionally not implemented.
+ };
+
+ std::vector<KeyPair> pairs_;
+};
+
+// Returns the public key of a given certificate, as an OpenSSL EVP_PKEY.
+// |cert| is the client certificate.
+// On success, returns an EVP_PKEY* handle that must be freed by the
+// caller with EVP_PKEY_free(). On failure, returns NULL.
+EVP_PKEY* GetCertificatePublicKeyOpenSSL(const X509Certificate& cert);
+
+} // namespace net
+
+#endif // NET_BASE_OPENSSL_UTIL_H

Powered by Google App Engine
This is Rietveld 408576698