Skip to content

Commit 5c915c1

Browse files
committed
Log out the keystore level also
1 parent 755b36c commit 5c915c1

8 files changed

Lines changed: 47 additions & 2 deletions

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package mobi.lab.hardwarekeybasedencryptedstoragetester.domain.entities
2+
3+
sealed class KeyStoreLevel {
4+
object None : KeyStoreLevel() {
5+
override fun toString(): String {
6+
return "None"
7+
}
8+
}
9+
10+
object TEE : KeyStoreLevel() {
11+
override fun toString(): String {
12+
return "TEE hardware"
13+
}
14+
}
15+
16+
object Strongbox : KeyStoreLevel() {
17+
override fun toString(): String {
18+
return "Strongbox Keymaster hardware"
19+
}
20+
}
21+
}

app-domain/src/main/java/mobi/lab/hardwarekeybasedencryptedstoragetester/domain/entities/StorageSpeedMeasurementResults.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import java.math.RoundingMode
66

77
@Suppress("LongParameterList")
88
class StorageSpeedMeasurementResults(
9+
val keyStoreLevelForEncrypted: KeyStoreLevel,
910
val dataSizeBytes: Int,
1011
val writeClearText: StorageSpeedMeasurement,
1112
val writeEncrypted: StorageSpeedMeasurement,
@@ -30,7 +31,8 @@ class StorageSpeedMeasurementResults(
3031
roundAndFormatToSec(deleteClearText.standardDeviationSec),
3132
roundAndFormatToSec(deleteEncrypted.averageSec),
3233
roundAndFormatToSec(deleteEncrypted.standardDeviationSec),
33-
dataSizeBytes.toString()
34+
dataSizeBytes.toString(),
35+
keyStoreLevelForEncrypted.toString()
3436
)
3537
}
3638

app-domain/src/main/java/mobi/lab/hardwarekeybasedencryptedstoragetester/domain/gateway/StorageGateway.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package mobi.lab.hardwarekeybasedencryptedstoragetester.domain.gateway
22

3+
import mobi.lab.hardwarekeybasedencryptedstoragetester.domain.entities.KeyStoreLevel
34
import mobi.lab.hardwarekeybasedencryptedstoragetester.domain.entities.StorageException
45
import java.lang.reflect.Type
56

@@ -15,4 +16,6 @@ interface StorageGateway {
1516
fun removeData(tag: String)
1617

1718
fun getTypeName(): String
19+
20+
fun getKeyStoreLevel(): KeyStoreLevel
1821
}

app-domain/src/main/java/mobi/lab/hardwarekeybasedencryptedstoragetester/domain/usecases/storage/StorageTestUseCase.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ class StorageTestUseCase @Inject constructor(
6363
}
6464

6565
return StorageSpeedMeasurementResults(
66+
keyStoreLevelForEncrypted = encryptedStorageGateway.getKeyStoreLevel(),
6667
writeClearText = writeClearText,
6768
writeEncrypted = writeEncrypted,
6869
readClearText = readClearText,

app-domain/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<resources>
33
<string name="text_measurement_log_line">
44
"
5+
KeyStoreLevel: %14$s
56
Write %13$s bytes (sec)
67
cleartxt %1$s avg %2$s stdev
78
encrypt %3$s avg %4$s stdev

app-infrastructure/src/main/java/mobi/lab/hardwarekeybasedencryptedstoragetester/infrastructure/storage/StorageClearTextImpl.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.text.TextUtils
77
import com.google.gson.Gson
88
import com.google.gson.GsonBuilder
99
import com.google.gson.JsonSyntaxException
10+
import mobi.lab.hardwarekeybasedencryptedstoragetester.domain.entities.KeyStoreLevel
1011
import mobi.lab.hardwarekeybasedencryptedstoragetester.domain.entities.StorageException
1112
import mobi.lab.hardwarekeybasedencryptedstoragetester.domain.gateway.ClearTextStorageGateway
1213
import java.lang.reflect.Type
@@ -81,6 +82,10 @@ class StorageClearTextImpl @Inject constructor(private val appContext: Context)
8182

8283
override fun getTypeName() = "Clear text storage"
8384

85+
override fun getKeyStoreLevel(): KeyStoreLevel {
86+
return KeyStoreLevel.None
87+
}
88+
8489
private fun getSharedPrefsFor(tag: String): SharedPreferences {
8590
return appContext.getSharedPreferences(getStoragePrefix(tag), Context.MODE_PRIVATE)
8691
}

app-infrastructure/src/main/java/mobi/lab/hardwarekeybasedencryptedstoragetester/infrastructure/storage/StorageEncryptedImpl.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.security.crypto.MasterKey
99
import com.google.gson.Gson
1010
import com.google.gson.GsonBuilder
1111
import com.google.gson.JsonSyntaxException
12+
import mobi.lab.hardwarekeybasedencryptedstoragetester.domain.entities.KeyStoreLevel
1213
import mobi.lab.hardwarekeybasedencryptedstoragetester.domain.entities.StorageException
1314
import mobi.lab.hardwarekeybasedencryptedstoragetester.domain.gateway.EncryptedStorageGateway
1415
import java.lang.reflect.Type
@@ -83,6 +84,17 @@ class StorageEncryptedImpl @Inject constructor(private val appContext: Context)
8384

8485
override fun getTypeName() = "Encrypted storage"
8586

87+
override fun getKeyStoreLevel(): KeyStoreLevel {
88+
val masterKey = createOrGetMasterKey()
89+
return if (masterKey.isStrongBoxBacked) {
90+
KeyStoreLevel.Strongbox
91+
} else if (masterKey.isKeyStoreBacked) {
92+
KeyStoreLevel.TEE
93+
} else {
94+
KeyStoreLevel.None
95+
}
96+
}
97+
8698
private fun getEncryptedSharedPreferencesFor(tag: String): SharedPreferences {
8799
val masterKey: MasterKey = createOrGetMasterKey()
88100

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ ext {
2424
*/
2525
versionMajor = 1
2626
versionMinor = 0
27-
versionPatch = 1
27+
versionPatch = 2
2828
versionBuild = 0 // Use this when builds with the same version are needed. Change to 0 once done
2929
initVersioning()
3030
}

0 commit comments

Comments
 (0)