blob: 3f83473199ae072460d0a231179e8c2549187582 [file] [log] [blame]
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.security;
/**
* The Keystore class provides the functions to list the certs/keys in keystore.
* {@hide}
*/
public abstract class Keystore {
private static final String TAG = "Keystore";
private static final String[] NOTFOUND = new String[0];
/**
*/
public static Keystore getInstance() {
return new FileKeystore();
}
/**
*/
public abstract String getUserkey(String key);
/**
*/
public abstract String getCertificate(String key);
/**
*/
public abstract String[] getAllCertificateKeys();
/**
*/
public abstract String[] getAllUserkeyKeys();
private static class FileKeystore extends Keystore {
private static final String SERVICE_NAME = "keystore";
private static final String LIST_CERTIFICATES = "listcerts";
private static final String LIST_USERKEYS = "listuserkeys";
private static final String PATH = "/data/misc/keystore/";
private static final String USERKEY_PATH = PATH + "userkeys/";
private static final String CERT_PATH = PATH + "certs/";
private static final ServiceCommand mServiceCommand =
new ServiceCommand(SERVICE_NAME);
@Override
public String getUserkey(String key) {
return USERKEY_PATH + key;
}
@Override
public String getCertificate(String key) {
return CERT_PATH + key;
}
/**
* Returns the array of the certificate names in keystore if successful.
* Or return an empty array if error.
*
* @return array of the certificates
*/
@Override
public String[] getAllCertificateKeys() {
try {
String result = mServiceCommand.execute(LIST_CERTIFICATES);
if (result != null) return result.split("\\s+");
return NOTFOUND;
} catch (NumberFormatException ex) {
return NOTFOUND;
}
}
/**
* Returns the array of the names of private keys in keystore if successful.
* Or return an empty array if errors.
*
* @return array of the user keys
*/
@Override
public String[] getAllUserkeyKeys() {
try {
String result = mServiceCommand.execute(LIST_USERKEYS);
if (result != null) return result.split("\\s+");
return NOTFOUND;
} catch (NumberFormatException ex) {
return NOTFOUND;
}
}
}
}