Fixed sha256/512 implementation updateable version counter overflowing because it was int instead of long, fixed nonce overwriting in pure xchacha20poly1305 implementation
This commit is contained in:
1 parent
52b6a4ad8e
commit
1dc423a509
7 files changed
+156
-35
No files matched your search
+75
@@ -0,0 +1,75 @@
|
||||
package com.ionspin.kotlin.crypto
|
||||
|
||||
import com.ionspin.kotlin.crypto.hash.encodeToUByteArray
|
||||
import com.ionspin.kotlin.crypto.util.toHexString
|
||||
import kotlinx.cinterop.*
|
||||
import libsodium.*
|
||||
import platform.posix.free
|
||||
import kotlin.test.Ignore
|
||||
import kotlin.test.Test
|
||||
|
||||
/**
|
||||
* Created by Ugljesa Jovanovic
|
||||
* ugljesa.jovanovic@ionspin.com
|
||||
* on 13-Jul-2020
|
||||
*/
|
||||
class HelperTest {
|
||||
@Ignore //Just used for debugging pure implementation
|
||||
@Test
|
||||
fun longSha256() {
|
||||
for (target in 0L until 10L) {
|
||||
generateForRounds256(target)
|
||||
}
|
||||
for (target in 0L until 16_777_216L step 1_000_000L) {
|
||||
generateForRounds256(target)
|
||||
}
|
||||
generateForRounds256(16_777_216L)
|
||||
}
|
||||
|
||||
fun generateForRounds256(target: Long) {
|
||||
val updateValue =
|
||||
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno".encodeToUByteArray().toCValues()
|
||||
val state = platform.linux.malloc(crypto_hash_sha256_state.size.convert())!!
|
||||
.reinterpret<crypto_hash_sha256_state>()
|
||||
|
||||
crypto_hash_sha256_init(state)
|
||||
for (i in 0 until target) {
|
||||
crypto_hash_sha256_update(state, updateValue, updateValue.size.convert())
|
||||
}
|
||||
val result = UByteArray(32)
|
||||
val resultPinned = result.pin()
|
||||
crypto_hash_sha256_final(state, resultPinned.addressOf(0))
|
||||
println("$target to \"${result.toHexString()}\",")
|
||||
free(state)
|
||||
}
|
||||
@Ignore //Just used for debugging pure implementation
|
||||
@Test
|
||||
fun longSha512() {
|
||||
|
||||
for (target in 0L until 10L) {
|
||||
generateForRounds512(target)
|
||||
}
|
||||
for (target in 0L until 16_777_216L step 1_000_000L) {
|
||||
generateForRounds512(target)
|
||||
}
|
||||
generateForRounds512(16_777_216L)
|
||||
}
|
||||
|
||||
fun generateForRounds512(target: Long) {
|
||||
println("Wut")
|
||||
val updateValue =
|
||||
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno".encodeToUByteArray().toCValues()
|
||||
val state = platform.linux.malloc(crypto_hash_sha512_state.size.convert())!!
|
||||
.reinterpret<crypto_hash_sha512_state>()
|
||||
|
||||
crypto_hash_sha512_init(state)
|
||||
for (i in 0 until target) {
|
||||
crypto_hash_sha512_update(state, updateValue, updateValue.size.convert())
|
||||
}
|
||||
val result = UByteArray(32)
|
||||
val resultPinned = result.pin()
|
||||
crypto_hash_sha512_final(state, resultPinned.addressOf(0))
|
||||
println("$target to \"${result.toHexString()}\",")
|
||||
free(state)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user