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

Commit 622fd932 authored by Alex Klyubin's avatar Alex Klyubin
Browse files

Flatten KeyStoreKeyProperties constants.

This moves constants/flags declared in inner classes of
KeyStoreKeyProperties into KeyStoreKeyProperties, as requested by API
Council.

Bug: 21039983
Change-Id: I84a3c983e13644a027bed9f605ab8044220a352c
parent 4b403557
Loading
Loading
Loading
Loading
+32 −53
Original line number Diff line number Diff line
@@ -28455,59 +28455,38 @@ package android.security {
  }
  public abstract class KeyStoreKeyProperties {
  }
  public static abstract class KeyStoreKeyProperties.Algorithm {
    field public static final java.lang.String AES = "AES";
    field public static final java.lang.String EC = "EC";
    field public static final java.lang.String HMAC_SHA1 = "HmacSHA1";
    field public static final java.lang.String HMAC_SHA224 = "HmacSHA224";
    field public static final java.lang.String HMAC_SHA256 = "HmacSHA256";
    field public static final java.lang.String HMAC_SHA384 = "HmacSHA384";
    field public static final java.lang.String HMAC_SHA512 = "HmacSHA512";
    field public static final java.lang.String RSA = "RSA";
  }
  public static abstract class KeyStoreKeyProperties.BlockMode {
    field public static final java.lang.String CBC = "CBC";
    field public static final java.lang.String CTR = "CTR";
    field public static final java.lang.String ECB = "ECB";
    field public static final java.lang.String GCM = "GCM";
  }
  public static abstract class KeyStoreKeyProperties.Digest {
    field public static final java.lang.String MD5 = "MD5";
    field public static final java.lang.String NONE = "NONE";
    field public static final java.lang.String SHA1 = "SHA-1";
    field public static final java.lang.String SHA224 = "SHA-224";
    field public static final java.lang.String SHA256 = "SHA-256";
    field public static final java.lang.String SHA384 = "SHA-384";
    field public static final java.lang.String SHA512 = "SHA-512";
  }
  public static abstract class KeyStoreKeyProperties.EncryptionPadding {
    field public static final java.lang.String NONE = "NoPadding";
    field public static final java.lang.String PKCS7 = "PKCS7Padding";
    field public static final java.lang.String RSA_OAEP = "OAEPPadding";
    field public static final java.lang.String RSA_PKCS1 = "PKCS1Padding";
  }
  public static abstract class KeyStoreKeyProperties.Origin {
    field public static final int GENERATED = 1; // 0x1
    field public static final int IMPORTED = 2; // 0x2
    field public static final int UNKNOWN = 4; // 0x4
  }
  public static abstract class KeyStoreKeyProperties.Purpose {
    field public static final int DECRYPT = 2; // 0x2
    field public static final int ENCRYPT = 1; // 0x1
    field public static final int SIGN = 4; // 0x4
    field public static final int VERIFY = 8; // 0x8
  }
  public static abstract class KeyStoreKeyProperties.SignaturePadding {
    field public static final java.lang.String RSA_PKCS1 = "PKCS1";
    field public static final java.lang.String RSA_PSS = "PSS";
    field public static final java.lang.String BLOCK_MODE_CBC = "CBC";
    field public static final java.lang.String BLOCK_MODE_CTR = "CTR";
    field public static final java.lang.String BLOCK_MODE_ECB = "ECB";
    field public static final java.lang.String BLOCK_MODE_GCM = "GCM";
    field public static final java.lang.String DIGEST_MD5 = "MD5";
    field public static final java.lang.String DIGEST_NONE = "NONE";
    field public static final java.lang.String DIGEST_SHA1 = "SHA-1";
    field public static final java.lang.String DIGEST_SHA224 = "SHA-224";
    field public static final java.lang.String DIGEST_SHA256 = "SHA-256";
    field public static final java.lang.String DIGEST_SHA384 = "SHA-384";
    field public static final java.lang.String DIGEST_SHA512 = "SHA-512";
    field public static final java.lang.String ENCRYPTION_PADDING_NONE = "NoPadding";
    field public static final java.lang.String ENCRYPTION_PADDING_PKCS7 = "PKCS7Padding";
    field public static final java.lang.String ENCRYPTION_PADDING_RSA_OAEP = "OAEPPadding";
    field public static final java.lang.String ENCRYPTION_PADDING_RSA_PKCS1 = "PKCS1Padding";
    field public static final java.lang.String KEY_ALGORITHM_AES = "AES";
    field public static final java.lang.String KEY_ALGORITHM_EC = "EC";
    field public static final java.lang.String KEY_ALGORITHM_HMAC_SHA1 = "HmacSHA1";
    field public static final java.lang.String KEY_ALGORITHM_HMAC_SHA224 = "HmacSHA224";
    field public static final java.lang.String KEY_ALGORITHM_HMAC_SHA256 = "HmacSHA256";
    field public static final java.lang.String KEY_ALGORITHM_HMAC_SHA384 = "HmacSHA384";
    field public static final java.lang.String KEY_ALGORITHM_HMAC_SHA512 = "HmacSHA512";
    field public static final java.lang.String KEY_ALGORITHM_RSA = "RSA";
    field public static final int ORIGIN_GENERATED = 1; // 0x1
    field public static final int ORIGIN_IMPORTED = 2; // 0x2
    field public static final int ORIGIN_UNKNOWN = 4; // 0x4
    field public static final int PURPOSE_DECRYPT = 2; // 0x2
    field public static final int PURPOSE_ENCRYPT = 1; // 0x1
    field public static final int PURPOSE_SIGN = 4; // 0x4
    field public static final int PURPOSE_VERIFY = 8; // 0x8
    field public static final java.lang.String SIGNATURE_PADDING_RSA_PKCS1 = "PKCS1";
    field public static final java.lang.String SIGNATURE_PADDING_RSA_PSS = "PSS";
  }
  public class KeyStoreKeySpec implements java.security.spec.KeySpec {
+32 −53
Original line number Diff line number Diff line
@@ -30478,59 +30478,38 @@ package android.security {
  }
  public abstract class KeyStoreKeyProperties {
  }
  public static abstract class KeyStoreKeyProperties.Algorithm {
    field public static final java.lang.String AES = "AES";
    field public static final java.lang.String EC = "EC";
    field public static final java.lang.String HMAC_SHA1 = "HmacSHA1";
    field public static final java.lang.String HMAC_SHA224 = "HmacSHA224";
    field public static final java.lang.String HMAC_SHA256 = "HmacSHA256";
    field public static final java.lang.String HMAC_SHA384 = "HmacSHA384";
    field public static final java.lang.String HMAC_SHA512 = "HmacSHA512";
    field public static final java.lang.String RSA = "RSA";
  }
  public static abstract class KeyStoreKeyProperties.BlockMode {
    field public static final java.lang.String CBC = "CBC";
    field public static final java.lang.String CTR = "CTR";
    field public static final java.lang.String ECB = "ECB";
    field public static final java.lang.String GCM = "GCM";
  }
  public static abstract class KeyStoreKeyProperties.Digest {
    field public static final java.lang.String MD5 = "MD5";
    field public static final java.lang.String NONE = "NONE";
    field public static final java.lang.String SHA1 = "SHA-1";
    field public static final java.lang.String SHA224 = "SHA-224";
    field public static final java.lang.String SHA256 = "SHA-256";
    field public static final java.lang.String SHA384 = "SHA-384";
    field public static final java.lang.String SHA512 = "SHA-512";
  }
  public static abstract class KeyStoreKeyProperties.EncryptionPadding {
    field public static final java.lang.String NONE = "NoPadding";
    field public static final java.lang.String PKCS7 = "PKCS7Padding";
    field public static final java.lang.String RSA_OAEP = "OAEPPadding";
    field public static final java.lang.String RSA_PKCS1 = "PKCS1Padding";
  }
  public static abstract class KeyStoreKeyProperties.Origin {
    field public static final int GENERATED = 1; // 0x1
    field public static final int IMPORTED = 2; // 0x2
    field public static final int UNKNOWN = 4; // 0x4
  }
  public static abstract class KeyStoreKeyProperties.Purpose {
    field public static final int DECRYPT = 2; // 0x2
    field public static final int ENCRYPT = 1; // 0x1
    field public static final int SIGN = 4; // 0x4
    field public static final int VERIFY = 8; // 0x8
  }
  public static abstract class KeyStoreKeyProperties.SignaturePadding {
    field public static final java.lang.String RSA_PKCS1 = "PKCS1";
    field public static final java.lang.String RSA_PSS = "PSS";
    field public static final java.lang.String BLOCK_MODE_CBC = "CBC";
    field public static final java.lang.String BLOCK_MODE_CTR = "CTR";
    field public static final java.lang.String BLOCK_MODE_ECB = "ECB";
    field public static final java.lang.String BLOCK_MODE_GCM = "GCM";
    field public static final java.lang.String DIGEST_MD5 = "MD5";
    field public static final java.lang.String DIGEST_NONE = "NONE";
    field public static final java.lang.String DIGEST_SHA1 = "SHA-1";
    field public static final java.lang.String DIGEST_SHA224 = "SHA-224";
    field public static final java.lang.String DIGEST_SHA256 = "SHA-256";
    field public static final java.lang.String DIGEST_SHA384 = "SHA-384";
    field public static final java.lang.String DIGEST_SHA512 = "SHA-512";
    field public static final java.lang.String ENCRYPTION_PADDING_NONE = "NoPadding";
    field public static final java.lang.String ENCRYPTION_PADDING_PKCS7 = "PKCS7Padding";
    field public static final java.lang.String ENCRYPTION_PADDING_RSA_OAEP = "OAEPPadding";
    field public static final java.lang.String ENCRYPTION_PADDING_RSA_PKCS1 = "PKCS1Padding";
    field public static final java.lang.String KEY_ALGORITHM_AES = "AES";
    field public static final java.lang.String KEY_ALGORITHM_EC = "EC";
    field public static final java.lang.String KEY_ALGORITHM_HMAC_SHA1 = "HmacSHA1";
    field public static final java.lang.String KEY_ALGORITHM_HMAC_SHA224 = "HmacSHA224";
    field public static final java.lang.String KEY_ALGORITHM_HMAC_SHA256 = "HmacSHA256";
    field public static final java.lang.String KEY_ALGORITHM_HMAC_SHA384 = "HmacSHA384";
    field public static final java.lang.String KEY_ALGORITHM_HMAC_SHA512 = "HmacSHA512";
    field public static final java.lang.String KEY_ALGORITHM_RSA = "RSA";
    field public static final int ORIGIN_GENERATED = 1; // 0x1
    field public static final int ORIGIN_IMPORTED = 2; // 0x2
    field public static final int ORIGIN_UNKNOWN = 4; // 0x4
    field public static final int PURPOSE_DECRYPT = 2; // 0x2
    field public static final int PURPOSE_ENCRYPT = 1; // 0x1
    field public static final int PURPOSE_SIGN = 4; // 0x4
    field public static final int PURPOSE_VERIFY = 8; // 0x8
    field public static final java.lang.String SIGNATURE_PADDING_RSA_PKCS1 = "PKCS1";
    field public static final java.lang.String SIGNATURE_PADDING_RSA_PSS = "PSS";
  }
  public class KeyStoreKeySpec implements java.security.spec.KeySpec {
+11 −10
Original line number Diff line number Diff line
@@ -54,13 +54,13 @@ public abstract class AndroidKeyPairGenerator extends KeyPairGeneratorSpi {

    public static class RSA extends AndroidKeyPairGenerator {
        public RSA() {
            super(KeyStoreKeyProperties.Algorithm.RSA);
            super(KeyStoreKeyProperties.KEY_ALGORITHM_RSA);
        }
    }

    public static class EC extends AndroidKeyPairGenerator {
        public EC() {
            super(KeyStoreKeyProperties.Algorithm.EC);
            super(KeyStoreKeyProperties.KEY_ALGORITHM_EC);
        }
    }

@@ -83,15 +83,15 @@ public abstract class AndroidKeyPairGenerator extends KeyPairGeneratorSpi {
    private android.security.KeyStore mKeyStore;

    private KeyPairGeneratorSpec mSpec;
    private @KeyStoreKeyProperties.AlgorithmEnum String mKeyAlgorithm;
    private @KeyStoreKeyProperties.KeyAlgorithmEnum String mKeyAlgorithm;
    private int mKeyType;
    private int mKeySize;

    protected AndroidKeyPairGenerator(@KeyStoreKeyProperties.AlgorithmEnum String algorithm) {
    protected AndroidKeyPairGenerator(@KeyStoreKeyProperties.KeyAlgorithmEnum String algorithm) {
        mAlgorithm = algorithm;
    }

    public @KeyStoreKeyProperties.AlgorithmEnum String getAlgorithm() {
    @KeyStoreKeyProperties.KeyAlgorithmEnum String getAlgorithm() {
        return mAlgorithm;
    }

@@ -197,7 +197,8 @@ public abstract class AndroidKeyPairGenerator extends KeyPairGeneratorSpi {
        return certGen.generate(privateKey);
    }

    private @KeyStoreKeyProperties.AlgorithmEnum String getKeyAlgorithm(KeyPairGeneratorSpec spec) {
    private @KeyStoreKeyProperties.KeyAlgorithmEnum String getKeyAlgorithm(
            KeyPairGeneratorSpec spec) {
        String result = spec.getKeyType();
        if (result != null) {
            return result;
@@ -249,10 +250,10 @@ public abstract class AndroidKeyPairGenerator extends KeyPairGeneratorSpi {
    }

    private static String getDefaultSignatureAlgorithmForKeyAlgorithm(
            @KeyStoreKeyProperties.AlgorithmEnum String algorithm) {
        if (KeyStoreKeyProperties.Algorithm.RSA.equalsIgnoreCase(algorithm)) {
            @KeyStoreKeyProperties.KeyAlgorithmEnum String algorithm) {
        if (KeyStoreKeyProperties.KEY_ALGORITHM_RSA.equalsIgnoreCase(algorithm)) {
            return "sha256WithRSA";
        } else if (KeyStoreKeyProperties.Algorithm.EC.equalsIgnoreCase(algorithm)) {
        } else if (KeyStoreKeyProperties.KEY_ALGORITHM_EC.equalsIgnoreCase(algorithm)) {
            return "sha256WithECDSA";
        } else {
            throw new IllegalArgumentException("Unsupported key type " + algorithm);
@@ -288,7 +289,7 @@ public abstract class AndroidKeyPairGenerator extends KeyPairGeneratorSpi {
        }

        KeyPairGeneratorSpec spec = (KeyPairGeneratorSpec) params;
        @KeyStoreKeyProperties.AlgorithmEnum String keyAlgorithm = getKeyAlgorithm(spec);
        @KeyStoreKeyProperties.KeyAlgorithmEnum String keyAlgorithm = getKeyAlgorithm(spec);
        int keyType = KeyStore.getKeyTypeForAlgorithm(keyAlgorithm);
        if (keyType == -1) {
            throw new InvalidAlgorithmParameterException(
+6 −6
Original line number Diff line number Diff line
@@ -129,10 +129,10 @@ public class AndroidKeyStore extends KeyStoreSpi {
                keymasterDigest = keymasterDigests.get(0);
            }

            @KeyStoreKeyProperties.AlgorithmEnum String keyAlgorithmString;
            @KeyStoreKeyProperties.KeyAlgorithmEnum String keyAlgorithmString;
            try {
                keyAlgorithmString =
                        KeyStoreKeyProperties.Algorithm.fromKeymasterSecretKeyAlgorithm(
                        KeyStoreKeyProperties.KeyAlgorithm.fromKeymasterSecretKeyAlgorithm(
                                keymasterAlgorithm, keymasterDigest);
            } catch (IllegalArgumentException e) {
                throw (UnrecoverableKeyException)
@@ -453,10 +453,10 @@ public class AndroidKeyStore extends KeyStoreSpi {
        int keymasterAlgorithm;
        int keymasterDigest;
        try {
            keymasterAlgorithm = KeyStoreKeyProperties.Algorithm.toKeymasterSecretKeyAlgorithm(
            keymasterAlgorithm = KeyStoreKeyProperties.KeyAlgorithm.toKeymasterSecretKeyAlgorithm(
                    keyAlgorithmString);
            keymasterDigest =
                    KeyStoreKeyProperties.Algorithm.toKeymasterDigest(keyAlgorithmString);
                    KeyStoreKeyProperties.KeyAlgorithm.toKeymasterDigest(keyAlgorithmString);
        } catch (IllegalArgumentException e) {
            throw new KeyStoreException("Unsupported secret key algorithm: " + keyAlgorithmString);
        }
@@ -497,7 +497,7 @@ public class AndroidKeyStore extends KeyStoreSpi {
        @KeyStoreKeyProperties.PurposeEnum int purposes = params.getPurposes();
        int[] keymasterBlockModes =
                KeyStoreKeyProperties.BlockMode.allToKeymaster(params.getBlockModes());
        if (((purposes & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
        if (((purposes & KeyStoreKeyProperties.PURPOSE_ENCRYPT) != 0)
                && (params.isRandomizedEncryptionRequired())) {
            for (int keymasterBlockMode : keymasterBlockModes) {
                if (!KeymasterUtils.isKeymasterBlockModeIndCpaCompatible(keymasterBlockMode)) {
@@ -536,7 +536,7 @@ public class AndroidKeyStore extends KeyStoreSpi {
        // TODO: Remove this once keymaster does not require us to specify the size of imported key.
        args.addInt(KeymasterDefs.KM_TAG_KEY_SIZE, keyMaterial.length * 8);

        if (((purposes & KeyStoreKeyProperties.Purpose.ENCRYPT) != 0)
        if (((purposes & KeyStoreKeyProperties.PURPOSE_ENCRYPT) != 0)
                && (!params.isRandomizedEncryptionRequired())) {
            // Permit caller-provided IV when encrypting with this key
            args.addBoolean(KeymasterDefs.KM_TAG_CALLER_NONCE);
+6 −6
Original line number Diff line number Diff line
@@ -266,7 +266,7 @@ public final class KeyChain {
     */
    public static void choosePrivateKeyAlias(@NonNull Activity activity,
            @NonNull KeyChainAliasCallback response,
            @KeyStoreKeyProperties.AlgorithmEnum String[] keyTypes, Principal[] issuers,
            @KeyStoreKeyProperties.KeyAlgorithmEnum String[] keyTypes, Principal[] issuers,
            @Nullable String host, int port, @Nullable String alias) {
        choosePrivateKeyAlias(activity, response, keyTypes, issuers, host, port, null, alias);
    }
@@ -312,7 +312,7 @@ public final class KeyChain {
     */
    public static void choosePrivateKeyAlias(@NonNull Activity activity,
            @NonNull KeyChainAliasCallback response,
            @KeyStoreKeyProperties.AlgorithmEnum String[] keyTypes, Principal[] issuers,
            @KeyStoreKeyProperties.KeyAlgorithmEnum String[] keyTypes, Principal[] issuers,
            @Nullable String host, int port, @Nullable String url, @Nullable String alias) {
        /*
         * TODO currently keyTypes, issuers are unused. They are meant
@@ -439,10 +439,10 @@ public final class KeyChain {
     * "RSA").
     */
    public static boolean isKeyAlgorithmSupported(
            @NonNull @KeyStoreKeyProperties.AlgorithmEnum String algorithm) {
            @NonNull @KeyStoreKeyProperties.KeyAlgorithmEnum String algorithm) {
        final String algUpper = algorithm.toUpperCase(Locale.US);
        return KeyStoreKeyProperties.Algorithm.EC.equals(algUpper)
                || KeyStoreKeyProperties.Algorithm.RSA.equals(algUpper);
        return KeyStoreKeyProperties.KEY_ALGORITHM_EC.equals(algUpper)
                || KeyStoreKeyProperties.KEY_ALGORITHM_RSA.equals(algUpper);
    }

    /**
@@ -453,7 +453,7 @@ public final class KeyChain {
     * that makes it non-exportable.
     */
    public static boolean isBoundKeyAlgorithm(
            @NonNull @KeyStoreKeyProperties.AlgorithmEnum String algorithm) {
            @NonNull @KeyStoreKeyProperties.KeyAlgorithmEnum String algorithm) {
        if (!isKeyAlgorithmSupported(algorithm)) {
            return false;
        }
Loading