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