diff --git a/src/commonMain/kotlin/net/sergeych/crypto2/Hash.kt b/src/commonMain/kotlin/net/sergeych/crypto2/Hash.kt index e1524b5..705a4b1 100644 --- a/src/commonMain/kotlin/net/sergeych/crypto2/Hash.kt +++ b/src/commonMain/kotlin/net/sergeych/crypto2/Hash.kt @@ -1,6 +1,7 @@ package net.sergeych.crypto2 import com.ionspin.kotlin.crypto.generichash.GenericHash +import com.ionspin.kotlin.crypto.util.encodeToUByteArray import org.komputing.khash.keccak.Keccak import org.komputing.khash.keccak.KeccakParameter @@ -12,6 +13,10 @@ enum class Hash(val perform: (UByteArray)->UByteArray) { Sha3_256({ Keccak.digest(it.toByteArray(), KeccakParameter.SHA3_256).toUByteArray()}), } +private val defaultSuffix1 = "All lay loads on a willing horse".encodeToUByteArray() +private val defaultSuffix2 = "A stitch in time saves nine".encodeToUByteArray() + fun blake2b(src: UByteArray): UByteArray = Hash.Blake2b.perform(src) -fun blake2b2l(src: UByteArray): UByteArray = blake2b(blake2b(src) + src) -fun blake2b3l(src: UByteArray): UByteArray = blake2b(blake2b2l(src) + src) +fun blake2b2l(src: UByteArray): UByteArray = + blake2b(blake2b(src) + defaultSuffix1 + src) +fun blake2b3l(src: UByteArray): UByteArray = blake2b(blake2b2l(src) + defaultSuffix2 + src) diff --git a/src/commonMain/kotlin/net/sergeych/crypto2/KeyId.kt b/src/commonMain/kotlin/net/sergeych/crypto2/KeyId.kt index be318eb..0f23026 100644 --- a/src/commonMain/kotlin/net/sergeych/crypto2/KeyId.kt +++ b/src/commonMain/kotlin/net/sergeych/crypto2/KeyId.kt @@ -23,6 +23,6 @@ data class KeyId(val id: BinaryId, val kdp: KeyDerivationParams?=null ) { override fun toString() = id.toString() - constructor(magickNumber: KeysMagickNumber, data: UByteArray, kdp: KeyDerivationParams?=null) - : this(BinaryId.createFromUBytes(magickNumber.number, data), kdp) + constructor(magickNumber: KeysMagickNumber, keyData: UByteArray, kdp: KeyDerivationParams?=null) + : this(BinaryId.createFromUBytes(magickNumber.number, blake2b3l(keyData)), kdp) } \ No newline at end of file diff --git a/src/commonMain/kotlin/net/sergeych/crypto2/SigningSecretKey.kt b/src/commonMain/kotlin/net/sergeych/crypto2/SigningSecretKey.kt index b74b72d..558edb3 100644 --- a/src/commonMain/kotlin/net/sergeych/crypto2/SigningSecretKey.kt +++ b/src/commonMain/kotlin/net/sergeych/crypto2/SigningSecretKey.kt @@ -28,6 +28,8 @@ class SigningSecretKey( override fun toString(): String = "Sct:${super.toString()}" + override val id: KeyId = verifyingKey.id + @Transient override val magick = KeysMagickNumber.defaultSigning diff --git a/src/commonMain/kotlin/net/sergeych/crypto2/UniversalKey.kt b/src/commonMain/kotlin/net/sergeych/crypto2/UniversalKey.kt index 9cca181..1c610da 100644 --- a/src/commonMain/kotlin/net/sergeych/crypto2/UniversalKey.kt +++ b/src/commonMain/kotlin/net/sergeych/crypto2/UniversalKey.kt @@ -28,6 +28,8 @@ sealed class UniversalKey { override val id: KeyId = key.id @Transient override val nonceBytesLength: Int = key.nonceBytesLength + + override fun toString() = "U.Ssn:$id" } @Serializable @@ -56,7 +58,7 @@ sealed class UniversalKey { override val nonceBytesLength: Int get() = Asymmetric.nonceBytesLength - override fun toString() = "U.Sec:$id" + override fun toString() = "U.Pub:$id" } @Serializable @@ -76,7 +78,7 @@ sealed class UniversalKey { @SerialName("ver") data class Verifying(val key: SigningPublicKey) : UniversalKey(), VerifyingKey by key { override val id: KeyId by lazy { key.id } - override fun toString() = "U.Sig:$id" + override fun toString() = "U.Ver:$id" } diff --git a/src/commonTest/kotlin/RingTest.kt b/src/commonTest/kotlin/RingTest.kt index f5b19d4..8044d25 100644 --- a/src/commonTest/kotlin/RingTest.kt +++ b/src/commonTest/kotlin/RingTest.kt @@ -97,19 +97,19 @@ class RingTest { val data = "Mendeleev' table".encodeToUByteArray() - val r = UniversalRing(sk2, sk3, sk1.publicKey, sk3.publicKey, sik3.publicKey, sik1) + var r = UniversalRing(sk2, sk3, sk1.publicKey, sk3.publicKey, sik3.publicKey, sik1.publicKey) - r.addTags(sik1, "SECRET_SIGN") + r = r.addTags(sik1, "SECRET_SIGN") val box = deepCopy(Container.create(data) { key(sk3.publicKey) }) assertContentEquals(data, box.decryptWith(r)) assertEquals(sk3.publicKey, r.findKey(sk3.id)) assertTrue { sik3.publicKey in r } - assertEquals(sik1, r.findKey(sik1.publicKey.id)) - - assertEquals(sik1, r.keyByTag("SECRET_SIGN")) + assertTrue { sik1 in r } + assertEquals(sik1, r.keyByTag("SECRET_SIGN")) + assertEquals(sik1, r.findKey(sik1.publicKey.id)) } @Test