kopia lustrzana https://github.com/ryukoposting/Signal-Android
89 wiersze
3.2 KiB
Java
89 wiersze
3.2 KiB
Java
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;
|
|
}
|
|
}
|