diff --git a/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/com.ionspin.kotlin.crypto/generichash/GenericHash.kt b/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/com.ionspin.kotlin.crypto/generichash/GenericHash.kt index b66c2d1..cddacce 100644 --- a/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/com.ionspin.kotlin.crypto/generichash/GenericHash.kt +++ b/multiplatform-crypto-libsodium-bindings/src/commonMain/kotlin/com.ionspin.kotlin.crypto/generichash/GenericHash.kt @@ -6,6 +6,8 @@ package com.ionspin.kotlin.crypto.generichash * on 21-Aug-2020 */ +val crypto_generichash_BYTES = 32 + data class GenericHashState(val hashLength: Int, val internalState: GenericHashStateInternal) expect class GenericHashStateInternal @@ -18,6 +20,8 @@ expect object GenericHash { fun genericHashUpdate(state: GenericHashState, messagePart : UByteArray) fun genericHashFinal(state : GenericHashState) : UByteArray + fun genericHashKeygen() : UByteArray + } diff --git a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt index ed83523..2bc4158 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/JsSodiumInterface.kt @@ -26,6 +26,8 @@ interface JsSodiumInterface { fun crypto_generichash_final(state: dynamic, hashLength: Int) : Uint8Array + fun crypto_generichash_keygen() : Uint8Array + //Short hash fun crypto_shorthash(data : Uint8Array, key: Uint8Array) : Uint8Array diff --git a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt index 8055387..bcd6d3c 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jsMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt @@ -44,4 +44,8 @@ actual object GenericHash { actual fun genericHashFinal(state: GenericHashState): UByteArray { return getSodium().crypto_generichash_final(state.internalState, state.hashLength).toUByteArray() } + + actual fun genericHashKeygen(): UByteArray { + return getSodium().crypto_generichash_keygen().toUByteArray() + } } diff --git a/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt b/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt index f94586c..f674d82 100644 --- a/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt +++ b/multiplatform-crypto-libsodium-bindings/src/jvmMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt @@ -49,5 +49,11 @@ actual object GenericHash { return hashResult.asUByteArray() } + actual fun genericHashKeygen(): UByteArray { + val generatedKey = UByteArray(crypto_generichash_BYTES) + sodium.crypto_generichash_keygen(generatedKey.asByteArray()) + return generatedKey + } + } diff --git a/multiplatform-crypto-libsodium-bindings/src/nativeMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt b/multiplatform-crypto-libsodium-bindings/src/nativeMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt index e8c9742..2f765d4 100644 --- a/multiplatform-crypto-libsodium-bindings/src/nativeMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt +++ b/multiplatform-crypto-libsodium-bindings/src/nativeMain/kotlin/com/ionspin/kotlin/crypto/generichash/GenericHash.kt @@ -10,6 +10,7 @@ import kotlinx.cinterop.reinterpret import libsodium.crypto_generichash import libsodium.crypto_generichash_final import libsodium.crypto_generichash_init +import libsodium.crypto_generichash_keygen import libsodium.crypto_generichash_update import platform.posix.malloc @@ -88,5 +89,13 @@ actual object GenericHash { return hashResult } + actual fun genericHashKeygen(): UByteArray { + val generatedKey = UByteArray(crypto_generichash_BYTES) + val generatedKeyPinned = generatedKey.pin() + crypto_generichash_keygen(generatedKeyPinned.toPtr()) + generatedKeyPinned.unpin() + return generatedKey + } + } diff --git a/supported_bindings_list.md b/supported_bindings_list.md index 90ae5f0..6c765f4 100644 --- a/supported_bindings_list.md +++ b/supported_bindings_list.md @@ -67,8 +67,8 @@ | crypto_generichash_blake2b_salt_personal | | | crypto_generichash_final | :heavy_check_mark: | | crypto_generichash_init | :heavy_check_mark: | -| crypto_generichash_keygen | | -| crypto_generichash_update | :heavy_check_mark: | +| crypto_generichash_keygen | :heavy_check_mark: | +| crypto_generichash_update | :heavy_check_mark: | | crypto_hash | | | crypto_hash_sha256 | | | crypto_hash_sha256_final | |