kopia lustrzana https://github.com/ryukoposting/Signal-Android
Update handling of unrestricted UD access.
rodzic
c131754874
commit
c7551881b8
|
@ -41,6 +41,8 @@ public class UnidentifiedAccessUtil {
|
||||||
|
|
||||||
private static final String TAG = Log.tag(UnidentifiedAccessUtil.class);
|
private static final String TAG = Log.tag(UnidentifiedAccessUtil.class);
|
||||||
|
|
||||||
|
private static final byte[] UNRESTRICTED_KEY = new byte[16];
|
||||||
|
|
||||||
public static CertificateValidator getCertificateValidator() {
|
public static CertificateValidator getCertificateValidator() {
|
||||||
try {
|
try {
|
||||||
ECPublicKey unidentifiedSenderTrustRoot = Curve.decodePoint(Base64.decode(BuildConfig.UNIDENTIFIED_SENDER_TRUST_ROOT), 0);
|
ECPublicKey unidentifiedSenderTrustRoot = Curve.decodePoint(Base64.decode(BuildConfig.UNIDENTIFIED_SENDER_TRUST_ROOT), 0);
|
||||||
|
@ -86,7 +88,7 @@ public class UnidentifiedAccessUtil {
|
||||||
byte[] ourUnidentifiedAccessKey = UnidentifiedAccess.deriveAccessKeyFrom(ProfileKeyUtil.getSelfProfileKey());
|
byte[] ourUnidentifiedAccessKey = UnidentifiedAccess.deriveAccessKeyFrom(ProfileKeyUtil.getSelfProfileKey());
|
||||||
|
|
||||||
if (TextSecurePreferences.isUniversalUnidentifiedAccess(context)) {
|
if (TextSecurePreferences.isUniversalUnidentifiedAccess(context)) {
|
||||||
ourUnidentifiedAccessKey = Util.getSecretBytes(16);
|
ourUnidentifiedAccessKey = UNRESTRICTED_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Optional<UnidentifiedAccessPair>> access = new ArrayList<>(recipients.size());
|
List<Optional<UnidentifiedAccessPair>> access = new ArrayList<>(recipients.size());
|
||||||
|
@ -133,7 +135,7 @@ public class UnidentifiedAccessUtil {
|
||||||
byte[] ourUnidentifiedAccessCertificate = getUnidentifiedAccessCertificate(Recipient.self());
|
byte[] ourUnidentifiedAccessCertificate = getUnidentifiedAccessCertificate(Recipient.self());
|
||||||
|
|
||||||
if (TextSecurePreferences.isUniversalUnidentifiedAccess(context)) {
|
if (TextSecurePreferences.isUniversalUnidentifiedAccess(context)) {
|
||||||
ourUnidentifiedAccessKey = Util.getSecretBytes(16);
|
ourUnidentifiedAccessKey = UNRESTRICTED_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ourUnidentifiedAccessCertificate != null) {
|
if (ourUnidentifiedAccessCertificate != null) {
|
||||||
|
@ -171,15 +173,21 @@ public class UnidentifiedAccessUtil {
|
||||||
|
|
||||||
switch (recipient.resolve().getUnidentifiedAccessMode()) {
|
switch (recipient.resolve().getUnidentifiedAccessMode()) {
|
||||||
case UNKNOWN:
|
case UNKNOWN:
|
||||||
if (theirProfileKey == null) return Util.getSecretBytes(16);
|
if (theirProfileKey == null) {
|
||||||
else return UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey);
|
return UNRESTRICTED_KEY;
|
||||||
|
} else {
|
||||||
|
return UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey);
|
||||||
|
}
|
||||||
case DISABLED:
|
case DISABLED:
|
||||||
return null;
|
return null;
|
||||||
case ENABLED:
|
case ENABLED:
|
||||||
if (theirProfileKey == null) return null;
|
if (theirProfileKey == null) {
|
||||||
else return UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey);
|
return null;
|
||||||
|
} else {
|
||||||
|
return UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey);
|
||||||
|
}
|
||||||
case UNRESTRICTED:
|
case UNRESTRICTED:
|
||||||
return Util.getSecretBytes(16);
|
return UNRESTRICTED_KEY;
|
||||||
default:
|
default:
|
||||||
throw new AssertionError("Unknown mode: " + recipient.getUnidentifiedAccessMode().getMode());
|
throw new AssertionError("Unknown mode: " + recipient.getUnidentifiedAccessMode().getMode());
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue