diff --git a/multiplatform-crypto/src/commonMain/kotlin/com/ionspin/kotlin/crypto/symmetric/AesCtr.kt b/multiplatform-crypto/src/commonMain/kotlin/com/ionspin/kotlin/crypto/symmetric/AesCtr.kt index 30806c1..23e63df 100644 --- a/multiplatform-crypto/src/commonMain/kotlin/com/ionspin/kotlin/crypto/symmetric/AesCtr.kt +++ b/multiplatform-crypto/src/commonMain/kotlin/com/ionspin/kotlin/crypto/symmetric/AesCtr.kt @@ -133,7 +133,11 @@ class AesCtr internal constructor(val aesKey: AesKey, val mode: Mode, initialCou fun decrypt(): Array { val removePaddingCount = output.last().last() - val removedPadding = output.last().dropLast(removePaddingCount.toInt() and 0x7F) + val removedPadding = if (removePaddingCount > 0U && removePaddingCount < 16U) { + output.last().dropLast(removePaddingCount.toInt() and 0x7F) + } else { + output.last().toList() + } val preparedOutput = output.dropLast(1).toTypedArray() + removedPadding.toTypedArray() //JS compiler freaks out here if we don't supply exact type val reversed : List> = preparedOutput.reversed() as List> @@ -153,7 +157,7 @@ class AesCtr internal constructor(val aesKey: AesKey, val mode: Mode, initialCou Aes.encrypt(aesKey, blockCount.toUByteArray(Endianness.BIG)) xor data } Mode.DECRYPT -> { - Aes.decrypt(aesKey, blockCount.toUByteArray(Endianness.BIG)) xor data + Aes.encrypt(aesKey, blockCount.toUByteArray(Endianness.BIG)) xor data } }