Progress
This commit is contained in:
		
							parent
							
								
									3ad86e284a
								
							
						
					
					
						commit
						907128fcfa
					
				@ -22,6 +22,10 @@ object Crypto : CryptoProvider {
 | 
			
		||||
        Initializer.initialize()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun initializeWithCallback(done: () -> Unit) {
 | 
			
		||||
        Initializer.initializeWithCallback(done)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    object Blake2b {
 | 
			
		||||
        fun updateable(): com.ionspin.kotlin.crypto.hash.blake2b.Blake2b {
 | 
			
		||||
@ -29,7 +33,6 @@ object Crypto : CryptoProvider {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        fun stateless(message: String): UByteArray {
 | 
			
		||||
            println("?")
 | 
			
		||||
            return Blake2bStateless.digest(message)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
package com.ionspin.kotlin.crypto.hash.blake2b
 | 
			
		||||
import com.ionspin.kotlin.crypto.util.toHexString
 | 
			
		||||
import kotlinx.cinterop.*
 | 
			
		||||
import kotlinx.cinterop.nativeHeap.alloc
 | 
			
		||||
import libsodium.*
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Ugljesa Jovanovic
 | 
			
		||||
@ -12,22 +13,39 @@ import libsodium.*
 | 
			
		||||
actual class Blake2bDelegated actual constructor(key: UByteArray?, hashLength: Int) : Blake2b {
 | 
			
		||||
    override val MAX_HASH_BYTES: Int = 64
 | 
			
		||||
 | 
			
		||||
    val requestedHashLength : Int
 | 
			
		||||
    val state : crypto_generichash_state
 | 
			
		||||
    init {
 | 
			
		||||
        println("Initializing libsodium hash")
 | 
			
		||||
        requestedHashLength = hashLength
 | 
			
		||||
        state = nativeHeap.alloc()
 | 
			
		||||
        println("allocated state")
 | 
			
		||||
        crypto_generichash_init(state.ptr, key?.run { this.toUByteArray().toCValues() }, key?.size?.toULong() ?: 0UL, hashLength.toULong())
 | 
			
		||||
        println("Initialized libsodium hash")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun update(data: UByteArray) {
 | 
			
		||||
        TODO("not implemented yet")
 | 
			
		||||
        crypto_generichash_update(state.ptr, data.toCValues(), data.size.toULong())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun update(data: String) {
 | 
			
		||||
        TODO("not implemented yet")
 | 
			
		||||
        val ubyteArray = data.encodeToByteArray().toUByteArray()
 | 
			
		||||
        crypto_generichash_update(state.ptr, ubyteArray.toCValues(), ubyteArray.size.toULong())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun digest(): UByteArray {
 | 
			
		||||
        val inputString = "test"
 | 
			
		||||
        val hashLength = 64
 | 
			
		||||
        val key : String? = null
 | 
			
		||||
        val result2 = allocEverything(inputString, key, hashLength)
 | 
			
		||||
        val result2String = result2.toHexString()
 | 
			
		||||
        println(result2String)
 | 
			
		||||
        return ubyteArrayOf(0U)
 | 
			
		||||
        val hashResult = UByteArray(requestedHashLength)
 | 
			
		||||
        val hashResultPinned = hashResult.pin()
 | 
			
		||||
        val result = crypto_generichash_final(state.ptr, hashResultPinned.addressOf(0), requestedHashLength.toULong())
 | 
			
		||||
        println("HashPointer: ${hashResult.toHexString()}")
 | 
			
		||||
        return hashResult
 | 
			
		||||
//        val inputString = "test"
 | 
			
		||||
//        val hashLength = 64
 | 
			
		||||
//        val key : String? = null
 | 
			
		||||
//        val result2 = allocEverything(inputString, key, hashLength)
 | 
			
		||||
//        val result2String = result2.toHexString()
 | 
			
		||||
//        println(result2String)
 | 
			
		||||
//        return ubyteArrayOf(0U)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun allocEverything(inputString: String, key: String?, hashLength: Int) : UByteArray {
 | 
			
		||||
@ -51,7 +69,7 @@ actual class Blake2bDelegated actual constructor(key: UByteArray?, hashLength: I
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun digestString(): String {
 | 
			
		||||
        TODO("not implemented yet")
 | 
			
		||||
        return digest().toHexString()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,25 +6,41 @@ package com.ionspin.kotlin.crypto.hash.blake2b
 | 
			
		||||
 * on 24-May-2020
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import com.ionspin.kotlin.crypto.Crypto
 | 
			
		||||
import com.ionspin.kotlin.crypto.hash.blake2b.Blake2bStateless
 | 
			
		||||
import com.ionspin.kotlin.crypto.util.testBlocking
 | 
			
		||||
import interop.*
 | 
			
		||||
import kotlinx.cinterop.*
 | 
			
		||||
import kotlinx.coroutines.GlobalScope
 | 
			
		||||
import kotlinx.coroutines.runBlocking
 | 
			
		||||
import libsodium.*
 | 
			
		||||
 | 
			
		||||
import kotlin.test.Test
 | 
			
		||||
import kotlin.test.assertTrue
 | 
			
		||||
 | 
			
		||||
class Blake2bLinuxTest {
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    fun testCinterop() {
 | 
			
		||||
        val sodiumInitResult = sodium_init()
 | 
			
		||||
        println("Sodium init $sodiumInitResult")
 | 
			
		||||
        println("1")
 | 
			
		||||
        runBlocking {
 | 
			
		||||
            Crypto.initialize()
 | 
			
		||||
        }
 | 
			
		||||
//        val sodiumInitResult = sodium_init()
 | 
			
		||||
//        println("Sodium init $sodiumInitResult")
 | 
			
		||||
//        println("1")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    fun testBlake2BSodiumInterop() = testBlocking {
 | 
			
		||||
    fun testBlake2bUpdateable() = testBlocking {
 | 
			
		||||
        val blake2b = Crypto.Blake2b.updateable()
 | 
			
		||||
        blake2b.update("test")
 | 
			
		||||
        val result = blake2b.digestString()
 | 
			
		||||
        println(result)
 | 
			
		||||
        assertTrue { result.length > 2 }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    fun testBlake2BStateless() = testBlocking {
 | 
			
		||||
        Blake2bStateless.digest("test")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -8,10 +8,21 @@ import kotlinx.coroutines.GlobalScope
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
 | 
			
		||||
object Sample {
 | 
			
		||||
    suspend fun runSample() {
 | 
			
		||||
        Crypto.initialize()
 | 
			
		||||
    fun runSample() {
 | 
			
		||||
        println("Initializing crypto library")
 | 
			
		||||
        Crypto.initializeWithCallback {
 | 
			
		||||
            blake2b()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun blake2b() {
 | 
			
		||||
        println("Blake2b updateable")
 | 
			
		||||
        val blake2bUpdateable = Crypto.Blake2b.updateable()
 | 
			
		||||
        blake2bUpdateable.update("test")
 | 
			
		||||
        println(blake2bUpdateable.digest().toHexString())
 | 
			
		||||
        println("Blake2b stateless")
 | 
			
		||||
        println("Blake2b stateless: ${Crypto.Blake2b.stateless("test")}")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,21 +1,21 @@
 | 
			
		||||
import com.ionspin.kotlin.crypto.hash.blake2b.Blake2bDelegated
 | 
			
		||||
import com.ionspin.kotlin.crypto.hash.blake2b.Blake2bStateless
 | 
			
		||||
import com.ionspin.kotlin.crypto.sample.Sample
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.GlobalScope
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
import kotlinx.coroutines.runBlocking
 | 
			
		||||
import platform.posix.pthread_self
 | 
			
		||||
import platform.posix.sleep
 | 
			
		||||
import kotlin.native.concurrent.TransferMode
 | 
			
		||||
import kotlin.native.concurrent.Worker
 | 
			
		||||
import kotlin.time.ExperimentalTime
 | 
			
		||||
import kotlin.time.measureTime
 | 
			
		||||
 | 
			
		||||
@ExperimentalTime
 | 
			
		||||
 | 
			
		||||
fun main() = runBlocking {
 | 
			
		||||
fun main() {
 | 
			
		||||
 | 
			
		||||
    Sample.runSample()
 | 
			
		||||
//    println("Test")
 | 
			
		||||
////    Blake
 | 
			
		||||
//    val blake = Blake2bDelegated()
 | 
			
		||||
//    val res = blake.digest()
 | 
			
		||||
//    println("Result of res")
 | 
			
		||||
////    println(res)
 | 
			
		||||
//    val staticRes = Blake2bStateless.digest("test")
 | 
			
		||||
//    println("Result:")
 | 
			
		||||
//    println(staticRes)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user