]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/manager/util/ProfileUtils.java
13ce3cb2a0acac5324de5e20d1d8d7d4fa767dd3
[signal-cli] / src / main / java / org / asamk / signal / manager / util / ProfileUtils.java
1 package org.asamk.signal.manager.util;
2
3 import org.asamk.signal.manager.storage.profiles.SignalProfile;
4 import org.signal.zkgroup.profiles.ProfileKey;
5 import org.whispersystems.signalservice.api.crypto.InvalidCiphertextException;
6 import org.whispersystems.signalservice.api.crypto.ProfileCipher;
7 import org.whispersystems.signalservice.api.profiles.SignalServiceProfile;
8 import org.whispersystems.util.Base64;
9
10 import java.io.IOException;
11
12 public class ProfileUtils {
13
14 public static SignalProfile decryptProfile(
15 final ProfileKey profileKey, final SignalServiceProfile encryptedProfile
16 ) {
17 ProfileCipher profileCipher = new ProfileCipher(profileKey);
18 try {
19 String name;
20 try {
21 name = encryptedProfile.getName() == null
22 ? null
23 : new String(profileCipher.decryptName(Base64.decode(encryptedProfile.getName())));
24 } catch (IOException e) {
25 name = null;
26 }
27 String unidentifiedAccess;
28 try {
29 unidentifiedAccess = encryptedProfile.getUnidentifiedAccess() == null
30 || !profileCipher.verifyUnidentifiedAccess(Base64.decode(encryptedProfile.getUnidentifiedAccess()))
31 ? null
32 : encryptedProfile.getUnidentifiedAccess();
33 } catch (IOException e) {
34 unidentifiedAccess = null;
35 }
36 return new SignalProfile(encryptedProfile.getIdentityKey(),
37 name,
38 unidentifiedAccess,
39 encryptedProfile.isUnrestrictedUnidentifiedAccess(),
40 encryptedProfile.getCapabilities());
41 } catch (InvalidCiphertextException e) {
42 return null;
43 }
44 }
45 }