crypto2/src/commonTest/kotlin/ToolsTest.kt

58 lines
1.7 KiB
Kotlin

import kotlinx.coroutines.test.runTest
import net.sergeych.bintools.encodeToHex
import net.sergeych.crypto2.BinaryId
import net.sergeych.crypto2.Contrail
import net.sergeych.crypto2.NumericNonce
import net.sergeych.crypto2.initCrypto
import kotlin.test.*
class ToolsTest {
@Test
fun testContrails() = runTest {
initCrypto()
val data = ubyteArrayOf(1u, 2u, 3u, 4u, 5u)
val c = Contrail.create(data)
assertTrue { Contrail.isValid(c) }
c[2] = c[2] xor 11u
assertFalse { Contrail.isValid(c) }
c[2] = c[2] xor 11u
assertTrue { Contrail.isValid(c) }
assertContentEquals(data,Contrail.unpack(c))
}
@Test
fun numericNonceTest() = runTest{
initCrypto()
val nn = NumericNonce.random(32)
val counter = 1031
val x1 = nn.withInt(0)
val x2 = nn.withInt(counter)
// println(x1.toDump())
// println(x2.toDump())
val t = (x1[0] xor x2[0]).toInt() + ((x1[1] xor x2[1]).toInt() shl 8)
assertEquals(counter, t)
assertContentEquals(x1.drop(2), x2.drop(2))
}
@Test
fun testUBytesAsHashKeys() {
val k1 = BinaryId.createFromString(0,"Just the business")
val k2 = BinaryId.createFromString(0,"Just the business")
val l = mutableListOf<UByte>()
for( b in k1.id) l += b
val k3 = BinaryId.createFromUBytes(0, k1.id.dropLast(2).toUByteArray() )
assertEquals(k1, k2)
println(k1.id.encodeToHex())
println(k3.id.encodeToHex())
assertEquals(k1, k3)
val m = mutableMapOf(k1 to "foo")
m[k2] ="bar"
assertEquals("bar", m[k2])
assertEquals("bar", m[k1])
assertEquals("bar", m[k3])
}
}