fix: rsa pubkey prioritize stored values

This commit is contained in:
Miuzarte
2026-04-28 16:17:38 +08:00
parent e089f687c0
commit f97976847e
3 changed files with 19 additions and 7 deletions

View File

@@ -2,6 +2,10 @@
~~什么我居然开始写更新日志了~~ ~~什么我居然开始写更新日志了~~
## 0.2.9
- 修复: RSA 公钥优先使用已储存的值
## 0.2.8 ## 0.2.8
- 新增: 设置 -> 全屏 -> 全屏兼容模式 - 新增: 设置 -> 全屏 -> 全屏兼容模式

View File

@@ -56,8 +56,8 @@ android {
applicationId = "io.github.miuzarte.scrcpyforandroid" applicationId = "io.github.miuzarte.scrcpyforandroid"
minSdk = 26 minSdk = 26
targetSdk = 37 targetSdk = 37
versionCode = 24 versionCode = 25
versionName = "0.2.8" versionName = "0.2.9"
externalNativeBuild { externalNativeBuild {
cmake { cmake {

View File

@@ -3,6 +3,7 @@ package io.github.miuzarte.scrcpyforandroid.nativecore
import android.os.Build import android.os.Build
import android.util.Base64 import android.util.Base64
import android.util.Log import android.util.Log
import io.github.miuzarte.scrcpyforandroid.storage.AdbClientData
import io.github.miuzarte.scrcpyforandroid.storage.AppSettings import io.github.miuzarte.scrcpyforandroid.storage.AppSettings
import io.github.miuzarte.scrcpyforandroid.storage.Storage import io.github.miuzarte.scrcpyforandroid.storage.Storage
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
@@ -118,7 +119,11 @@ internal object DirectAdbTransport {
Base64.decode(privB64, Base64.DEFAULT) Base64.decode(privB64, Base64.DEFAULT)
) )
) )
val pub = derivePublicX509(priv) val pubB64 = adbClientData.rsaPublicKeyX509.get()
val pub =
if (pubB64.isNotBlank()) Base64.decode(pubB64, Base64.DEFAULT)
else derivePublicX509(priv)
Log.i( Log.i(
TAG, TAG,
"loadOrCreate(): loaded persisted RSA key pair from DataStore, " + "loadOrCreate(): loaded persisted RSA key pair from DataStore, " +
@@ -137,15 +142,18 @@ internal object DirectAdbTransport {
kpg.initialize(2048) kpg.initialize(2048)
val kp = kpg.generateKeyPair() val kp = kpg.generateKeyPair()
// 保存到 DataStore
val privateKeyB64 = Base64.encodeToString(kp.private.encoded, Base64.NO_WRAP) val privateKeyB64 = Base64.encodeToString(kp.private.encoded, Base64.NO_WRAP)
val publicKeyB64 = Base64.encodeToString(kp.public.encoded, Base64.NO_WRAP) val publicKeyB64 = Base64.encodeToString(kp.public.encoded, Base64.NO_WRAP)
adbClientData.rsaPrivateKey.set(privateKeyB64) adbClientData.saveBundle(
adbClientData.rsaPublicKeyX509.set(publicKeyB64) AdbClientData.Bundle(
rsaPrivateKey = privateKeyB64,
rsaPublicKeyX509 = publicKeyB64,
)
)
Log.i( Log.i(
TAG, TAG,
"loadOrCreate(): generated new RSA key pair and saved to DataStore, fp=${fingerprint(kp.public.encoded)}" "loadOrCreate(): generated new RSA key pair, fp=${fingerprint(kp.public.encoded)}"
) )
return Pair(kp.private, kp.public.encoded) return Pair(kp.private, kp.public.encoded)
} }