diff options
author | Justin Klaassen <justinklaassen@google.com> | 2017-11-17 16:38:15 -0500 |
---|---|---|
committer | Justin Klaassen <justinklaassen@google.com> | 2017-11-17 16:38:15 -0500 |
commit | 6a65f2da209bff03cb0eb6da309710ac6ee5026d (patch) | |
tree | 48e2090e716d4178378cb0599fc5d9cffbcf3f63 /android/security | |
parent | 46c77c203439b3b37c99d09e326df4b1fe08c10b (diff) | |
download | android-28-6a65f2da209bff03cb0eb6da309710ac6ee5026d.tar.gz |
Import Android SDK Platform P [4456821]
/google/data/ro/projects/android/fetch_artifact \
--bid 4456821 \
--target sdk_phone_armv7-win_sdk \
sdk-repo-linux-sources-4456821.zip
AndroidVersion.ApiLevel has been modified to appear as 28
Change-Id: I2d206b200d7952f899a5d1647ab532638cc8dd43
Diffstat (limited to 'android/security')
-rw-r--r-- | android/security/KeyStore.java | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/android/security/KeyStore.java b/android/security/KeyStore.java index 7e959a87..399dddd7 100644 --- a/android/security/KeyStore.java +++ b/android/security/KeyStore.java @@ -20,6 +20,7 @@ import android.app.ActivityThread; import android.app.Application; import android.app.KeyguardManager; import android.content.Context; +import android.content.pm.PackageManager; import android.hardware.fingerprint.FingerprintManager; import android.os.Binder; import android.os.IBinder; @@ -53,7 +54,7 @@ import java.util.Locale; public class KeyStore { private static final String TAG = "KeyStore"; - // ResponseCodes + // ResponseCodes - see system/security/keystore/include/keystore/keystore.h public static final int NO_ERROR = 1; public static final int LOCKED = 2; public static final int UNINITIALIZED = 3; @@ -167,10 +168,14 @@ public class KeyStore { public byte[] get(String key, int uid) { try { + key = key != null ? key : ""; return mBinder.get(key, uid); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); return null; + } catch (android.os.ServiceSpecificException e) { + Log.w(TAG, "KeyStore exception", e); + return null; } } @@ -184,6 +189,9 @@ public class KeyStore { public int insert(String key, byte[] value, int uid, int flags) { try { + if (value == null) { + value = new byte[0]; + } return mBinder.insert(key, value, uid, flags); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); @@ -227,6 +235,9 @@ public class KeyStore { } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); return null; + } catch (android.os.ServiceSpecificException e) { + Log.w(TAG, "KeyStore exception", e); + return null; } } @@ -275,6 +286,7 @@ public class KeyStore { */ public boolean unlock(int userId, String password) { try { + password = password != null ? password : ""; mError = mBinder.unlock(userId, password); return mError == NO_ERROR; } catch (RemoteException e) { @@ -329,16 +341,25 @@ public class KeyStore { } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); return null; + } catch (android.os.ServiceSpecificException e) { + Log.w(TAG, "KeyStore exception", e); + return null; } + } public boolean verify(String key, byte[] data, byte[] signature) { try { + signature = signature != null ? signature : new byte[0]; return mBinder.verify(key, data, signature) == NO_ERROR; } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); return false; + } catch (android.os.ServiceSpecificException e) { + Log.w(TAG, "KeyStore exception", e); + return false; } + } public String grant(String key, int uid) { @@ -431,6 +452,8 @@ public class KeyStore { public int generateKey(String alias, KeymasterArguments args, byte[] entropy, int uid, int flags, KeyCharacteristics outCharacteristics) { try { + entropy = entropy != null ? entropy : new byte[0]; + args = args != null ? args : new KeymasterArguments(); return mBinder.generateKey(alias, args, entropy, uid, flags, outCharacteristics); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); @@ -446,6 +469,8 @@ public class KeyStore { public int getKeyCharacteristics(String alias, KeymasterBlob clientId, KeymasterBlob appId, int uid, KeyCharacteristics outCharacteristics) { try { + clientId = clientId != null ? clientId : new KeymasterBlob(new byte[0]); + appId = appId != null ? appId : new KeymasterBlob(new byte[0]); return mBinder.getKeyCharacteristics(alias, clientId, appId, uid, outCharacteristics); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); @@ -477,6 +502,8 @@ public class KeyStore { public ExportResult exportKey(String alias, int format, KeymasterBlob clientId, KeymasterBlob appId, int uid) { try { + clientId = clientId != null ? clientId : new KeymasterBlob(new byte[0]); + appId = appId != null ? appId : new KeymasterBlob(new byte[0]); return mBinder.exportKey(alias, format, clientId, appId, uid); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); @@ -491,6 +518,8 @@ public class KeyStore { public OperationResult begin(String alias, int purpose, boolean pruneable, KeymasterArguments args, byte[] entropy, int uid) { try { + args = args != null ? args : new KeymasterArguments(); + entropy = entropy != null ? entropy : new byte[0]; return mBinder.begin(getToken(), alias, purpose, pruneable, args, entropy, uid); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); @@ -500,11 +529,15 @@ public class KeyStore { public OperationResult begin(String alias, int purpose, boolean pruneable, KeymasterArguments args, byte[] entropy) { + entropy = entropy != null ? entropy : new byte[0]; + args = args != null ? args : new KeymasterArguments(); return begin(alias, purpose, pruneable, args, entropy, UID_SELF); } public OperationResult update(IBinder token, KeymasterArguments arguments, byte[] input) { try { + arguments = arguments != null ? arguments : new KeymasterArguments(); + input = input != null ? input : new byte[0]; return mBinder.update(token, arguments, input); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); @@ -515,6 +548,9 @@ public class KeyStore { public OperationResult finish(IBinder token, KeymasterArguments arguments, byte[] signature, byte[] entropy) { try { + arguments = arguments != null ? arguments : new KeymasterArguments(); + entropy = entropy != null ? entropy : new byte[0]; + signature = signature != null ? signature : new byte[0]; return mBinder.finish(token, arguments, signature, entropy); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); @@ -631,6 +667,12 @@ public class KeyStore { public int attestKey( String alias, KeymasterArguments params, KeymasterCertificateChain outChain) { try { + if (params == null) { + params = new KeymasterArguments(); + } + if (outChain == null) { + outChain = new KeymasterCertificateChain(); + } return mBinder.attestKey(alias, params, outChain); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); @@ -640,6 +682,12 @@ public class KeyStore { public int attestDeviceIds(KeymasterArguments params, KeymasterCertificateChain outChain) { try { + if (params == null) { + params = new KeymasterArguments(); + } + if (outChain == null) { + outChain = new KeymasterCertificateChain(); + } return mBinder.attestDeviceIds(params, outChain); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); @@ -762,6 +810,10 @@ public class KeyStore { } private long getFingerprintOnlySid() { + final PackageManager packageManager = mContext.getPackageManager(); + if (!packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) { + return 0; + } FingerprintManager fingerprintManager = mContext.getSystemService(FingerprintManager.class); if (fingerprintManager == null) { return 0; |