simplifies nonce calculation
This commit is contained in:
parent
9660379891
commit
3dd1654f70
@ -1,10 +1,6 @@
|
|||||||
package net.sergeych.kiloparsec
|
package net.sergeych.kiloparsec
|
||||||
|
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
import net.sergeych.mp_logger.LogTag
|
|
||||||
import net.sergeych.mp_logger.Loggable
|
|
||||||
import net.sergeych.mp_logger.debug
|
|
||||||
import net.sergeych.mp_logger.info
|
|
||||||
import net.sergeych.tools.AtomicCounter
|
import net.sergeych.tools.AtomicCounter
|
||||||
import net.sergeych.utools.pack
|
import net.sergeych.utools.pack
|
||||||
|
|
||||||
@ -19,7 +15,10 @@ private val idCounter = AtomicCounter(0)
|
|||||||
internal class KiloL0Interface<T>(
|
internal class KiloL0Interface<T>(
|
||||||
private val clientInterface: LocalInterface<KiloScope<T>>,
|
private val clientInterface: LocalInterface<KiloScope<T>>,
|
||||||
private val deferredParams: CompletableDeferred<KiloParams<T>>,
|
private val deferredParams: CompletableDeferred<KiloParams<T>>,
|
||||||
) : LocalInterface<Unit>(), Loggable by LogTag("KL0:${idCounter.incrementAndGet()}") {
|
) : LocalInterface<Unit>() {
|
||||||
|
|
||||||
|
override var logTag: String = "KL0:${idCounter.incrementAndGet()}"
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// local interface uses the same session as a client:
|
// local interface uses the same session as a client:
|
||||||
addErrorProvider(clientInterface)
|
addErrorProvider(clientInterface)
|
||||||
|
@ -47,23 +47,9 @@ data class KiloParams<S>(
|
|||||||
blake2b("token_".encodeToUByteArray() + sessionKey.sessionTag).sliceArray(0..<SymmetricKey.nonceByteLength)
|
blake2b("token_".encodeToUByteArray() + sessionKey.sessionTag).sliceArray(0..<SymmetricKey.nonceByteLength)
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun encodeNonce(base: UByteArray, nonce: ULong): UByteArray {
|
private val numericNonce = NumericNonce(token)
|
||||||
val result = base.copyOf()
|
|
||||||
var x = nonce
|
|
||||||
var i = 0
|
|
||||||
while (x > 0u) {
|
|
||||||
result[i] = result[i] xor (x and 0xFFu).toUByte()
|
|
||||||
x = x shr 8
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
private inline fun encodeSendNonce(nonce: ULong): UByteArray = encodeNonce(token, nonce)
|
private val protectedOp = ProtectedOp()
|
||||||
private inline fun encodeReceiveNonce(nonce: ULong): UByteArray = encodeNonce(token, nonce)
|
|
||||||
|
|
||||||
|
|
||||||
private val proptectedOp = ProtectedOp()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encrypt using send keys and proper nonce
|
* Encrypt using send keys and proper nonce
|
||||||
@ -74,10 +60,10 @@ data class KiloParams<S>(
|
|||||||
else
|
else
|
||||||
null
|
null
|
||||||
|
|
||||||
val n = proptectedOp.invoke { nonce++ }
|
val n = protectedOp.invoke { nonce++ }
|
||||||
|
|
||||||
return pack(
|
return pack(
|
||||||
Package(n, sessionKey.encryptWithNonce(message, encodeSendNonce(n), fill))
|
Package(n, sessionKey.encryptWithNonce(message, numericNonce.withULong(n), fill))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +71,7 @@ data class KiloParams<S>(
|
|||||||
fun decrypt(encryptedMessage: UByteArray): UByteArray =
|
fun decrypt(encryptedMessage: UByteArray): UByteArray =
|
||||||
protectDecryption {
|
protectDecryption {
|
||||||
val p: Package = BipackDecoder.decode(encryptedMessage.toDataSource())
|
val p: Package = BipackDecoder.decode(encryptedMessage.toDataSource())
|
||||||
sessionKey.decryptWithNonce(p.encryptedMessage, encodeReceiveNonce(p.nonce))
|
sessionKey.decryptWithNonce(p.encryptedMessage, numericNonce.withULong(p.nonce))
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user