Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15d9a3ab authored by Janis Danisevskis's avatar Janis Danisevskis Committed by Automerger Merge Worker
Browse files

Merge "Keystore 2.0: Add @IntDef for Keystore namespaces." am: faabd1a8

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1649668

Change-Id: Iec2c037edbe72ef678c49e0a2d88d04d8ca98f9d
parents 5b713194 faabd1a8
Loading
Loading
Loading
Loading
+5 −5
Original line number Original line Diff line number Diff line
@@ -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 static final Date DEFAULT_CERT_NOT_AFTER = new Date(2461449600000L); // Jan 1 2048


    private final String mKeystoreAlias;
    private final String mKeystoreAlias;
    private final int mNamespace;
    private final @KeyProperties.Namespace int mNamespace;
    private final int mKeySize;
    private final int mKeySize;
    private final AlgorithmParameterSpec mSpec;
    private final AlgorithmParameterSpec mSpec;
    private final X500Principal mCertificateSubject;
    private final X500Principal mCertificateSubject;
@@ -331,7 +331,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu
     */
     */
    public KeyGenParameterSpec(
    public KeyGenParameterSpec(
            String keyStoreAlias,
            String keyStoreAlias,
            int namespace,
            @KeyProperties.Namespace int namespace,
            int keySize,
            int keySize,
            AlgorithmParameterSpec spec,
            AlgorithmParameterSpec spec,
            X500Principal certificateSubject,
            X500Principal certificateSubject,
@@ -472,7 +472,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu
     * @hide
     * @hide
     */
     */
    @SystemApi
    @SystemApi
    public int getNamespace() {
    public @KeyProperties.Namespace int getNamespace() {
        return mNamespace;
        return mNamespace;
    }
    }


@@ -896,7 +896,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu
        private final String mKeystoreAlias;
        private final String mKeystoreAlias;
        private @KeyProperties.PurposeEnum int mPurposes;
        private @KeyProperties.PurposeEnum int mPurposes;


        private int mNamespace = KeyProperties.NAMESPACE_APPLICATION;
        private @KeyProperties.Namespace int mNamespace = KeyProperties.NAMESPACE_APPLICATION;
        private int mKeySize = -1;
        private int mKeySize = -1;
        private AlgorithmParameterSpec mSpec;
        private AlgorithmParameterSpec mSpec;
        private X500Principal mCertificateSubject;
        private X500Principal mCertificateSubject;
@@ -1051,7 +1051,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu
         */
         */
        @SystemApi
        @SystemApi
        @NonNull
        @NonNull
        public Builder setNamespace(int namespace) {
        public Builder setNamespace(@KeyProperties.Namespace int namespace) {
            mNamespace = namespace;
            mNamespace = namespace;
            return this;
            return this;
        }
        }
+18 −6
Original line number Original line Diff line number Diff line
@@ -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.
     * 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
     * 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.
     * For legacy support, translate namespaces into known UIDs.
     * @hide
     * @hide
     */
     */
    public static int namespaceToLegacyUid(int namespace) {
    public static int namespaceToLegacyUid(@Namespace int namespace) {
        switch (namespace) {
        switch (namespace) {
            case NAMESPACE_APPLICATION:
            case NAMESPACE_APPLICATION:
                return KeyStore.UID_SELF;
                return KeyStore.UID_SELF;
            case NAMESPACE_WIFI:
            case NAMESPACE_WIFI:
                return Process.WIFI_UID;
                return Process.WIFI_UID;
            // TODO Translate WIFI and VPN UIDs once the namespaces are defined.
            //  b/171305388 and b/171305607
            default:
            default:
                throw new IllegalArgumentException("No UID corresponding to namespace "
                throw new IllegalArgumentException("No UID corresponding to namespace "
                        + namespace);
                        + namespace);
@@ -930,14 +944,12 @@ public abstract class KeyProperties {
     * For legacy support, translate namespaces into known UIDs.
     * For legacy support, translate namespaces into known UIDs.
     * @hide
     * @hide
     */
     */
    public static int legacyUidToNamespace(int uid) {
    public static @Namespace int legacyUidToNamespace(int uid) {
        switch (uid) {
        switch (uid) {
            case KeyStore.UID_SELF:
            case KeyStore.UID_SELF:
                return NAMESPACE_APPLICATION;
                return NAMESPACE_APPLICATION;
            case Process.WIFI_UID:
            case Process.WIFI_UID:
                return NAMESPACE_WIFI;
                return NAMESPACE_WIFI;
            // TODO Translate WIFI and VPN UIDs once the namespaces are defined.
            //  b/171305388 and b/171305607
            default:
            default:
                throw new IllegalArgumentException("No namespace corresponding to uid "
                throw new IllegalArgumentException("No namespace corresponding to uid "
                        + uid);
                        + uid);
+5 −3
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package android.security.keystore2;
package android.security.keystore2;


import android.security.keystore.KeyProperties;

import java.security.KeyStore;
import java.security.KeyStore;
import java.security.KeyStore.ProtectionParameter;
import java.security.KeyStore.ProtectionParameter;


@@ -24,9 +26,9 @@ import java.security.KeyStore.ProtectionParameter;
 */
 */
public class AndroidKeyStoreLoadStoreParameter implements KeyStore.LoadStoreParameter {
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;
        mNamespace = namespace;
    }
    }


@@ -35,7 +37,7 @@ public class AndroidKeyStoreLoadStoreParameter implements KeyStore.LoadStorePara
        return null;
        return null;
    }
    }


    int getNamespace() {
    @KeyProperties.Namespace int getNamespace() {
        return mNamespace;
        return mNamespace;
    }
    }
}
}
+2 −2
Original line number Original line Diff line number Diff line
@@ -100,7 +100,7 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
    public static final String NAME = "AndroidKeyStore";
    public static final String NAME = "AndroidKeyStore";


    private KeyStore2 mKeyStore;
    private KeyStore2 mKeyStore;
    private int mNamespace = KeyProperties.NAMESPACE_APPLICATION;
    private @KeyProperties.Namespace int mNamespace = KeyProperties.NAMESPACE_APPLICATION;


    @Override
    @Override
    public Key engineGetKey(String alias, char[] password) throws NoSuchAlgorithmException,
    public Key engineGetKey(String alias, char[] password) throws NoSuchAlgorithmException,
@@ -1125,7 +1125,7 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
    @Override
    @Override
    public void engineLoad(LoadStoreParameter param) throws IOException,
    public void engineLoad(LoadStoreParameter param) throws IOException,
            NoSuchAlgorithmException, CertificateException {
            NoSuchAlgorithmException, CertificateException {
        int namespace = KeyProperties.NAMESPACE_APPLICATION;
        @KeyProperties.Namespace int namespace = KeyProperties.NAMESPACE_APPLICATION;
        if (param != null) {
        if (param != null) {
            if (param instanceof AndroidKeyStoreLoadStoreParameter) {
            if (param instanceof AndroidKeyStoreLoadStoreParameter) {
                namespace = ((AndroidKeyStoreLoadStoreParameter) param).getNamespace();
                namespace = ((AndroidKeyStoreLoadStoreParameter) param).getNamespace();