That fuck shit the fascists are using
1package org.tm.archive.util;
2
3import android.annotation.SuppressLint;
4import android.content.Context;
5import android.content.pm.PackageInfo;
6import android.content.pm.PackageManager;
7import android.content.pm.Signature;
8
9import androidx.annotation.NonNull;
10
11import org.signal.core.util.Base64;
12import org.signal.core.util.logging.Log;
13
14import java.nio.charset.StandardCharsets;
15import java.security.MessageDigest;
16import java.security.NoSuchAlgorithmException;
17import java.util.Arrays;
18
19public final class AppSignatureUtil {
20
21 private static final String TAG = Log.tag(AppSignatureUtil.class);
22
23 private static final String HASH_TYPE = "SHA-256";
24 private static final int HASH_LENGTH_BYTES = 9;
25 private static final int HASH_LENGTH_CHARS = 11;
26
27 private AppSignatureUtil() {}
28
29 /**
30 * Only intended to be used for logging.
31 */
32 @SuppressLint("PackageManagerGetSignatures")
33 public static @NonNull String getAppSignature(@NonNull Context context) {
34 String hash = null;
35 try {
36 String packageName = context.getPackageName();
37 PackageManager packageManager = context.getPackageManager();
38 PackageInfo packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
39 Signature[] signatures = packageInfo.signatures;
40
41 if (signatures.length > 0) {
42 hash = hash(packageName, signatures[0].toCharsString());
43 }
44 } catch (PackageManager.NameNotFoundException e) {
45 Log.w(TAG, e);
46 }
47
48 return hash != null ? hash : "Unknown";
49 }
50
51 private static String hash(String packageName, String signature) {
52 String appInfo = packageName + " " + signature;
53 try {
54 MessageDigest messageDigest = MessageDigest.getInstance(HASH_TYPE);
55 messageDigest.update(appInfo.getBytes(StandardCharsets.UTF_8));
56
57 byte[] hashSignature = messageDigest.digest();
58 hashSignature = Arrays.copyOfRange(hashSignature, 0, HASH_LENGTH_BYTES);
59
60 String base64Hash = Base64.encodeWithPadding(hashSignature);
61 base64Hash = base64Hash.substring(0, HASH_LENGTH_CHARS);
62
63 return base64Hash;
64 } catch (NoSuchAlgorithmException e) {
65 Log.w(TAG, e);
66 }
67
68 return null;
69 }
70}