Compare commits

..

No commits in common. "cef5e06f0bad2e627c9cd102f6e8f511b1ba68b5" and "e34de8de946542d900366f70134c05ff158bae10" have entirely different histories.

5 changed files with 12 additions and 26 deletions

View File

@ -9,7 +9,7 @@ val logback_version="1.2.10"
group = "net.sergeych" group = "net.sergeych"
version = "0.2.6-SNAPSHOT" version = "0.2.2"
repositories { repositories {
mavenCentral() mavenCentral()
@ -24,9 +24,9 @@ repositories {
kotlin { kotlin {
jvm { jvm {
// compilations.all { compilations.all {
// kotlinOptions.jvmTarget = "1.8" kotlinOptions.jvmTarget = "1.8"
// } }
withJava() withJava()
testRuns["test"].executionTask.configure { testRuns["test"].executionTask.configure {
useJUnitPlatform() useJUnitPlatform()
@ -51,8 +51,9 @@ kotlin {
val commonMain by getting { val commonMain by getting {
dependencies { dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.3") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.3")
// api("net.sergeych:unikrypto:1.2.2-SNAPSHOT") api("net.sergeych:unikrypto:1.2.2-SNAPSHOT")
api("net.sergeych:parsec3:0.4.6") api("net.sergeych:parsec3:0.4.3-SNAPSHOT")
api("net.sergeych:boss-serialization-mp:0.2.4-SNAPSHOT")
api("net.sergeych:unikrypto:1.2.5") api("net.sergeych:unikrypto:1.2.5")
} }
} }

View File

@ -19,19 +19,14 @@ data class RegistrationArgs(
val packedACO: ByteArray, val packedACO: ByteArray,
val extraData: ByteArray? = null val extraData: ByteArray? = null
) { ) {
@Suppress("unused")
inline fun <reified T>toSuccess(loginToken: ByteArray, extraData: T): AuthenticationResult.Success { inline fun <reified T>toSuccess(loginToken: ByteArray, extraData: T): AuthenticationResult.Success {
return AuthenticationResult.Success( return AuthenticationResult.Success(
loginName, loginToken, BossEncoder.encode(extraData) loginName, loginToken, BossEncoder.encode(extraData)
) )
} }
@Suppress("unused") inline fun <reified T>decodeOrNull(): T? = extraData?.let { it.decodeBoss<T>() }
inline fun <reified T>decodeOrNull(): T? = extraData?.decodeBoss<T>() inline fun <reified T: Any>decodeOrThrow(): T = extraData?.let { it.decodeBoss<T>() }
@Suppress("unused")
inline fun <reified T: Any>decodeOrThrow(): T = extraData?.decodeBoss<T>()
?: throw IllegalArgumentException("missing require extra data of type ${T::class.simpleName}") ?: throw IllegalArgumentException("missing require extra data of type ${T::class.simpleName}")
} }
@ -49,11 +44,6 @@ sealed class AuthenticationResult {
@SerialName("LoginUnavailable") @SerialName("LoginUnavailable")
object LoginUnavailable: AuthenticationResult() object LoginUnavailable: AuthenticationResult()
@Serializable
@SerialName("OtherError")
class OtherError(val reason: String,val packedData: ByteArray?=null): AuthenticationResult()
@Serializable @Serializable
@SerialName("LoginIdUnavailable") @SerialName("LoginIdUnavailable")
object LoginIdUnavailable: AuthenticationResult() object LoginIdUnavailable: AuthenticationResult()

View File

@ -34,7 +34,6 @@ class Registration(
val pbkdfRounds: Int = 15000, val pbkdfRounds: Int = 15000,
) : LogTag("SLREG") { ) : LogTag("SLREG") {
@Suppress("unused")
sealed class Result { sealed class Result {
/** /**
* Login is already in use or is somehow else invalid * Login is already in use or is somehow else invalid
@ -54,8 +53,6 @@ class Registration(
val encodedData: ByteArray?) : Result() { val encodedData: ByteArray?) : Result() {
inline fun <reified D>data() = encodedData?.let { BossDecoder.decodeFrom<D>(it)} inline fun <reified D>data() = encodedData?.let { BossDecoder.decodeFrom<D>(it)}
} }
class OtherError(val code: String,val packedData: ByteArray?=null): Result()
} }
private var lastPasswordHash: ByteArray? = null private var lastPasswordHash: ByteArray? = null
@ -93,7 +90,7 @@ class Registration(
val nonce = adapter.invokeCommand(api.slGetNonce) val nonce = adapter.invokeCommand(api.slGetNonce)
val loginPrivateKey = deferredLoginKey.await() val loginPrivateKey = deferredLoginKey.await()
val spl = SuperloginRestoreAccessPayload(login, loginPrivateKey, dataKey) val spl = SuperloginRestoreAccessPayload(login, loginPrivateKey, dataKey)
repeat(3) { repeat(10) {
val (restoreKey, restoreData) = AccessControlObject.pack(passwordKeys!!.loginAccessKey, spl) val (restoreKey, restoreData) = AccessControlObject.pack(passwordKeys!!.loginAccessKey, spl)
try { try {
val packedArgs = SignedRecord.pack( val packedArgs = SignedRecord.pack(
@ -125,8 +122,6 @@ class Registration(
AuthenticationResult.LoginUnavailable -> return Result.InvalidLogin AuthenticationResult.LoginUnavailable -> return Result.InvalidLogin
is AuthenticationResult.OtherError -> return Result.OtherError(result.reason, result.packedData)
is AuthenticationResult.Success -> { is AuthenticationResult.Success -> {
return Result.Success( return Result.Success(
restoreKey.secret, restoreKey.secret,

View File

@ -18,7 +18,7 @@ internal class AccessControlObjectTest {
val pk1 = SymmetricKeys.random() val pk1 = SymmetricKeys.random()
val pk2 = SymmetricKeys.random() val pk2 = SymmetricKeys.random()
val (rk, packed1) = AccessControlObject.pack(pk1, 117) val (rk, packed1) = AccessControlObject.pack(pk1, 117)
// println(rk.secret) println(rk.secret)
val ac1 = AccessControlObject.unpackWithKey<Int>(packed1,pk1) val ac1 = AccessControlObject.unpackWithKey<Int>(packed1,pk1)
assertNotNull(ac1) assertNotNull(ac1)
assertEquals(117, ac1.payload) assertEquals(117, ac1.payload)

View File

@ -59,7 +59,7 @@ data class TestSession(val s: TestStorage) : SLServerSession<TestData>() {
} }
override suspend fun loginByToken(token: ByteArray): AuthenticationResult { override suspend fun loginByToken(token: ByteArray): AuthenticationResult {
println("requested login by token ${token.encodeToBase64Compact()}") println("requested login by tokeb ${token.encodeToBase64Compact()}")
println(" ${s.byToken[token.toList()]}") println(" ${s.byToken[token.toList()]}")
println(" ${s.byToken.size} / ${s.byLoginId.size}") println(" ${s.byToken.size} / ${s.byLoginId.size}")