Credentials.java revision c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8
19b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh/*
29b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh * Copyright (C) 2009 The Android Open Source Project
39b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh *
49b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh * Licensed under the Apache License, Version 2.0 (the "License");
59b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh * you may not use this file except in compliance with the License.
69b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh * You may obtain a copy of the License at
79b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh *
89b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh *      http://www.apache.org/licenses/LICENSE-2.0
99b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh *
109b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh * Unless required by applicable law or agreed to in writing, software
119b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh * distributed under the License is distributed on an "AS IS" BASIS,
129b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh * See the License for the specific language governing permissions and
149b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh * limitations under the License.
159b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh */
169b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
179b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yehpackage android.security;
189b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
199b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yehimport android.content.ActivityNotFoundException;
209b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yehimport android.content.Context;
219b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yehimport android.content.Intent;
229b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yehimport android.util.Log;
239b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
249b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yehimport java.security.KeyPair;
259b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
269b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh/**
279b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh * {@hide}
289b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh */
299b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yehpublic class Credentials {
309b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    private static final String LOGTAG = "Credentials";
3144039172627d1c15737ea73836ad375559d76211Chia-chi Yeh
3244039172627d1c15737ea73836ad375559d76211Chia-chi Yeh    public static final String UNLOCK_ACTION = "android.credentials.UNLOCK";
3344039172627d1c15737ea73836ad375559d76211Chia-chi Yeh
3444039172627d1c15737ea73836ad375559d76211Chia-chi Yeh    public static final String INSTALL_ACTION = "android.credentials.INSTALL";
3544039172627d1c15737ea73836ad375559d76211Chia-chi Yeh
3644039172627d1c15737ea73836ad375559d76211Chia-chi Yeh    public static final String SYSTEM_INSTALL_ACTION = "android.credentials.SYSTEM_INSTALL";
379b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
389b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    /** Key prefix for CA certificates. */
399b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public static final String CA_CERTIFICATE = "CACERT_";
409b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
419b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    /** Key prefix for user certificates. */
429b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public static final String USER_CERTIFICATE = "USRCERT_";
439b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
449b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    /** Key prefix for user private keys. */
459b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public static final String USER_PRIVATE_KEY = "USRPKEY_";
469b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
479b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    /** Key prefix for VPN. */
489b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public static final String VPN = "VPN_";
499b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
509b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    /** Key prefix for WIFI. */
519b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public static final String WIFI = "WIFI_";
529b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
539b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    /** Data type for public keys. */
549b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public static final String PUBLIC_KEY = "KEY";
559b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
569b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    /** Data type for private keys. */
579b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public static final String PRIVATE_KEY = "PKEY";
589b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
599b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    /** Data type for certificates. */
609b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public static final String CERTIFICATE = "CERT";
619b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
629b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    /** Data type for PKCS12. */
639b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public static final String PKCS12 = "PKCS12";
649b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
6544039172627d1c15737ea73836ad375559d76211Chia-chi Yeh    private static Credentials singleton;
6644039172627d1c15737ea73836ad375559d76211Chia-chi Yeh
679b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public static Credentials getInstance() {
689b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        if (singleton == null) {
699b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            singleton = new Credentials();
709b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        }
719b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        return singleton;
729b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    }
739b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
749b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public void unlock(Context context) {
759b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        try {
769b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            Intent intent = new Intent(UNLOCK_ACTION);
779b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            context.startActivity(intent);
789b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        } catch (ActivityNotFoundException e) {
799b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            Log.w(LOGTAG, e.toString());
809b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        }
819b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    }
829b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
83c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan    private Intent createInstallIntent() {
84c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan        Intent intent = new Intent(INSTALL_ACTION);
85c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan        intent.setClassName("com.android.certinstaller",
86c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan                "com.android.certinstaller.CertInstallerMain");
87c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan        return intent;
88c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan    }
89c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan
909b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public void install(Context context, KeyPair pair) {
919b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        try {
92c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan            Intent intent = createInstallIntent();
939b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            intent.putExtra(PRIVATE_KEY, pair.getPrivate().getEncoded());
949b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            intent.putExtra(PUBLIC_KEY, pair.getPublic().getEncoded());
959b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            context.startActivity(intent);
969b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        } catch (ActivityNotFoundException e) {
979b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            Log.w(LOGTAG, e.toString());
989b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        }
999b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    }
1009b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh
1019b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    public void install(Context context, String type, byte[] value) {
1029b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        try {
103c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan            Intent intent = createInstallIntent();
1049b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            intent.putExtra(type, value);
1059b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            context.startActivity(intent);
1069b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        } catch (ActivityNotFoundException e) {
1079b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh            Log.w(LOGTAG, e.toString());
1089b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh        }
1099b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh    }
11044039172627d1c15737ea73836ad375559d76211Chia-chi Yeh
11144039172627d1c15737ea73836ad375559d76211Chia-chi Yeh    public void installFromSdCard(Context context) {
11244039172627d1c15737ea73836ad375559d76211Chia-chi Yeh        try {
113c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan            context.startActivity(createInstallIntent());
11444039172627d1c15737ea73836ad375559d76211Chia-chi Yeh        } catch (ActivityNotFoundException e) {
11544039172627d1c15737ea73836ad375559d76211Chia-chi Yeh            Log.w(LOGTAG, e.toString());
11644039172627d1c15737ea73836ad375559d76211Chia-chi Yeh        }
11744039172627d1c15737ea73836ad375559d76211Chia-chi Yeh    }
1189b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh}
119