From 69c81ec8e9062eb8c47012967a283d84b8b7b084 Mon Sep 17 00:00:00 2001 From: Ugljesa Jovanovic Date: Mon, 23 Sep 2019 22:14:42 +0200 Subject: [PATCH] Working ctr decryption --- .../kotlin/com/ionspin/kotlin/crypto/symmetric/AesCtr.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 } }