forked from sergeych/crypto2
added more tests, foxed several bugs ;)
This commit is contained in:
parent
ede55650f4
commit
c4accfcd91
@ -1,6 +1,7 @@
|
|||||||
package net.sergeych.crypto2
|
package net.sergeych.crypto2
|
||||||
|
|
||||||
import com.ionspin.kotlin.crypto.generichash.GenericHash
|
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.Keccak
|
||||||
import org.komputing.khash.keccak.KeccakParameter
|
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()}),
|
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 blake2b(src: UByteArray): UByteArray = Hash.Blake2b.perform(src)
|
||||||
fun blake2b2l(src: UByteArray): UByteArray = blake2b(blake2b(src) + src)
|
fun blake2b2l(src: UByteArray): UByteArray =
|
||||||
fun blake2b3l(src: UByteArray): UByteArray = blake2b(blake2b2l(src) + src)
|
blake2b(blake2b(src) + defaultSuffix1 + src)
|
||||||
|
fun blake2b3l(src: UByteArray): UByteArray = blake2b(blake2b2l(src) + defaultSuffix2 + src)
|
||||||
|
@ -23,6 +23,6 @@ data class KeyId(val id: BinaryId, val kdp: KeyDerivationParams?=null ) {
|
|||||||
|
|
||||||
override fun toString() = id.toString()
|
override fun toString() = id.toString()
|
||||||
|
|
||||||
constructor(magickNumber: KeysMagickNumber, data: UByteArray, kdp: KeyDerivationParams?=null)
|
constructor(magickNumber: KeysMagickNumber, keyData: UByteArray, kdp: KeyDerivationParams?=null)
|
||||||
: this(BinaryId.createFromUBytes(magickNumber.number, data), kdp)
|
: this(BinaryId.createFromUBytes(magickNumber.number, blake2b3l(keyData)), kdp)
|
||||||
}
|
}
|
@ -28,6 +28,8 @@ class SigningSecretKey(
|
|||||||
|
|
||||||
override fun toString(): String = "Sct:${super.toString()}"
|
override fun toString(): String = "Sct:${super.toString()}"
|
||||||
|
|
||||||
|
override val id: KeyId = verifyingKey.id
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
override val magick = KeysMagickNumber.defaultSigning
|
override val magick = KeysMagickNumber.defaultSigning
|
||||||
|
|
||||||
|
@ -28,6 +28,8 @@ sealed class UniversalKey {
|
|||||||
override val id: KeyId = key.id
|
override val id: KeyId = key.id
|
||||||
@Transient
|
@Transient
|
||||||
override val nonceBytesLength: Int = key.nonceBytesLength
|
override val nonceBytesLength: Int = key.nonceBytesLength
|
||||||
|
|
||||||
|
override fun toString() = "U.Ssn:$id"
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@ -56,7 +58,7 @@ sealed class UniversalKey {
|
|||||||
override val nonceBytesLength: Int
|
override val nonceBytesLength: Int
|
||||||
get() = Asymmetric.nonceBytesLength
|
get() = Asymmetric.nonceBytesLength
|
||||||
|
|
||||||
override fun toString() = "U.Sec:$id"
|
override fun toString() = "U.Pub:$id"
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@ -76,7 +78,7 @@ sealed class UniversalKey {
|
|||||||
@SerialName("ver")
|
@SerialName("ver")
|
||||||
data class Verifying(val key: SigningPublicKey) : UniversalKey(), VerifyingKey by key {
|
data class Verifying(val key: SigningPublicKey) : UniversalKey(), VerifyingKey by key {
|
||||||
override val id: KeyId by lazy { key.id }
|
override val id: KeyId by lazy { key.id }
|
||||||
override fun toString() = "U.Sig:$id"
|
override fun toString() = "U.Ver:$id"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,19 +97,19 @@ class RingTest {
|
|||||||
|
|
||||||
val data = "Mendeleev' table".encodeToUByteArray()
|
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) })
|
val box = deepCopy(Container.create(data) { key(sk3.publicKey) })
|
||||||
assertContentEquals(data, box.decryptWith(r))
|
assertContentEquals(data, box.decryptWith(r))
|
||||||
|
|
||||||
assertEquals(sk3.publicKey, r.findKey<EncryptingKey>(sk3.id))
|
assertEquals(sk3.publicKey, r.findKey<EncryptingKey>(sk3.id))
|
||||||
assertTrue { sik3.publicKey in r }
|
assertTrue { sik3.publicKey in r }
|
||||||
assertEquals(sik1, r.findKey<EncryptingKey>(sik1.publicKey.id))
|
assertTrue { sik1 in r }
|
||||||
|
assertEquals(sik1, r.keyByTag<UniversalKey>("SECRET_SIGN"))
|
||||||
assertEquals(sik1, r.keyByTag<SigningKey>("SECRET_SIGN"))
|
|
||||||
|
|
||||||
|
assertEquals(sik1, r.findKey<SigningKey>(sik1.publicKey.id))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Loading…
x
Reference in New Issue
Block a user