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

Commit 7a57baff authored by Alex Klyubin's avatar Alex Klyubin Committed by Android Git Automerger
Browse files

am 6223b7e9: Merge "Track rename of INT and LONG Keymaster tag types." into mnc-dev

* commit '6223b7e9':
  Track rename of INT and LONG Keymaster tag types.
parents 87526d48 6223b7e9
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -39,11 +39,11 @@ abstract class KeymasterArgument implements Parcelable {
                    switch (KeymasterDefs.getTagType(tag)) {
                    switch (KeymasterDefs.getTagType(tag)) {
                        case KeymasterDefs.KM_ENUM:
                        case KeymasterDefs.KM_ENUM:
                        case KeymasterDefs.KM_ENUM_REP:
                        case KeymasterDefs.KM_ENUM_REP:
                        case KeymasterDefs.KM_INT:
                        case KeymasterDefs.KM_UINT:
                        case KeymasterDefs.KM_INT_REP:
                        case KeymasterDefs.KM_UINT_REP:
                            return new KeymasterIntArgument(tag, in);
                            return new KeymasterIntArgument(tag, in);
                        case KeymasterDefs.KM_LONG:
                        case KeymasterDefs.KM_ULONG:
                        case KeymasterDefs.KM_LONG_REP:
                        case KeymasterDefs.KM_ULONG_REP:
                            return new KeymasterLongArgument(tag, in);
                            return new KeymasterLongArgument(tag, in);
                        case KeymasterDefs.KM_DATE:
                        case KeymasterDefs.KM_DATE:
                            return new KeymasterDateArgument(tag, in);
                            return new KeymasterDateArgument(tag, in);
+8 −8
Original line number Original line Diff line number Diff line
@@ -139,10 +139,10 @@ public class KeymasterArguments implements Parcelable {
     */
     */
    public void addUnsignedInt(int tag, long value) {
    public void addUnsignedInt(int tag, long value) {
        int tagType = KeymasterDefs.getTagType(tag);
        int tagType = KeymasterDefs.getTagType(tag);
        if ((tagType != KeymasterDefs.KM_INT) && (tagType != KeymasterDefs.KM_INT_REP)) {
        if ((tagType != KeymasterDefs.KM_UINT) && (tagType != KeymasterDefs.KM_UINT_REP)) {
            throw new IllegalArgumentException("Not an int or repeating int tag: " + tag);
            throw new IllegalArgumentException("Not an int or repeating int tag: " + tag);
        }
        }
        // Keymaster's KM_INT is unsigned 32 bit.
        // Keymaster's KM_UINT is unsigned 32 bit.
        if ((value < 0) || (value > UINT32_MAX_VALUE)) {
        if ((value < 0) || (value > UINT32_MAX_VALUE)) {
            throw new IllegalArgumentException("Int tag value out of range: " + value);
            throw new IllegalArgumentException("Int tag value out of range: " + value);
        }
        }
@@ -156,14 +156,14 @@ public class KeymasterArguments implements Parcelable {
     * @throws IllegalArgumentException if {@code tag} is not an unsigned 32-bit int tag.
     * @throws IllegalArgumentException if {@code tag} is not an unsigned 32-bit int tag.
     */
     */
    public long getUnsignedInt(int tag, long defaultValue) {
    public long getUnsignedInt(int tag, long defaultValue) {
        if (KeymasterDefs.getTagType(tag) != KeymasterDefs.KM_INT) {
        if (KeymasterDefs.getTagType(tag) != KeymasterDefs.KM_UINT) {
            throw new IllegalArgumentException("Not an int tag: " + tag);
            throw new IllegalArgumentException("Not an int tag: " + tag);
        }
        }
        KeymasterArgument arg = getArgumentByTag(tag);
        KeymasterArgument arg = getArgumentByTag(tag);
        if (arg == null) {
        if (arg == null) {
            return defaultValue;
            return defaultValue;
        }
        }
        // Keymaster's KM_INT is unsigned 32 bit.
        // Keymaster's KM_UINT is unsigned 32 bit.
        return ((KeymasterIntArgument) arg).value & 0xffffffffL;
        return ((KeymasterIntArgument) arg).value & 0xffffffffL;
    }
    }


@@ -175,7 +175,7 @@ public class KeymasterArguments implements Parcelable {
     */
     */
    public void addUnsignedLong(int tag, BigInteger value) {
    public void addUnsignedLong(int tag, BigInteger value) {
        int tagType = KeymasterDefs.getTagType(tag);
        int tagType = KeymasterDefs.getTagType(tag);
        if ((tagType != KeymasterDefs.KM_LONG) && (tagType != KeymasterDefs.KM_LONG_REP)) {
        if ((tagType != KeymasterDefs.KM_ULONG) && (tagType != KeymasterDefs.KM_ULONG_REP)) {
            throw new IllegalArgumentException("Not a long or repeating long tag: " + tag);
            throw new IllegalArgumentException("Not a long or repeating long tag: " + tag);
        }
        }
        addLongTag(tag, value);
        addLongTag(tag, value);
@@ -187,7 +187,7 @@ public class KeymasterArguments implements Parcelable {
     * @throws IllegalArgumentException if {@code tag} is not a repeating unsigned 64-bit long tag.
     * @throws IllegalArgumentException if {@code tag} is not a repeating unsigned 64-bit long tag.
     */
     */
    public List<BigInteger> getUnsignedLongs(int tag) {
    public List<BigInteger> getUnsignedLongs(int tag) {
        if (KeymasterDefs.getTagType(tag) != KeymasterDefs.KM_LONG_REP) {
        if (KeymasterDefs.getTagType(tag) != KeymasterDefs.KM_ULONG_REP) {
            throw new IllegalArgumentException("Tag is not a repeating long: " + tag);
            throw new IllegalArgumentException("Tag is not a repeating long: " + tag);
        }
        }
        List<BigInteger> values = new ArrayList<BigInteger>();
        List<BigInteger> values = new ArrayList<BigInteger>();
@@ -200,7 +200,7 @@ public class KeymasterArguments implements Parcelable {
    }
    }


    private void addLongTag(int tag, BigInteger value) {
    private void addLongTag(int tag, BigInteger value) {
        // Keymaster's KM_LONG is unsigned 64 bit.
        // Keymaster's KM_ULONG is unsigned 64 bit.
        if ((value.signum() == -1) || (value.compareTo(UINT64_MAX_VALUE) > 0)) {
        if ((value.signum() == -1) || (value.compareTo(UINT64_MAX_VALUE) > 0)) {
            throw new IllegalArgumentException("Long tag value out of range: " + value);
            throw new IllegalArgumentException("Long tag value out of range: " + value);
        }
        }
@@ -208,7 +208,7 @@ public class KeymasterArguments implements Parcelable {
    }
    }


    private BigInteger getLongTagValue(KeymasterArgument arg) {
    private BigInteger getLongTagValue(KeymasterArgument arg) {
        // Keymaster's KM_LONG is unsigned 64 bit. We're forced to use BigInteger for type safety
        // Keymaster's KM_ULONG is unsigned 64 bit. We're forced to use BigInteger for type safety
        // because there's no unsigned long type.
        // because there's no unsigned long type.
        return toUint64(((KeymasterLongArgument) arg).value);
        return toUint64(((KeymasterLongArgument) arg).value);
    }
    }
+12 −12
Original line number Original line Diff line number Diff line
@@ -33,20 +33,20 @@ public final class KeymasterDefs {
    public static final int KM_INVALID = 0 << 28;
    public static final int KM_INVALID = 0 << 28;
    public static final int KM_ENUM = 1 << 28;
    public static final int KM_ENUM = 1 << 28;
    public static final int KM_ENUM_REP = 2 << 28;
    public static final int KM_ENUM_REP = 2 << 28;
    public static final int KM_INT = 3 << 28;
    public static final int KM_UINT = 3 << 28;
    public static final int KM_INT_REP = 4 << 28;
    public static final int KM_UINT_REP = 4 << 28;
    public static final int KM_LONG = 5 << 28;
    public static final int KM_ULONG = 5 << 28;
    public static final int KM_DATE = 6 << 28;
    public static final int KM_DATE = 6 << 28;
    public static final int KM_BOOL = 7 << 28;
    public static final int KM_BOOL = 7 << 28;
    public static final int KM_BIGNUM = 8 << 28;
    public static final int KM_BIGNUM = 8 << 28;
    public static final int KM_BYTES = 9 << 28;
    public static final int KM_BYTES = 9 << 28;
    public static final int KM_LONG_REP = 10 << 28;
    public static final int KM_ULONG_REP = 10 << 28;


    // Tag values.
    // Tag values.
    public static final int KM_TAG_INVALID = KM_INVALID | 0;
    public static final int KM_TAG_INVALID = KM_INVALID | 0;
    public static final int KM_TAG_PURPOSE = KM_ENUM_REP | 1;
    public static final int KM_TAG_PURPOSE = KM_ENUM_REP | 1;
    public static final int KM_TAG_ALGORITHM = KM_ENUM | 2;
    public static final int KM_TAG_ALGORITHM = KM_ENUM | 2;
    public static final int KM_TAG_KEY_SIZE = KM_INT | 3;
    public static final int KM_TAG_KEY_SIZE = KM_UINT | 3;
    public static final int KM_TAG_BLOCK_MODE = KM_ENUM_REP | 4;
    public static final int KM_TAG_BLOCK_MODE = KM_ENUM_REP | 4;
    public static final int KM_TAG_DIGEST = KM_ENUM_REP | 5;
    public static final int KM_TAG_DIGEST = KM_ENUM_REP | 5;
    public static final int KM_TAG_PADDING = KM_ENUM_REP | 6;
    public static final int KM_TAG_PADDING = KM_ENUM_REP | 6;
@@ -56,19 +56,19 @@ public final class KeymasterDefs {
    public static final int KM_TAG_RESCOPING_DEL = KM_ENUM_REP | 102;
    public static final int KM_TAG_RESCOPING_DEL = KM_ENUM_REP | 102;
    public static final int KM_TAG_BLOB_USAGE_REQUIREMENTS = KM_ENUM | 705;
    public static final int KM_TAG_BLOB_USAGE_REQUIREMENTS = KM_ENUM | 705;


    public static final int KM_TAG_RSA_PUBLIC_EXPONENT = KM_LONG | 200;
    public static final int KM_TAG_RSA_PUBLIC_EXPONENT = KM_ULONG | 200;
    public static final int KM_TAG_ACTIVE_DATETIME = KM_DATE | 400;
    public static final int KM_TAG_ACTIVE_DATETIME = KM_DATE | 400;
    public static final int KM_TAG_ORIGINATION_EXPIRE_DATETIME = KM_DATE | 401;
    public static final int KM_TAG_ORIGINATION_EXPIRE_DATETIME = KM_DATE | 401;
    public static final int KM_TAG_USAGE_EXPIRE_DATETIME = KM_DATE | 402;
    public static final int KM_TAG_USAGE_EXPIRE_DATETIME = KM_DATE | 402;
    public static final int KM_TAG_MIN_SECONDS_BETWEEN_OPS = KM_INT | 403;
    public static final int KM_TAG_MIN_SECONDS_BETWEEN_OPS = KM_UINT | 403;
    public static final int KM_TAG_MAX_USES_PER_BOOT = KM_INT | 404;
    public static final int KM_TAG_MAX_USES_PER_BOOT = KM_UINT | 404;


    public static final int KM_TAG_ALL_USERS = KM_BOOL | 500;
    public static final int KM_TAG_ALL_USERS = KM_BOOL | 500;
    public static final int KM_TAG_USER_ID = KM_INT | 501;
    public static final int KM_TAG_USER_ID = KM_UINT | 501;
    public static final int KM_TAG_USER_SECURE_ID = KM_LONG_REP | 502;
    public static final int KM_TAG_USER_SECURE_ID = KM_ULONG_REP | 502;
    public static final int KM_TAG_NO_AUTH_REQUIRED = KM_BOOL | 503;
    public static final int KM_TAG_NO_AUTH_REQUIRED = KM_BOOL | 503;
    public static final int KM_TAG_USER_AUTH_TYPE = KM_ENUM | 504;
    public static final int KM_TAG_USER_AUTH_TYPE = KM_ENUM | 504;
    public static final int KM_TAG_AUTH_TIMEOUT = KM_INT | 505;
    public static final int KM_TAG_AUTH_TIMEOUT = KM_UINT | 505;


    public static final int KM_TAG_ALL_APPLICATIONS = KM_BOOL | 600;
    public static final int KM_TAG_ALL_APPLICATIONS = KM_BOOL | 600;
    public static final int KM_TAG_APPLICATION_ID = KM_BYTES | 601;
    public static final int KM_TAG_APPLICATION_ID = KM_BYTES | 601;
@@ -82,7 +82,7 @@ public final class KeymasterDefs {
    public static final int KM_TAG_ASSOCIATED_DATA = KM_BYTES | 1000;
    public static final int KM_TAG_ASSOCIATED_DATA = KM_BYTES | 1000;
    public static final int KM_TAG_NONCE = KM_BYTES | 1001;
    public static final int KM_TAG_NONCE = KM_BYTES | 1001;
    public static final int KM_TAG_AUTH_TOKEN = KM_BYTES | 1002;
    public static final int KM_TAG_AUTH_TOKEN = KM_BYTES | 1002;
    public static final int KM_TAG_MAC_LENGTH = KM_INT | 1003;
    public static final int KM_TAG_MAC_LENGTH = KM_UINT | 1003;


    // Algorithm values.
    // Algorithm values.
    public static final int KM_ALGORITHM_RSA = 1;
    public static final int KM_ALGORITHM_RSA = 1;
+2 −2
Original line number Original line Diff line number Diff line
@@ -27,8 +27,8 @@ class KeymasterIntArgument extends KeymasterArgument {
    public KeymasterIntArgument(int tag, int value) {
    public KeymasterIntArgument(int tag, int value) {
        super(tag);
        super(tag);
        switch (KeymasterDefs.getTagType(tag)) {
        switch (KeymasterDefs.getTagType(tag)) {
            case KeymasterDefs.KM_INT:
            case KeymasterDefs.KM_UINT:
            case KeymasterDefs.KM_INT_REP:
            case KeymasterDefs.KM_UINT_REP:
            case KeymasterDefs.KM_ENUM:
            case KeymasterDefs.KM_ENUM:
            case KeymasterDefs.KM_ENUM_REP:
            case KeymasterDefs.KM_ENUM_REP:
                break; // OK.
                break; // OK.
+2 −2
Original line number Original line Diff line number Diff line
@@ -27,8 +27,8 @@ class KeymasterLongArgument extends KeymasterArgument {
    public KeymasterLongArgument(int tag, long value) {
    public KeymasterLongArgument(int tag, long value) {
        super(tag);
        super(tag);
        switch (KeymasterDefs.getTagType(tag)) {
        switch (KeymasterDefs.getTagType(tag)) {
            case KeymasterDefs.KM_LONG:
            case KeymasterDefs.KM_ULONG:
            case KeymasterDefs.KM_LONG_REP:
            case KeymasterDefs.KM_ULONG_REP:
                break; // OK.
                break; // OK.
            default:
            default:
                throw new IllegalArgumentException("Bad long tag " + tag);
                throw new IllegalArgumentException("Bad long tag " + tag);