Created a big amount of external objects in JsSodiumInterface.kt for Hash.kt, Kdf.kt and KeyExchange.kt files.

Reason: values had these fields in dynamic type but not in JsAny type.
This commit is contained in:
Maria Chernova 2024-12-09 01:16:46 +03:00 committed by kildishevps
parent 0d2300c47f
commit 014daefc43
6 changed files with 73 additions and 33 deletions

View File

@ -13,11 +13,41 @@ import org.khronos.webgl.Uint8Array
typealias UByte = Int typealias UByte = Int
typealias UInt = Long typealias UInt = Long
external object chacha20poly1305EncryptDetachedResult : JsAny { external object Chacha20poly1305EncryptDetachedResult : JsAny {
val ciphertext: Uint8Array val ciphertext: Uint8Array
var mac: Uint8Array var mac: Uint8Array
} }
external object CryptoBoxDetachedResult : JsAny {
val ciphertext: Uint8Array
var mac: Uint8Array
}
external object CryptoBoxKeypairResult: JsAny {
val publicKey: Uint8Array
val privateKey: Uint8Array
}
external object CryptoKxClientSessionKeysResult: JsAny {
val sharedRx: Uint8Array
val sharedTx: Uint8Array
}
external object CryptoKxKeypairResult: JsAny {
val publicKey: Uint8Array
val privateKey: Uint8Array
}
external object CryptoKxSeedKeypairResult: JsAny {
val publicKey: Uint8Array
val privateKey: Uint8Array
}
external object CryptoKxServerSessionKeysResult: JsAny {
val sharedRx: Uint8Array
val sharedTx: Uint8Array
}
@JsModule("libsodium-wrappers-sumo") @JsModule("libsodium-wrappers-sumo")
external object JsSodiumInterface { external object JsSodiumInterface {
@ -143,7 +173,7 @@ external object JsSodiumInterface {
@JsName("crypto_aead_chacha20poly1305_encrypt") @JsName("crypto_aead_chacha20poly1305_encrypt")
fun crypto_aead_chacha20poly1305_encrypt(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : Uint8Array fun crypto_aead_chacha20poly1305_encrypt(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : Uint8Array
@JsName("crypto_aead_chacha20poly1305_encrypt_detached") @JsName("crypto_aead_chacha20poly1305_encrypt_detached")
fun crypto_aead_chacha20poly1305_encrypt_detached(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : chacha20poly1305EncryptDetachedResult fun crypto_aead_chacha20poly1305_encrypt_detached(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : Chacha20poly1305EncryptDetachedResult
@JsName("crypto_aead_chacha20poly1305_ietf_decrypt") @JsName("crypto_aead_chacha20poly1305_ietf_decrypt")
fun crypto_aead_chacha20poly1305_ietf_decrypt(nsec : Uint8Array?, ciphertext: Uint8Array, associatedData: Uint8Array, npub: Uint8Array, key: Uint8Array) : Uint8Array fun crypto_aead_chacha20poly1305_ietf_decrypt(nsec : Uint8Array?, ciphertext: Uint8Array, associatedData: Uint8Array, npub: Uint8Array, key: Uint8Array) : Uint8Array
@JsName("crypto_aead_chacha20poly1305_ietf_decrypt_detached") @JsName("crypto_aead_chacha20poly1305_ietf_decrypt_detached")
@ -151,7 +181,7 @@ external object JsSodiumInterface {
@JsName("crypto_aead_chacha20poly1305_ietf_encrypt") @JsName("crypto_aead_chacha20poly1305_ietf_encrypt")
fun crypto_aead_chacha20poly1305_ietf_encrypt(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : Uint8Array fun crypto_aead_chacha20poly1305_ietf_encrypt(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : Uint8Array
@JsName("crypto_aead_chacha20poly1305_ietf_encrypt_detached") @JsName("crypto_aead_chacha20poly1305_ietf_encrypt_detached")
fun crypto_aead_chacha20poly1305_ietf_encrypt_detached(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : chacha20poly1305EncryptDetachedResult fun crypto_aead_chacha20poly1305_ietf_encrypt_detached(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : Chacha20poly1305EncryptDetachedResult
@JsName("crypto_aead_chacha20poly1305_ietf_keygen") @JsName("crypto_aead_chacha20poly1305_ietf_keygen")
fun crypto_aead_chacha20poly1305_ietf_keygen() : Uint8Array fun crypto_aead_chacha20poly1305_ietf_keygen() : Uint8Array
@JsName("crypto_aead_chacha20poly1305_keygen") @JsName("crypto_aead_chacha20poly1305_keygen")
@ -163,7 +193,7 @@ external object JsSodiumInterface {
@JsName("crypto_aead_xchacha20poly1305_ietf_encrypt") @JsName("crypto_aead_xchacha20poly1305_ietf_encrypt")
fun crypto_aead_xchacha20poly1305_ietf_encrypt(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : Uint8Array fun crypto_aead_xchacha20poly1305_ietf_encrypt(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : Uint8Array
@JsName("crypto_aead_xchacha20poly1305_ietf_encrypt_detached") @JsName("crypto_aead_xchacha20poly1305_ietf_encrypt_detached")
fun crypto_aead_xchacha20poly1305_ietf_encrypt_detached(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : chacha20poly1305EncryptDetachedResult fun crypto_aead_xchacha20poly1305_ietf_encrypt_detached(message: Uint8Array, associatedData: Uint8Array, nsec: Uint8Array?, npub: Uint8Array, key: Uint8Array) : Chacha20poly1305EncryptDetachedResult
@JsName("crypto_aead_xchacha20poly1305_ietf_keygen") @JsName("crypto_aead_xchacha20poly1305_ietf_keygen")
fun crypto_aead_xchacha20poly1305_ietf_keygen(): Uint8Array fun crypto_aead_xchacha20poly1305_ietf_keygen(): Uint8Array
@ -195,9 +225,9 @@ external object JsSodiumInterface {
// ---- Box ---- // ---- Box ----
@JsName("crypto_box_keypair") @JsName("crypto_box_keypair")
fun crypto_box_keypair() : JsAny fun crypto_box_keypair() : CryptoBoxKeypairResult
@JsName("crypto_box_seed_keypair") @JsName("crypto_box_seed_keypair")
fun crypto_box_seed_keypair(seed : Uint8Array) : JsAny fun crypto_box_seed_keypair(seed : Uint8Array) : CryptoBoxKeypairResult
@JsName("crypto_box_easy") @JsName("crypto_box_easy")
fun crypto_box_easy(message: Uint8Array, fun crypto_box_easy(message: Uint8Array,
nonce: Uint8Array, nonce: Uint8Array,
@ -212,7 +242,7 @@ external object JsSodiumInterface {
fun crypto_box_detached(message: Uint8Array, fun crypto_box_detached(message: Uint8Array,
nonce: Uint8Array, nonce: Uint8Array,
recipientsPublicKey: Uint8Array, recipientsPublicKey: Uint8Array,
sendersSecretKey: Uint8Array) : JsAny sendersSecretKey: Uint8Array) : CryptoBoxDetachedResult
@JsName("crypto_box_open_detached") @JsName("crypto_box_open_detached")
fun crypto_box_open_detached(ciphertext: Uint8Array, fun crypto_box_open_detached(ciphertext: Uint8Array,
tag: Uint8Array, tag: Uint8Array,
@ -331,13 +361,13 @@ external object JsSodiumInterface {
// ---- Key exchange ---- // ---- Key exchange ----
@JsName("crypto_kx_client_session_keys") @JsName("crypto_kx_client_session_keys")
fun crypto_kx_client_session_keys(clientPublicKey: Uint8Array, clientSecretKey: Uint8Array, serverPublicKey: Uint8Array) : JsAny fun crypto_kx_client_session_keys(clientPublicKey: Uint8Array, clientSecretKey: Uint8Array, serverPublicKey: Uint8Array) : CryptoKxClientSessionKeysResult
@JsName("crypto_kx_keypair") @JsName("crypto_kx_keypair")
fun crypto_kx_keypair() : JsAny fun crypto_kx_keypair() : CryptoKxKeypairResult
@JsName("crypto_kx_seed_keypair") @JsName("crypto_kx_seed_keypair")
fun crypto_kx_seed_keypair(seed: Uint8Array) : JsAny fun crypto_kx_seed_keypair(seed: Uint8Array) : CryptoKxSeedKeypairResult
@JsName("crypto_kx_server_session_keys") @JsName("crypto_kx_server_session_keys")
fun crypto_kx_server_session_keys(serverPublicKey: Uint8Array, serverSecretKey: Uint8Array, clientPublicKey: Uint8Array) : JsAny fun crypto_kx_server_session_keys(serverPublicKey: Uint8Array, serverSecretKey: Uint8Array, clientPublicKey: Uint8Array) : CryptoKxServerSessionKeysResult
// ---- Key exchange end ---- // ---- Key exchange end ----

View File

@ -14,8 +14,8 @@ actual object Box {
actual fun keypair(): BoxKeyPair { actual fun keypair(): BoxKeyPair {
val keypair = getSodium().crypto_box_keypair() val keypair = getSodium().crypto_box_keypair()
return BoxKeyPair( return BoxKeyPair(
(keypair.publicKey as Uint8Array).toUByteArray(), (keypair.publicKey).toUByteArray(),
(keypair.privateKey as Uint8Array).toUByteArray() (keypair.privateKey).toUByteArray()
) )
} }
@ -25,8 +25,8 @@ actual object Box {
actual fun seedKeypair(seed: UByteArray): BoxKeyPair { actual fun seedKeypair(seed: UByteArray): BoxKeyPair {
val keypair = getSodium().crypto_box_seed_keypair(seed.toUInt8Array()) val keypair = getSodium().crypto_box_seed_keypair(seed.toUInt8Array())
return BoxKeyPair( return BoxKeyPair(
(keypair.publicKey as Uint8Array).toUByteArray(), (keypair.publicKey).toUByteArray(),
(keypair.privateKey as Uint8Array).toUByteArray() (keypair.privateKey).toUByteArray()
) )
} }
@ -142,8 +142,8 @@ actual object Box {
sendersSecretKey.toUInt8Array(), sendersSecretKey.toUInt8Array(),
) )
return BoxEncryptedDataAndTag( return BoxEncryptedDataAndTag(
(detached.ciphertext as Uint8Array).toUByteArray(), (detached.ciphertext).toUByteArray(),
(detached.mac as Uint8Array).toUByteArray() (detached.mac).toUByteArray()
) )
} }

View File

@ -11,10 +11,13 @@ import org.khronos.webgl.Uint8Array
* on 21-Aug-2020 * on 21-Aug-2020
*/ */
// TODO: посмотреть, как оно используется
external object GenericHashStateInternalType: JsAny
//Раз используется как жсЭни, то можно написать = ЖсЭни //Раз используется как жсЭни, то можно написать = ЖсЭни
//actual typealias GenericHashStateInternal = Any //actual typealias GenericHashStateInternal = Any
typealias GenericHashStateInternal = JsAny actual typealias GenericHashStateInternal = GenericHashStateInternalType
actual object GenericHash { actual object GenericHash {
actual fun genericHash( actual fun genericHash(
@ -34,7 +37,7 @@ actual object GenericHash {
key: UByteArray? key: UByteArray?
): GenericHashState { ): GenericHashState {
val state = getSodium().crypto_generichash_init(key?.toUInt8Array() ?: Uint8Array(0), requestedHashLength) val state = getSodium().crypto_generichash_init(key?.toUInt8Array() ?: Uint8Array(0), requestedHashLength)
return GenericHashState(requestedHashLength, state) return GenericHashState(requestedHashLength, state as GenericHashStateInternal)
} }
actual fun genericHashUpdate( actual fun genericHashUpdate(

View File

@ -5,11 +5,16 @@ import ext.libsodium.com.ionspin.kotlin.crypto.toUByteArray
import ext.libsodium.com.ionspin.kotlin.crypto.toUInt8Array import ext.libsodium.com.ionspin.kotlin.crypto.toUInt8Array
// TODO: проверить, что эти штуки юзаются как жсЭни // TODO: проверить, что эти штуки юзаются как жсЭни
typealias Sha256State = JsAny //typealias Sha256State = JsAny
typealias Sha512State = JsAny //typealias Sha512State = JsAny
//actual typealias Sha256State = Any //actual typealias Sha256State = Any
//actual typealias Sha512State = Any //actual typealias Sha512State = Any
external object Sha256StateType: JsAny
actual typealias Sha256State = Sha256StateType
actual typealias Sha512State = Sha256StateType
actual object Hash { actual object Hash {
actual fun sha256(data: UByteArray): UByteArray { actual fun sha256(data: UByteArray): UByteArray {
@ -17,7 +22,7 @@ actual object Hash {
} }
actual fun sha256Init(): Sha256State { actual fun sha256Init(): Sha256State {
return getSodium().crypto_hash_sha256_init() return getSodium().crypto_hash_sha256_init() as Sha256State
} }
actual fun sha256Update(state: Sha256State, data: UByteArray) { actual fun sha256Update(state: Sha256State, data: UByteArray) {
@ -33,7 +38,7 @@ actual object Hash {
} }
actual fun sha512Init(): Sha512State { actual fun sha512Init(): Sha512State {
return getSodium().crypto_hash_sha512_init() return getSodium().crypto_hash_sha512_init() as Sha512State
} }
actual fun sha512Update(state: Sha512State, data: UByteArray) { actual fun sha512Update(state: Sha512State, data: UByteArray) {

View File

@ -26,8 +26,8 @@ actual object Kdf {
masterKey: UByteArray masterKey: UByteArray
): UByteArray { ): UByteArray {
return getSodium().crypto_kdf_derive_from_key( return getSodium().crypto_kdf_derive_from_key(
subkeyLength.toUInt(), subkeyLength.toLong(),
subkeyId, subkeyId.toLong(),
context, context,
masterKey.toUInt8Array() masterKey.toUInt8Array()
).toUByteArray() ).toUByteArray()

View File

@ -5,6 +5,7 @@ import ext.libsodium.com.ionspin.kotlin.crypto.toUByteArray
import ext.libsodium.com.ionspin.kotlin.crypto.toUInt8Array import ext.libsodium.com.ionspin.kotlin.crypto.toUInt8Array
import org.khronos.webgl.Uint8Array import org.khronos.webgl.Uint8Array
actual object KeyExchange { actual object KeyExchange {
actual fun clientSessionKeys(clientPublicKey: UByteArray, clientSecretKey: UByteArray, serverPublicKey: UByteArray) : KeyExchangeSessionKeyPair { actual fun clientSessionKeys(clientPublicKey: UByteArray, clientSecretKey: UByteArray, serverPublicKey: UByteArray) : KeyExchangeSessionKeyPair {
@ -15,8 +16,9 @@ actual object KeyExchange {
serverPublicKey.toUInt8Array() serverPublicKey.toUInt8Array()
) )
val receiveKey = (result.sharedRx as Uint8Array).toUByteArray() // Он был в dynamic, но его нет в JsAny
val sendKey = (result.sharedTx as Uint8Array).toUByteArray() val receiveKey = result.sharedRx.toUByteArray()
val sendKey = result.sharedTx.toUByteArray()
@ -26,8 +28,8 @@ actual object KeyExchange {
actual fun keypair() : KeyExchangeKeyPair { actual fun keypair() : KeyExchangeKeyPair {
val result = getSodium().crypto_kx_keypair() val result = getSodium().crypto_kx_keypair()
val publicKey = (result.publicKey as Uint8Array).toUByteArray() val publicKey = result.publicKey.toUByteArray()
val secretKey = (result.privateKey as Uint8Array).toUByteArray() val secretKey = result.privateKey.toUByteArray()
return KeyExchangeKeyPair(publicKey, secretKey) return KeyExchangeKeyPair(publicKey, secretKey)
} }
@ -35,8 +37,8 @@ actual object KeyExchange {
actual fun seedKeypair(seed: UByteArray) : KeyExchangeKeyPair { actual fun seedKeypair(seed: UByteArray) : KeyExchangeKeyPair {
val result = getSodium().crypto_kx_seed_keypair(seed.toUInt8Array()) val result = getSodium().crypto_kx_seed_keypair(seed.toUInt8Array())
val publicKey = (result.publicKey as Uint8Array).toUByteArray() val publicKey = result.publicKey.toUByteArray()
val secretKey = (result.privateKey as Uint8Array).toUByteArray() val secretKey = result.privateKey.toUByteArray()
return KeyExchangeKeyPair(publicKey, secretKey) return KeyExchangeKeyPair(publicKey, secretKey)
} }
@ -49,8 +51,8 @@ actual object KeyExchange {
clientPublicKey.toUInt8Array() clientPublicKey.toUInt8Array()
) )
val receiveKey = (result.sharedRx as Uint8Array).toUByteArray() val receiveKey = result.sharedRx.toUByteArray()
val sendKey = (result.sharedTx as Uint8Array).toUByteArray() val sendKey = result.sharedTx.toUByteArray()
return KeyExchangeSessionKeyPair(receiveKey, sendKey) return KeyExchangeSessionKeyPair(receiveKey, sendKey)
} }