KeystoreHelper
Helper Android Keystore centralisé (AES-256-GCM).
Aucune permission manifest requise — le Keystore est un service système. Les clés ne quittent jamais le matériel sécurisé (TEE / StrongBox).
Enregistrement Koin :
single { KeystoreHelper() }Content copied to clipboard
Clés sans biométrie
val config = KeystoreConfig.default("user_token")
val encrypted = keystoreHelper.encrypt(config, "mon_token_secret")
val plain = keystoreHelper.decrypt(config, encrypted)Content copied to clipboard
Clés protégées par biométrie
Les clés KeystoreConfig.biometricProtected requièrent un Cipher déjà authentifié via BiometricPrompt.CryptoObject — un appel direct à encrypt/decrypt lèverait une android.security.keystore.UserNotAuthenticatedException.
Flux recommandé :
val config = KeystoreConfig.biometricProtected("secure_key")
val cipher = keystoreHelper.createEncryptCipher(config) // avant la prompt
// Passer cipher à BiometricPrompt :
biometricPrompt.authenticate(
BiometricPrompt.CryptoObject(cipher),
cancellationSignal,
executor,
object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
val authenticatedCipher = result.cryptoObject!!.cipher!!
val encrypted = keystoreHelper.encrypt(authenticatedCipher, "secret")
}
}
)
// Déchiffrement :
val decryptCipher = keystoreHelper.createDecryptCipher(config, encrypted.iv)
biometricPrompt.authenticate(BiometricPrompt.CryptoObject(decryptCipher), ...)
// Dans onAuthenticationSucceeded :
val plain = keystoreHelper.decrypt(result.cryptoObject!!.cipher!!, encrypted)Content copied to clipboard
Functions
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Supprime la clé identifiée par config.alias.
Link copied to clipboard
Link copied to clipboard
Génère ou retourne la clé existante pour config.
Link copied to clipboard
true si une clé existe pour cet alias.