1 package org
.asamk
.signal
.manager
.util
;
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
;
9 import java
.util
.Base64
;
11 public class ProfileUtils
{
13 public static SignalProfile
decryptProfile(
14 final ProfileKey profileKey
, final SignalServiceProfile encryptedProfile
16 var profileCipher
= new ProfileCipher(profileKey
);
18 var name
= decryptName(encryptedProfile
.getName(), profileCipher
);
19 var about
= decryptName(encryptedProfile
.getAbout(), profileCipher
);
20 var aboutEmoji
= decryptName(encryptedProfile
.getAboutEmoji(), profileCipher
);
21 String unidentifiedAccess
;
23 unidentifiedAccess
= encryptedProfile
.getUnidentifiedAccess() == null
24 || !profileCipher
.verifyUnidentifiedAccess(Base64
.getDecoder()
25 .decode(encryptedProfile
.getUnidentifiedAccess()))
27 : encryptedProfile
.getUnidentifiedAccess();
28 } catch (IllegalArgumentException e
) {
29 unidentifiedAccess
= null;
31 return new SignalProfile(encryptedProfile
.getIdentityKey(),
36 encryptedProfile
.isUnrestrictedUnidentifiedAccess(),
37 encryptedProfile
.getCapabilities());
38 } catch (InvalidCiphertextException e
) {
43 private static String
decryptName(
44 final String encryptedName
, final ProfileCipher profileCipher
45 ) throws InvalidCiphertextException
{
47 return encryptedName
== null
49 : new String(profileCipher
.decryptName(Base64
.getDecoder().decode(encryptedName
)));
50 } catch (IllegalArgumentException e
) {