]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/util/Utils.java
02115c3e18759d3a46dcef1f9317ade363d28f56
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / util / Utils.java
1 package org.asamk.signal.manager.util;
2
3 import org.whispersystems.libsignal.IdentityKey;
4 import org.whispersystems.libsignal.fingerprint.Fingerprint;
5 import org.whispersystems.libsignal.fingerprint.NumericFingerprintGenerator;
6 import org.whispersystems.signalservice.api.push.SignalServiceAddress;
7 import org.whispersystems.signalservice.api.util.StreamDetails;
8
9 import java.io.BufferedInputStream;
10 import java.io.File;
11 import java.io.FileInputStream;
12 import java.io.IOException;
13 import java.io.InputStream;
14 import java.net.URLConnection;
15 import java.nio.file.Files;
16
17 public class Utils {
18
19 public static String getFileMimeType(File file, String defaultMimeType) throws IOException {
20 var mime = Files.probeContentType(file.toPath());
21 if (mime == null) {
22 try (InputStream bufferedStream = new BufferedInputStream(new FileInputStream(file))) {
23 mime = URLConnection.guessContentTypeFromStream(bufferedStream);
24 }
25 }
26 if (mime == null) {
27 return defaultMimeType;
28 }
29 return mime;
30 }
31
32 public static StreamDetails createStreamDetailsFromFile(File file) throws IOException {
33 InputStream stream = new FileInputStream(file);
34 final var size = file.length();
35 final var mime = getFileMimeType(file, "application/octet-stream");
36 return new StreamDetails(stream, mime, size);
37 }
38
39 public static Fingerprint computeSafetyNumber(
40 boolean isUuidCapable,
41 SignalServiceAddress ownAddress,
42 IdentityKey ownIdentityKey,
43 SignalServiceAddress theirAddress,
44 IdentityKey theirIdentityKey
45 ) {
46 int version;
47 byte[] ownId;
48 byte[] theirId;
49
50 if (isUuidCapable) {
51 // Version 2: UUID user
52 version = 2;
53 ownId = ownAddress.getAci().toByteArray();
54 theirId = theirAddress.getAci().toByteArray();
55 } else {
56 // Version 1: E164 user
57 version = 1;
58 if (!ownAddress.getNumber().isPresent() || !theirAddress.getNumber().isPresent()) {
59 return null;
60 }
61 ownId = ownAddress.getNumber().get().getBytes();
62 theirId = theirAddress.getNumber().get().getBytes();
63 }
64
65 return new NumericFingerprintGenerator(5200).createFor(version,
66 ownId,
67 ownIdentityKey,
68 theirId,
69 theirIdentityKey);
70 }
71 }