That fuck shit the fascists are using
1package org.signal.devicetransfer;
2
3import androidx.annotation.NonNull;
4
5import org.junit.Before;
6import org.junit.Test;
7import org.signal.devicetransfer.DeviceTransferAuthentication.Client;
8import org.signal.devicetransfer.DeviceTransferAuthentication.DeviceTransferAuthenticationException;
9import org.signal.devicetransfer.DeviceTransferAuthentication.Server;
10
11import java.util.Random;
12
13import static org.junit.Assert.assertEquals;
14import static org.junit.Assert.assertNotEquals;
15import static org.whispersystems.signalservice.test.LibSignalLibraryUtil.assumeLibSignalSupportedOnOS;
16
17public class DeviceTransferAuthenticationTest {
18
19 private byte[] certificate;
20
21 @Before
22 public void ensureNativeSupported() throws KeyGenerationFailedException {
23 assumeLibSignalSupportedOnOS();
24
25 certificate = SelfSignedIdentity.create().getX509Encoded();
26 }
27
28 @Test
29 public void testCompute_withNoChanges() throws DeviceTransferAuthenticationException {
30 Client client = new Client(certificate);
31 Server server = new Server(certificate, client.getCommitment());
32
33 byte[] clientRandom = client.setServerRandomAndGetClientRandom(server.getRandom());
34
35 server.setClientRandom(clientRandom);
36 assertEquals(client.computeShortAuthenticationCode(), server.computeShortAuthenticationCode());
37 }
38
39 @Test(expected = DeviceTransferAuthenticationException.class)
40 public void testServerCompute_withChangedClientCertificate() throws DeviceTransferAuthenticationException, KeyGenerationFailedException {
41 byte[] badCertificate = SelfSignedIdentity.create().getX509Encoded();
42 Client client = new Client(badCertificate);
43 Server server = new Server(certificate, client.getCommitment());
44
45 byte[] clientRandom = client.setServerRandomAndGetClientRandom(server.getRandom());
46
47 server.setClientRandom(clientRandom);
48 server.computeShortAuthenticationCode();
49 }
50
51 @Test(expected = DeviceTransferAuthenticationException.class)
52 public void testServerCompute_withChangedClientCommitment() throws DeviceTransferAuthenticationException {
53 Client client = new Client(certificate);
54 Server server = new Server(certificate, randomBytes());
55
56 byte[] clientRandom = client.setServerRandomAndGetClientRandom(server.getRandom());
57
58 server.setClientRandom(clientRandom);
59 server.computeShortAuthenticationCode();
60 }
61
62 @Test(expected = DeviceTransferAuthenticationException.class)
63 public void testServerCompute_withChangedClientRandom() throws DeviceTransferAuthenticationException {
64 Client client = new Client(certificate);
65 Server server = new Server(certificate, client.getCommitment());
66
67 client.setServerRandomAndGetClientRandom(server.getRandom());
68
69 server.setClientRandom(randomBytes());
70 server.computeShortAuthenticationCode();
71 }
72
73 @Test
74 public void testClientCompute_withChangedServerSecret() throws DeviceTransferAuthenticationException {
75 Client client = new Client(certificate);
76 Server server = new Server(certificate, client.getCommitment());
77
78 byte[] clientRandom = client.setServerRandomAndGetClientRandom(randomBytes());
79
80 server.setClientRandom(clientRandom);
81 assertNotEquals(client.computeShortAuthenticationCode(), server.computeShortAuthenticationCode());
82 }
83
84 private @NonNull byte[] randomBytes() {
85 byte[] bytes = new byte[32];
86 new Random().nextBytes(bytes);
87 return bytes;
88 }
89}