Credentials.java revision 4a9e1a2494f2e48b157506d7c731187907b7fd4e
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 INSTALL_ACTION = "android.credentials.INSTALL"; 3344039172627d1c15737ea73836ad375559d76211Chia-chi Yeh 344a9e1a2494f2e48b157506d7c731187907b7fd4eBrian Carlstrom public static final String UNLOCK_ACTION = "com.android.credentials.UNLOCK"; 354a9e1a2494f2e48b157506d7c731187907b7fd4eBrian Carlstrom 369b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh /** Key prefix for CA certificates. */ 379b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public static final String CA_CERTIFICATE = "CACERT_"; 389b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 399b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh /** Key prefix for user certificates. */ 409b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public static final String USER_CERTIFICATE = "USRCERT_"; 419b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 429b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh /** Key prefix for user private keys. */ 439b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public static final String USER_PRIVATE_KEY = "USRPKEY_"; 449b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 459b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh /** Key prefix for VPN. */ 469b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public static final String VPN = "VPN_"; 479b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 489b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh /** Key prefix for WIFI. */ 499b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public static final String WIFI = "WIFI_"; 509b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 519b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh /** Data type for public keys. */ 529b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public static final String PUBLIC_KEY = "KEY"; 539b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 549b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh /** Data type for private keys. */ 559b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public static final String PRIVATE_KEY = "PKEY"; 569b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 579b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh /** Data type for certificates. */ 589b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public static final String CERTIFICATE = "CERT"; 599b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 609b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh /** Data type for PKCS12. */ 619b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public static final String PKCS12 = "PKCS12"; 629b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 6344039172627d1c15737ea73836ad375559d76211Chia-chi Yeh private static Credentials singleton; 6444039172627d1c15737ea73836ad375559d76211Chia-chi Yeh 659b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public static Credentials getInstance() { 669b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh if (singleton == null) { 679b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh singleton = new Credentials(); 689b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } 699b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh return singleton; 709b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } 719b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 729b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public void unlock(Context context) { 739b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh try { 744a9e1a2494f2e48b157506d7c731187907b7fd4eBrian Carlstrom Intent intent = new Intent(UNLOCK_ACTION); 759b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh context.startActivity(intent); 769b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } catch (ActivityNotFoundException e) { 779b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh Log.w(LOGTAG, e.toString()); 789b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } 799b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } 809b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 81c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan private Intent createInstallIntent() { 82c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan Intent intent = new Intent(INSTALL_ACTION); 83c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan intent.setClassName("com.android.certinstaller", 84c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan "com.android.certinstaller.CertInstallerMain"); 85c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan return intent; 86c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan } 87c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan 889b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public void install(Context context, KeyPair pair) { 899b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh try { 90c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan Intent intent = createInstallIntent(); 919b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh intent.putExtra(PRIVATE_KEY, pair.getPrivate().getEncoded()); 929b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh intent.putExtra(PUBLIC_KEY, pair.getPublic().getEncoded()); 939b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh context.startActivity(intent); 949b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } catch (ActivityNotFoundException e) { 959b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh Log.w(LOGTAG, e.toString()); 969b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } 979b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } 989b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh 999b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh public void install(Context context, String type, byte[] value) { 1009b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh try { 101c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8Hung-ying Tyan Intent intent = createInstallIntent(); 1029b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh intent.putExtra(type, value); 1039b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh context.startActivity(intent); 1049b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } catch (ActivityNotFoundException e) { 1059b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh Log.w(LOGTAG, e.toString()); 1069b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } 1079b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh } 1089b7a3f1a6437605022568cad0b92d5006a2ab391Chia-chi Yeh} 109