Fix signatures are being deprecated
This commit is contained in:
@@ -34,6 +34,7 @@ import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.support.annotation.RequiresApi
|
||||
import android.support.v4.os.BuildCompat
|
||||
import android.support.v4.os.UserManagerCompat
|
||||
import android.support.v7.app.AppCompatDelegate
|
||||
import android.util.Log
|
||||
@@ -73,8 +74,8 @@ class App : Application() {
|
||||
private val tracker: Tracker by lazy { GoogleAnalytics.getInstance(deviceContext).newTracker(R.xml.tracker) }
|
||||
val info: PackageInfo by lazy { getPackageInfo(packageName) }
|
||||
|
||||
fun getPackageInfo(packageName: String) =
|
||||
packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)!!
|
||||
fun getPackageInfo(packageName: String) = packageManager.getPackageInfo(packageName, if (BuildCompat.isAtLeastP())
|
||||
PackageManager.GET_SIGNING_CERTIFICATES else @Suppress("DEPRECATION") PackageManager.GET_SIGNATURES)!!
|
||||
|
||||
fun startService() {
|
||||
val intent = Intent(this, BaseService.serviceClass.java)
|
||||
|
||||
@@ -354,7 +354,7 @@ object BaseService {
|
||||
.readTimeout(30, TimeUnit.SECONDS)
|
||||
.build()
|
||||
val mdg = MessageDigest.getInstance("SHA-1")
|
||||
mdg.update(app.info.signatures[0].toByteArray())
|
||||
mdg.update(app.info.signaturesCompat.first().toByteArray())
|
||||
val requestBody = FormBody.Builder()
|
||||
.add("sig", String(Base64.encode(mdg.digest(), 0)))
|
||||
.build()
|
||||
|
||||
@@ -32,6 +32,7 @@ import android.util.Base64
|
||||
import android.util.Log
|
||||
import com.github.shadowsocks.App.Companion.app
|
||||
import com.github.shadowsocks.utils.Commandline
|
||||
import com.github.shadowsocks.utils.signaturesCompat
|
||||
import eu.chainfire.libsuperuser.Shell
|
||||
import java.io.File
|
||||
import java.io.FileNotFoundException
|
||||
@@ -47,7 +48,7 @@ object PluginManager {
|
||||
* public key yet since it will also automatically trust packages signed by the same signatures, e.g. debug keys.
|
||||
*/
|
||||
val trustedSignatures by lazy {
|
||||
app.info.signatures.toSet() +
|
||||
app.info.signaturesCompat.toSet() +
|
||||
Signature(Base64.decode( // @Mygod
|
||||
"""
|
||||
|MIIDWzCCAkOgAwIBAgIEUzfv8DANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJD
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.content.pm.ResolveInfo
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.Bundle
|
||||
import com.github.shadowsocks.App.Companion.app
|
||||
import com.github.shadowsocks.utils.signaturesCompat
|
||||
|
||||
abstract class ResolvedPlugin(protected val resolveInfo: ResolveInfo) : Plugin() {
|
||||
protected abstract val metaData: Bundle
|
||||
@@ -34,6 +35,6 @@ abstract class ResolvedPlugin(protected val resolveInfo: ResolveInfo) : Plugin()
|
||||
override val defaultConfig: String by lazy { metaData.getString(PluginContract.METADATA_KEY_DEFAULT_CONFIG) }
|
||||
override val packageName: String get() = resolveInfo.resolvePackageName
|
||||
override val trusted by lazy {
|
||||
app.getPackageInfo(packageName).signatures.any(PluginManager.trustedSignatures::contains)
|
||||
app.getPackageInfo(packageName).signaturesCompat.any(PluginManager.trustedSignatures::contains)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,14 @@ package com.github.shadowsocks.utils
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageInfo
|
||||
import android.content.res.Resources
|
||||
import android.os.Build
|
||||
import android.support.annotation.AttrRes
|
||||
import android.support.v4.app.Fragment
|
||||
import android.support.v4.app.FragmentManager
|
||||
import android.support.v4.content.ContextCompat
|
||||
import android.support.v4.os.BuildCompat
|
||||
import android.support.v7.util.SortedList
|
||||
import android.util.TypedValue
|
||||
import com.github.shadowsocks.App.Companion.app
|
||||
@@ -53,6 +55,10 @@ val URLConnection.responseLength: Long
|
||||
|
||||
inline fun <reified T> Context.systemService() = ContextCompat.getSystemService(this, T::class.java)!!
|
||||
|
||||
val PackageInfo.signaturesCompat get() =
|
||||
if (BuildCompat.isAtLeastP()) signingCertificateHistory.flatten()
|
||||
else @Suppress("DEPRECATION") signatures.asIterable()
|
||||
|
||||
/**
|
||||
* Based on: https://stackoverflow.com/a/15656428/2245107
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user