Added generichash keygen

This commit is contained in:
Ugljesa Jovanovic 2020-08-31 19:39:19 +02:00 committed by Ugljesa Jovanovic
parent 16cb5c2dee
commit 1878144b8f
No known key found for this signature in database
GPG Key ID: 178E6DFCECCB0E0F
6 changed files with 27 additions and 2 deletions

View File

@ -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
}

View File

@ -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

View File

@ -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()
}
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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 | |