mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-27 04:04:43 +01:00
Add partial support for operating as a linked device.
This commit is contained in:
committed by
Greyson Parrelli
parent
112f4bb281
commit
7203228626
@@ -0,0 +1,24 @@
|
||||
package org.thoughtcrime.securesms.registration.secondary
|
||||
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.Matchers.`is`
|
||||
import org.junit.Test
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
|
||||
import org.thoughtcrime.securesms.database.loaders.DeviceListLoader
|
||||
import org.thoughtcrime.securesms.devicelist.DeviceNameProtos
|
||||
import java.nio.charset.Charset
|
||||
|
||||
class DeviceNameCipherTest {
|
||||
|
||||
@Test
|
||||
fun encryptDeviceName() {
|
||||
val deviceName = "xXxCoolDeviceNamexXx"
|
||||
val identityKeyPair = IdentityKeyUtil.generateIdentityKeyPair()
|
||||
|
||||
val encryptedDeviceName = DeviceNameCipher.encryptDeviceName(deviceName.toByteArray(Charset.forName("UTF-8")), identityKeyPair)
|
||||
|
||||
val plaintext = DeviceListLoader.decryptName(DeviceNameProtos.DeviceName.parseFrom(encryptedDeviceName), identityKeyPair)
|
||||
|
||||
assertThat(String(plaintext, Charset.forName("UTF-8")), `is`(deviceName))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package org.thoughtcrime.securesms.registration.secondary
|
||||
|
||||
import com.google.protobuf.ByteString
|
||||
import org.hamcrest.MatcherAssert.assertThat
|
||||
import org.hamcrest.Matchers.`is`
|
||||
import org.hamcrest.Matchers.instanceOf
|
||||
import org.junit.Test
|
||||
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
|
||||
import org.thoughtcrime.securesms.crypto.ProfileKeyUtil
|
||||
import org.whispersystems.signalservice.internal.crypto.PrimaryProvisioningCipher
|
||||
import org.whispersystems.signalservice.internal.push.ProvisioningProtos
|
||||
import org.whispersystems.signalservice.internal.push.ProvisioningProtos.ProvisionMessage
|
||||
import org.whispersystems.signalservice.internal.push.ProvisioningProtos.ProvisioningVersion
|
||||
import java.util.UUID
|
||||
|
||||
class SecondaryProvisioningCipherTest {
|
||||
|
||||
@Test
|
||||
fun decrypt() {
|
||||
val provisioningCipher = SecondaryProvisioningCipher.generate()
|
||||
|
||||
val primaryIdentityKeyPair = IdentityKeyUtil.generateIdentityKeyPair()
|
||||
val primaryProfileKey = ProfileKeyUtil.createNew()
|
||||
val primaryProvisioningCipher = PrimaryProvisioningCipher(provisioningCipher.secondaryDevicePublicKey.publicKey)
|
||||
|
||||
val message = ProvisionMessage.newBuilder()
|
||||
.setIdentityKeyPublic(ByteString.copyFrom(primaryIdentityKeyPair.publicKey.serialize()))
|
||||
.setIdentityKeyPrivate(ByteString.copyFrom(primaryIdentityKeyPair.privateKey.serialize()))
|
||||
.setProvisioningCode("code")
|
||||
.setProvisioningVersion(ProvisioningVersion.CURRENT_VALUE)
|
||||
.setNumber("+14045555555")
|
||||
.setUuid(UUID.randomUUID().toString())
|
||||
.setProfileKey(ByteString.copyFrom(primaryProfileKey.serialize()))
|
||||
|
||||
val provisionMessage = ProvisioningProtos.ProvisionEnvelope.parseFrom(primaryProvisioningCipher.encrypt(message.build()))
|
||||
|
||||
val result = provisioningCipher.decrypt(provisionMessage)
|
||||
assertThat(result, instanceOf(SecondaryProvisioningCipher.ProvisionDecryptResult.Success::class.java))
|
||||
|
||||
val success = result as SecondaryProvisioningCipher.ProvisionDecryptResult.Success
|
||||
|
||||
assertThat(success.uuid.toString(), `is`(message.uuid))
|
||||
assertThat(success.e164, `is`(message.number))
|
||||
assertThat(success.identityKeyPair.serialize(), `is`(primaryIdentityKeyPair.serialize()))
|
||||
assertThat(success.profileKey.serialize(), `is`(primaryProfileKey.serialize()))
|
||||
assertThat(success.areReadReceiptsEnabled, `is`(message.readReceipts))
|
||||
assertThat(success.primaryUserAgent, `is`(message.userAgent))
|
||||
assertThat(success.provisioningCode, `is`(message.provisioningCode))
|
||||
assertThat(success.provisioningVersion, `is`(message.provisioningVersion))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user