Remove xchacha20 streaming API for now, as they are not available on apple builds
This commit is contained in:
parent
59c5f958ca
commit
1424db0336
@ -2,6 +2,7 @@
|
||||
(All dates are DD.MM.YYYY)
|
||||
|
||||
#### 0.9.1-SNAPSHOT - current development snapshot
|
||||
- Fix #42, return values from libsodium calls are now checked
|
||||
|
||||
#### 0.9.0 - 23.9.2023
|
||||
- Breaking changes:
|
||||
|
@ -23,8 +23,9 @@ expect object Stream {
|
||||
fun chacha20IetfXor(message : UByteArray, nonce: UByteArray, key: UByteArray) : UByteArray
|
||||
fun chacha20IetfXorIc(message: UByteArray, nonce: UByteArray, initialCounter: UInt, key: UByteArray) : UByteArray
|
||||
|
||||
fun xChacha20Keygen() : UByteArray
|
||||
|
||||
fun xChacha20Xor(message : UByteArray, nonce: UByteArray, key: UByteArray) : UByteArray
|
||||
fun xChacha20XorIc(message : UByteArray, nonce: UByteArray, initialCounter: ULong, key: UByteArray) : UByteArray
|
||||
// Not available on apple builds
|
||||
// fun xChacha20Keygen() : UByteArray
|
||||
//
|
||||
// fun xChacha20Xor(message : UByteArray, nonce: UByteArray, key: UByteArray) : UByteArray
|
||||
// fun xChacha20XorIc(message : UByteArray, nonce: UByteArray, initialCounter: ULong, key: UByteArray) : UByteArray
|
||||
}
|
||||
|
@ -67,25 +67,26 @@ class StreamTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testXChaCha20IetfStream() = runTest {
|
||||
LibsodiumInitializer.initializeWithCallback {
|
||||
val message = "This is a cha cha message".encodeToUByteArray()
|
||||
val nonce = LibsodiumRandom.bufDeterministic(crypto_stream_xchacha20_NONCEBYTES, seed)
|
||||
val key = Stream.xChacha20Keygen()
|
||||
val encryptedUsingLibsodium = Stream.xChacha20Xor(message, nonce, key)
|
||||
val encryptedUsingLibsodiumWithInitialCounter = Stream.xChacha20XorIc(message, nonce, 0U, key)
|
||||
println(encryptedUsingLibsodium.toHexString())
|
||||
println(encryptedUsingLibsodiumWithInitialCounter.toHexString())
|
||||
assertTrue {
|
||||
encryptedUsingLibsodium.contentEquals(encryptedUsingLibsodiumWithInitialCounter)
|
||||
}
|
||||
val decryptedUsingLibsodium = Stream.xChacha20Xor(encryptedUsingLibsodium, nonce, key)
|
||||
println(message.toHexString())
|
||||
println(decryptedUsingLibsodium.toHexString())
|
||||
assertTrue {
|
||||
decryptedUsingLibsodium.contentEquals(message)
|
||||
}
|
||||
}
|
||||
}
|
||||
// Not available on apple builds
|
||||
// @Test
|
||||
// fun testXChaCha20IetfStream() = runTest {
|
||||
// LibsodiumInitializer.initializeWithCallback {
|
||||
// val message = "This is a cha cha message".encodeToUByteArray()
|
||||
// val nonce = LibsodiumRandom.bufDeterministic(crypto_stream_xchacha20_NONCEBYTES, seed)
|
||||
// val key = Stream.xChacha20Keygen()
|
||||
// val encryptedUsingLibsodium = Stream.xChacha20Xor(message, nonce, key)
|
||||
// val encryptedUsingLibsodiumWithInitialCounter = Stream.xChacha20XorIc(message, nonce, 0U, key)
|
||||
// println(encryptedUsingLibsodium.toHexString())
|
||||
// println(encryptedUsingLibsodiumWithInitialCounter.toHexString())
|
||||
// assertTrue {
|
||||
// encryptedUsingLibsodium.contentEquals(encryptedUsingLibsodiumWithInitialCounter)
|
||||
// }
|
||||
// val decryptedUsingLibsodium = Stream.xChacha20Xor(encryptedUsingLibsodium, nonce, key)
|
||||
// println(message.toHexString())
|
||||
// println(decryptedUsingLibsodium.toHexString())
|
||||
// assertTrue {
|
||||
// decryptedUsingLibsodium.contentEquals(message)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
@ -82,41 +82,41 @@ actual object Stream {
|
||||
return result.toUByteArray()
|
||||
}
|
||||
|
||||
actual fun xChacha20Keygen(): UByteArray {
|
||||
val result = getSodium().crypto_stream_xchacha20_keygen()
|
||||
|
||||
return result.toUByteArray()
|
||||
}
|
||||
|
||||
actual fun xChacha20Xor(
|
||||
message: UByteArray,
|
||||
nonce: UByteArray,
|
||||
key: UByteArray
|
||||
): UByteArray {
|
||||
val result = getSodium().crypto_stream_xchacha20_xor(
|
||||
message.toUInt8Array(),
|
||||
nonce.toUInt8Array(),
|
||||
key.toUInt8Array()
|
||||
)
|
||||
|
||||
return result.toUByteArray()
|
||||
}
|
||||
|
||||
actual fun xChacha20XorIc(
|
||||
message: UByteArray,
|
||||
nonce: UByteArray,
|
||||
initialCounter: ULong,
|
||||
key: UByteArray
|
||||
): UByteArray {
|
||||
val result = getSodium().crypto_stream_xchacha20_xor_ic(
|
||||
message.toUInt8Array(),
|
||||
nonce.toUInt8Array(),
|
||||
initialCounter.toUInt(),
|
||||
key.toUInt8Array()
|
||||
)
|
||||
|
||||
return result.toUByteArray()
|
||||
}
|
||||
// actual fun xChacha20Keygen(): UByteArray {
|
||||
// val result = getSodium().crypto_stream_xchacha20_keygen()
|
||||
//
|
||||
// return result.toUByteArray()
|
||||
// }
|
||||
//
|
||||
// actual fun xChacha20Xor(
|
||||
// message: UByteArray,
|
||||
// nonce: UByteArray,
|
||||
// key: UByteArray
|
||||
// ): UByteArray {
|
||||
// val result = getSodium().crypto_stream_xchacha20_xor(
|
||||
// message.toUInt8Array(),
|
||||
// nonce.toUInt8Array(),
|
||||
// key.toUInt8Array()
|
||||
// )
|
||||
//
|
||||
// return result.toUByteArray()
|
||||
// }
|
||||
//
|
||||
// actual fun xChacha20XorIc(
|
||||
// message: UByteArray,
|
||||
// nonce: UByteArray,
|
||||
// initialCounter: ULong,
|
||||
// key: UByteArray
|
||||
// ): UByteArray {
|
||||
// val result = getSodium().crypto_stream_xchacha20_xor_ic(
|
||||
// message.toUInt8Array(),
|
||||
// nonce.toUInt8Array(),
|
||||
// initialCounter.toUInt(),
|
||||
// key.toUInt8Array()
|
||||
// )
|
||||
//
|
||||
// return result.toUByteArray()
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
@ -97,49 +97,49 @@ actual object Stream {
|
||||
return result
|
||||
}
|
||||
|
||||
actual fun xChacha20Keygen(): UByteArray {
|
||||
val result = UByteArray(crypto_stream_chacha20_KEYBYTES)
|
||||
|
||||
sodiumJna.crypto_stream_xchacha20_keygen(result.asByteArray())
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
actual fun xChacha20Xor(
|
||||
message: UByteArray,
|
||||
nonce: UByteArray,
|
||||
key: UByteArray
|
||||
): UByteArray {
|
||||
val result = UByteArray(message.size)
|
||||
|
||||
sodiumJna.crypto_stream_xchacha20_xor(
|
||||
result.asByteArray(),
|
||||
message.asByteArray(),
|
||||
message.size.toLong(),
|
||||
nonce.asByteArray(),
|
||||
key.asByteArray()
|
||||
).ensureLibsodiumSuccess()
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
actual fun xChacha20XorIc(
|
||||
message: UByteArray,
|
||||
nonce: UByteArray,
|
||||
initialCounter: ULong,
|
||||
key: UByteArray
|
||||
): UByteArray {
|
||||
val result = UByteArray(message.size)
|
||||
|
||||
sodiumJna.crypto_stream_xchacha20_xor_ic(
|
||||
result.asByteArray(),
|
||||
message.asByteArray(),
|
||||
message.size.toLong(),
|
||||
nonce.asByteArray(),
|
||||
initialCounter.toLong(),
|
||||
key.asByteArray()
|
||||
).ensureLibsodiumSuccess()
|
||||
|
||||
return result
|
||||
}
|
||||
// actual fun xChacha20Keygen(): UByteArray {
|
||||
// val result = UByteArray(crypto_stream_chacha20_KEYBYTES)
|
||||
//
|
||||
// sodiumJna.crypto_stream_xchacha20_keygen(result.asByteArray())
|
||||
//
|
||||
// return result
|
||||
// }
|
||||
//
|
||||
// actual fun xChacha20Xor(
|
||||
// message: UByteArray,
|
||||
// nonce: UByteArray,
|
||||
// key: UByteArray
|
||||
// ): UByteArray {
|
||||
// val result = UByteArray(message.size)
|
||||
//
|
||||
// sodiumJna.crypto_stream_xchacha20_xor(
|
||||
// result.asByteArray(),
|
||||
// message.asByteArray(),
|
||||
// message.size.toLong(),
|
||||
// nonce.asByteArray(),
|
||||
// key.asByteArray()
|
||||
// ).ensureLibsodiumSuccess()
|
||||
//
|
||||
// return result
|
||||
// }
|
||||
//
|
||||
// actual fun xChacha20XorIc(
|
||||
// message: UByteArray,
|
||||
// nonce: UByteArray,
|
||||
// initialCounter: ULong,
|
||||
// key: UByteArray
|
||||
// ): UByteArray {
|
||||
// val result = UByteArray(message.size)
|
||||
//
|
||||
// sodiumJna.crypto_stream_xchacha20_xor_ic(
|
||||
// result.asByteArray(),
|
||||
// message.asByteArray(),
|
||||
// message.size.toLong(),
|
||||
// nonce.asByteArray(),
|
||||
// initialCounter.toLong(),
|
||||
// key.asByteArray()
|
||||
// ).ensureLibsodiumSuccess()
|
||||
//
|
||||
// return result
|
||||
// }
|
||||
}
|
||||
|
@ -11,9 +11,9 @@ import libsodium.crypto_stream_chacha20_keygen
|
||||
import libsodium.crypto_stream_chacha20_xor
|
||||
import libsodium.crypto_stream_chacha20_xor_ic
|
||||
|
||||
import libsodium.crypto_stream_xchacha20_keygen
|
||||
import libsodium.crypto_stream_xchacha20_xor
|
||||
import libsodium.crypto_stream_xchacha20_xor_ic
|
||||
//import libsodium.crypto_stream_xchacha20_keygen
|
||||
//import libsodium.crypto_stream_xchacha20_xor
|
||||
//import libsodium.crypto_stream_xchacha20_xor_ic
|
||||
|
||||
actual object Stream {
|
||||
actual fun chacha20(clen: Int, nonce: UByteArray, key: UByteArray): UByteArray {
|
||||
@ -154,70 +154,70 @@ actual object Stream {
|
||||
return result
|
||||
}
|
||||
|
||||
actual fun xChacha20Keygen(): UByteArray {
|
||||
val result = UByteArray(crypto_stream_xchacha20_KEYBYTES)
|
||||
val resultPinned = result.pin()
|
||||
|
||||
crypto_stream_xchacha20_keygen(resultPinned.toPtr())
|
||||
|
||||
resultPinned.unpin()
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
actual fun xChacha20Xor(
|
||||
message: UByteArray,
|
||||
nonce: UByteArray,
|
||||
key: UByteArray
|
||||
): UByteArray {
|
||||
val result = UByteArray(message.size)
|
||||
val messagePinned = message.pin()
|
||||
val resultPinned = result.pin()
|
||||
val noncePinned = nonce.pin()
|
||||
val keyPinned = key.pin()
|
||||
|
||||
crypto_stream_xchacha20_xor(
|
||||
resultPinned.toPtr(),
|
||||
messagePinned.toPtr(),
|
||||
message.size.convert(),
|
||||
noncePinned.toPtr(),
|
||||
keyPinned.toPtr()
|
||||
).ensureLibsodiumSuccess()
|
||||
|
||||
messagePinned.unpin()
|
||||
resultPinned.unpin()
|
||||
noncePinned.unpin()
|
||||
keyPinned.unpin()
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
actual fun xChacha20XorIc(
|
||||
message: UByteArray,
|
||||
nonce: UByteArray,
|
||||
initialCounter: ULong,
|
||||
key: UByteArray
|
||||
): UByteArray {
|
||||
val result = UByteArray(message.size)
|
||||
val messagePinned = message.pin()
|
||||
val resultPinned = result.pin()
|
||||
val noncePinned = nonce.pin()
|
||||
val keyPinned = key.pin()
|
||||
|
||||
crypto_stream_xchacha20_xor_ic(
|
||||
resultPinned.toPtr(),
|
||||
messagePinned.toPtr(),
|
||||
message.size.convert(),
|
||||
noncePinned.toPtr(),
|
||||
initialCounter.convert(),
|
||||
keyPinned.toPtr()
|
||||
).ensureLibsodiumSuccess()
|
||||
|
||||
messagePinned.unpin()
|
||||
resultPinned.unpin()
|
||||
noncePinned.unpin()
|
||||
keyPinned.unpin()
|
||||
|
||||
return result
|
||||
}
|
||||
// actual fun xChacha20Keygen(): UByteArray {
|
||||
// val result = UByteArray(crypto_stream_xchacha20_KEYBYTES)
|
||||
// val resultPinned = result.pin()
|
||||
//
|
||||
// crypto_stream_xchacha20_keygen(resultPinned.toPtr())
|
||||
//
|
||||
// resultPinned.unpin()
|
||||
//
|
||||
// return result
|
||||
// }
|
||||
//
|
||||
// actual fun xChacha20Xor(
|
||||
// message: UByteArray,
|
||||
// nonce: UByteArray,
|
||||
// key: UByteArray
|
||||
// ): UByteArray {
|
||||
// val result = UByteArray(message.size)
|
||||
// val messagePinned = message.pin()
|
||||
// val resultPinned = result.pin()
|
||||
// val noncePinned = nonce.pin()
|
||||
// val keyPinned = key.pin()
|
||||
//
|
||||
// crypto_stream_xchacha20_xor(
|
||||
// resultPinned.toPtr(),
|
||||
// messagePinned.toPtr(),
|
||||
// message.size.convert(),
|
||||
// noncePinned.toPtr(),
|
||||
// keyPinned.toPtr()
|
||||
// ).ensureLibsodiumSuccess()
|
||||
//
|
||||
// messagePinned.unpin()
|
||||
// resultPinned.unpin()
|
||||
// noncePinned.unpin()
|
||||
// keyPinned.unpin()
|
||||
//
|
||||
// return result
|
||||
// }
|
||||
//
|
||||
// actual fun xChacha20XorIc(
|
||||
// message: UByteArray,
|
||||
// nonce: UByteArray,
|
||||
// initialCounter: ULong,
|
||||
// key: UByteArray
|
||||
// ): UByteArray {
|
||||
// val result = UByteArray(message.size)
|
||||
// val messagePinned = message.pin()
|
||||
// val resultPinned = result.pin()
|
||||
// val noncePinned = nonce.pin()
|
||||
// val keyPinned = key.pin()
|
||||
//
|
||||
// crypto_stream_xchacha20_xor_ic(
|
||||
// resultPinned.toPtr(),
|
||||
// messagePinned.toPtr(),
|
||||
// message.size.convert(),
|
||||
// noncePinned.toPtr(),
|
||||
// initialCounter.convert(),
|
||||
// keyPinned.toPtr()
|
||||
// ).ensureLibsodiumSuccess()
|
||||
//
|
||||
// messagePinned.unpin()
|
||||
// resultPinned.unpin()
|
||||
// noncePinned.unpin()
|
||||
// keyPinned.unpin()
|
||||
//
|
||||
// return result
|
||||
// }
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user