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

Unified Diff: net/android/keystore.cc

Issue 166143002: Refactoring AndroidKeyStore to support a KeyStore running in another process (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 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/android/keystore.cc
diff --git a/net/android/keystore.cc b/net/android/keystore.cc
index a3d8cc1771f478bee877b835b2ee3d24fa085bfe..cefd4f4ce76ed0d91fff6c1693f2279fc6079a78 100644
--- a/net/android/keystore.cc
+++ b/net/android/keystore.cc
@@ -9,8 +9,8 @@
#include "base/android/jni_android.h"
#include "base/android/jni_array.h"
#include "base/logging.h"
-
#include "jni/AndroidKeyStore_jni.h"
+#include "net/android/android_private_key.h"
using base::android::AttachCurrentThread;
using base::android::HasException;
@@ -28,7 +28,9 @@ bool GetRSAKeyModulus(
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jbyteArray> modulus_ref =
- Java_AndroidKeyStore_getRSAKeyModulus(env, private_key_ref);
+ Java_AndroidKeyStore_getRSAKeyModulus(env,
+ GetKeyStore(private_key_ref).obj(),
+ private_key_ref);
if (modulus_ref.is_null())
return false;
@@ -41,7 +43,10 @@ bool GetDSAKeyParamQ(jobject private_key_ref,
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jbyteArray> q_ref =
- Java_AndroidKeyStore_getDSAKeyParamQ(env, private_key_ref);
+ Java_AndroidKeyStore_getDSAKeyParamQ(
+ env,
+ GetKeyStore(private_key_ref).obj(),
+ private_key_ref);
if (q_ref.is_null())
return false;
@@ -54,7 +59,11 @@ bool GetECKeyOrder(jobject private_key_ref,
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jbyteArray> order_ref =
- Java_AndroidKeyStore_getECKeyOrder(env, private_key_ref);
+ Java_AndroidKeyStore_getECKeyOrder(
+ env,
+ GetKeyStore(private_key_ref).obj(),
+ private_key_ref);
+
if (order_ref.is_null())
return false;
@@ -62,12 +71,15 @@ bool GetECKeyOrder(jobject private_key_ref,
return true;
}
-bool GetPrivateKeyEncodedBytes(jobject private_key,
+bool GetPrivateKeyEncodedBytes(jobject private_key_ref,
std::vector<uint8>* result) {
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jbyteArray> encoded_ref =
- Java_AndroidKeyStore_getPrivateKeyEncodedBytes(env, private_key);
+ Java_AndroidKeyStore_getPrivateKeyEncodedBytes(
+ env,
+ GetKeyStore(private_key_ref).obj(),
+ private_key_ref);
if (encoded_ref.is_null())
return false;
@@ -91,7 +103,10 @@ bool RawSignDigestWithPrivateKey(
// Invoke platform API
ScopedJavaLocalRef<jbyteArray> signature_ref =
Java_AndroidKeyStore_rawSignDigestWithPrivateKey(
- env, private_key_ref, digest_ref.obj());
+ env,
+ GetKeyStore(private_key_ref).obj(),
+ private_key_ref,
+ digest_ref.obj());
if (HasException(env) || signature_ref.is_null())
return false;
@@ -100,14 +115,16 @@ bool RawSignDigestWithPrivateKey(
return true;
}
-PrivateKeyType GetPrivateKeyType(jobject private_key) {
+PrivateKeyType GetPrivateKeyType(jobject private_key_ref) {
JNIEnv* env = AttachCurrentThread();
int type = Java_AndroidKeyStore_getPrivateKeyType(
- env, private_key);
+ env,
+ GetKeyStore(private_key_ref).obj(),
+ private_key_ref);
return static_cast<PrivateKeyType>(type);
}
-EVP_PKEY* GetOpenSSLSystemHandleForPrivateKey(jobject private_key) {
+EVP_PKEY* GetOpenSSLSystemHandleForPrivateKey(jobject private_key_ref) {
JNIEnv* env = AttachCurrentThread();
// Note: the pointer is passed as a jint here because that's how it
// is stored in the Java object. Java doesn't have a primitive type
@@ -117,11 +134,21 @@ EVP_PKEY* GetOpenSSLSystemHandleForPrivateKey(jobject private_key) {
// Given that this routine shall only be called on Android < 4.2,
// this won't be a problem in the far future (e.g. when Android gets
// ported to 64-bit environments, if ever).
- int pkey =
- Java_AndroidKeyStore_getOpenSSLHandleForPrivateKey(env, private_key);
+ int pkey = Java_AndroidKeyStore_getOpenSSLHandleForPrivateKey(
+ env,
+ GetKeyStore(private_key_ref).obj(),
+ private_key_ref);
return reinterpret_cast<EVP_PKEY*>(pkey);
}
+void ReleaseKey(jobject private_key_ref) {
+ JNIEnv* env = AttachCurrentThread();
+ Java_AndroidKeyStore_releaseKey(env,
+ GetKeyStore(private_key_ref).obj(),
+ private_key_ref);
+ env->DeleteGlobalRef(private_key_ref);
+}
+
bool RegisterKeyStore(JNIEnv* env) {
return RegisterNativesImpl(env);
}

Powered by Google App Engine
This is Rietveld 408576698