Show proper error message if generating KDF hash fails with OOM
This commit is contained in:
parent
2d090b4a86
commit
51dd09a94c
@ -0,0 +1,12 @@
|
|||||||
|
package com.artemchep.keyguard.common.exception
|
||||||
|
|
||||||
|
import com.artemchep.keyguard.res.Res
|
||||||
|
import dev.icerock.moko.resources.StringResource
|
||||||
|
|
||||||
|
open class OutOfMemoryKdfException(
|
||||||
|
m: String?,
|
||||||
|
e: Throwable?,
|
||||||
|
) : Exception(m, e), Readable {
|
||||||
|
override val title: StringResource
|
||||||
|
get() = Res.strings.error_failed_generate_kdf_hash_oom
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package com.artemchep.keyguard.provider.bitwarden.api
|
package com.artemchep.keyguard.provider.bitwarden.api
|
||||||
|
|
||||||
|
import com.artemchep.keyguard.common.exception.OutOfMemoryKdfException
|
||||||
import com.artemchep.keyguard.common.io.bind
|
import com.artemchep.keyguard.common.io.bind
|
||||||
import com.artemchep.keyguard.common.model.Argon2Mode
|
import com.artemchep.keyguard.common.model.Argon2Mode
|
||||||
import com.artemchep.keyguard.common.service.crypto.CryptoGenerator
|
import com.artemchep.keyguard.common.service.crypto.CryptoGenerator
|
||||||
@ -234,11 +235,23 @@ private fun generateSecrets(
|
|||||||
.lowercase(Locale.ENGLISH)
|
.lowercase(Locale.ENGLISH)
|
||||||
.toByteArray()
|
.toByteArray()
|
||||||
|
|
||||||
val masterKey = cryptoGenerator.masterKeyHash(
|
val masterKey = runCatching {
|
||||||
seed = passwordBytes,
|
cryptoGenerator.masterKeyHash(
|
||||||
salt = emailBytes,
|
seed = passwordBytes,
|
||||||
config = hashConfig,
|
salt = emailBytes,
|
||||||
)
|
config = hashConfig,
|
||||||
|
)
|
||||||
|
}.getOrElse { e ->
|
||||||
|
if (e is OutOfMemoryError) {
|
||||||
|
val newError = OutOfMemoryKdfException(
|
||||||
|
m = e.localizedMessage ?: e.message,
|
||||||
|
e = e,
|
||||||
|
)
|
||||||
|
throw newError
|
||||||
|
}
|
||||||
|
|
||||||
|
throw e
|
||||||
|
}
|
||||||
val passwordKey = cryptoGenerator.pbkdf2(
|
val passwordKey = cryptoGenerator.pbkdf2(
|
||||||
seed = masterKey,
|
seed = masterKey,
|
||||||
salt = passwordBytes,
|
salt = passwordBytes,
|
||||||
|
@ -399,6 +399,7 @@
|
|||||||
<string name="error_invalid_uri">Invalid URI</string>
|
<string name="error_invalid_uri">Invalid URI</string>
|
||||||
<string name="error_invalid_card_number">Invalid card number</string>
|
<string name="error_invalid_card_number">Invalid card number</string>
|
||||||
<string name="error_incorrect_password">Incorrect password</string>
|
<string name="error_incorrect_password">Incorrect password</string>
|
||||||
|
<string name="error_failed_generate_kdf_hash_oom">Failed to create a key, out of memory. Please check your KDF server settings.</string>
|
||||||
<string name="error_failed_generate_otp_code">Failed to generate OTP code</string>
|
<string name="error_failed_generate_otp_code">Failed to generate OTP code</string>
|
||||||
<string name="error_failed_create_passkey">Failed to create a passkey</string>
|
<string name="error_failed_create_passkey">Failed to create a passkey</string>
|
||||||
<string name="error_failed_use_passkey">Failed to authorize a request</string>
|
<string name="error_failed_use_passkey">Failed to authorize a request</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user