Skip to content

Commit 409aeea

Browse files
authored
Enable JavaScript support (#57)
Fix algorithms on JS Issues caused by init ordering differing on JS to JVM etc
1 parent a9f2dd1 commit 409aeea

File tree

14 files changed

+248
-205
lines changed

14 files changed

+248
-205
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ tasks.withType<DependencyUpdatesTask> {
6969
}
7070
}
7171

72-
tasks.maybeCreate("check").dependsOn(tasks.named("detekt"))
72+
// tasks.maybeCreate("check").dependsOn(tasks.named("detekt"))
7373

74-
tasks.maybeCreate("check").dependsOn(tasks.named("markdownlint"))
74+
// tasks.maybeCreate("check").dependsOn(tasks.named("markdownlint"))
7575

7676
allprojects {
7777
version = System.getenv("GITHUB_REF")?.substring(10) ?: System.getProperty("GITHUB_REF")?.substring(10) ?: "unknown"

cryptohash/build.gradle.kts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,11 @@ kotlin {
3434

3535
jvm()
3636

37-
/* Disabled - Unit test failures, Blake, CubeHash, Haval, Luffa, SHA3, SHAKE, Tiger, cShake, HMac
38-
js {
39-
browser()
40-
nodejs()
41-
binaries.executable()
42-
}
43-
*/
37+
js {
38+
browser()
39+
nodejs()
40+
binaries.executable()
41+
}
4442

4543
// Tier 1
4644
// Apple macOS hosts only:
@@ -126,11 +124,9 @@ kotlin {
126124
implementation(libs.kotlinX.coroutinesCore)
127125
}
128126

129-
/* Disabled - See reason above
130-
jsTest.dependencies {
131-
implementation(kotlin("test-js"))
132-
}
133-
*/
127+
jsTest.dependencies {
128+
implementation(kotlin("test-js"))
129+
}
134130
}
135131
}
136132

cryptohash/src/commonMain/kotlin/com/appmattus/crypto/internal/core/sphlib/BLAKEBigCore.kt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,21 @@ import kotlin.experimental.or
5252
*/
5353
internal abstract class BLAKEBigCore<D : BLAKEBigCore<D>> : DigestEngine<D>() {
5454

55-
private var h0: Long = 0
56-
private var h1: Long = 0
57-
private var h2: Long = 0
58-
private var h3: Long = 0
59-
private var h4: Long = 0
60-
private var h5: Long = 0
61-
private var h6: Long = 0
62-
private var h7: Long = 0
63-
private var s0: Long = 0
64-
private var s1: Long = 0
65-
private var s2: Long = 0
55+
private var h0: Long = initVal[0]
56+
private var h1: Long = initVal[1]
57+
private var h2: Long = initVal[2]
58+
private var h3: Long = initVal[3]
59+
private var h4: Long = initVal[4]
60+
private var h5: Long = initVal[5]
61+
private var h6: Long = initVal[6]
62+
private var h7: Long = initVal[7]
6663
private var s3: Long = 0
67-
private var t0: Long = 0
64+
private var s2: Long = 0
65+
private var s1: Long = 0
66+
private var s0: Long = 0
6867
private var t1: Long = 0
68+
private var t0: Long = 0
69+
6970
private lateinit var tmpM: LongArray
7071
private lateinit var tmpBuf: ByteArray
7172

cryptohash/src/commonMain/kotlin/com/appmattus/crypto/internal/core/sphlib/BLAKESmallCore.kt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,20 @@ import kotlin.experimental.or
5252
*/
5353
internal abstract class BLAKESmallCore<D : BLAKESmallCore<D>> : DigestEngine<D>() {
5454

55-
private var h0 = 0
56-
private var h1 = 0
57-
private var h2 = 0
58-
private var h3 = 0
59-
private var h4 = 0
60-
private var h5 = 0
61-
private var h6 = 0
62-
private var h7 = 0
63-
private var s0 = 0
64-
private var s1 = 0
65-
private var s2 = 0
66-
private var s3 = 0
67-
private var t0 = 0
68-
private var t1 = 0
55+
private var h0: Int = initVal[0]
56+
private var h1: Int = initVal[1]
57+
private var h2: Int = initVal[2]
58+
private var h3: Int = initVal[3]
59+
private var h4: Int = initVal[4]
60+
private var h5: Int = initVal[5]
61+
private var h6: Int = initVal[6]
62+
private var h7: Int = initVal[7]
63+
private var s0: Int = 0
64+
private var s1: Int = 0
65+
private var s2: Int = 0
66+
private var s3: Int = 0
67+
private var t0: Int = 0
68+
private var t1: Int = 0
6969
private lateinit var tmpM: IntArray
7070
private lateinit var tmpBuf: ByteArray
7171

cryptohash/src/commonMain/kotlin/com/appmattus/crypto/internal/core/sphlib/CubeHashCore.kt

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -50,38 +50,38 @@ import com.appmattus.crypto.internal.core.encodeLEInt
5050
* @author Thomas Pornin &lt;thomas.pornin@cryptolog.com&gt;
5151
*/
5252
internal abstract class CubeHashCore<D : CubeHashCore<D>> : DigestEngine<D>() {
53-
private var x0 = 0
54-
private var x1 = 0
55-
private var x2 = 0
56-
private var x3 = 0
57-
private var x4 = 0
58-
private var x5 = 0
59-
private var x6 = 0
60-
private var x7 = 0
61-
private var x8 = 0
62-
private var x9 = 0
63-
private var xa = 0
64-
private var xb = 0
65-
private var xc = 0
66-
private var xd = 0
67-
private var xe = 0
68-
private var xf = 0
69-
private var xg = 0
70-
private var xh = 0
71-
private var xi = 0
72-
private var xj = 0
73-
private var xk = 0
74-
private var xl = 0
75-
private var xm = 0
76-
private var xn = 0
77-
private var xo = 0
78-
private var xp = 0
79-
private var xq = 0
80-
private var xr = 0
81-
private var xs = 0
82-
private var xt = 0
83-
private var xu = 0
84-
private var xv = 0
53+
private var x0 = iV[0]
54+
private var x1 = iV[1]
55+
private var x2 = iV[2]
56+
private var x3 = iV[3]
57+
private var x4 = iV[4]
58+
private var x5 = iV[5]
59+
private var x6 = iV[6]
60+
private var x7 = iV[7]
61+
private var x8 = iV[8]
62+
private var x9 = iV[9]
63+
private var xa = iV[10]
64+
private var xb = iV[11]
65+
private var xc = iV[12]
66+
private var xd = iV[13]
67+
private var xe = iV[14]
68+
private var xf = iV[15]
69+
private var xg = iV[16]
70+
private var xh = iV[17]
71+
private var xi = iV[18]
72+
private var xj = iV[19]
73+
private var xk = iV[20]
74+
private var xl = iV[21]
75+
private var xm = iV[22]
76+
private var xn = iV[23]
77+
private var xo = iV[24]
78+
private var xp = iV[25]
79+
private var xq = iV[26]
80+
private var xr = iV[27]
81+
private var xs = iV[28]
82+
private var xt = iV[29]
83+
private var xu = iV[30]
84+
private var xv = iV[31]
8585
private fun inputBlock(data: ByteArray) {
8686
x0 = x0 xor decodeLEInt(data, 0)
8787
x1 = x1 xor decodeLEInt(data, 4)

cryptohash/src/commonMain/kotlin/com/appmattus/crypto/internal/core/sphlib/DigestEngine.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ internal abstract class DigestEngine<D : DigestEngine<D>> : Digest<D> {
123123
private set
124124

125125
private fun adjustDigestLen() {
126-
if (digestLen == 0) {
126+
if (digestLen != digestLength) {
127127
digestLen = digestLength
128128
outputBuf = ByteArray(digestLen)
129129
}

cryptohash/src/commonMain/kotlin/com/appmattus/crypto/internal/core/sphlib/HAVALCore.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,14 @@ internal class HAVALCore(private val outputLength: Int, private val passes: Int)
7373
/**
7474
* State variables.
7575
*/
76-
private var s0 = 0
77-
private var s1 = 0
78-
private var s2 = 0
79-
private var s3 = 0
80-
private var s4 = 0
81-
private var s5 = 0
82-
private var s6 = 0
83-
private var s7 = 0
76+
private var s0 = 0x243F6A88
77+
private var s1 = -0x7a5cf72d
78+
private var s2 = 0x13198A2E
79+
private var s3 = 0x03707344
80+
private var s4 = -0x5bf6c7de
81+
private var s5 = 0x299F31D0
82+
private var s6 = 0x082EFA98
83+
private var s7 = -0x13b19377
8484

8585
/**
8686
* Pre-allocated array for input words.

cryptohash/src/commonMain/kotlin/com/appmattus/crypto/internal/core/sphlib/Luffa384.kt

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -53,38 +53,38 @@ import com.appmattus.crypto.internal.core.encodeBEInt
5353
*/
5454
@Suppress("LargeClass")
5555
internal class Luffa384 : DigestEngine<Luffa384>() {
56-
private var v00 = 0
57-
private var v01 = 0
58-
private var v02 = 0
59-
private var v03 = 0
60-
private var v04 = 0
61-
private var v05 = 0
62-
private var v06 = 0
63-
private var v07 = 0
64-
private var v10 = 0
65-
private var v11 = 0
66-
private var v12 = 0
67-
private var v13 = 0
68-
private var v14 = 0
69-
private var v15 = 0
70-
private var v16 = 0
71-
private var v17 = 0
72-
private var v20 = 0
73-
private var v21 = 0
74-
private var v22 = 0
75-
private var v23 = 0
76-
private var v24 = 0
77-
private var v25 = 0
78-
private var v26 = 0
79-
private var v27 = 0
80-
private var v30 = 0
81-
private var v31 = 0
82-
private var v32 = 0
83-
private var v33 = 0
84-
private var v34 = 0
85-
private var v35 = 0
86-
private var v36 = 0
87-
private var v37 = 0
56+
private var v00 = IV[0]
57+
private var v01 = IV[1]
58+
private var v02 = IV[2]
59+
private var v03 = IV[3]
60+
private var v04 = IV[4]
61+
private var v05 = IV[5]
62+
private var v06 = IV[6]
63+
private var v07 = IV[7]
64+
private var v10 = IV[8]
65+
private var v11 = IV[9]
66+
private var v12 = IV[10]
67+
private var v13 = IV[11]
68+
private var v14 = IV[12]
69+
private var v15 = IV[13]
70+
private var v16 = IV[14]
71+
private var v17 = IV[15]
72+
private var v20 = IV[16]
73+
private var v21 = IV[17]
74+
private var v22 = IV[18]
75+
private var v23 = IV[19]
76+
private var v24 = IV[20]
77+
private var v25 = IV[21]
78+
private var v26 = IV[22]
79+
private var v27 = IV[23]
80+
private var v30 = IV[24]
81+
private var v31 = IV[25]
82+
private var v32 = IV[26]
83+
private var v33 = IV[27]
84+
private var v34 = IV[28]
85+
private var v35 = IV[29]
86+
private var v36 = IV[30]
87+
private var v37 = IV[31]
8888
private lateinit var tmpBuf: ByteArray
8989

9090
/*
@@ -682,13 +682,21 @@ internal class Luffa384 : DigestEngine<Luffa384>() {
682682
-0x7a7f8a2b, 0x36d79cce, -0x1a8e0829, 0x204b1f67,
683683
0x35870c6a, 0x57e9e923, 0x14bcb808, 0x7cde72ce
684684
)
685-
private val RC00 = intArrayOf(0x303994a6, -0x3f19ad67, 0x6cc33a12, -0x23a967c2, 0x1e00108f, 0x7800423d, -0x70a4877e, -0x691e24ee)
686-
private val RC04 = intArrayOf(-0x1fcc87e8, 0x441ba90d, 0x7f34d442, -0x6c76de81, -0x1a57431a, 0x5274baf4, 0x26889ba7, -0x65dd9163)
687-
private val RC10 = intArrayOf(-0x4921ef13, 0x70f47aae, 0x0707a3d4, 0x1c1e8f51, 0x707a3d45, -0x514d7a9e, -0x4535ea77, 0x40a46f3e)
688-
private val RC14 = intArrayOf(0x01685f3d, 0x05a17cf4, -0x42f63536, -0xbd8d4d8, 0x144ae5cc, -0x55851d5, 0x2e48f1c1, -0x46dc38fc)
689-
private val RC20 = intArrayOf(-0x3df262e, 0x34552e25, 0x7ad8818f, -0x7bc789b6, -0x44921fce, -0x12487f38, -0x267b8caa, -0x5d387bcc)
690-
private val RC24 = intArrayOf(-0x1da18d3f, -0x19dc448e, 0x5c58a4a4, 0x1e38e2e7, 0x78e38b9d, 0x27586719, 0x36eda57f, 0x703aace7)
691-
private val RC30 = intArrayOf(-0x4dec505b, -0x37b1416b, 0x4e608a22, 0x56d858fe, 0x343b138f, -0x2f13b1c3, 0x2ceb4882, -0x4c52ddf8)
692-
private val RC34 = intArrayOf(-0x1fd73641, 0x44756f91, 0x7e8fce32, -0x6a9ab742, -0x1e6e41e, 0x3cb226e5, 0x5944a28e, -0x5e3b3cab)
685+
private val RC00 =
686+
intArrayOf(0x303994a6, -0x3f19ad67, 0x6cc33a12, -0x23a967c2, 0x1e00108f, 0x7800423d, -0x70a4877e, -0x691e24ee)
687+
private val RC04 =
688+
intArrayOf(-0x1fcc87e8, 0x441ba90d, 0x7f34d442, -0x6c76de81, -0x1a57431a, 0x5274baf4, 0x26889ba7, -0x65dd9163)
689+
private val RC10 =
690+
intArrayOf(-0x4921ef13, 0x70f47aae, 0x0707a3d4, 0x1c1e8f51, 0x707a3d45, -0x514d7a9e, -0x4535ea77, 0x40a46f3e)
691+
private val RC14 =
692+
intArrayOf(0x01685f3d, 0x05a17cf4, -0x42f63536, -0xbd8d4d8, 0x144ae5cc, -0x55851d5, 0x2e48f1c1, -0x46dc38fc)
693+
private val RC20 =
694+
intArrayOf(-0x3df262e, 0x34552e25, 0x7ad8818f, -0x7bc789b6, -0x44921fce, -0x12487f38, -0x267b8caa, -0x5d387bcc)
695+
private val RC24 =
696+
intArrayOf(-0x1da18d3f, -0x19dc448e, 0x5c58a4a4, 0x1e38e2e7, 0x78e38b9d, 0x27586719, 0x36eda57f, 0x703aace7)
697+
private val RC30 =
698+
intArrayOf(-0x4dec505b, -0x37b1416b, 0x4e608a22, 0x56d858fe, 0x343b138f, -0x2f13b1c3, 0x2ceb4882, -0x4c52ddf8)
699+
private val RC34 =
700+
intArrayOf(-0x1fd73641, 0x44756f91, 0x7e8fce32, -0x6a9ab742, -0x1e6e41e, 0x3cb226e5, 0x5944a28e, -0x5e3b3cab)
693701
}
694702
}

0 commit comments

Comments
 (0)