import kotlinx.coroutines.test.runTest import net.sergeych.crypto2.* import net.sergeych.kiloparsec.encodeToUByteArray import net.sergeych.utools.pack import net.sergeych.utools.unpack import kotlin.test.* class KeysTest { @Test fun testCreationAndMap() = runTest { initCrypto() val (stk,pbk) = SigningKey.pair() val x = mapOf( stk to "STK!", pbk to "PBK!") assertEquals("STK!", x[stk]) val s1 = SigningKey.Secret(stk.packed) assertEquals(stk, s1) assertEquals("STK!", x[s1]) assertEquals("PBK!", x[pbk]) val data = "8 rays dev!".encodeToUByteArray() val data1 = "8 rays dev!".encodeToUByteArray() val s = stk.seal(data) assertTrue(s.isValid(data)) data1[0] = 0x01u assertFalse(s.isValid(data1)) val p2 = SigningKey.pair() val p3 = SigningKey.pair() val ms = SealedBox(data, s1) + p2.secretKey // non tampered: val ms1 = unpack(pack(ms)) assertContentEquals(data, ms1.message) assertTrue(pbk in ms1) assertTrue(p2.publicKey in ms1) assertTrue(p3.publicKey !in ms1) assertThrows { unpack(pack(ms).also { it[3] = 1u }) } } }