2021-04-05 21:14:02 +02:00
|
|
|
package tw.nekomimi.nekogram.parts
|
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.content.pm.PackageManager
|
|
|
|
import android.content.pm.PackageManager.GET_SIGNATURES
|
|
|
|
import android.content.pm.PackageManager.GET_SIGNING_CERTIFICATES
|
|
|
|
import android.os.Build
|
|
|
|
import cn.hutool.crypto.digest.DigestUtil
|
|
|
|
import org.telegram.messenger.FileLog
|
|
|
|
|
|
|
|
val fdroidKeys = arrayOf(
|
2021-05-06 09:09:55 +02:00
|
|
|
"06665358EFD8BA05BE236A47A12CB0958D7D75DD939D77C2B31F5398537EBDC5",
|
|
|
|
"AF1A476E2D85FA33C55E44FC51D9CE93223A94F5D089F47F8CE06372E597041D",
|
|
|
|
"B7FAA8C354DE84E8446C52DDD9C985C117599899D5A7845ADDC72B9556CCFD55"
|
2021-04-05 21:14:02 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
const val devKey = "32250A4B5F3A6733DF57A3B9EC16C38D2C7FC5F2F693A9636F8F7B3BE3549641"
|
|
|
|
|
|
|
|
@Throws(PackageManager.NameNotFoundException::class)
|
|
|
|
fun Context.getSha256Signature(packageName: String): String {
|
|
|
|
val appInfo = packageManager.getPackageInfo(
|
2021-05-06 09:09:55 +02:00
|
|
|
packageName,
|
|
|
|
if (Build.VERSION.SDK_INT >= 28) GET_SIGNING_CERTIFICATES else GET_SIGNATURES
|
2021-04-05 21:14:02 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
return DigestUtil.sha256Hex(
|
2021-05-06 09:09:55 +02:00
|
|
|
if (Build.VERSION.SDK_INT >= 28) {
|
|
|
|
appInfo.signingInfo.apkContentsSigners[0].toByteArray()
|
|
|
|
} else {
|
|
|
|
appInfo.signatures[0].toByteArray()
|
|
|
|
}
|
2021-05-06 09:15:57 +02:00
|
|
|
).uppercase()
|
2021-04-05 21:14:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fun Context.isVerified(): Boolean {
|
|
|
|
val packageName = packageName
|
|
|
|
if (!packageName.contains("nekox")) {
|
|
|
|
FileLog.w("packageName changed, don't check signature")
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
when (val s = getSha256Signature(packageName)) {
|
|
|
|
devKey,
|
|
|
|
in fdroidKeys -> return true
|
|
|
|
else -> {
|
|
|
|
FileLog.w("Unknown signature: $s")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|