mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Better kdf engine implementation
This commit is contained in:
@@ -340,13 +340,10 @@ class Database {
|
||||
var kdfEngine: KdfEngine?
|
||||
get() = mDatabaseKDB?.kdfEngine ?: mDatabaseKDBX?.kdfEngine
|
||||
set(kdfEngine) {
|
||||
kdfEngine?.let {
|
||||
if (mDatabaseKDBX?.kdfParameters?.uuid != kdfEngine.defaultParameters.uuid)
|
||||
mDatabaseKDBX?.kdfParameters = kdfEngine.defaultParameters
|
||||
numberKeyEncryptionRounds = kdfEngine.defaultKeyRounds
|
||||
memoryUsage = kdfEngine.defaultMemoryUsage
|
||||
parallelism = kdfEngine.defaultParallelism
|
||||
}
|
||||
mDatabaseKDB?.kdfEngine = kdfEngine
|
||||
mDatabaseKDBX?.kdfEngine = kdfEngine
|
||||
mDatabaseKDBX?.settingsChanged = DateInstant()
|
||||
dataModifiedSinceLastLoading = true
|
||||
}
|
||||
|
||||
fun getKeyDerivationName(): String {
|
||||
|
||||
@@ -44,8 +44,13 @@ class DatabaseKDB : DatabaseVersioned<Int, UUID, GroupKDB, EntryKDB>() {
|
||||
EncryptionAlgorithm.Twofish
|
||||
)
|
||||
|
||||
override val kdfEngine: KdfEngine
|
||||
override var kdfEngine: KdfEngine?
|
||||
get() = kdfAvailableList[0]
|
||||
set(value) {
|
||||
value?.let {
|
||||
numberKeyEncryptionRounds = value.defaultKeyRounds
|
||||
}
|
||||
}
|
||||
|
||||
override val kdfAvailableList: List<KdfEngine> = listOf(
|
||||
KdfFactory.aesKdf
|
||||
|
||||
@@ -73,6 +73,9 @@ import kotlin.math.min
|
||||
|
||||
class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
|
||||
|
||||
var hmacKey: ByteArray? = null
|
||||
private set
|
||||
|
||||
override var encryptionAlgorithm: EncryptionAlgorithm = EncryptionAlgorithm.AESRijndael
|
||||
|
||||
fun setEncryptionAlgorithmFromUUID(uuid: UUID) {
|
||||
@@ -85,13 +88,24 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
|
||||
EncryptionAlgorithm.ChaCha20
|
||||
)
|
||||
|
||||
override val kdfEngine: KdfEngine?
|
||||
var kdfParameters: KdfParameters? = null
|
||||
|
||||
override var kdfEngine: KdfEngine?
|
||||
get() = try {
|
||||
getEngineKDBX4(kdfParameters)
|
||||
} catch (unknownKDF: UnknownKDF) {
|
||||
Log.i(TAG, "Unable to retrieve KDF engine", unknownKDF)
|
||||
null
|
||||
}
|
||||
set(value) {
|
||||
value?.let {
|
||||
if (kdfParameters?.uuid != value.defaultParameters.uuid)
|
||||
kdfParameters = value.defaultParameters
|
||||
numberKeyEncryptionRounds = value.defaultKeyRounds
|
||||
memoryUsage = value.defaultMemoryUsage
|
||||
parallelism = value.defaultParallelism
|
||||
}
|
||||
}
|
||||
|
||||
@Throws(UnknownKDF::class)
|
||||
fun getEngineKDBX4(kdfParameters: KdfParameters?): KdfEngine {
|
||||
@@ -113,11 +127,8 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
|
||||
KdfFactory.argon2idKdf
|
||||
)
|
||||
|
||||
var hmacKey: ByteArray? = null
|
||||
private set
|
||||
var compressionAlgorithm = CompressionAlgorithm.GZip
|
||||
var kdfParameters: KdfParameters? = null
|
||||
private var numKeyEncRounds: Long = 0
|
||||
|
||||
private val mFieldReferenceEngine = FieldReferencesEngine(this)
|
||||
private val mTemplateEngine = TemplateEngineCompatible(this)
|
||||
|
||||
@@ -311,6 +322,7 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
|
||||
override var numberKeyEncryptionRounds: Long
|
||||
get() {
|
||||
val kdfEngine = kdfEngine
|
||||
var numKeyEncRounds: Long = 0
|
||||
if (kdfEngine != null && kdfParameters != null)
|
||||
numKeyEncRounds = kdfEngine.getKeyRounds(kdfParameters!!)
|
||||
return numKeyEncRounds
|
||||
@@ -319,7 +331,6 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
|
||||
val kdfEngine = kdfEngine
|
||||
if (kdfEngine != null && kdfParameters != null)
|
||||
kdfEngine.setKeyRounds(kdfParameters!!, rounds)
|
||||
numKeyEncRounds = rounds
|
||||
}
|
||||
|
||||
var memoryUsage: Long
|
||||
|
||||
@@ -51,7 +51,7 @@ abstract class DatabaseVersioned<
|
||||
abstract var encryptionAlgorithm: EncryptionAlgorithm
|
||||
abstract val availableEncryptionAlgorithms: List<EncryptionAlgorithm>
|
||||
|
||||
abstract val kdfEngine: KdfEngine?
|
||||
abstract var kdfEngine: KdfEngine?
|
||||
abstract val kdfAvailableList: List<KdfEngine>
|
||||
abstract var numberKeyEncryptionRounds: Long
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@ class DatabaseKDBXMerger(private var database: DatabaseKDBX) {
|
||||
database.historyMaxItems = databaseToMerge.historyMaxItems
|
||||
database.historyMaxSize = databaseToMerge.historyMaxSize
|
||||
database.encryptionAlgorithm = databaseToMerge.encryptionAlgorithm
|
||||
database.kdfParameters = databaseToMerge.kdfParameters
|
||||
database.kdfEngine = databaseToMerge.kdfEngine
|
||||
database.numberKeyEncryptionRounds = databaseToMerge.numberKeyEncryptionRounds
|
||||
database.memoryUsage = databaseToMerge.memoryUsage
|
||||
database.parallelism = databaseToMerge.parallelism
|
||||
|
||||
Reference in New Issue
Block a user