EncryptedShell.kt
package de.pflugradts.passbird.domain.model.shell
import de.pflugradts.passbird.domain.model.shell.Shell.Companion.shellOf
class EncryptedShell(val payload: Shell, val iv: Shell) {
val size get() = iv.size + payload.size
fun copy() = EncryptedShell(payload.copy(), iv.copy())
fun scramble() = apply {
payload.scramble()
iv.scramble()
}
fun toByteArray() = iv.toByteArray() + payload.toByteArray()
override fun equals(other: Any?) = (other as? EncryptedShell)?.let {
it.payload == payload && it.iv == iv
} ?: false
override fun hashCode() = payload.hashCode() + 31 * iv.hashCode()
companion object {
fun encryptedShellOf(byteArray: ByteArray) = EncryptedShell(
iv = shellOf(byteArray.copyOfRange(0, 12)),
payload = shellOf(byteArray.copyOfRange(12, byteArray.size)),
)
}
}