Got valid blake2b hash
This commit is contained in:
		
							parent
							
								
									cc2f392bb7
								
							
						
					
					
						commit
						1a89ee5154
					
				@ -1,5 +1,6 @@
 | 
			
		||||
package com.ionspin.kotlin.crypto
 | 
			
		||||
 | 
			
		||||
import com.ionspin.kotlin.crypto.hash.blake2b.Blake2bStateless
 | 
			
		||||
import com.ionspin.kotlin.crypto.hash.sha.Sha256Pure
 | 
			
		||||
import com.ionspin.kotlin.crypto.hash.sha.Sha512Pure
 | 
			
		||||
 | 
			
		||||
@ -9,5 +10,6 @@ import com.ionspin.kotlin.crypto.hash.sha.Sha512Pure
 | 
			
		||||
 * on 24-May-2020
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
typealias Sha256Stateless = Sha256Pure.Companion
 | 
			
		||||
typealias Sha512Stateless = Sha512Pure.Companion
 | 
			
		||||
@ -30,6 +30,6 @@ import com.ionspin.kotlin.crypto.util.rotateRight
 | 
			
		||||
@ExperimentalUnsignedTypes
 | 
			
		||||
expect class Blake2bDelegated(key: UByteArray? = null, hashLength: Int = 64) : Blake2b
 | 
			
		||||
 | 
			
		||||
expect class Blake2bStateless : Blake2bStatelessInterface
 | 
			
		||||
expect object Blake2bStateless : Blake2bStatelessInterface
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ actual class Blake2bDelegated actual constructor(key: UByteArray?, hashLength: I
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ExperimentalUnsignedTypes
 | 
			
		||||
actual class Blake2bStateless : Blake2bStatelessInterface {
 | 
			
		||||
actual object Blake2bStateless : Blake2bStatelessInterface {
 | 
			
		||||
    override fun digest(inputString: String, key: String?, hashLength: Int): UByteArray {
 | 
			
		||||
        TODO("not implemented yet")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -28,7 +28,7 @@ actual class Blake2bDelegated actual constructor(key: UByteArray?, hashLength: I
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ExperimentalUnsignedTypes
 | 
			
		||||
actual class Blake2bStateless : Blake2bStatelessInterface {
 | 
			
		||||
actual object Blake2bStateless : Blake2bStatelessInterface {
 | 
			
		||||
    override fun digest(inputString: String, key: String?, hashLength: Int): UByteArray {
 | 
			
		||||
        TODO("not implemented yet")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
package com.ionspin.kotlin.crypto.hash.blake2b
 | 
			
		||||
import com.ionspin.kotlin.crypto.util.toHexString
 | 
			
		||||
import interop.*
 | 
			
		||||
import kotlinx.cinterop.*
 | 
			
		||||
import libsodium.*
 | 
			
		||||
@ -10,7 +11,7 @@ import libsodium.*
 | 
			
		||||
 | 
			
		||||
@ExperimentalUnsignedTypes
 | 
			
		||||
actual class Blake2bDelegated actual constructor(key: UByteArray?, hashLength: Int) : Blake2b {
 | 
			
		||||
    override val MAX_HASH_BYTES: Int = 1024
 | 
			
		||||
    override val MAX_HASH_BYTES: Int = 64
 | 
			
		||||
 | 
			
		||||
    override fun update(data: UByteArray) {
 | 
			
		||||
        TODO("not implemented yet")
 | 
			
		||||
@ -31,16 +32,30 @@ actual class Blake2bDelegated actual constructor(key: UByteArray?, hashLength: I
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
actual class Blake2bStateless : Blake2bStatelessInterface {
 | 
			
		||||
@Suppress("EXPERIMENTAL_API_USAGE", "EXPERIMENTAL_UNSIGNED_LITERALS")
 | 
			
		||||
actual object Blake2bStateless : Blake2bStatelessInterface {
 | 
			
		||||
    override fun digest(inputString: String, key: String?, hashLength: Int): UByteArray {
 | 
			
		||||
        TODO("not implemented yet")
 | 
			
		||||
        return memScoped {
 | 
			
		||||
            val hashResult = UByteArray(MAX_HASH_BYTES)
 | 
			
		||||
            val hashPointer = hashResult.toCValues().getPointer(this)
 | 
			
		||||
            crypto_generichash(
 | 
			
		||||
                hashPointer,
 | 
			
		||||
                hashLength.toULong(),
 | 
			
		||||
                inputString.cstr.getPointer(this).reinterpret(),
 | 
			
		||||
                inputString.length.toULong(), key?.cstr?.getPointer(this)?.reinterpret(),
 | 
			
		||||
                key?.length?.toULong() ?: 0UL
 | 
			
		||||
            )
 | 
			
		||||
            println("HashPointer: ${hashPointer.readBytes(MAX_HASH_BYTES).toUByteArray().toHexString()}")
 | 
			
		||||
            println(hashResult.toHexString())
 | 
			
		||||
            hashResult
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun digest(inputMessage: UByteArray, key: UByteArray, hashLength: Int): UByteArray {
 | 
			
		||||
        TODO("not implemented yet")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override val MAX_HASH_BYTES: Int
 | 
			
		||||
        get() = TODO("not implemented yet")
 | 
			
		||||
    override val MAX_HASH_BYTES: Int = 64
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -20,4 +20,9 @@ class Blake2bLinuxTest {
 | 
			
		||||
        println("Sodium init $sodiumInitResult")
 | 
			
		||||
        println("1")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    fun testBlake2BSodiumInterop() {
 | 
			
		||||
        Blake2bStateless.digest("test")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -22,6 +22,7 @@ import com.ionspin.kotlin.crypto.hash.sha.Sha512Pure
 | 
			
		||||
import com.ionspin.kotlin.crypto.keyderivation.argon2.Argon2Pure
 | 
			
		||||
import com.ionspin.kotlin.crypto.keyderivation.argon2.ArgonType
 | 
			
		||||
import com.ionspin.kotlin.crypto.util.testBlocking
 | 
			
		||||
import com.ionspin.kotlin.crypto.util.toHexString
 | 
			
		||||
import kotlin.test.Test
 | 
			
		||||
import kotlin.test.assertEquals
 | 
			
		||||
import kotlin.test.assertTrue
 | 
			
		||||
@ -155,5 +156,11 @@ class ReadmeTest {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    fun debugTest() {
 | 
			
		||||
        val result = Blake2bStateless.digest("test")
 | 
			
		||||
        println(result.toHexString())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user