Update to latest OMEMO revision

This commit is contained in:
Paul Schaub 2018-06-09 15:27:16 +02:00
parent 623624ee17
commit 120793a6f5
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
2 changed files with 74 additions and 5 deletions

View file

@ -11,7 +11,7 @@ repositories {
} }
ext { ext {
smackVersion="4.2.3-SNAPSHOT" smackVersion="4.4.0-alpha1-SNAPSHOT"
} }
dependencies { dependencies {

View file

@ -1,4 +1,10 @@
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Scanner; import java.util.Scanner;
@ -58,6 +64,8 @@ public class Main {
private OmemoManager omemoManager; private OmemoManager omemoManager;
private OmemoManager.LoggedInOmemoManager managerGuard; private OmemoManager.LoggedInOmemoManager managerGuard;
private final static File storePath = new File("store");
private Main() throws XmppStringprepException { private Main() throws XmppStringprepException {
//* //*
SmackConfiguration.DEBUG = true; SmackConfiguration.DEBUG = true;
@ -89,21 +97,30 @@ public class Main {
SignalOmemoService.acknowledgeLicense(); SignalOmemoService.acknowledgeLicense();
SignalOmemoService.setup(); SignalOmemoService.setup();
SignalOmemoService service = (SignalOmemoService) SignalOmemoService.getInstance(); SignalOmemoService service = (SignalOmemoService) SignalOmemoService.getInstance();
service.setOmemoStoreBackend(new SignalCachingOmemoStore(new SignalFileBasedOmemoStore(new File("store")))); service.setOmemoStoreBackend(new SignalCachingOmemoStore(new SignalFileBasedOmemoStore(storePath)));
omemoManager = OmemoManager.getInstanceFor(connection); omemoManager = OmemoManager.getInstanceFor(connection);
omemoManager.setTrustCallback(new OmemoTrustCallback() { omemoManager.setTrustCallback(new OmemoTrustCallback() {
@Override @Override
public TrustState getTrust(OmemoDevice device, OmemoFingerprint fingerprint) { public TrustState getTrust(OmemoDevice device, OmemoFingerprint fingerprint) {
return TrustState.trusted; try {
return Main.this.getTrust(omemoManager.getOwnDevice(), device, fingerprint);
} catch (IOException e) {
System.out.println("Could not get Trust of device " + device.toString() + ": " + e.getMessage());
return TrustState.undecided;
}
} }
@Override @Override
public void setTrust(OmemoDevice device, OmemoFingerprint fingerprint, TrustState state) { public void setTrust(OmemoDevice device, OmemoFingerprint fingerprint, TrustState state) {
try {
Main.this.storeTrust(omemoManager.getOwnDevice(), device, fingerprint, state);
} catch (IOException e) {
System.out.println("Could not set Trust of device " + device.toString() + ": " + e.getMessage());
}
} }
}); });
connection.setPacketReplyTimeout(10000); connection.setReplyTimeout(10000);
connection = connection.connect(); connection = connection.connect();
connection.login(); connection.login();
omemoManager.initialize(); omemoManager.initialize();
@ -448,4 +465,56 @@ public class Main {
} }
} }
} }
public void storeTrust(OmemoDevice userDevice, OmemoDevice contactsDevice, OmemoFingerprint fingerprint, TrustState trustState)
throws IOException {
File target = new File(storePath, "OMEMO_Store" + File.separator +
userDevice.getJid().toString() + File.separator +
userDevice.getDeviceId() + File.separator +
"contacts" + File.separator +
contactsDevice.getJid().toString() + File.separator +
contactsDevice.getDeviceId() + File.separator +
"trust");
if (!target.exists()) {
target.getParentFile().mkdirs();
target.createNewFile();
}
try (PrintWriter out = new PrintWriter(target)) {
out.write(fingerprint.toString() + " " + trustState);
} catch (FileNotFoundException e) {
throw new AssertionError(e);
}
}
public TrustState getTrust(OmemoDevice userDevice, OmemoDevice contactsDevice, OmemoFingerprint fingerprint)
throws IOException {
File target = new File(storePath, "OMEMO_Store" + File.separator +
userDevice.getJid().toString() + File.separator +
userDevice.getDeviceId() + File.separator +
"contacts" + File.separator +
contactsDevice.getJid().toString() + File.separator +
contactsDevice.getDeviceId() + File.separator +
"trust");
if (!target.exists()) {
return TrustState.undecided;
}
try (BufferedReader in = new BufferedReader(new FileReader(target))) {
String line = in.readLine();
String[] split = line.split(" ");
if (split.length != 2) {
return TrustState.undecided;
}
OmemoFingerprint f = new OmemoFingerprint(split[0]);
TrustState t = TrustState.valueOf(split[1]);
if (f.equals(fingerprint)) {
return t;
}
return TrustState.untrusted;
} catch (FileNotFoundException e) {
throw new AssertionError(e);
}
}
} }