Added js and jvm implementations of _kx_

This commit is contained in:
Ugljesa Jovanovic committed 2020-10-09 17:17:17 +02:00
1 parent bd173f422f
commit a19602a92f
4 files changed
+174 -50

No files matched your search

@@ -0,0 +1,57 @@
package com.ionspin.kotlin.crypto.keyexchange
import com.ionspin.kotlin.crypto.LibsodiumInitializer.sodium
actual object KeyExchange {
actual fun clientSessionKeys(clientPublicKey: UByteArray, clientSecretKey: UByteArray, serverPublicKey: UByteArray) : KeyExchangeSessionKeyPair {
val receiveKey = UByteArray(crypto_kx_SESSIONKEYBYTES)
val sendKey = UByteArray(crypto_kx_SESSIONKEYBYTES)
sodium.crypto_kx_client_session_keys(
receiveKey.asByteArray(),
sendKey.asByteArray(),
clientPublicKey.asByteArray(),
clientSecretKey.asByteArray(),
serverPublicKey.asByteArray()
)
return KeyExchangeSessionKeyPair(receiveKey, sendKey)
}
actual fun keypair() : KeyExchangeKeyPair {
val publicKey = UByteArray(crypto_kx_PUBLICKEYBYTES)
val secretKey = UByteArray(crypto_kx_SECRETKEYBYTES)
sodium.crypto_kx_keypair(publicKey.asByteArray(), secretKey.asByteArray())
return KeyExchangeKeyPair(publicKey, secretKey)
}
actual fun seedKeypair(seed: UByteArray) : KeyExchangeKeyPair {
val publicKey = UByteArray(crypto_kx_PUBLICKEYBYTES)
val secretKey = UByteArray(crypto_kx_SECRETKEYBYTES)
sodium.crypto_kx_seed_keypair(publicKey.asByteArray(), secretKey.asByteArray(), seed.asByteArray())
return KeyExchangeKeyPair(publicKey, secretKey)
}
actual fun serverSessionKeys(serverPublicKey: UByteArray, serverSecretKey: UByteArray, clientPublicKey: UByteArray) : KeyExchangeSessionKeyPair {
val receiveKey = UByteArray(crypto_kx_SESSIONKEYBYTES)
val sendKey = UByteArray(crypto_kx_SESSIONKEYBYTES)
sodium.crypto_kx_server_session_keys(
receiveKey.asByteArray(),
sendKey.asByteArray(),
serverPublicKey.asByteArray(),
serverSecretKey.asByteArray(),
clientPublicKey.asByteArray()
)
return KeyExchangeSessionKeyPair(receiveKey, sendKey)
}
}