am f3c117ca: Merge "Add new IKeystoreService methods to KeyStore"

* commit 'f3c117ca0d116b01174732790be1939282d0a5a0':
  Add new IKeystoreService methods to KeyStore
This commit is contained in:
Chad Brubaker
2015-02-23 22:45:11 +00:00
committed by Android Git Automerger

View File

@@ -18,8 +18,14 @@ package android.security;
import com.android.org.conscrypt.NativeCrypto;
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.security.keymaster.ExportResult;
import android.security.keymaster.KeyCharacteristics;
import android.security.keymaster.KeymasterArguments;
import android.security.keymaster.OperationResult;
import android.util.Log;
import java.util.Locale;
@@ -58,6 +64,8 @@ public class KeyStore {
private final IKeystoreService mBinder;
private IBinder mToken;
private KeyStore(IKeystoreService binder) {
mBinder = binder;
}
@@ -68,6 +76,13 @@ public class KeyStore {
return new KeyStore(keystore);
}
private synchronized IBinder getToken() {
if (mToken == null) {
mToken = new Binder();
}
return mToken;
}
static int getKeyTypeForAlgorithm(String keyType) {
if ("RSA".equalsIgnoreCase(keyType)) {
return NativeCrypto.EVP_PKEY_RSA;
@@ -363,4 +378,100 @@ public class KeyStore {
public int getLastError() {
return mError;
}
public boolean addRngEntropy(byte[] data) {
try {
return mBinder.addRngEntropy(data) == NO_ERROR;
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return false;
}
}
public int generateKey(String alias, KeymasterArguments args, int uid, int flags,
KeyCharacteristics outCharacteristics) {
try {
return mBinder.generateKey(alias, args, uid, flags, outCharacteristics);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return SYSTEM_ERROR;
}
}
public int generateKey(String alias, KeymasterArguments args, int flags,
KeyCharacteristics outCharacteristics) {
return generateKey(alias, args, UID_SELF, flags, outCharacteristics);
}
public int getKeyCharacteristics(String alias, byte[] clientId, byte[] appId,
KeyCharacteristics outCharacteristics) {
try {
return mBinder.getKeyCharacteristics(alias, clientId, appId, outCharacteristics);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return SYSTEM_ERROR;
}
}
public int importKey(String alias, KeymasterArguments args, int format, byte[] keyData,
int uid, int flags, KeyCharacteristics outCharacteristics) {
try {
return mBinder.importKey(alias, args, format, keyData, uid, flags,
outCharacteristics);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return SYSTEM_ERROR;
}
}
public int importKey(String alias, KeymasterArguments args, int format, byte[] keyData,
int flags, KeyCharacteristics outCharacteristics) {
return importKey(alias, args, format, keyData, UID_SELF, flags, outCharacteristics);
}
public ExportResult exportKey(String alias, int format, byte[] clientId, byte[] appId) {
try {
return mBinder.exportKey(alias, format, clientId, appId);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return null;
}
}
public OperationResult begin(String alias, int purpose, boolean pruneable,
KeymasterArguments args, KeymasterArguments outArgs) {
try {
return mBinder.begin(getToken(), alias, purpose, pruneable, args, outArgs);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return null;
}
}
public OperationResult update(IBinder token, KeymasterArguments arguments, byte[] input) {
try {
return mBinder.update(token, arguments, input);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return null;
}
}
public OperationResult finish(IBinder token, KeymasterArguments arguments, byte[] signature) {
try {
return mBinder.finish(token, arguments, signature);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return null;
}
}
public int abort(IBinder token) {
try {
return mBinder.abort(token);
} catch (RemoteException e) {
Log.w(TAG, "Cannot connect to keystore", e);
return SYSTEM_ERROR;
}
}
}