Search in sources :

Example 6 with Signature

use of android.content.pm.Signature in project android_frameworks_base by ParanoidAndroid.

the class PackageSignatures method readXml.

void readXml(XmlPullParser parser, ArrayList<Signature> pastSignatures) throws IOException, XmlPullParserException {
    String countStr = parser.getAttributeValue(null, "count");
    if (countStr == null) {
        PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <signatures> has" + " no count at " + parser.getPositionDescription());
        XmlUtils.skipCurrentTag(parser);
    }
    final int count = Integer.parseInt(countStr);
    mSignatures = new Signature[count];
    int pos = 0;
    int outerDepth = parser.getDepth();
    int type;
    while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
        if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
            continue;
        }
        String tagName = parser.getName();
        if (tagName.equals("cert")) {
            if (pos < count) {
                String index = parser.getAttributeValue(null, "index");
                if (index != null) {
                    try {
                        int idx = Integer.parseInt(index);
                        String key = parser.getAttributeValue(null, "key");
                        if (key == null) {
                            if (idx >= 0 && idx < pastSignatures.size()) {
                                Signature sig = pastSignatures.get(idx);
                                if (sig != null) {
                                    mSignatures[pos] = pastSignatures.get(idx);
                                    pos++;
                                } else {
                                    PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <cert> " + "index " + index + " is not defined at " + parser.getPositionDescription());
                                }
                            } else {
                                PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <cert> " + "index " + index + " is out of bounds at " + parser.getPositionDescription());
                            }
                        } else {
                            while (pastSignatures.size() <= idx) {
                                pastSignatures.add(null);
                            }
                            Signature sig = new Signature(key);
                            pastSignatures.set(idx, sig);
                            mSignatures[pos] = sig;
                            pos++;
                        }
                    } catch (NumberFormatException e) {
                        PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <cert> " + "index " + index + " is not a number at " + parser.getPositionDescription());
                    } catch (IllegalArgumentException e) {
                        PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <cert> " + "index " + index + " has an invalid signature at " + parser.getPositionDescription() + ": " + e.getMessage());
                    }
                } else {
                    PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <cert> has" + " no index at " + parser.getPositionDescription());
                }
            } else {
                PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: too " + "many <cert> tags, expected " + count + " at " + parser.getPositionDescription());
            }
        } else {
            PackageManagerService.reportSettingsProblem(Log.WARN, "Unknown element under <cert>: " + parser.getName());
        }
        XmlUtils.skipCurrentTag(parser);
    }
    if (pos < count) {
        // Should never happen -- there is an error in the written
        // settings -- but if it does we don't want to generate
        // a bad array.
        Signature[] newSigs = new Signature[pos];
        System.arraycopy(mSignatures, 0, newSigs, 0, pos);
        mSignatures = newSigs;
    }
}
Also used : Signature(android.content.pm.Signature)

Example 7 with Signature

use of android.content.pm.Signature in project SeriesGuide by UweTrottmann.

the class Utils method hasUnlockKeyInstalled.

/**
     * Returns if the user has a valid copy of X Pass installed.
     */
private static boolean hasUnlockKeyInstalled(Context context) {
    try {
        // Get our signing key
        PackageManager manager = context.getPackageManager();
        @SuppressLint("PackageManagerGetSignatures") PackageInfo appInfoSeriesGuide = manager.getPackageInfo(context.getApplicationContext().getPackageName(), PackageManager.GET_SIGNATURES);
        // Try to find the X signing key
        @SuppressLint("PackageManagerGetSignatures") PackageInfo appInfoSeriesGuideX = manager.getPackageInfo("com.battlelancer.seriesguide.x", PackageManager.GET_SIGNATURES);
        Signature[] sgSignatures = appInfoSeriesGuide.signatures;
        Signature[] xSignatures = appInfoSeriesGuideX.signatures;
        if (sgSignatures.length == xSignatures.length) {
            for (int i = 0; i < sgSignatures.length; i++) {
                if (!sgSignatures[i].toCharsString().equals(xSignatures[i].toCharsString())) {
                    // a signature does not match
                    return false;
                }
            }
            return true;
        }
    } catch (NameNotFoundException e) {
    // Expected exception that occurs if the package is not present.
    }
    return false;
}
Also used : PackageManager(android.content.pm.PackageManager) NameNotFoundException(android.content.pm.PackageManager.NameNotFoundException) PackageInfo(android.content.pm.PackageInfo) Signature(android.content.pm.Signature) SuppressLint(android.annotation.SuppressLint) SuppressLint(android.annotation.SuppressLint)

Example 8 with Signature

use of android.content.pm.Signature in project qksms by moezbhatti.

the class NetworkPolicyManager method isUidValidForPolicy.

/**
     * Check if given UID can have a {@link #setUidPolicy(int, int)} defined,
     * usually to protect critical system services.
     */
@Deprecated
public static boolean isUidValidForPolicy(Context context, int uid) {
    if (!ALLOW_PLATFORM_APP_POLICY) {
        final PackageManager pm = context.getPackageManager();
        final HashSet<Signature> systemSignature;
        try {
            systemSignature = Sets.newHashSet(pm.getPackageInfo("android", GET_SIGNATURES).signatures);
        } catch (NameNotFoundException e) {
            throw new RuntimeException("problem finding system signature", e);
        }
        try {
            // reject apps signed with platform cert
            for (String packageName : pm.getPackagesForUid(uid)) {
                final HashSet<Signature> packageSignature = Sets.newHashSet(pm.getPackageInfo(packageName, GET_SIGNATURES).signatures);
                if (packageSignature.containsAll(systemSignature)) {
                    return false;
                }
            }
        } catch (NameNotFoundException e) {
        }
    }
    // nothing found above; we can apply policy to UID
    return true;
}
Also used : PackageManager(android.content.pm.PackageManager) NameNotFoundException(android.content.pm.PackageManager.NameNotFoundException) Signature(android.content.pm.Signature)

Example 9 with Signature

use of android.content.pm.Signature in project chromeview by pwnall.

the class SelfBrailleClient method verifyPackage.

private boolean verifyPackage() {
    PackageManager pm = mContext.getPackageManager();
    PackageInfo pi;
    try {
        pi = pm.getPackageInfo(BRAILLE_BACK_PACKAGE, PackageManager.GET_SIGNATURES);
    } catch (PackageManager.NameNotFoundException ex) {
        Log.w(LOG_TAG, "Can't verify package " + BRAILLE_BACK_PACKAGE, ex);
        return false;
    }
    MessageDigest digest;
    try {
        digest = MessageDigest.getInstance("SHA-1");
    } catch (NoSuchAlgorithmException ex) {
        Log.e(LOG_TAG, "SHA-1 not supported", ex);
        return false;
    }
    // Check if any of the certificates match our hash.
    for (Signature signature : pi.signatures) {
        digest.update(signature.toByteArray());
        if (MessageDigest.isEqual(EYES_FREE_CERT_SHA1, digest.digest())) {
            return true;
        }
        digest.reset();
    }
    if (mAllowDebugService) {
        Log.w(LOG_TAG, String.format("*** %s connected to BrailleBack with invalid (debug?) " + "signature ***", mContext.getPackageName()));
        return true;
    }
    return false;
}
Also used : PackageManager(android.content.pm.PackageManager) PackageInfo(android.content.pm.PackageInfo) Signature(android.content.pm.Signature) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) MessageDigest(java.security.MessageDigest)

Example 10 with Signature

use of android.content.pm.Signature in project platform_frameworks_base by android.

the class PackageSignatures method readXml.

void readXml(XmlPullParser parser, ArrayList<Signature> pastSignatures) throws IOException, XmlPullParserException {
    String countStr = parser.getAttributeValue(null, "count");
    if (countStr == null) {
        PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <signatures> has" + " no count at " + parser.getPositionDescription());
        XmlUtils.skipCurrentTag(parser);
    }
    final int count = Integer.parseInt(countStr);
    mSignatures = new Signature[count];
    int pos = 0;
    int outerDepth = parser.getDepth();
    int type;
    while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
        if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
            continue;
        }
        String tagName = parser.getName();
        if (tagName.equals("cert")) {
            if (pos < count) {
                String index = parser.getAttributeValue(null, "index");
                if (index != null) {
                    try {
                        int idx = Integer.parseInt(index);
                        String key = parser.getAttributeValue(null, "key");
                        if (key == null) {
                            if (idx >= 0 && idx < pastSignatures.size()) {
                                Signature sig = pastSignatures.get(idx);
                                if (sig != null) {
                                    mSignatures[pos] = pastSignatures.get(idx);
                                    pos++;
                                } else {
                                    PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <cert> " + "index " + index + " is not defined at " + parser.getPositionDescription());
                                }
                            } else {
                                PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <cert> " + "index " + index + " is out of bounds at " + parser.getPositionDescription());
                            }
                        } else {
                            while (pastSignatures.size() <= idx) {
                                pastSignatures.add(null);
                            }
                            Signature sig = new Signature(key);
                            pastSignatures.set(idx, sig);
                            mSignatures[pos] = sig;
                            pos++;
                        }
                    } catch (NumberFormatException e) {
                        PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <cert> " + "index " + index + " is not a number at " + parser.getPositionDescription());
                    } catch (IllegalArgumentException e) {
                        PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <cert> " + "index " + index + " has an invalid signature at " + parser.getPositionDescription() + ": " + e.getMessage());
                    }
                } else {
                    PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: <cert> has" + " no index at " + parser.getPositionDescription());
                }
            } else {
                PackageManagerService.reportSettingsProblem(Log.WARN, "Error in package manager settings: too " + "many <cert> tags, expected " + count + " at " + parser.getPositionDescription());
            }
        } else {
            PackageManagerService.reportSettingsProblem(Log.WARN, "Unknown element under <cert>: " + parser.getName());
        }
        XmlUtils.skipCurrentTag(parser);
    }
    if (pos < count) {
        // Should never happen -- there is an error in the written
        // settings -- but if it does we don't want to generate
        // a bad array.
        Signature[] newSigs = new Signature[pos];
        System.arraycopy(mSignatures, 0, newSigs, 0, pos);
        mSignatures = newSigs;
    }
}
Also used : Signature(android.content.pm.Signature)

Aggregations

Signature (android.content.pm.Signature)96 PackageManager (android.content.pm.PackageManager)33 NameNotFoundException (android.content.pm.PackageManager.NameNotFoundException)30 PackageInfo (android.content.pm.PackageInfo)25 ArrayList (java.util.ArrayList)16 MessageDigest (java.security.MessageDigest)12 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)12 ArraySet (android.util.ArraySet)11 IOException (java.io.IOException)8 PublicKey (java.security.PublicKey)8 File (java.io.File)7 Intent (android.content.Intent)6 HashSet (java.util.HashSet)6 ResolveInfo (android.content.pm.ResolveInfo)5 INetworkManagementEventObserver (android.net.INetworkManagementEventObserver)5 NetworkPolicyManagerService (com.android.server.net.NetworkPolicyManagerService)5 IActivityManager (android.app.IActivityManager)4 INotificationManager (android.app.INotificationManager)4 IProcessObserver (android.app.IProcessObserver)4 PackageParser (android.content.pm.PackageParser)4