Added seal box test, fxed seal box jvm implementation

This commit is contained in:
Ugljesa Jovanovic 2020-09-10 20:50:14 +02:00
parent 7a8640638c
commit 25fcd0cae2
No known key found for this signature in database
GPG Key ID: 33A5F353387711A5
4 changed files with 28 additions and 13 deletions

View File

@ -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
} }

View File

@ -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)
}
}
}
} }

View File

@ -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()
) )

View File

@ -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) {