- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
143 lines
13 KiB
Java
143 lines
13 KiB
Java
package com.facebook.appevents.internal;
|
|
|
|
import android.content.Context;
|
|
import android.content.pm.PackageManager;
|
|
import android.util.Base64;
|
|
import com.unity3d.ads.core.data.datasource.AndroidStaticDeviceInfoDataSource;
|
|
import java.io.BufferedInputStream;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.InvocationHandler;
|
|
import java.lang.reflect.Method;
|
|
import java.lang.reflect.Proxy;
|
|
import java.math.BigInteger;
|
|
import java.security.MessageDigest;
|
|
import java.security.cert.CertificateFactory;
|
|
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.List;
|
|
import java.util.concurrent.locks.Condition;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
import kotlin.collections.CollectionsKt___CollectionsKt;
|
|
import kotlin.io.CloseableKt;
|
|
import kotlin.jvm.internal.Intrinsics;
|
|
import kotlin.jvm.internal.Ref;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public final class HashUtils {
|
|
private static final int BUFFER_SIZE = 1024;
|
|
private static final String MD5 = "MD5";
|
|
public static final HashUtils INSTANCE = new HashUtils();
|
|
private static final String TAG = HashUtils.class.getSimpleName();
|
|
private static final String[] TRUSTED_CERTS = {"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"};
|
|
|
|
private HashUtils() {
|
|
}
|
|
|
|
public static final String computeChecksum(String str) throws Exception {
|
|
return INSTANCE.computeFileMd5(new File(str));
|
|
}
|
|
|
|
private final String computeFileMd5(File file) throws Exception {
|
|
int read;
|
|
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file), 1024);
|
|
try {
|
|
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
|
|
byte[] bArr = new byte[1024];
|
|
do {
|
|
read = bufferedInputStream.read(bArr);
|
|
if (read > 0) {
|
|
messageDigest.update(bArr, 0, read);
|
|
}
|
|
} while (read != -1);
|
|
String bigInteger = new BigInteger(1, messageDigest.digest()).toString(16);
|
|
Intrinsics.checkNotNullExpressionValue(bigInteger, "BigInteger(1, md.digest()).toString(16)");
|
|
CloseableKt.closeFinally(bufferedInputStream, null);
|
|
return bigInteger;
|
|
} finally {
|
|
}
|
|
}
|
|
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
public static final String computeChecksumWithPackageManager(Context context, Long l) {
|
|
Intrinsics.checkNotNullParameter(context, "context");
|
|
CertificateFactory certificateFactory = CertificateFactory.getInstance(AndroidStaticDeviceInfoDataSource.CERTIFICATE_TYPE_X509);
|
|
String[] strArr = TRUSTED_CERTS;
|
|
ArrayList arrayList = new ArrayList(strArr.length);
|
|
for (String str : strArr) {
|
|
arrayList.add(certificateFactory.generateCertificate(new ByteArrayInputStream(Base64.decode(str, 0))));
|
|
}
|
|
List mutableList = CollectionsKt___CollectionsKt.toMutableList((Collection) arrayList);
|
|
final Ref.ObjectRef objectRef = new Ref.ObjectRef();
|
|
final ReentrantLock reentrantLock = new ReentrantLock();
|
|
final Condition newCondition = reentrantLock.newCondition();
|
|
reentrantLock.lock();
|
|
try {
|
|
Field field = Class.forName("android.content.pm.Checksum").getField("TYPE_WHOLE_MD5");
|
|
Intrinsics.checkNotNullExpressionValue(field, "checksumClass.getField(\"TYPE_WHOLE_MD5\")");
|
|
final Object obj = field.get(null);
|
|
Class<?> cls = Class.forName("android.content.pm.PackageManager$OnChecksumsReadyListener");
|
|
Object newProxyInstance = Proxy.newProxyInstance(HashUtils.class.getClassLoader(), new Class[]{cls}, new InvocationHandler() { // from class: com.facebook.appevents.internal.HashUtils$computeChecksumWithPackageManager$listener$1
|
|
/* JADX WARN: Type inference failed for: r8v10, types: [T, java.lang.String] */
|
|
@Override // java.lang.reflect.InvocationHandler
|
|
public Object invoke(Object obj2, Method method, Object[] objects) {
|
|
String unused;
|
|
Intrinsics.checkNotNullParameter(method, "method");
|
|
Intrinsics.checkNotNullParameter(objects, "objects");
|
|
try {
|
|
if (Intrinsics.areEqual(method.getName(), "onChecksumsReady") && objects.length == 1) {
|
|
Object obj3 = objects[0];
|
|
if (obj3 instanceof List) {
|
|
for (Object obj4 : (List) obj3) {
|
|
if (obj4 != null) {
|
|
Method method2 = obj4.getClass().getMethod("getSplitName", new Class[0]);
|
|
Intrinsics.checkNotNullExpressionValue(method2, "c.javaClass.getMethod(\"getSplitName\")");
|
|
Method method3 = obj4.getClass().getMethod("getType", new Class[0]);
|
|
Intrinsics.checkNotNullExpressionValue(method3, "c.javaClass.getMethod(\"getType\")");
|
|
if (method2.invoke(obj4, new Object[0]) == null && Intrinsics.areEqual(method3.invoke(obj4, new Object[0]), obj)) {
|
|
Method method4 = obj4.getClass().getMethod("getValue", new Class[0]);
|
|
Intrinsics.checkNotNullExpressionValue(method4, "c.javaClass.getMethod(\"getValue\")");
|
|
Object invoke = method4.invoke(obj4, new Object[0]);
|
|
if (invoke == null) {
|
|
throw new NullPointerException("null cannot be cast to non-null type kotlin.ByteArray");
|
|
}
|
|
objectRef.element = new BigInteger(1, (byte[]) invoke).toString(16);
|
|
reentrantLock.lock();
|
|
try {
|
|
newCondition.signalAll();
|
|
return null;
|
|
} finally {
|
|
reentrantLock.unlock();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (Throwable unused2) {
|
|
unused = HashUtils.TAG;
|
|
}
|
|
return null;
|
|
}
|
|
});
|
|
Intrinsics.checkNotNullExpressionValue(newProxyInstance, "var resultChecksum: String? = null\n val lock = ReentrantLock()\n val checksumReady = lock.newCondition()\n lock.lock()\n\n try {\n val checksumClass = Class.forName(\"android.content.pm.Checksum\")\n val typeWholeMd5Field: Field = checksumClass.getField(\"TYPE_WHOLE_MD5\")\n val TYPE_WHOLE_MD5 = typeWholeMd5Field.get(null)\n val checksumReadyListenerClass =\n Class.forName(\"android.content.pm.PackageManager\\$OnChecksumsReadyListener\")\n val listener: Any =\n Proxy.newProxyInstance(\n HashUtils::class.java.classLoader,\n arrayOf(checksumReadyListenerClass),\n object : InvocationHandler {\n override operator fun invoke(o: Any?, method: Method, objects: Array<Any>): Any? {\n try {\n if (method.name == \"onChecksumsReady\" &&\n objects.size == 1 &&\n objects[0] is List<*>) {\n val list = objects[0] as List<*>\n for (c in list) {\n if (c != null) {\n val getSplitNameMethod: Method = c.javaClass.getMethod(\"getSplitName\")\n val getTypeMethod: Method = c.javaClass.getMethod(\"getType\")\n if (getSplitNameMethod.invoke(c) == null &&\n getTypeMethod.invoke(c) == TYPE_WHOLE_MD5) {\n val getValueMethod: Method = c.javaClass.getMethod(\"getValue\")\n val checksumValue = getValueMethod.invoke(c) as ByteArray\n resultChecksum = BigInteger(1, checksumValue).toString(16)\n lock.lock()\n try {\n checksumReady.signalAll()\n } finally {\n lock.unlock()\n }\n return null\n }\n }\n }\n }\n } catch (t: Throwable) {\n Log.d(TAG, \"Can't fetch checksum.\", t)\n }\n return null\n }\n })");
|
|
Method method = PackageManager.class.getMethod("requestChecksums", String.class, Boolean.TYPE, Integer.TYPE, List.class, cls);
|
|
Intrinsics.checkNotNullExpressionValue(method, "PackageManager::class\n .java\n .getMethod(\n \"requestChecksums\",\n String::class.java,\n Boolean::class.javaPrimitiveType,\n Int::class.javaPrimitiveType,\n MutableList::class.java,\n checksumReadyListenerClass)");
|
|
method.invoke(context.getPackageManager(), context.getPackageName(), Boolean.FALSE, obj, CollectionsKt___CollectionsKt.toMutableList((Collection) mutableList), newProxyInstance);
|
|
if (l == null) {
|
|
newCondition.await();
|
|
} else {
|
|
newCondition.awaitNanos(l.longValue());
|
|
}
|
|
String str2 = (String) objectRef.element;
|
|
reentrantLock.unlock();
|
|
return str2;
|
|
} catch (Throwable unused) {
|
|
reentrantLock.unlock();
|
|
return null;
|
|
}
|
|
}
|
|
}
|