mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 09:20:19 +01:00
committed by
Greyson Parrelli
parent
9e49dd1270
commit
cee44fcc93
@@ -1,89 +0,0 @@
|
||||
package org.signal.devicetransfer;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.signal.devicetransfer.DeviceTransferAuthentication.Client;
|
||||
import org.signal.devicetransfer.DeviceTransferAuthentication.DeviceTransferAuthenticationException;
|
||||
import org.signal.devicetransfer.DeviceTransferAuthentication.Server;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.whispersystems.signalservice.test.LibSignalLibraryUtil.assumeLibSignalSupportedOnOS;
|
||||
|
||||
public class DeviceTransferAuthenticationTest {
|
||||
|
||||
private byte[] certificate;
|
||||
|
||||
@Before
|
||||
public void ensureNativeSupported() throws KeyGenerationFailedException {
|
||||
assumeLibSignalSupportedOnOS();
|
||||
|
||||
certificate = SelfSignedIdentity.create().getX509Encoded();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCompute_withNoChanges() throws DeviceTransferAuthenticationException {
|
||||
Client client = new Client(certificate);
|
||||
Server server = new Server(certificate, client.getCommitment());
|
||||
|
||||
byte[] clientRandom = client.setServerRandomAndGetClientRandom(server.getRandom());
|
||||
|
||||
server.setClientRandom(clientRandom);
|
||||
assertEquals(client.computeShortAuthenticationCode(), server.computeShortAuthenticationCode());
|
||||
}
|
||||
|
||||
@Test(expected = DeviceTransferAuthenticationException.class)
|
||||
public void testServerCompute_withChangedClientCertificate() throws DeviceTransferAuthenticationException, KeyGenerationFailedException {
|
||||
byte[] badCertificate = SelfSignedIdentity.create().getX509Encoded();
|
||||
Client client = new Client(badCertificate);
|
||||
Server server = new Server(certificate, client.getCommitment());
|
||||
|
||||
byte[] clientRandom = client.setServerRandomAndGetClientRandom(server.getRandom());
|
||||
|
||||
server.setClientRandom(clientRandom);
|
||||
server.computeShortAuthenticationCode();
|
||||
}
|
||||
|
||||
@Test(expected = DeviceTransferAuthenticationException.class)
|
||||
public void testServerCompute_withChangedClientCommitment() throws DeviceTransferAuthenticationException {
|
||||
Client client = new Client(certificate);
|
||||
Server server = new Server(certificate, randomBytes());
|
||||
|
||||
byte[] clientRandom = client.setServerRandomAndGetClientRandom(server.getRandom());
|
||||
|
||||
server.setClientRandom(clientRandom);
|
||||
server.computeShortAuthenticationCode();
|
||||
}
|
||||
|
||||
@Test(expected = DeviceTransferAuthenticationException.class)
|
||||
public void testServerCompute_withChangedClientRandom() throws DeviceTransferAuthenticationException {
|
||||
Client client = new Client(certificate);
|
||||
Server server = new Server(certificate, client.getCommitment());
|
||||
|
||||
client.setServerRandomAndGetClientRandom(server.getRandom());
|
||||
|
||||
server.setClientRandom(randomBytes());
|
||||
server.computeShortAuthenticationCode();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClientCompute_withChangedServerSecret() throws DeviceTransferAuthenticationException {
|
||||
Client client = new Client(certificate);
|
||||
Server server = new Server(certificate, client.getCommitment());
|
||||
|
||||
byte[] clientRandom = client.setServerRandomAndGetClientRandom(randomBytes());
|
||||
|
||||
server.setClientRandom(clientRandom);
|
||||
assertNotEquals(client.computeShortAuthenticationCode(), server.computeShortAuthenticationCode());
|
||||
}
|
||||
|
||||
private @NonNull byte[] randomBytes() {
|
||||
byte[] bytes = new byte[32];
|
||||
new Random().nextBytes(bytes);
|
||||
return bytes;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package org.signal.devicetransfer
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertNotEquals
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.signal.devicetransfer.DeviceTransferAuthentication.DeviceTransferAuthenticationException
|
||||
import org.whispersystems.signalservice.test.LibSignalLibraryUtil
|
||||
import kotlin.random.Random
|
||||
|
||||
class DeviceTransferAuthenticationTest {
|
||||
private lateinit var certificate: ByteArray
|
||||
|
||||
@Before
|
||||
fun ensureNativeSupported() {
|
||||
LibSignalLibraryUtil.assumeLibSignalSupportedOnOS()
|
||||
|
||||
certificate = SelfSignedIdentity.create().x509Encoded
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testCompute_withNoChanges() {
|
||||
val client = DeviceTransferAuthentication.Client(certificate)
|
||||
val server = DeviceTransferAuthentication.Server(certificate, client.commitment)
|
||||
|
||||
val clientRandom = client.setServerRandomAndGetClientRandom(server.random)
|
||||
|
||||
server.setClientRandom(clientRandom)
|
||||
assertEquals(client.computeShortAuthenticationCode(), server.computeShortAuthenticationCode())
|
||||
}
|
||||
|
||||
@Test(expected = DeviceTransferAuthenticationException::class)
|
||||
fun testServerCompute_withChangedClientCertificate() {
|
||||
val badCertificate = SelfSignedIdentity.create().x509Encoded
|
||||
val client = DeviceTransferAuthentication.Client(badCertificate)
|
||||
val server = DeviceTransferAuthentication.Server(certificate, client.commitment)
|
||||
|
||||
val clientRandom = client.setServerRandomAndGetClientRandom(server.random)
|
||||
|
||||
server.setClientRandom(clientRandom)
|
||||
server.computeShortAuthenticationCode()
|
||||
}
|
||||
|
||||
@Test(expected = DeviceTransferAuthenticationException::class)
|
||||
fun testServerCompute_withChangedClientCommitment() {
|
||||
val client = DeviceTransferAuthentication.Client(certificate)
|
||||
val server = DeviceTransferAuthentication.Server(certificate, randomBytes())
|
||||
|
||||
val clientRandom = client.setServerRandomAndGetClientRandom(server.random)
|
||||
|
||||
server.setClientRandom(clientRandom)
|
||||
server.computeShortAuthenticationCode()
|
||||
}
|
||||
|
||||
@Test(expected = DeviceTransferAuthenticationException::class)
|
||||
fun testServerCompute_withChangedClientRandom() {
|
||||
val client = DeviceTransferAuthentication.Client(certificate)
|
||||
val server = DeviceTransferAuthentication.Server(certificate, client.commitment)
|
||||
|
||||
client.setServerRandomAndGetClientRandom(server.random)
|
||||
|
||||
server.setClientRandom(randomBytes())
|
||||
server.computeShortAuthenticationCode()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testClientCompute_withChangedServerSecret() {
|
||||
val client = DeviceTransferAuthentication.Client(certificate)
|
||||
val server = DeviceTransferAuthentication.Server(certificate, client.commitment)
|
||||
|
||||
val clientRandom = client.setServerRandomAndGetClientRandom(randomBytes())
|
||||
|
||||
server.setClientRandom(clientRandom)
|
||||
assertNotEquals(client.computeShortAuthenticationCode(), server.computeShortAuthenticationCode())
|
||||
}
|
||||
|
||||
private fun randomBytes(): ByteArray {
|
||||
val bytes = ByteArray(32)
|
||||
Random.nextBytes(bytes)
|
||||
return bytes
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package org.signal.devicetransfer;
|
||||
|
||||
import android.app.Application;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(manifest = Config.NONE, application = Application.class)
|
||||
public class WifiDirectTest {
|
||||
|
||||
@Test
|
||||
public void instanceName_withExtraInfo() {
|
||||
String instanceName = WifiDirect.buildServiceInstanceName("knownothing");
|
||||
|
||||
assertEquals("_devicetransfer._knownothing._signal.org", instanceName);
|
||||
|
||||
String extractedExtraInfo = WifiDirect.isInstanceNameMatching(instanceName);
|
||||
assertEquals(extractedExtraInfo, "knownothing");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void instanceName_matchingWithoutExtraInfo() {
|
||||
String instanceName = WifiDirect.buildServiceInstanceName("");
|
||||
|
||||
assertEquals("_devicetransfer._signal.org", instanceName);
|
||||
|
||||
String extractedExtraInfo = WifiDirect.isInstanceNameMatching(instanceName);
|
||||
assertEquals(extractedExtraInfo, "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void instanceName_notMatching() {
|
||||
String extractedExtraInfo = WifiDirect.isInstanceNameMatching("_whoknows._what.org");
|
||||
assertNull(extractedExtraInfo);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package org.signal.devicetransfer
|
||||
|
||||
import android.app.Application
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertNull
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.annotation.Config
|
||||
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
@Config(manifest = Config.NONE, application = Application::class)
|
||||
class WifiDirectTest {
|
||||
@Test
|
||||
fun instanceName_withExtraInfo() {
|
||||
val instanceName = WifiDirect.buildServiceInstanceName("knownothing")
|
||||
|
||||
assertEquals("_devicetransfer._knownothing._signal.org", instanceName)
|
||||
|
||||
val extractedExtraInfo = WifiDirect.isInstanceNameMatching(instanceName)
|
||||
assertEquals(extractedExtraInfo, "knownothing")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun instanceName_matchingWithoutExtraInfo() {
|
||||
val instanceName = WifiDirect.buildServiceInstanceName("")
|
||||
|
||||
assertEquals("_devicetransfer._signal.org", instanceName)
|
||||
|
||||
val extractedExtraInfo = WifiDirect.isInstanceNameMatching(instanceName)
|
||||
assertEquals(extractedExtraInfo, "")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun instanceName_notMatching() {
|
||||
val extractedExtraInfo = WifiDirect.isInstanceNameMatching("_whoknows._what.org")
|
||||
assertNull(extractedExtraInfo)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user