KeyStoreCryptoTest.kt 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package ch.threema.localcrypto
  2. import ch.threema.app.DangerousTest
  3. import ch.threema.localcrypto.protobuf.KeyWrapper
  4. import kotlin.test.AfterTest
  5. import kotlin.test.BeforeTest
  6. import kotlin.test.Test
  7. import kotlin.test.assertContentEquals
  8. import kotlin.test.assertEquals
  9. import kotlin.test.assertFailsWith
  10. @DangerousTest(reason = "Deletes keys from the key store")
  11. class KeyStoreCryptoTest {
  12. private lateinit var keyStoreSecretKeyManager: KeyStoreSecretKeyManager
  13. private lateinit var keyStoreCrypto: KeyStoreCrypto
  14. @BeforeTest
  15. fun setUp() {
  16. keyStoreSecretKeyManager = KeyStoreSecretKeyManager()
  17. keyStoreCrypto = KeyStoreCrypto(keyStoreSecretKeyManager)
  18. keyStoreSecretKeyManager.deleteAllSecretKeys()
  19. }
  20. @AfterTest
  21. fun tearDown() {
  22. keyStoreSecretKeyManager.deleteAllSecretKeys()
  23. }
  24. @Test
  25. fun encryptAndDecrypt() {
  26. val myData = byteArrayOf(1, 2, 3, 4, 5, 6)
  27. val encryptedData = keyStoreCrypto.encryptWithNewSecretKey(myData, previousKeyAlias = null)
  28. assertEquals(SecretKeyAlias.PRIMARY, keyStoreCrypto.extractSecretKeyAlias(encryptedData))
  29. val keyWrapper = KeyWrapper.parseFrom(encryptedData)
  30. assertEquals("threema_master_key_a", keyWrapper.keyStoreAlias)
  31. assertEquals(12, keyWrapper.iv.size())
  32. val myData2 = keyStoreCrypto.decryptWithExistingSecretKey(encryptedData)
  33. assertContentEquals(myData, myData2)
  34. }
  35. @Test
  36. fun encryptAndDecryptWithSecondaryKeyAlias() {
  37. val myData = byteArrayOf(1, 2, 3, 4, 5, 6)
  38. val encryptedData = keyStoreCrypto.encryptWithNewSecretKey(myData, previousKeyAlias = SecretKeyAlias.PRIMARY)
  39. assertEquals(SecretKeyAlias.SECONDARY, keyStoreCrypto.extractSecretKeyAlias(encryptedData))
  40. val keyWrapper = KeyWrapper.parseFrom(encryptedData)
  41. assertEquals("threema_master_key_b", keyWrapper.keyStoreAlias)
  42. val myData2 = keyStoreCrypto.decryptWithExistingSecretKey(encryptedData)
  43. assertContentEquals(myData, myData2)
  44. }
  45. @Test
  46. fun deleteSecretKeyAlias() {
  47. val myData = byteArrayOf(1, 2, 3, 4, 5, 6)
  48. val encryptedData = keyStoreCrypto.encryptWithNewSecretKey(myData, previousKeyAlias = null)
  49. keyStoreCrypto.deleteSecretKey(SecretKeyAlias.PRIMARY)
  50. assertFailsWith<IllegalStateException> {
  51. keyStoreCrypto.decryptWithExistingSecretKey(encryptedData)
  52. }
  53. }
  54. }