From 875c0f7a501ab0337e415af76cd4c47833fbbf06 Mon Sep 17 00:00:00 2001 From: sergeych Date: Wed, 12 Mar 2025 23:39:26 +0300 Subject: [PATCH] fix #10 KDF.Complexity derivation functions now require salt --- src/commonMain/kotlin/net/sergeych/crypto2/kdf.kt | 9 +++++---- src/commonTest/kotlin/KeysTest.kt | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/commonMain/kotlin/net/sergeych/crypto2/kdf.kt b/src/commonMain/kotlin/net/sergeych/crypto2/kdf.kt index a99ea9c..6af9322 100644 --- a/src/commonMain/kotlin/net/sergeych/crypto2/kdf.kt +++ b/src/commonMain/kotlin/net/sergeych/crypto2/kdf.kt @@ -44,7 +44,8 @@ sealed class KDF { * * Random salt of proper size is used */ - fun kdfForSize(numberOfKeys: Int): KDF = creteDefault(SymmetricKey.keyLength * numberOfKeys, this) + fun kdfForSize(numberOfKeys: Int,salt: UByteArray = Argon.randomSalt()): KDF = + creteDefault(SymmetricKey.keyLength * numberOfKeys, this, salt) /** * Derive multiple keys from the password. Derivation params will be included in the key ids, see @@ -58,13 +59,13 @@ sealed class KDF { * to change with time. */ @Suppress("unused") - fun deriveMultiple(password: String, count: Int): List = - kdfForSize(count).deriveMultipleKeys(password, count) + fun deriveMultiple(password: String, count: Int,salt: UByteArray): List = + kdfForSize(count, salt).deriveMultipleKeys(password, count) /** * Derive single key from password, same as [deriveMultiple] with count=1. */ - fun derive(password: String): SymmetricKey = deriveMultiple(password, 1).first() + fun derive(password: String, salt: UByteArray): SymmetricKey = deriveMultiple(password, 1, salt).first() } /** diff --git a/src/commonTest/kotlin/KeysTest.kt b/src/commonTest/kotlin/KeysTest.kt index 2a30b11..6c43217 100644 --- a/src/commonTest/kotlin/KeysTest.kt +++ b/src/commonTest/kotlin/KeysTest.kt @@ -442,7 +442,7 @@ class KeysTest { assertContentEquals(k2.keyBytes, k2.id.id.body) val k7 = SymmetricKey.new() - val k8 = KDF.Complexity.Interactive.derive("super") + val k8 = KDF.Complexity.Interactive.derive("super", KDF.Argon.randomSalt()) fun testToString(k: UniversalKey) { val s = k.toString()