That fuck shit the fascists are using
at master 70 lines 2.2 kB view raw
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}