summaryrefslogtreecommitdiff
path: root/core/src/jvmShared/kotlin/coffee/liz/rookery/bt/JvmAes128.kt
blob: b96748c146178b839910670794dea6a7eeaea4ef (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)
}