update dependencies
This commit is contained in:
@@ -20,8 +20,10 @@ kotlin {
|
|||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
commonMain.dependencies {
|
commonMain.dependencies {
|
||||||
implementation(libs.hash)
|
implementation(libs.random)
|
||||||
implementation(libs.mac)
|
implementation(libs.mac)
|
||||||
|
implementation(libs.hash)
|
||||||
|
implementation(libs.bytearray)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
[versions]
|
[versions]
|
||||||
kotlin = "2.1.20"
|
kotlin = "2.1.20"
|
||||||
hash = "1.1.0"
|
random = "1.0.0"
|
||||||
mac = "1.1.0"
|
mac = "1.1.2"
|
||||||
|
hash = "1.2.2"
|
||||||
|
bytearray = "1.1.1"
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
hash = { module = "com.infendro:hash", version.ref = "hash" }
|
random = { module = "com.infendro:random", version.ref = "random" }
|
||||||
mac = { module = "com.infendro:mac", version.ref = "mac" }
|
mac = { module = "com.infendro:mac", version.ref = "mac" }
|
||||||
|
hash = { module = "com.infendro:hash", version.ref = "hash" }
|
||||||
|
bytearray = { module = "com.infendro:bytearray", version.ref = "bytearray" }
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.infendro.otp
|
package com.infendro.otp
|
||||||
|
|
||||||
|
import com.infendro.bytearray.toByteArray
|
||||||
|
import com.infendro.bytearray.toInt
|
||||||
import com.infendro.hash.HashFunction
|
import com.infendro.hash.HashFunction
|
||||||
import com.infendro.hash.SHA1
|
import com.infendro.hash.SHA1
|
||||||
import com.infendro.mac.HMAC
|
import com.infendro.mac.HMAC
|
||||||
import com.infendro.otp.util.toByteArray
|
|
||||||
import com.infendro.otp.util.toInt
|
|
||||||
import kotlin.experimental.and
|
import kotlin.experimental.and
|
||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
|
|
||||||
@@ -24,8 +24,7 @@ class HOTP(
|
|||||||
secret: ByteArray,
|
secret: ByteArray,
|
||||||
counter: Long,
|
counter: Long,
|
||||||
): String {
|
): String {
|
||||||
if (counter < 0)
|
if (counter < 0) throw Exception()
|
||||||
throw Exception()
|
|
||||||
|
|
||||||
val hash = generateHash(
|
val hash = generateHash(
|
||||||
secret,
|
secret,
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.infendro.otp
|
package com.infendro.otp
|
||||||
|
|
||||||
import com.infendro.hash.*
|
import com.infendro.hash.*
|
||||||
import kotlin.random.Random
|
import com.infendro.random.PRNG
|
||||||
|
|
||||||
object SecretGenerator {
|
object SecretGenerator {
|
||||||
private val random = Random.Default
|
private val random = PRNG.HMAC
|
||||||
|
|
||||||
fun generate(
|
fun generate(
|
||||||
algorithm: HashFunction = SHA1,
|
algorithm: HashFunction = SHA1,
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
package com.infendro.otp.util
|
|
||||||
|
|
||||||
internal fun Long.toByteArray(): ByteArray {
|
|
||||||
return ByteArray(8) { i ->
|
|
||||||
val offset = (7 - i) * 8
|
|
||||||
(this shr offset).toByte()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun ByteArray.toInt(): Int {
|
|
||||||
if (size != 4) throw Exception()
|
|
||||||
|
|
||||||
return fold(0) { acc, byte ->
|
|
||||||
(acc shl 8) or (byte.toInt() and 0xFF)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun Collection<Byte>.toInt(): Int {
|
|
||||||
return toByteArray().toInt()
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user