mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 09:20:19 +01:00
Enable TLS connection and SAS verification between device transfer server and client.
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
package org.signal.devicetransfer;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
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;
|
||||
|
||||
public class DeviceTransferAuthenticationTest {
|
||||
|
||||
private static byte[] certificate;
|
||||
private static byte[] badCertificate;
|
||||
|
||||
@BeforeClass
|
||||
public static void setup() throws KeyGenerationFailedException {
|
||||
certificate = SelfSignedIdentity.create().getX509Encoded();
|
||||
badCertificate = 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 {
|
||||
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,42 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user