Index: net/android/keystore.h |
diff --git a/net/android/keystore.h b/net/android/keystore.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e3032aabe77d9941d89218bfcd05c019d825f414 |
--- /dev/null |
+++ b/net/android/keystore.h |
@@ -0,0 +1,79 @@ |
+// 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_ANDROID_KEYSTORE_H |
+#define NET_ANDROID_KEYSTORE_H |
+ |
+#include <jni.h> |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "base/basictypes.h" |
+#include "base/string_piece.h" |
+#include "net/base/net_export.h" |
+#include "net/base/ssl_client_cert_type.h" |
+ |
+// Avoid including OpenSSL headers here. |
+typedef struct evp_pkey_st EVP_PKEY; |
+ |
+// Misc classes to access the Android platform KeyStore. |
+ |
+namespace net { |
+namespace android { |
+ |
+// Define a list of constants describing private key types. The |
+// values are shared with Java through org.chromium.net.PrivateKeyType. |
+// Example: PRIVATE_KEY_TYPE_RSA. |
+enum PrivateKeyType { |
+#define DEFINE_PRIVATE_KEY_TYPE(name,value) PRIVATE_KEY_TYPE_ ## name = value, |
+#include "net/android/private_key_type_list.h" |
+#undef DEFINE_PRIVATE_KEY_TYPE |
+}; |
+ |
+// Compute the signature of a given message, using a private key. |
+// This is used to implement OpenSSL's client certificate signing |
+// callback, so must end up implementing the same thing than |
agl
2013/01/30 14:28:53
s/than/as/
digit1
2013/01/31 17:44:30
Done.
|
+// RSA_sign() / DSA_sign() / ECDSA_sign(), depending on the key |
+// type. |
+// |
+// |private_key| is a JNI reference for the private key. |
+// |message| is the input message. |
agl
2013/01/30 14:28:53
ditto with the comment around |message| - prehashe
digit1
2013/01/31 17:44:30
I've clarified the comment. Thanks.
|
+// |signature| will receive the signature on success. |
+// Returns true on success, false on failure. |
+// |
+bool SignWithPrivateKey( |
+ jobject private_key, |
+ const base::StringPiece& message, |
+ std::vector<uint8>* signature); |
+ |
+ |
+// Return the PrivateKeyType of a given private key. |
+// |private_key| is a JNI reference for the private key. |
+// Returns a PrivateKeyType, while will be CLIENT_CERT_INVALID_TYPE |
+// on error. |
+PrivateKeyType GetPrivateKeyType(jobject private_key); |
+ |
+// Returns a handle to the system EVP_PKEY object used to back a given |
+// private_key object. This must *only* be used for RSA private keys |
+// on Android < 4.2. Technically, this is only guaranteed to work if |
+// the system image contains a vanilla implementation of the Java |
+// API frameworks based on Harmony + OpenSSL. |
+// |
+// |private_key| is a JNI reference for the private key. |
+// Returns an EVP_PKEY* handle, or NULL in case of error. |
+// |
+// Note: Despite its name and return type, this function doesn't know |
+// anything about OpenSSL, it just type-casts a system pointer that |
+// is passed as an int through JNI. As such, it never increments |
+// the returned key's reference count. |
+EVP_PKEY* GetOpenSSLSystemHandleForPrivateKey(jobject private_key); |
+ |
+// Register JNI methods |
+NET_EXPORT bool RegisterKeyStore(JNIEnv* env); |
+ |
+} // namespace android |
+} // namespace net |
+ |
+#endif // NET_ANDROID_KEYSTORE_H |