Search in sources :

Example 56 with Signature

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

the class PackageManagerService method compareSignatures.

static int compareSignatures(Signature[] s1, Signature[] s2) {
    if (s1 == null) {
        return s2 == null ? PackageManager.SIGNATURE_NEITHER_SIGNED : PackageManager.SIGNATURE_FIRST_NOT_SIGNED;
    }
    if (s2 == null) {
        return PackageManager.SIGNATURE_SECOND_NOT_SIGNED;
    }
    HashSet<Signature> set1 = new HashSet<Signature>();
    for (Signature sig : s1) {
        set1.add(sig);
    }
    HashSet<Signature> set2 = new HashSet<Signature>();
    for (Signature sig : s2) {
        set2.add(sig);
    }
    // Make sure s2 contains all signatures in s1.
    if (set1.equals(set2)) {
        return PackageManager.SIGNATURE_MATCH;
    }
    return PackageManager.SIGNATURE_NO_MATCH;
}
Also used : Signature(android.content.pm.Signature) HashSet(java.util.HashSet)

Example 57 with Signature

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

the class SELinuxMMAC method readInstallPolicy.

private static boolean readInstallPolicy(File[] policyFiles) {
    FileReader policyFile = null;
    int i = 0;
    while (policyFile == null && policyFiles != null && policyFiles[i] != null) {
        try {
            policyFile = new FileReader(policyFiles[i]);
            break;
        } catch (FileNotFoundException e) {
            Slog.d(TAG, "Couldn't find install policy " + policyFiles[i].getPath());
        }
        i++;
    }
    if (policyFile == null) {
        Slog.d(TAG, "No policy file found. All seinfo values will be null.");
        return false;
    }
    Slog.d(TAG, "Using install policy file " + policyFiles[i].getPath());
    flushInstallPolicy();
    try {
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(policyFile);
        XmlUtils.beginDocument(parser, "policy");
        while (true) {
            XmlUtils.nextElement(parser);
            if (parser.getEventType() == XmlPullParser.END_DOCUMENT) {
                break;
            }
            String tagName = parser.getName();
            if ("signer".equals(tagName)) {
                String cert = parser.getAttributeValue(null, "signature");
                if (cert == null) {
                    Slog.w(TAG, "<signer> without signature at " + parser.getPositionDescription());
                    XmlUtils.skipCurrentTag(parser);
                    continue;
                }
                Signature signature;
                try {
                    signature = new Signature(cert);
                } catch (IllegalArgumentException e) {
                    Slog.w(TAG, "<signer> with bad signature at " + parser.getPositionDescription(), e);
                    XmlUtils.skipCurrentTag(parser);
                    continue;
                }
                String seinfo = readSeinfoTag(parser);
                if (seinfo != null) {
                    if (DEBUG_POLICY_INSTALL)
                        Slog.i(TAG, "<signer> tag: (" + cert + ") assigned seinfo=" + seinfo);
                    sSigSeinfo.put(signature, seinfo);
                }
            } else if ("default".equals(tagName)) {
                String seinfo = readSeinfoTag(parser);
                if (seinfo != null) {
                    if (DEBUG_POLICY_INSTALL)
                        Slog.i(TAG, "<default> tag assigned seinfo=" + seinfo);
                    // The 'null' signature is the default seinfo value
                    sSigSeinfo.put(null, seinfo);
                }
            } else if ("package".equals(tagName)) {
                String pkgName = parser.getAttributeValue(null, "name");
                if (pkgName == null) {
                    Slog.w(TAG, "<package> without name at " + parser.getPositionDescription());
                    XmlUtils.skipCurrentTag(parser);
                    continue;
                }
                String seinfo = readSeinfoTag(parser);
                if (seinfo != null) {
                    if (DEBUG_POLICY_INSTALL)
                        Slog.i(TAG, "<package> tag: (" + pkgName + ") assigned seinfo=" + seinfo);
                    sPackageSeinfo.put(pkgName, seinfo);
                }
            } else {
                XmlUtils.skipCurrentTag(parser);
                continue;
            }
        }
    } catch (XmlPullParserException e) {
        Slog.w(TAG, "Got execption parsing ", e);
    } catch (IOException e) {
        Slog.w(TAG, "Got execption parsing ", e);
    }
    try {
        policyFile.close();
    } catch (IOException e) {
    //omit
    }
    return true;
}
Also used : Signature(android.content.pm.Signature) FileNotFoundException(java.io.FileNotFoundException) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileReader(java.io.FileReader) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) IOException(java.io.IOException)

Example 58 with Signature

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

the class PackageManagerService method getUidForVerifier.

private int getUidForVerifier(VerifierInfo verifierInfo) {
    synchronized (mPackages) {
        final PackageParser.Package pkg = mPackages.get(verifierInfo.packageName);
        if (pkg == null) {
            return -1;
        } else if (pkg.mSignatures.length != 1) {
            Slog.i(TAG, "Verifier package " + verifierInfo.packageName + " has more than one signature; ignoring");
            return -1;
        }
        /*
             * If the public key of the package's signature does not match
             * our expected public key, then this is a different package and
             * we should skip.
             */
        final byte[] expectedPublicKey;
        try {
            final Signature verifierSig = pkg.mSignatures[0];
            final PublicKey publicKey = verifierSig.getPublicKey();
            expectedPublicKey = publicKey.getEncoded();
        } catch (CertificateException e) {
            return -1;
        }
        final byte[] actualPublicKey = verifierInfo.publicKey.getEncoded();
        if (!Arrays.equals(actualPublicKey, expectedPublicKey)) {
            Slog.i(TAG, "Verifier package " + verifierInfo.packageName + " does not have the expected public key; ignoring");
            return -1;
        }
        return pkg.applicationInfo.uid;
    }
}
Also used : PackageParser(android.content.pm.PackageParser) PublicKey(java.security.PublicKey) Signature(android.content.pm.Signature) CertificateException(java.security.cert.CertificateException)

Example 59 with Signature

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

the class NetworkPolicyManagerServiceTest method setUp.

@Override
public void setUp() throws Exception {
    super.setUp();
    setCurrentTimeMillis(TEST_START);
    // intercept various broadcasts, and pretend that uids have packages
    mServiceContext = new BroadcastInterceptingContext(getContext()) {

        @Override
        public PackageManager getPackageManager() {
            return new MockPackageManager() {

                @Override
                public String[] getPackagesForUid(int uid) {
                    return new String[] { "com.example" };
                }

                @Override
                public PackageInfo getPackageInfo(String packageName, int flags) {
                    final PackageInfo info = new PackageInfo();
                    final Signature signature;
                    if ("android".equals(packageName)) {
                        signature = new Signature("F00D");
                    } else {
                        signature = new Signature("DEAD");
                    }
                    info.signatures = new Signature[] { signature };
                    return info;
                }
            };
        }

        @Override
        public void startActivity(Intent intent) {
        // ignored
        }
    };
    mPolicyDir = getContext().getFilesDir();
    if (mPolicyDir.exists()) {
        IoUtils.deleteContents(mPolicyDir);
    }
    mActivityManager = createMock(IActivityManager.class);
    mPowerManager = createMock(IPowerManager.class);
    mStatsService = createMock(INetworkStatsService.class);
    mNetworkManager = createMock(INetworkManagementService.class);
    mPolicyListener = createMock(INetworkPolicyListener.class);
    mTime = createMock(TrustedTime.class);
    mConnManager = createMock(IConnectivityManager.class);
    mNotifManager = createMock(INotificationManager.class);
    mService = new NetworkPolicyManagerService(mServiceContext, mActivityManager, mPowerManager, mStatsService, mNetworkManager, mTime, mPolicyDir, true);
    mService.bindConnectivityManager(mConnManager);
    mService.bindNotificationManager(mNotifManager);
    // RemoteCallbackList needs a binder to use as key
    expect(mPolicyListener.asBinder()).andReturn(mStubBinder).atLeastOnce();
    replay();
    mService.registerListener(mPolicyListener);
    verifyAndReset();
    // catch IProcessObserver during systemReady()
    final Capture<IProcessObserver> processObserver = new Capture<IProcessObserver>();
    mActivityManager.registerProcessObserver(capture(processObserver));
    expectLastCall().atLeastOnce();
    // catch INetworkManagementEventObserver during systemReady()
    final Capture<INetworkManagementEventObserver> networkObserver = new Capture<INetworkManagementEventObserver>();
    mNetworkManager.registerObserver(capture(networkObserver));
    expectLastCall().atLeastOnce();
    // expect to answer screen status during systemReady()
    expect(mPowerManager.isScreenOn()).andReturn(true).atLeastOnce();
    expect(mNetworkManager.isBandwidthControlEnabled()).andReturn(true).atLeastOnce();
    expectCurrentTime();
    replay();
    mService.systemReady();
    verifyAndReset();
    mProcessObserver = processObserver.getValue();
    mNetworkObserver = networkObserver.getValue();
}
Also used : IPowerManager(android.os.IPowerManager) PackageInfo(android.content.pm.PackageInfo) TrustedTime(android.util.TrustedTime) INetworkManagementService(android.os.INetworkManagementService) MockPackageManager(android.test.mock.MockPackageManager) Intent(android.content.Intent) INetworkPolicyListener(android.net.INetworkPolicyListener) Capture(org.easymock.Capture) NetworkPolicyManagerService(com.android.server.net.NetworkPolicyManagerService) PackageManager(android.content.pm.PackageManager) MockPackageManager(android.test.mock.MockPackageManager) INotificationManager(android.app.INotificationManager) Signature(android.content.pm.Signature) INetworkStatsService(android.net.INetworkStatsService) INetworkManagementEventObserver(android.net.INetworkManagementEventObserver) IConnectivityManager(android.net.IConnectivityManager) IProcessObserver(android.app.IProcessObserver) IActivityManager(android.app.IActivityManager)

Example 60 with Signature

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

the class Utils method getCertFingerprintsFromPackageManager.

/**
     * Returns the normalized sha-256 fingerprints of a given package according to the Android
     * package manager.
     */
public static List<String> getCertFingerprintsFromPackageManager(String packageName, Context context) throws NameNotFoundException {
    Signature[] signatures = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures;
    ArrayList<String> result = new ArrayList<String>(signatures.length);
    for (Signature sig : signatures) {
        result.add(computeNormalizedSha256Fingerprint(sig.toByteArray()));
    }
    return result;
}
Also used : Signature(android.content.pm.Signature) ArrayList(java.util.ArrayList)

Aggregations

Signature (android.content.pm.Signature)97 PackageManager (android.content.pm.PackageManager)34 NameNotFoundException (android.content.pm.PackageManager.NameNotFoundException)31 PackageInfo (android.content.pm.PackageInfo)26 ArrayList (java.util.ArrayList)16 MessageDigest (java.security.MessageDigest)13 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)13 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 CertificateException (java.security.cert.CertificateException)6 HashSet (java.util.HashSet)6 ResolveInfo (android.content.pm.ResolveInfo)5 INetworkManagementEventObserver (android.net.INetworkManagementEventObserver)5 IActivityManager (android.app.IActivityManager)4 INotificationManager (android.app.INotificationManager)4 IProcessObserver (android.app.IProcessObserver)4 PackageParser (android.content.pm.PackageParser)4