1 | // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. |
4 | |
5 | package org.chromium.net; |
6 | |
7 | import android.os.Build; |
8 | import android.util.Log; |
9 | |
10 | import java.security.PrivateKey; |
11 | import java.security.PrivateKey; |
12 | import java.security.Signature; |
13 | import java.security.KeyFactory; |
14 | import java.security.spec.KeySpec; |
15 | import java.security.spec.PKCS8EncodedKeySpec; |
16 | import java.security.KeyStoreException; |
17 | import java.security.spec.InvalidKeySpecException; |
18 | import java.security.NoSuchAlgorithmException; |
19 | |
20 | import org.chromium.base.CalledByNative; |
21 | import org.chromium.base.JNINamespace; |
22 | import org.chromium.net.PrivateKeyType; |
23 | |
24 | @JNINamespace("net::android") |
25 | public class AndroidKeyStoreTestUtil { |
26 | |
27 | private static final String TAG = "AndroidKeyStoreTestUtil"; |
28 | |
29 | /** |
30 | * Called from native code to create a PrivateKey object from its |
31 | * encoded PKCS#8 representation. |
32 | * @param type The key type, accoding to PrivateKeyType. |
33 | * @return new PrivateKey handle, or null in case of error. |
34 | */ |
35 | @CalledByNative |
36 | public static PrivateKey createPrivateKeyFromPKCS8(int type, |
37 | byte[] encoded_key) { |
38 | String algorithm = null; |
39 | switch (type) { |
40 | case PrivateKeyType.RSA: |
41 | algorithm = "RSA"; |
42 | break; |
43 | case PrivateKeyType.DSA: |
44 | algorithm = "DSA"; |
45 | break; |
46 | case PrivateKeyType.ECDSA: |
47 | algorithm = "EC"; |
48 | break; |
49 | default: |
50 | return null; |
51 | } |
52 | |
53 | try { |
54 | KeyFactory factory = KeyFactory.getInstance(algorithm); |
55 | KeySpec ks = new PKCS8EncodedKeySpec(encoded_key); |
56 | PrivateKey key = factory.generatePrivate(ks); |
57 | return key; |
58 | |
59 | } catch (NoSuchAlgorithmException e) { |
60 | Log.e(TAG, "Could not create " + algorithm + " factory instance!"); |
61 | return null; |
62 | } catch (InvalidKeySpecException e) { |
63 | Log.e(TAG, "Could not load " + algorithm + " private key from bytes!"); |
64 | return null; |
65 | } |
66 | } |
67 | } |