mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-05-02 06:33:38 +01:00
Respect the phoneNumberSharing setting on the profile.
This commit is contained in:
committed by
Clark Chen
parent
624f863da4
commit
bb30535afb
@@ -722,17 +722,19 @@ public class SignalServiceAccountManager {
|
||||
String aboutEmoji,
|
||||
Optional<PaymentAddress> paymentsAddress,
|
||||
AvatarUploadParams avatar,
|
||||
List<String> visibleBadgeIds)
|
||||
List<String> visibleBadgeIds,
|
||||
boolean phoneNumberSharing)
|
||||
throws IOException
|
||||
{
|
||||
if (name == null) name = "";
|
||||
|
||||
ProfileCipher profileCipher = new ProfileCipher(profileKey);
|
||||
byte[] ciphertextName = profileCipher.encryptString(name, ProfileCipher.getTargetNameLength(name));
|
||||
byte[] ciphertextAbout = profileCipher.encryptString(about, ProfileCipher.getTargetAboutLength(about));
|
||||
byte[] ciphertextEmoji = profileCipher.encryptString(aboutEmoji, ProfileCipher.EMOJI_PADDED_LENGTH);
|
||||
byte[] ciphertextMobileCoinAddress = paymentsAddress.map(address -> profileCipher.encryptWithLength(address.encode(), ProfileCipher.PAYMENTS_ADDRESS_CONTENT_SIZE)).orElse(null);
|
||||
ProfileAvatarData profileAvatarData = null;
|
||||
ProfileCipher profileCipher = new ProfileCipher(profileKey);
|
||||
byte[] ciphertextName = profileCipher.encryptString(name, ProfileCipher.getTargetNameLength(name));
|
||||
byte[] ciphertextAbout = profileCipher.encryptString(about, ProfileCipher.getTargetAboutLength(about));
|
||||
byte[] ciphertextEmoji = profileCipher.encryptString(aboutEmoji, ProfileCipher.EMOJI_PADDED_LENGTH);
|
||||
byte[] ciphertextMobileCoinAddress = paymentsAddress.map(address -> profileCipher.encryptWithLength(address.encode(), ProfileCipher.PAYMENTS_ADDRESS_CONTENT_SIZE)).orElse(null);
|
||||
byte[] cipherTextPhoneNumberSharing = profileCipher.encryptBoolean(phoneNumberSharing);
|
||||
ProfileAvatarData profileAvatarData = null;
|
||||
|
||||
if (avatar.stream != null && !avatar.keepTheSame) {
|
||||
profileAvatarData = new ProfileAvatarData(avatar.stream.getStream(),
|
||||
@@ -746,6 +748,7 @@ public class SignalServiceAccountManager {
|
||||
ciphertextAbout,
|
||||
ciphertextEmoji,
|
||||
ciphertextMobileCoinAddress,
|
||||
cipherTextPhoneNumberSharing,
|
||||
avatar.hasAvatar,
|
||||
avatar.keepTheSame,
|
||||
profileKey.getCommitment(aci.getLibSignalAci()).serialize(),
|
||||
|
||||
@@ -14,7 +14,9 @@ import java.security.InvalidKeyException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Locale;
|
||||
import java.util.Optional;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.crypto.BadPaddingException;
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.IllegalBlockSizeException;
|
||||
@@ -127,6 +129,22 @@ public class ProfileCipher {
|
||||
return new String(plaintext);
|
||||
}
|
||||
|
||||
public byte[] encryptBoolean(boolean input) {
|
||||
byte[] value = new byte[1];
|
||||
value[0] = (byte) (input ? 1 : 0);
|
||||
|
||||
return encrypt(value, value.length);
|
||||
}
|
||||
|
||||
public Optional<Boolean> decryptBoolean(@Nullable byte[] input) throws InvalidCiphertextException {
|
||||
if (input == null) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
byte[] paddedPlaintext = decrypt(input);
|
||||
return Optional.of(paddedPlaintext[0] != 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encodes the length, and adds padding.
|
||||
* <p>
|
||||
|
||||
@@ -63,6 +63,9 @@ public class SignalServiceProfile {
|
||||
@JsonProperty
|
||||
private List<Badge> badges;
|
||||
|
||||
@JsonProperty
|
||||
private String phoneNumberSharing;
|
||||
|
||||
@JsonIgnore
|
||||
private RequestType requestType;
|
||||
|
||||
@@ -96,6 +99,10 @@ public class SignalServiceProfile {
|
||||
return unidentifiedAccess;
|
||||
}
|
||||
|
||||
public String getPhoneNumberSharing() {
|
||||
return phoneNumberSharing;
|
||||
}
|
||||
|
||||
public boolean isUnrestrictedUnidentifiedAccess() {
|
||||
return unrestrictedUnidentifiedAccess;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,9 @@ public class SignalServiceProfileWrite {
|
||||
@JsonProperty
|
||||
private byte[] paymentAddress;
|
||||
|
||||
@JsonProperty
|
||||
private byte[] phoneNumberSharing;
|
||||
|
||||
@JsonProperty
|
||||
private boolean avatar;
|
||||
|
||||
@@ -38,16 +41,17 @@ public class SignalServiceProfileWrite {
|
||||
public SignalServiceProfileWrite(){
|
||||
}
|
||||
|
||||
public SignalServiceProfileWrite(String version, byte[] name, byte[] about, byte[] aboutEmoji, byte[] paymentAddress, boolean hasAvatar, boolean sameAvatar, byte[] commitment, List<String> badgeIds) {
|
||||
this.version = version;
|
||||
this.name = name;
|
||||
this.about = about;
|
||||
this.aboutEmoji = aboutEmoji;
|
||||
this.paymentAddress = paymentAddress;
|
||||
this.avatar = hasAvatar;
|
||||
this.sameAvatar = sameAvatar;
|
||||
this.commitment = commitment;
|
||||
this.badgeIds = badgeIds;
|
||||
public SignalServiceProfileWrite(String version, byte[] name, byte[] about, byte[] aboutEmoji, byte[] paymentAddress, byte[] phoneNumberSharing, boolean hasAvatar, boolean sameAvatar, byte[] commitment, List<String> badgeIds) {
|
||||
this.version = version;
|
||||
this.name = name;
|
||||
this.about = about;
|
||||
this.aboutEmoji = aboutEmoji;
|
||||
this.paymentAddress = paymentAddress;
|
||||
this.phoneNumberSharing = phoneNumberSharing;
|
||||
this.avatar = hasAvatar;
|
||||
this.sameAvatar = sameAvatar;
|
||||
this.commitment = commitment;
|
||||
this.badgeIds = badgeIds;
|
||||
}
|
||||
|
||||
public boolean hasAvatar() {
|
||||
|
||||
Reference in New Issue
Block a user