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() 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]) } }