Merge "Keystore 2.0: Add @IntDef for Keystore namespaces." am: faabd1a836 am: 15d9a3ab42
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1649668 Change-Id: I2b03db7d4300d2011db7a9685aafc1091f752465
This commit is contained in:
@@ -288,7 +288,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu
|
||||
private static final Date DEFAULT_CERT_NOT_AFTER = new Date(2461449600000L); // Jan 1 2048
|
||||
|
||||
private final String mKeystoreAlias;
|
||||
private final int mNamespace;
|
||||
private final @KeyProperties.Namespace int mNamespace;
|
||||
private final int mKeySize;
|
||||
private final AlgorithmParameterSpec mSpec;
|
||||
private final X500Principal mCertificateSubject;
|
||||
@@ -331,7 +331,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu
|
||||
*/
|
||||
public KeyGenParameterSpec(
|
||||
String keyStoreAlias,
|
||||
int namespace,
|
||||
@KeyProperties.Namespace int namespace,
|
||||
int keySize,
|
||||
AlgorithmParameterSpec spec,
|
||||
X500Principal certificateSubject,
|
||||
@@ -472,7 +472,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public int getNamespace() {
|
||||
public @KeyProperties.Namespace int getNamespace() {
|
||||
return mNamespace;
|
||||
}
|
||||
|
||||
@@ -896,7 +896,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu
|
||||
private final String mKeystoreAlias;
|
||||
private @KeyProperties.PurposeEnum int mPurposes;
|
||||
|
||||
private int mNamespace = KeyProperties.NAMESPACE_APPLICATION;
|
||||
private @KeyProperties.Namespace int mNamespace = KeyProperties.NAMESPACE_APPLICATION;
|
||||
private int mKeySize = -1;
|
||||
private AlgorithmParameterSpec mSpec;
|
||||
private X500Principal mCertificateSubject;
|
||||
@@ -1051,7 +1051,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu
|
||||
*/
|
||||
@SystemApi
|
||||
@NonNull
|
||||
public Builder setNamespace(int namespace) {
|
||||
public Builder setNamespace(@KeyProperties.Namespace int namespace) {
|
||||
mNamespace = namespace;
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -891,6 +891,22 @@ public abstract class KeyProperties {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Namespaces provide system developers and vendors with a way to use keystore without
|
||||
* requiring an applications uid. Namespaces can be configured using SEPolicy.
|
||||
* See <a href="https://source.android.com/security/keystore#access-control">
|
||||
* Keystore 2.0 access-control</a>
|
||||
* {@See KeyGenParameterSpec.Builder#setNamespace}
|
||||
* {@See android.security.keystore2.AndroidKeyStoreLoadStoreParameter}
|
||||
* @hide
|
||||
*/
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef(prefix = { "NAMESPACE_" }, value = {
|
||||
NAMESPACE_APPLICATION,
|
||||
NAMESPACE_WIFI,
|
||||
})
|
||||
public @interface Namespace {}
|
||||
|
||||
/**
|
||||
* This value indicates the implicit keystore namespace of the calling application.
|
||||
* It is used by default. Only select system components can choose a different namespace
|
||||
@@ -912,14 +928,12 @@ public abstract class KeyProperties {
|
||||
* For legacy support, translate namespaces into known UIDs.
|
||||
* @hide
|
||||
*/
|
||||
public static int namespaceToLegacyUid(int namespace) {
|
||||
public static int namespaceToLegacyUid(@Namespace int namespace) {
|
||||
switch (namespace) {
|
||||
case NAMESPACE_APPLICATION:
|
||||
return KeyStore.UID_SELF;
|
||||
case NAMESPACE_WIFI:
|
||||
return Process.WIFI_UID;
|
||||
// TODO Translate WIFI and VPN UIDs once the namespaces are defined.
|
||||
// b/171305388 and b/171305607
|
||||
default:
|
||||
throw new IllegalArgumentException("No UID corresponding to namespace "
|
||||
+ namespace);
|
||||
@@ -930,14 +944,12 @@ public abstract class KeyProperties {
|
||||
* For legacy support, translate namespaces into known UIDs.
|
||||
* @hide
|
||||
*/
|
||||
public static int legacyUidToNamespace(int uid) {
|
||||
public static @Namespace int legacyUidToNamespace(int uid) {
|
||||
switch (uid) {
|
||||
case KeyStore.UID_SELF:
|
||||
return NAMESPACE_APPLICATION;
|
||||
case Process.WIFI_UID:
|
||||
return NAMESPACE_WIFI;
|
||||
// TODO Translate WIFI and VPN UIDs once the namespaces are defined.
|
||||
// b/171305388 and b/171305607
|
||||
default:
|
||||
throw new IllegalArgumentException("No namespace corresponding to uid "
|
||||
+ uid);
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package android.security.keystore2;
|
||||
|
||||
import android.security.keystore.KeyProperties;
|
||||
|
||||
import java.security.KeyStore;
|
||||
import java.security.KeyStore.ProtectionParameter;
|
||||
|
||||
@@ -24,9 +26,9 @@ import java.security.KeyStore.ProtectionParameter;
|
||||
*/
|
||||
public class AndroidKeyStoreLoadStoreParameter implements KeyStore.LoadStoreParameter {
|
||||
|
||||
private final int mNamespace;
|
||||
private final @KeyProperties.Namespace int mNamespace;
|
||||
|
||||
public AndroidKeyStoreLoadStoreParameter(int namespace) {
|
||||
public AndroidKeyStoreLoadStoreParameter(@KeyProperties.Namespace int namespace) {
|
||||
mNamespace = namespace;
|
||||
}
|
||||
|
||||
@@ -35,7 +37,7 @@ public class AndroidKeyStoreLoadStoreParameter implements KeyStore.LoadStorePara
|
||||
return null;
|
||||
}
|
||||
|
||||
int getNamespace() {
|
||||
@KeyProperties.Namespace int getNamespace() {
|
||||
return mNamespace;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
|
||||
public static final String NAME = "AndroidKeyStore";
|
||||
|
||||
private KeyStore2 mKeyStore;
|
||||
private int mNamespace = KeyProperties.NAMESPACE_APPLICATION;
|
||||
private @KeyProperties.Namespace int mNamespace = KeyProperties.NAMESPACE_APPLICATION;
|
||||
|
||||
@Override
|
||||
public Key engineGetKey(String alias, char[] password) throws NoSuchAlgorithmException,
|
||||
@@ -1125,7 +1125,7 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
|
||||
@Override
|
||||
public void engineLoad(LoadStoreParameter param) throws IOException,
|
||||
NoSuchAlgorithmException, CertificateException {
|
||||
int namespace = KeyProperties.NAMESPACE_APPLICATION;
|
||||
@KeyProperties.Namespace int namespace = KeyProperties.NAMESPACE_APPLICATION;
|
||||
if (param != null) {
|
||||
if (param instanceof AndroidKeyStoreLoadStoreParameter) {
|
||||
namespace = ((AndroidKeyStoreLoadStoreParameter) param).getNamespace();
|
||||
|
||||
Reference in New Issue
Block a user