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