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 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
|
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 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(
|
val validationResult = sodium.crypto_box_seal_open(
|
||||||
message.asByteArray(),
|
message.asByteArray(),
|
||||||
ciphertext.asByteArray(),
|
ciphertext.asByteArray(),
|
||||||
ciphertext.size.toLong(),
|
ciphertext.size.toLong(),
|
||||||
senderPublicKey.asByteArray(),
|
recipientsPublicKey.asByteArray(),
|
||||||
recipientsSecretKey.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 message = UByteArray(ciphertext.size - crypto_box_SEALBYTES)
|
||||||
val senderPublicKey = UByteArray(crypto_box_SEALBYTES) {
|
|
||||||
message[ciphertext.size - crypto_box_SEALBYTES + it - 1]
|
val recipientsPublicKeyPinned = recipientsPublicKey.pin()
|
||||||
}
|
|
||||||
val senderPublicKeyPinned = senderPublicKey.pin()
|
|
||||||
val messagePinned = message.pin()
|
val messagePinned = message.pin()
|
||||||
val ciphertextPinned = ciphertext.pin()
|
val ciphertextPinned = ciphertext.pin()
|
||||||
val recipientsSecretKeyPinned = recipientsSecretKey.pin()
|
val recipientsSecretKeyPinned = recipientsSecretKey.pin()
|
||||||
@ -343,13 +341,13 @@ actual object Box {
|
|||||||
messagePinned.toPtr(),
|
messagePinned.toPtr(),
|
||||||
ciphertextPinned.toPtr(),
|
ciphertextPinned.toPtr(),
|
||||||
ciphertext.size.convert(),
|
ciphertext.size.convert(),
|
||||||
senderPublicKeyPinned.toPtr(),
|
recipientsPublicKeyPinned.toPtr(),
|
||||||
recipientsSecretKeyPinned.toPtr()
|
recipientsSecretKeyPinned.toPtr()
|
||||||
)
|
)
|
||||||
|
|
||||||
messagePinned.unpin()
|
messagePinned.unpin()
|
||||||
ciphertextPinned.unpin()
|
ciphertextPinned.unpin()
|
||||||
senderPublicKeyPinned.unpin()
|
recipientsPublicKeyPinned.unpin()
|
||||||
recipientsSecretKeyPinned.unpin()
|
recipientsSecretKeyPinned.unpin()
|
||||||
|
|
||||||
if (validationResult != 0) {
|
if (validationResult != 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user