VancedMicroG/play-services-droidguard-core/src/main/kotlin/org/microg/gms/droidguard/core/SignatureVerifier.kt

32 lines
1.3 KiB
Kotlin

/*
* SPDX-FileCopyrightText: 2021 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/
package org.microg.gms.droidguard.core
import android.util.Base64
import android.util.Log
import java.security.KeyFactory
import java.security.Signature
import java.security.spec.X509EncodedKeySpec
object SignatureVerifier {
const val TAG = "GmsGuardSigVerify"
const val PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxW77dCKJ8mhEIfXXdeidi7/7LMNM/fzwI+wj1Ed8xIKgTYWCnekRko3JxQb4Cv/gEL5hEA8e9lFs3V67VUL6hCo1FxysXj7Q8n3Kp7hARDkbiZ0mdk8bSanqrPAXTPx6pEL2ZOzfFCHEtJdhz5Ozp2C4XTKF1SBv/YbpsqSUJwdhG7ZPGjyCMRloMww6ITpGdVQ8lChklkCek0WPbz2UrY5RC1qIJKmmcB6KNxxE776Dn6QoYbhN5jPeVBp7lDD3UxjfVzTxKKDAome6fUVBop3dpcLM6rq3+nNT2YArgqTD1qtsVM9vHlcLaAYaPg82vtIN80iDUseMlVHgK+nf6wIDAQAB"
fun verifySignature(data: ByteArray, signature: ByteArray): Boolean {
try {
val keyFactory = KeyFactory.getInstance("RSA") ?: return false
val sig = Signature.getInstance("SHA256withRSA") ?: return false
val keySpec = X509EncodedKeySpec(Base64.decode(PUBLIC_KEY, 0))
sig.initVerify(keyFactory.generatePublic(keySpec))
sig.update(data)
return sig.verify(signature)
} catch (e: Exception) {
Log.w(TAG, e)
return false
}
}
}