Skip to content

Commit 9a25abb

Browse files
committed
perf(crypto): Remove process-wide ChaCha20 lock & use separate DEK providers
1 parent f7eda2b commit 9a25abb

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

safebox-crypto/src/main/java/com/harrytmthy/safebox/cryptography/ChaCha20CipherProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ internal class ChaCha20CipherProvider(
4141
private val deterministic: Boolean,
4242
) : CipherProvider {
4343

44+
private val cipherLock = Any()
45+
4446
private val cipher by lazy {
4547
try {
4648
Cipher.getInstance(TRANSFORMATION, BouncyCastleProvider.PROVIDER_NAME)
@@ -84,6 +86,5 @@ internal class ChaCha20CipherProvider(
8486
internal const val TRANSFORMATION = "ChaCha20-Poly1305"
8587
private const val IV_SIZE = 12
8688
private const val MAC_SIZE_BITS = 128
87-
private val cipherLock = Any()
8889
}
8990
}

safebox-crypto/src/main/java/com/harrytmthy/safebox/factory/SafeBoxCryptoFactory.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,22 @@ object SafeBoxCryptoFactory {
5050
fileName: String,
5151
): Pair<CipherProvider, CipherProvider> {
5252
val aesGcmCipherProvider = AesGcmCipherProvider.create(aad = fileName.toByteArray())
53-
val keyProvider = SecureRandomKeyProvider.create(
53+
val keyCipherKeyProvider = SecureRandomKeyProvider.create(
5454
context = context,
5555
fileName = fileName,
5656
keySize = ChaCha20CipherProvider.KEY_SIZE,
5757
algorithm = ChaCha20CipherProvider.ALGORITHM,
5858
cipherProvider = aesGcmCipherProvider,
5959
)
60-
val keyCipherProvider = ChaCha20CipherProvider(keyProvider, deterministic = true)
61-
val valueCipherProvider = ChaCha20CipherProvider(keyProvider, deterministic = false)
62-
return keyCipherProvider to valueCipherProvider
60+
val valueCipherKeyProvider = SecureRandomKeyProvider.create(
61+
context = context,
62+
fileName = fileName,
63+
keySize = ChaCha20CipherProvider.KEY_SIZE,
64+
algorithm = ChaCha20CipherProvider.ALGORITHM,
65+
cipherProvider = aesGcmCipherProvider,
66+
)
67+
val keyCipher = ChaCha20CipherProvider(keyCipherKeyProvider, deterministic = true)
68+
val valueCipher = ChaCha20CipherProvider(valueCipherKeyProvider, deterministic = false)
69+
return keyCipher to valueCipher
6370
}
6471
}

0 commit comments

Comments
 (0)