New GV2 internal prefix and scrubber.

This commit is contained in:
Alan Evans
2020-05-01 16:25:26 -03:00
committed by Greyson Parrelli
parent 456857bbbd
commit ff28d72db6
4 changed files with 61 additions and 30 deletions

View File

@@ -14,11 +14,12 @@ import java.security.SecureRandom;
public abstract class GroupId {
private static final String ENCODED_SIGNAL_GROUP_PREFIX = "__textsecure_group__!";
private static final String ENCODED_MMS_GROUP_PREFIX = "__signal_mms_group__!";
private static final int MMS_BYTE_LENGTH = 16;
private static final int V1_MMS_BYTE_LENGTH = 16;
private static final int V2_BYTE_LENGTH = GroupIdentifier.SIZE;
private static final String ENCODED_SIGNAL_GROUP_V1_PREFIX = "__textsecure_group__!";
private static final String ENCODED_SIGNAL_GROUP_V2_PREFIX = "__signal_group__v2__!";
private static final String ENCODED_MMS_GROUP_PREFIX = "__signal_mms_group__!";
private static final int MMS_BYTE_LENGTH = 16;
private static final int V1_MMS_BYTE_LENGTH = 16;
private static final int V2_BYTE_LENGTH = GroupIdentifier.SIZE;
private final String encodedId;
@@ -106,7 +107,11 @@ public abstract class GroupId {
byte[] bytes = extractDecodedId(encodedGroupId);
return encodedGroupId.startsWith(ENCODED_MMS_GROUP_PREFIX) ? mms(bytes) : push(bytes);
if (encodedGroupId.startsWith(ENCODED_SIGNAL_GROUP_V2_PREFIX)) return v2(bytes);
else if (encodedGroupId.startsWith(ENCODED_SIGNAL_GROUP_V1_PREFIX)) return v1(bytes);
else if (encodedGroupId.startsWith(ENCODED_MMS_GROUP_PREFIX)) return mms(bytes);
throw new BadGroupIdException();
} catch (IOException e) {
throw new BadGroupIdException(e);
}
@@ -129,7 +134,9 @@ public abstract class GroupId {
}
public static boolean isEncodedGroup(@NonNull String groupId) {
return groupId.startsWith(ENCODED_SIGNAL_GROUP_PREFIX) || groupId.startsWith(ENCODED_MMS_GROUP_PREFIX);
return groupId.startsWith(ENCODED_SIGNAL_GROUP_V2_PREFIX) ||
groupId.startsWith(ENCODED_SIGNAL_GROUP_V1_PREFIX) ||
groupId.startsWith(ENCODED_MMS_GROUP_PREFIX);
}
private static byte[] extractDecodedId(@NonNull String encodedGroupId) throws IOException {
@@ -220,8 +227,8 @@ public abstract class GroupId {
}
public static abstract class Push extends GroupId {
private Push(@NonNull byte[] bytes) {
super(ENCODED_SIGNAL_GROUP_PREFIX, bytes);
private Push(@NonNull String prefix, @NonNull byte[] bytes) {
super(prefix, bytes);
}
@Override
@@ -238,7 +245,7 @@ public abstract class GroupId {
public static final class V1 extends GroupId.Push {
private V1(@NonNull byte[] bytes) {
super(bytes);
super(ENCODED_SIGNAL_GROUP_V1_PREFIX, bytes);
}
@Override
@@ -255,7 +262,7 @@ public abstract class GroupId {
public static final class V2 extends GroupId.Push {
private V2(@NonNull byte[] bytes) {
super(bytes);
super(ENCODED_SIGNAL_GROUP_V2_PREFIX, bytes);
}
@Override

View File

@@ -17,8 +17,6 @@
package org.thoughtcrime.securesms.logsubmit.util;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import java.util.regex.Matcher;
@@ -49,8 +47,14 @@ public final class Scrubber {
/**
* The middle group will be censored.
*/
private static final Pattern GROUP_ID_PATTERN = Pattern.compile("(__)(textsecure_group__![^\\s]+)([^\\s]{2})");
private static final String GROUP_ID_CENSOR = "...group...";
private static final Pattern GROUP_ID_V1_PATTERN = Pattern.compile("(__)(textsecure_group__![^\\s]+)([^\\s]{2})");
private static final String GROUP_ID_V1_CENSOR = "...group...";
/**
* The middle group will be censored.
*/
private static final Pattern GROUP_ID_V2_PATTERN = Pattern.compile("(__)(signal_group__v2__![^\\s]+)([^\\s]{2})");
private static final String GROUP_ID_V2_CENSOR = "...group_v2...";
/**
* The middle group will be censored.
@@ -62,7 +66,8 @@ public final class Scrubber {
in = scrubE164(in);
in = scrubEmail(in);
in = scrubGroups(in);
in = scrubGroupsV1(in);
in = scrubGroupsV2(in);
in = scrubUuids(in);
return in;
@@ -83,11 +88,19 @@ public final class Scrubber {
.append(EMAIL_CENSOR));
}
private static CharSequence scrubGroups(@NonNull CharSequence in) {
private static CharSequence scrubGroupsV1(@NonNull CharSequence in) {
return scrub(in,
GROUP_ID_PATTERN,
GROUP_ID_V1_PATTERN,
(matcher, output) -> output.append(matcher.group(1))
.append(GROUP_ID_CENSOR)
.append(GROUP_ID_V1_CENSOR)
.append(matcher.group(3)));
}
private static CharSequence scrubGroupsV2(@NonNull CharSequence in) {
return scrub(in,
GROUP_ID_V2_PATTERN,
(matcher, output) -> output.append(matcher.group(1))
.append(GROUP_ID_V2_CENSOR)
.append(matcher.group(3)));
}