1package com.peachpasswords.vault23import org.junit.Assert.assertArrayEquals4import org.junit.Assert.assertEquals5import org.junit.Assert.assertFalse6import org.junit.Test78910111213class VaultCryptoKdfTest {1415 16 17 private val nonBmpPassword = "test🔑" 18 private val fixedSalt = ByteArray(VaultCrypto.SALT_SIZE) { it.toByte() }1920 @Test fun derive_is_deterministic_for_non_bmp_password() {21 val a = VaultCrypto.deriveKey(nonBmpPassword, fixedSalt)22 val b = VaultCrypto.deriveKey(nonBmpPassword, fixedSalt)23 assertArrayEquals("same password + salt yields the same key", a, b)24 assertEquals(VaultCrypto.ARGON2_HASH_LENGTH, a.size)25 }2627 @Test fun derive_keys_off_utf8_bytes_of_the_password() {28 29 assertEquals(8, nonBmpPassword.toByteArray(Charsets.UTF_8).size)3031 32 33 34 35 36 val key = VaultCrypto.deriveKey(nonBmpPassword, fixedSalt)37 val asciiKey = VaultCrypto.deriveKey("test", fixedSalt)38 assertFalse("the emoji must contribute to the derived key", key.contentEquals(asciiKey))39 }40}