Skip to content
Snippets Groups Projects
Commit 8f4a0c5c authored by Taras's avatar Taras
Browse files

Cleanup

parent 1722e619
No related branches found
No related tags found
No related merge requests found
......@@ -206,7 +206,7 @@ publishing {
create<MavenPublication>("release") {
groupId = "org.futo.gitlab.circles"
artifactId = "matrix-android-sdk"
version = "0.1.94"
version = "0.1.97"
afterEvaluate {
from(components["release"])
......
......@@ -6,9 +6,6 @@ import android.security.keystore.KeyProperties
import android.util.Base64
import androidx.core.content.edit
import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.session.securestorage.RawBytesKeySpec
import org.matrix.android.sdk.internal.crypto.dehydrated.DehydratedDevicesManager
import timber.log.Timber
import java.security.KeyStore
import javax.crypto.Cipher
import javax.crypto.KeyGenerator
......@@ -27,33 +24,24 @@ class CirclesKeystoreProvider @Inject constructor(
fun storeBsSpekePrivateKey(keyBytes: ByteArray, keyId: String) {
tryOrNull {
val alias = "$ORG_FUTO_SSSS_KEY_PREFIX.$keyId"
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("store alias $alias, key - ${RawBytesKeySpec(keyBytes)}")
val masterKey = getOrGenerateMasterKeyIfNotExist(alias)
?: throw IllegalArgumentException("Failed to get master key")
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("master $masterKey")
val encrypted = encryptData(keyBytes, masterKey)
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("encrypted $encrypted")
storeBSspekeEncryptedPrivateKeyBase64(alias, encrypted)
}
}
fun getBsSpekePrivateKey(keyId: String): ByteArray? = tryOrNull {
val alias = "$ORG_FUTO_SSSS_KEY_PREFIX.$keyId"
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("get alias $alias")
val masterKey = getOrGenerateMasterKeyIfNotExist(alias)
?: throw IllegalArgumentException("Failed to get master key")
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("master $masterKey")
val encrypted = getBSspekeEncryptedPrivateKeyBase64(alias)
?: throw IllegalArgumentException("Not saved in preferences $alias")
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("encrypted $encrypted")
val a = decryptData(encrypted, masterKey)
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("decrypted $alias, key - ${RawBytesKeySpec(a)}")
a
decryptData(encrypted, masterKey)
}
private fun getOrGenerateMasterKeyIfNotExist(alias: String): SecretKey? {
if (!keyStore.containsAlias(alias)) {
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("not contain")
KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, ANDROID_KEYS_TORE).apply {
init(
KeyGenParameterSpec.Builder(
......@@ -71,20 +59,15 @@ class CirclesKeystoreProvider @Inject constructor(
}
private fun encryptData(data: ByteArray, masterKey: SecretKey): String {
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("encrypt ${RawBytesKeySpec(data)}, master $masterKey")
val cipher = Cipher.getInstance(AES_NO_PADDING)
cipher.init(Cipher.ENCRYPT_MODE, masterKey)
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("cipher iv ${cipher.iv}")
val ivString = Base64.encodeToString(cipher.iv, Base64.DEFAULT)
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("cipher iv 64 $ivString")
val encryptedBytes: ByteArray = cipher.doFinal(data)
return ivString + IV_SEPARATOR + Base64.encodeToString(encryptedBytes, Base64.DEFAULT)
}
private fun decryptData(encryptedData: String, masterKey: SecretKey): ByteArray {
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("decrypt $encryptedData, master $masterKey")
val (iv64, encrypted64) = encryptedData.split(IV_SEPARATOR)
Timber.tag(DehydratedDevicesManager.LOG_TAG).d("decrypt iv64 $iv64, encr64 $encrypted64")
val cipher = Cipher.getInstance(AES_NO_PADDING)
val spec = GCMParameterSpec(KEY_SIZE, Base64.decode(iv64, Base64.DEFAULT))
cipher.init(Cipher.DECRYPT_MODE, masterKey, spec)
......
......@@ -43,16 +43,13 @@ internal class DehydratedDevicesManager @Inject constructor(
isDehydrationRunning = true
Timber.tag(LOG_TAG).d("start")
val (defaultKeyId, bsSpekeKey) = getDefaultSSKey()
Timber.tag(LOG_TAG).d("defaultKeyId - $defaultKeyId bsSpekeKey - ${RawBytesKeySpec(bsSpekeKey)}")
val ssPickleKey = getPickleKey(defaultKeyId, bsSpekeKey)
Timber.tag(LOG_TAG).d("ssPickleKey - ${RawBytesKeySpec(ssPickleKey)}")
val existingDehydratedDevice = getDehydratedDevice()
Timber.tag(LOG_TAG).d("existing device $existingDehydratedDevice")
existingDehydratedDevice?.deviceId?.let { deviceId ->
rehydrateDevice(ssPickleKey, deviceId, existingDehydratedDevice.deviceData)
}
val newPickleKey = generateAndStoreDehydratedDeviceKey(defaultKeyId, bsSpekeKey)
Timber.tag(LOG_TAG).d("newPickleKey - ${RawBytesKeySpec(newPickleKey)}")
createDehydratedDevice(newPickleKey)
saveLastDehydrationTime()
Timber.tag(LOG_TAG).d("dehydration time ${System.currentTimeMillis()}")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment