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