Index: net/android/javatests/src/org/chromium/net/AndroidKeyStoreTestUtil.java |
diff --git a/net/android/javatests/src/org/chromium/net/AndroidKeyStoreTestUtil.java b/net/android/javatests/src/org/chromium/net/AndroidKeyStoreTestUtil.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..460dc50cabb4787f57ee588430b7e2b32e48b5d9 |
--- /dev/null |
+++ b/net/android/javatests/src/org/chromium/net/AndroidKeyStoreTestUtil.java |
@@ -0,0 +1,67 @@ |
+// 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. |
+ |
+package org.chromium.net; |
+ |
+import android.os.Build; |
+import android.util.Log; |
+ |
+import java.security.PrivateKey; |
+import java.security.PrivateKey; |
+import java.security.Signature; |
+import java.security.KeyFactory; |
+import java.security.spec.KeySpec; |
+import java.security.spec.PKCS8EncodedKeySpec; |
+import java.security.KeyStoreException; |
+import java.security.spec.InvalidKeySpecException; |
+import java.security.NoSuchAlgorithmException; |
+ |
+import org.chromium.base.CalledByNative; |
+import org.chromium.base.JNINamespace; |
+import org.chromium.net.PrivateKeyType; |
+ |
+@JNINamespace("net::android") |
+public class AndroidKeyStoreTestUtil { |
+ |
+ private static final String TAG = "AndroidKeyStoreTestUtil"; |
+ |
+ /** |
+ * Called from native code to create a PrivateKey object from its |
+ * encoded PKCS#8 representation. |
+ * @param type The key type, accoding to PrivateKeyType. |
+ * @return new PrivateKey handle, or null in case of error. |
+ */ |
+ @CalledByNative |
+ public static PrivateKey createPrivateKeyFromPKCS8(int type, |
+ byte[] encoded_key) { |
+ String algorithm = null; |
+ switch (type) { |
+ case PrivateKeyType.RSA: |
+ algorithm = "RSA"; |
+ break; |
+ case PrivateKeyType.DSA: |
+ algorithm = "DSA"; |
+ break; |
+ case PrivateKeyType.ECDSA: |
+ algorithm = "EC"; |
+ break; |
+ default: |
+ return null; |
+ } |
+ |
+ try { |
+ KeyFactory factory = KeyFactory.getInstance(algorithm); |
+ KeySpec ks = new PKCS8EncodedKeySpec(encoded_key); |
+ PrivateKey key = factory.generatePrivate(ks); |
+ return key; |
+ |
+ } catch (NoSuchAlgorithmException e) { |
+ Log.e(TAG, "Could not create " + algorithm + " factory instance!"); |
+ return null; |
+ } catch (InvalidKeySpecException e) { |
+ Log.e(TAG, "Could not load " + algorithm + " private key from bytes!"); |
+ return null; |
+ } |
+ } |
+} |