]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/util/ProfileUtils.java
Send remote delete (#593)
[signal-cli] / lib / 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
9 import java.util.Base64;
10
11 public class ProfileUtils {
12
13 public static SignalProfile decryptProfile(
14 final ProfileKey profileKey, final SignalServiceProfile encryptedProfile
15 ) {
16 var profileCipher = new ProfileCipher(profileKey);
17 try {
18 var name = decryptName(encryptedProfile.getName(), profileCipher);
19 var about = decryptName(encryptedProfile.getAbout(), profileCipher);
20 var aboutEmoji = decryptName(encryptedProfile.getAboutEmoji(), profileCipher);
21 String unidentifiedAccess;
22 try {
23 unidentifiedAccess = encryptedProfile.getUnidentifiedAccess() == null
24 || !profileCipher.verifyUnidentifiedAccess(Base64.getDecoder()
25 .decode(encryptedProfile.getUnidentifiedAccess()))
26 ? null
27 : encryptedProfile.getUnidentifiedAccess();
28 } catch (IllegalArgumentException e) {
29 unidentifiedAccess = null;
30 }
31 return new SignalProfile(encryptedProfile.getIdentityKey(),
32 name,
33 about,
34 aboutEmoji,
35 unidentifiedAccess,
36 encryptedProfile.isUnrestrictedUnidentifiedAccess(),
37 encryptedProfile.getCapabilities());
38 } catch (InvalidCiphertextException e) {
39 return null;
40 }
41 }
42
43 private static String decryptName(
44 final String encryptedName, final ProfileCipher profileCipher
45 ) throws InvalidCiphertextException {
46 try {
47 return encryptedName == null
48 ? null
49 : new String(profileCipher.decryptName(Base64.getDecoder().decode(encryptedName)));
50 } catch (IllegalArgumentException e) {
51 return null;
52 }
53 }
54 }