Added seal box test, fxed seal box jvm implementation
This commit is contained in:
parent
7a8640638c
commit
25fcd0cae2
@ -85,6 +85,6 @@ expect object Box {
|
||||
|
||||
fun seal(message: UByteArray, recipientsPublicKey: UByteArray) : UByteArray
|
||||
|
||||
fun sealOpen(ciphertext: UByteArray, recipientsSecretKey: UByteArray) : UByteArray
|
||||
fun sealOpen(ciphertext: UByteArray, recipientsPublicKey: UByteArray, recipientsSecretKey: UByteArray) : UByteArray
|
||||
|
||||
}
|
@ -108,5 +108,25 @@ class BoxTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSeal() {
|
||||
LibsodiumInitializer.initializeWithCallback {
|
||||
val message = "Message message message".encodeToUByteArray()
|
||||
val recipientKeypair = Box.keypair()
|
||||
val sealed = Box.seal(message, recipientKeypair.publicKey)
|
||||
val unsealed = Box.sealOpen(sealed, recipientKeypair.publicKey, recipientKeypair.secretKey)
|
||||
|
||||
assertTrue {
|
||||
unsealed.contentEquals(message)
|
||||
}
|
||||
|
||||
assertFailsWith<BoxCorruptedOrTamperedDataException>() {
|
||||
val tampered = sealed.copyOf()
|
||||
tampered[1] = 0U
|
||||
Box.sealOpen(tampered, recipientKeypair.publicKey, recipientKeypair.secretKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -205,16 +205,13 @@ actual object Box {
|
||||
return ciphertextWithPublicKey
|
||||
}
|
||||
|
||||
actual fun sealOpen(ciphertext: UByteArray, recipientsSecretKey: UByteArray): UByteArray {
|
||||
actual fun sealOpen(ciphertext: UByteArray, recipientsPublicKey: UByteArray, recipientsSecretKey: UByteArray): UByteArray {
|
||||
val message = UByteArray(ciphertext.size - crypto_box_SEALBYTES)
|
||||
val senderPublicKey = UByteArray(crypto_box_SEALBYTES) {
|
||||
message[ciphertext.size - crypto_box_SEALBYTES + it - 1]
|
||||
}
|
||||
val validationResult = sodium.crypto_box_seal_open(
|
||||
message.asByteArray(),
|
||||
ciphertext.asByteArray(),
|
||||
ciphertext.size.toLong(),
|
||||
senderPublicKey.asByteArray(),
|
||||
recipientsPublicKey.asByteArray(),
|
||||
recipientsSecretKey.asByteArray()
|
||||
)
|
||||
|
||||
|
@ -329,12 +329,10 @@ actual object Box {
|
||||
|
||||
}
|
||||
|
||||
actual fun sealOpen(ciphertext: UByteArray, recipientsSecretKey: UByteArray): UByteArray {
|
||||
actual fun sealOpen(ciphertext: UByteArray, recipientsPublicKey: UByteArray, recipientsSecretKey: UByteArray): UByteArray {
|
||||
val message = UByteArray(ciphertext.size - crypto_box_SEALBYTES)
|
||||
val senderPublicKey = UByteArray(crypto_box_SEALBYTES) {
|
||||
message[ciphertext.size - crypto_box_SEALBYTES + it - 1]
|
||||
}
|
||||
val senderPublicKeyPinned = senderPublicKey.pin()
|
||||
|
||||
val recipientsPublicKeyPinned = recipientsPublicKey.pin()
|
||||
val messagePinned = message.pin()
|
||||
val ciphertextPinned = ciphertext.pin()
|
||||
val recipientsSecretKeyPinned = recipientsSecretKey.pin()
|
||||
@ -343,13 +341,13 @@ actual object Box {
|
||||
messagePinned.toPtr(),
|
||||
ciphertextPinned.toPtr(),
|
||||
ciphertext.size.convert(),
|
||||
senderPublicKeyPinned.toPtr(),
|
||||
recipientsPublicKeyPinned.toPtr(),
|
||||
recipientsSecretKeyPinned.toPtr()
|
||||
)
|
||||
|
||||
messagePinned.unpin()
|
||||
ciphertextPinned.unpin()
|
||||
senderPublicKeyPinned.unpin()
|
||||
recipientsPublicKeyPinned.unpin()
|
||||
recipientsSecretKeyPinned.unpin()
|
||||
|
||||
if (validationResult != 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user