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