package coffee.liz.rookery.bt import javax.crypto.Cipher import javax.crypto.spec.SecretKeySpec /** [Aes128] over javax.crypto (AES/ECB/NoPadding); works on desktop JVMs and Android. */ object JvmAes128 : Aes128 { private fun run(mode: Int, key: ByteArray, block: ByteArray): ByteArray { require(key.size == 16 && block.size == 16) { "AES-128 needs a 16-byte key and block" } val c = Cipher.getInstance("AES/ECB/NoPadding") c.init(mode, SecretKeySpec(key, "AES")) return c.doFinal(block) } override fun encryptBlock(key: ByteArray, block: ByteArray): ByteArray = run(Cipher.ENCRYPT_MODE, key, block) override fun decryptBlock(key: ByteArray, block: ByteArray): ByteArray = run(Cipher.DECRYPT_MODE, key, block) }