Files
rr3-apk/decompiled/sources/androidx/browser/trusted/PackageIdentityUtils.java
Daniel Elliott f9d20bb3fc Add decompiled APK source code (JADX)
- 28,932 files
- Full Java source code
- Smali files
- Resources

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-18 14:52:23 -08:00

125 lines
5.5 KiB
Java

package androidx.browser.trusted;
import android.annotation.SuppressLint;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.content.pm.SigningInfo;
import android.os.Build;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
/* loaded from: classes.dex */
class PackageIdentityUtils {
private static final String TAG = "PackageIdentity";
public interface SignaturesCompat {
@Nullable
List<byte[]> getFingerprintsForPackage(String str, PackageManager packageManager) throws PackageManager.NameNotFoundException;
boolean packageMatchesToken(String str, PackageManager packageManager, TokenContents tokenContents) throws IOException, PackageManager.NameNotFoundException;
}
private PackageIdentityUtils() {
}
@Nullable
public static List<byte[]> getFingerprintsForPackage(String str, PackageManager packageManager) {
try {
return getImpl().getFingerprintsForPackage(str, packageManager);
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Could not get fingerprint for package.", e);
return null;
}
}
public static boolean packageMatchesToken(String str, PackageManager packageManager, TokenContents tokenContents) {
try {
return getImpl().packageMatchesToken(str, packageManager, tokenContents);
} catch (PackageManager.NameNotFoundException | IOException e) {
Log.e(TAG, "Could not check if package matches token.", e);
return false;
}
}
private static SignaturesCompat getImpl() {
if (Build.VERSION.SDK_INT >= 28) {
return new Api28Implementation();
}
return new Pre28Implementation();
}
@RequiresApi(28)
public static class Api28Implementation implements SignaturesCompat {
@Override // androidx.browser.trusted.PackageIdentityUtils.SignaturesCompat
@Nullable
public List<byte[]> getFingerprintsForPackage(String str, PackageManager packageManager) throws PackageManager.NameNotFoundException {
PackageInfo packageInfo = packageManager.getPackageInfo(str, 134217728);
ArrayList arrayList = new ArrayList();
SigningInfo signingInfo = packageInfo.signingInfo;
if (signingInfo.hasMultipleSigners()) {
for (Signature signature : signingInfo.getApkContentsSigners()) {
arrayList.add(PackageIdentityUtils.getCertificateSHA256Fingerprint(signature));
}
} else {
arrayList.add(PackageIdentityUtils.getCertificateSHA256Fingerprint(signingInfo.getSigningCertificateHistory()[0]));
}
return arrayList;
}
@Override // androidx.browser.trusted.PackageIdentityUtils.SignaturesCompat
public boolean packageMatchesToken(String str, PackageManager packageManager, TokenContents tokenContents) throws PackageManager.NameNotFoundException, IOException {
List<byte[]> fingerprintsForPackage;
if (!tokenContents.getPackageName().equals(str) || (fingerprintsForPackage = getFingerprintsForPackage(str, packageManager)) == null) {
return false;
}
if (fingerprintsForPackage.size() == 1) {
return packageManager.hasSigningCertificate(str, tokenContents.getFingerprint(0), 1);
}
return tokenContents.equals(TokenContents.create(str, fingerprintsForPackage));
}
}
public static class Pre28Implementation implements SignaturesCompat {
@Override // androidx.browser.trusted.PackageIdentityUtils.SignaturesCompat
@Nullable
@SuppressLint({"PackageManagerGetSignatures"})
public List<byte[]> getFingerprintsForPackage(String str, PackageManager packageManager) throws PackageManager.NameNotFoundException {
PackageInfo packageInfo = packageManager.getPackageInfo(str, 64);
ArrayList arrayList = new ArrayList(packageInfo.signatures.length);
for (Signature signature : packageInfo.signatures) {
byte[] certificateSHA256Fingerprint = PackageIdentityUtils.getCertificateSHA256Fingerprint(signature);
if (certificateSHA256Fingerprint == null) {
return null;
}
arrayList.add(certificateSHA256Fingerprint);
}
return arrayList;
}
@Override // androidx.browser.trusted.PackageIdentityUtils.SignaturesCompat
public boolean packageMatchesToken(String str, PackageManager packageManager, TokenContents tokenContents) throws IOException, PackageManager.NameNotFoundException {
List<byte[]> fingerprintsForPackage;
if (str.equals(tokenContents.getPackageName()) && (fingerprintsForPackage = getFingerprintsForPackage(str, packageManager)) != null) {
return tokenContents.equals(TokenContents.create(str, fingerprintsForPackage));
}
return false;
}
}
@Nullable
public static byte[] getCertificateSHA256Fingerprint(Signature signature) {
try {
return MessageDigest.getInstance("SHA256").digest(signature.toByteArray());
} catch (NoSuchAlgorithmException unused) {
return null;
}
}
}