]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/manager/util/ProfileUtils.java
Extract some utils from manager
[signal-cli] / src / main / java / org / asamk / signal / manager / util / ProfileUtils.java
diff --git a/src/main/java/org/asamk/signal/manager/util/ProfileUtils.java b/src/main/java/org/asamk/signal/manager/util/ProfileUtils.java
new file mode 100644 (file)
index 0000000..13ce3cb
--- /dev/null
@@ -0,0 +1,45 @@
+package org.asamk.signal.manager.util;
+
+import org.asamk.signal.manager.storage.profiles.SignalProfile;
+import org.signal.zkgroup.profiles.ProfileKey;
+import org.whispersystems.signalservice.api.crypto.InvalidCiphertextException;
+import org.whispersystems.signalservice.api.crypto.ProfileCipher;
+import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
+import org.whispersystems.util.Base64;
+
+import java.io.IOException;
+
+public class ProfileUtils {
+
+    public static SignalProfile decryptProfile(
+            final ProfileKey profileKey, final SignalServiceProfile encryptedProfile
+    ) {
+        ProfileCipher profileCipher = new ProfileCipher(profileKey);
+        try {
+            String name;
+            try {
+                name = encryptedProfile.getName() == null
+                        ? null
+                        : new String(profileCipher.decryptName(Base64.decode(encryptedProfile.getName())));
+            } catch (IOException e) {
+                name = null;
+            }
+            String unidentifiedAccess;
+            try {
+                unidentifiedAccess = encryptedProfile.getUnidentifiedAccess() == null
+                        || !profileCipher.verifyUnidentifiedAccess(Base64.decode(encryptedProfile.getUnidentifiedAccess()))
+                        ? null
+                        : encryptedProfile.getUnidentifiedAccess();
+            } catch (IOException e) {
+                unidentifiedAccess = null;
+            }
+            return new SignalProfile(encryptedProfile.getIdentityKey(),
+                    name,
+                    unidentifiedAccess,
+                    encryptedProfile.isUnrestrictedUnidentifiedAccess(),
+                    encryptedProfile.getCapabilities());
+        } catch (InvalidCiphertextException e) {
+            return null;
+        }
+    }
+}