From 72896ce723f559fcc1774669b4643ffa6d42b110 Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Fri, 17 May 2024 15:58:23 +0300 Subject: [PATCH] Create key store provider --- .../circles/core/provider/KeyStoreProvider.kt | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 core/src/main/java/org/futo/circles/core/provider/KeyStoreProvider.kt diff --git a/core/src/main/java/org/futo/circles/core/provider/KeyStoreProvider.kt b/core/src/main/java/org/futo/circles/core/provider/KeyStoreProvider.kt new file mode 100644 index 000000000..9582fa141 --- /dev/null +++ b/core/src/main/java/org/futo/circles/core/provider/KeyStoreProvider.kt @@ -0,0 +1,37 @@ +package org.futo.circles.core.provider + +import org.matrix.android.sdk.api.extensions.tryOrNull +import java.security.KeyStore +import javax.crypto.SecretKey +import javax.crypto.spec.SecretKeySpec +import javax.inject.Inject + +class KeyStoreProvider @Inject constructor() { + + private val keyStore = KeyStore.getInstance("AndroidKeyStore") + + fun storeBsSpekePrivateKey(keyBytes: ByteArray, keyId: String) { + storeKey(keyBytes, "$ORG_FUTO_SSSS_KEY_PREFIX.$keyId") + } + + fun getBsSpekePrivateKey(keyId: String): ByteArray? = getKey("$ORG_FUTO_SSSS_KEY_PREFIX.$keyId") + + private fun storeKey(keyBytes: ByteArray, alias: String) = tryOrNull { + val secretKey: SecretKey = SecretKeySpec(keyBytes, "AES") + keyStore.load(null) + val protectionParameter = KeyStore.PasswordProtection(null) + val secretKeyEntry = KeyStore.SecretKeyEntry(secretKey) + keyStore.setEntry(alias, secretKeyEntry, protectionParameter) + } + + + private fun getKey(alias: String): ByteArray? = tryOrNull { + keyStore.load(null) + val secretKey = keyStore.getKey(alias, null) as SecretKey + secretKey.encoded + } + + companion object { + private const val ORG_FUTO_SSSS_KEY_PREFIX = "org.futo.ssss.key" + } +} -- GitLab