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

Commit 1616f30b authored by dcashman's avatar dcashman
Browse files

Add keyset support for ECDSA public keys.

Bug: 21363613
Change-Id: If9eafc725dec4800276251722a7456382dfe207d
parent 59d6d943
Loading
Loading
Loading
Loading
+15 −6
Original line number Original line Diff line number Diff line
@@ -4019,7 +4019,7 @@ public class PackageParser {


    public static final PublicKey parsePublicKey(final String encodedPublicKey) {
    public static final PublicKey parsePublicKey(final String encodedPublicKey) {
        if (encodedPublicKey == null) {
        if (encodedPublicKey == null) {
            Slog.i(TAG, "Could not parse null public key");
            Slog.w(TAG, "Could not parse null public key");
            return null;
            return null;
        }
        }


@@ -4028,7 +4028,7 @@ public class PackageParser {
            final byte[] encoded = Base64.decode(encodedPublicKey, Base64.DEFAULT);
            final byte[] encoded = Base64.decode(encodedPublicKey, Base64.DEFAULT);
            keySpec = new X509EncodedKeySpec(encoded);
            keySpec = new X509EncodedKeySpec(encoded);
        } catch (IllegalArgumentException e) {
        } catch (IllegalArgumentException e) {
            Slog.i(TAG, "Could not parse verifier public key; invalid Base64");
            Slog.w(TAG, "Could not parse verifier public key; invalid Base64");
            return null;
            return null;
        }
        }


@@ -4037,23 +4037,32 @@ public class PackageParser {
            final KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            final KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            return keyFactory.generatePublic(keySpec);
            return keyFactory.generatePublic(keySpec);
        } catch (NoSuchAlgorithmException e) {
        } catch (NoSuchAlgorithmException e) {
            Log.wtf(TAG, "Could not parse public key because RSA isn't included in build");
            Slog.wtf(TAG, "Could not parse public key: RSA KeyFactory not included in build");
            return null;
        } catch (InvalidKeySpecException e) {
        } catch (InvalidKeySpecException e) {
            // Not a RSA public key.
            // Not a RSA public key.
        }
        }


        /* Now try it as a ECDSA key. */
        try {
            final KeyFactory keyFactory = KeyFactory.getInstance("EC");
            return keyFactory.generatePublic(keySpec);
        } catch (NoSuchAlgorithmException e) {
            Slog.wtf(TAG, "Could not parse public key: EC KeyFactory not included in build");
        } catch (InvalidKeySpecException e) {
            // Not a ECDSA public key.
        }

        /* Now try it as a DSA key. */
        /* Now try it as a DSA key. */
        try {
        try {
            final KeyFactory keyFactory = KeyFactory.getInstance("DSA");
            final KeyFactory keyFactory = KeyFactory.getInstance("DSA");
            return keyFactory.generatePublic(keySpec);
            return keyFactory.generatePublic(keySpec);
        } catch (NoSuchAlgorithmException e) {
        } catch (NoSuchAlgorithmException e) {
            Log.wtf(TAG, "Could not parse public key because DSA isn't included in build");
            Slog.wtf(TAG, "Could not parse public key: DSA KeyFactory not included in build");
            return null;
        } catch (InvalidKeySpecException e) {
        } catch (InvalidKeySpecException e) {
            // Not a DSA public key.
            // Not a DSA public key.
        }
        }


        /* Not a supported key type */
        return null;
        return null;
    }
    }