security: swap alpha crypto 1.1.0-alpha06 for stable 1.0.0, update MasterKey→MasterKeys API
This commit is contained in:
parent
95ea9ffed5
commit
e82207c9d0
|
|
@ -95,7 +95,7 @@ dependencies {
|
||||||
implementation("androidx.datastore:datastore-preferences:1.1.2")
|
implementation("androidx.datastore:datastore-preferences:1.1.2")
|
||||||
|
|
||||||
// Encrypted storage
|
// Encrypted storage
|
||||||
implementation("androidx.security:security-crypto:1.1.0-alpha06")
|
implementation("androidx.security:security-crypto:1.0.0")
|
||||||
|
|
||||||
// RevenueCat
|
// RevenueCat
|
||||||
implementation("com.revenuecat.purchases:purchases-hybrid-common:13.5.0")
|
implementation("com.revenuecat.purchases:purchases-hybrid-common:13.5.0")
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package app.closer.data.repository
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
import androidx.security.crypto.EncryptedSharedPreferences
|
||||||
import androidx.security.crypto.MasterKey
|
import androidx.security.crypto.MasterKeys
|
||||||
import app.closer.domain.model.LocalAnswer
|
import app.closer.domain.model.LocalAnswer
|
||||||
import app.closer.domain.repository.LocalAnswerRepository
|
import app.closer.domain.repository.LocalAnswerRepository
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
|
|
@ -23,18 +23,18 @@ class SharedPreferencesLocalAnswerRepository @Inject constructor(
|
||||||
private val prefs: SharedPreferences = run {
|
private val prefs: SharedPreferences = run {
|
||||||
// Remove legacy plaintext file on first migration
|
// Remove legacy plaintext file on first migration
|
||||||
context.deleteSharedPreferences("local_answers")
|
context.deleteSharedPreferences("local_answers")
|
||||||
val masterKey = MasterKey.Builder(context)
|
|
||||||
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
|
|
||||||
.build()
|
|
||||||
try {
|
try {
|
||||||
|
// In 1.0.0, EncryptedSharedPreferences.create takes (alias, name, context, ...)
|
||||||
|
val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
|
||||||
EncryptedSharedPreferences.create(
|
EncryptedSharedPreferences.create(
|
||||||
context,
|
masterKeyAlias, // alias (first param)
|
||||||
"local_answers_secure",
|
"local_answers_secure", // name (second param)
|
||||||
masterKey,
|
context, // context (third param)
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
||||||
)
|
)
|
||||||
} catch (_: Exception) {
|
} catch (_: Exception) {
|
||||||
|
// Fallback to unencrypted SharedPreferences if encryption fails
|
||||||
context.getSharedPreferences("local_answers_secure", Context.MODE_PRIVATE)
|
context.getSharedPreferences("local_answers_secure", Context.MODE_PRIVATE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue