diff --git a/build.gradle.kts b/build.gradle.kts index 3e14d3d..4268432 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -23,6 +23,10 @@ kotlin { implementation(libs.bytearray) } } + + compilerOptions { + freeCompilerArgs.add("-opt-in=kotlin.ExperimentalUnsignedTypes") + } } publishing { diff --git a/src/commonMain/kotlin/com/infendro/hash/HashFunction.kt b/src/commonMain/kotlin/com/infendro/hash/HashFunction.kt index 47d6013..806ebe3 100644 --- a/src/commonMain/kotlin/com/infendro/hash/HashFunction.kt +++ b/src/commonMain/kotlin/com/infendro/hash/HashFunction.kt @@ -1,7 +1,8 @@ package com.infendro.hash -sealed class HashFunction { +abstract class HashFunction { abstract val bytes: Int + @Suppress("UNUSED") val bits: Int get() = bytes * 8 diff --git a/src/commonMain/kotlin/com/infendro/hash/MD5.kt b/src/commonMain/kotlin/com/infendro/hash/md/MD5.kt similarity index 86% rename from src/commonMain/kotlin/com/infendro/hash/MD5.kt rename to src/commonMain/kotlin/com/infendro/hash/md/MD5.kt index 1bb0508..409e0ea 100644 --- a/src/commonMain/kotlin/com/infendro/hash/MD5.kt +++ b/src/commonMain/kotlin/com/infendro/hash/md/MD5.kt @@ -1,10 +1,12 @@ -package com.infendro.hash +package com.infendro.hash.md -import com.infendro.bytearray.ByteOrder.LITTLE_ENDIAN +import com.infendro.bytearray.ByteOrder import com.infendro.bytearray.addAll import com.infendro.bytearray.toByteArray import com.infendro.bytearray.toUIntArray +import com.infendro.hash.HashFunction +@Suppress("UNUSED") object MD5 : HashFunction() { override val bytes: Int get() = 16 @@ -62,14 +64,14 @@ object MD5 : HashFunction() { while (size % 64 != 56) { add(0x00.toByte()) } - addAll(ml.toByteArray(LITTLE_ENDIAN)) + addAll(ml.toByteArray(ByteOrder.LITTLE_ENDIAN)) } val chunks = paddedValue .chunked(64) for (chunk in chunks) { val w = buildList { - addAll(chunk.toUIntArray(LITTLE_ENDIAN)) + addAll(chunk.toUIntArray(ByteOrder.LITTLE_ENDIAN)) } var a = a0 @@ -103,10 +105,10 @@ object MD5 : HashFunction() { } return byteArrayOf( - *a0.toByteArray(LITTLE_ENDIAN), - *b0.toByteArray(LITTLE_ENDIAN), - *c0.toByteArray(LITTLE_ENDIAN), - *d0.toByteArray(LITTLE_ENDIAN), + *a0.toByteArray(ByteOrder.LITTLE_ENDIAN), + *b0.toByteArray(ByteOrder.LITTLE_ENDIAN), + *c0.toByteArray(ByteOrder.LITTLE_ENDIAN), + *d0.toByteArray(ByteOrder.LITTLE_ENDIAN), ) } -} +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/infendro/hash/SHA1.kt b/src/commonMain/kotlin/com/infendro/hash/sha1/SHA1.kt similarity index 96% rename from src/commonMain/kotlin/com/infendro/hash/SHA1.kt rename to src/commonMain/kotlin/com/infendro/hash/sha1/SHA1.kt index 9ab3020..7a9fdae 100644 --- a/src/commonMain/kotlin/com/infendro/hash/SHA1.kt +++ b/src/commonMain/kotlin/com/infendro/hash/sha1/SHA1.kt @@ -1,9 +1,11 @@ -package com.infendro.hash +package com.infendro.hash.sha1 import com.infendro.bytearray.addAll import com.infendro.bytearray.toByteArray import com.infendro.bytearray.toUIntArray +import com.infendro.hash.HashFunction +@Suppress("UNUSED") object SHA1 : HashFunction() { override val bytes: Int get() = 20 @@ -80,4 +82,4 @@ object SHA1 : HashFunction() { *h4.toByteArray(), ) } -} +} \ No newline at end of file diff --git a/src/commonMain/kotlin/com/infendro/hash/SHA224.kt b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-224.kt similarity index 96% rename from src/commonMain/kotlin/com/infendro/hash/SHA224.kt rename to src/commonMain/kotlin/com/infendro/hash/sha2/SHA-224.kt index 7946009..af7da12 100644 --- a/src/commonMain/kotlin/com/infendro/hash/SHA224.kt +++ b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-224.kt @@ -1,10 +1,12 @@ -package com.infendro.hash +package com.infendro.hash.sha2 import com.infendro.bytearray.addAll import com.infendro.bytearray.toByteArray import com.infendro.bytearray.toUIntArray +import com.infendro.hash.HashFunction -object SHA224 : HashFunction() { +@Suppress("UNUSED") +object `SHA-224` : HashFunction() { override val bytes: Int get() = 28 @@ -63,10 +65,10 @@ object SHA224 : HashFunction() { var h = h7 for (i in 0..<64) { + val s0 = a.rotateRight(2) xor a.rotateRight(13) xor a.rotateRight(22) val s1 = e.rotateRight(6) xor e.rotateRight(11) xor e.rotateRight(25) val ch = (e and f) xor (e.inv() and g) val temp1 = h + s1 + ch + k[i] + w[i] - val s0 = a.rotateRight(2) xor a.rotateRight(13) xor a.rotateRight(22) val maj = (a and b) xor (a and c) xor (b and c) val temp2 = s0 + maj diff --git a/src/commonMain/kotlin/com/infendro/hash/SHA256.kt b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-256.kt similarity index 96% rename from src/commonMain/kotlin/com/infendro/hash/SHA256.kt rename to src/commonMain/kotlin/com/infendro/hash/sha2/SHA-256.kt index 02a401c..e48e687 100644 --- a/src/commonMain/kotlin/com/infendro/hash/SHA256.kt +++ b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-256.kt @@ -1,10 +1,12 @@ -package com.infendro.hash +package com.infendro.hash.sha2 import com.infendro.bytearray.addAll import com.infendro.bytearray.toByteArray import com.infendro.bytearray.toUIntArray +import com.infendro.hash.HashFunction -object SHA256 : HashFunction() { +@Suppress("UNUSED") +object `SHA-256` : HashFunction() { override val bytes: Int get() = 32 diff --git a/src/commonMain/kotlin/com/infendro/hash/SHA384.kt b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-384.kt similarity index 97% rename from src/commonMain/kotlin/com/infendro/hash/SHA384.kt rename to src/commonMain/kotlin/com/infendro/hash/sha2/SHA-384.kt index da5e74f..595bb7d 100644 --- a/src/commonMain/kotlin/com/infendro/hash/SHA384.kt +++ b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-384.kt @@ -1,10 +1,12 @@ -package com.infendro.hash +package com.infendro.hash.sha2 import com.infendro.bytearray.addAll import com.infendro.bytearray.toByteArray import com.infendro.bytearray.toULongArray +import com.infendro.hash.HashFunction -object SHA384 : HashFunction() { +@Suppress("UNUSED") +object `SHA-384` : HashFunction() { override val bytes: Int get() = 48 diff --git a/src/commonMain/kotlin/com/infendro/hash/SHA512.kt b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-512.kt similarity index 97% rename from src/commonMain/kotlin/com/infendro/hash/SHA512.kt rename to src/commonMain/kotlin/com/infendro/hash/sha2/SHA-512.kt index e8f9dbd..3f284e1 100644 --- a/src/commonMain/kotlin/com/infendro/hash/SHA512.kt +++ b/src/commonMain/kotlin/com/infendro/hash/sha2/SHA-512.kt @@ -1,10 +1,12 @@ -package com.infendro.hash +package com.infendro.hash.sha2 import com.infendro.bytearray.addAll import com.infendro.bytearray.toByteArray import com.infendro.bytearray.toULongArray +import com.infendro.hash.HashFunction -object SHA512 : HashFunction() { +@Suppress("UNUSED") +object `SHA-512` : HashFunction() { override val bytes: Int get() = 64