diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java index dcb3178025..dd0d80a3d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java @@ -63,8 +63,6 @@ public final class GroupSendUtil { private static final String TAG = Log.tag(GroupSendUtil.class); - private static final long MAX_KEY_AGE = TimeUnit.DAYS.toMillis(30); - private GroupSendUtil() {} @@ -223,7 +221,7 @@ public final class GroupSendUtil { long keyCreateTime = SenderKeyUtil.getCreateTimeForOurKey(context, distributionId); long keyAge = System.currentTimeMillis() - keyCreateTime; - if (keyCreateTime != -1 && keyAge > MAX_KEY_AGE) { + if (keyCreateTime != -1 && keyAge > FeatureFlags.senderKeyMaxAge()) { Log.w(TAG, "Key is " + (keyAge) + " ms old (~" + TimeUnit.MILLISECONDS.toDays(keyAge) + " days). Rotating."); SenderKeyUtil.rotateOurKey(context, distributionId); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index adf5ae4745..c507a3b7e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -78,6 +78,7 @@ public final class FeatureFlags { private static final String RETRY_RECEIPT_LIFESPAN = "android.retryReceiptLifespan"; private static final String RETRY_RESPOND_MAX_AGE = "android.retryRespondMaxAge"; private static final String SENDER_KEY = "android.senderKey.5"; + private static final String SENDER_KEY_MAX_AGE = "android.senderKeyMaxAge"; private static final String RETRY_RECEIPTS = "android.retryReceipts"; private static final String SUGGEST_SMS_BLACKLIST = "android.suggestSmsBlacklist"; private static final String MAX_GROUP_CALL_RING_SIZE = "global.calling.maxGroupCallRingSize"; @@ -121,7 +122,8 @@ public final class FeatureFlags { SUGGEST_SMS_BLACKLIST, MAX_GROUP_CALL_RING_SIZE, GROUP_CALL_RINGING, - CDSH + CDSH, + SENDER_KEY_MAX_AGE ); @VisibleForTesting @@ -174,7 +176,8 @@ public final class FeatureFlags { SENDER_KEY, MAX_GROUP_CALL_RING_SIZE, GROUP_CALL_RINGING, - CDSH + CDSH, + SENDER_KEY_MAX_AGE ); /** @@ -377,6 +380,11 @@ public final class FeatureFlags { return getBoolean(SENDER_KEY, true); } + /** How long a sender key can live before it needs to be rotated. */ + public static long senderKeyMaxAge() { + return Math.min(getLong(SENDER_KEY_MAX_AGE, TimeUnit.DAYS.toMillis(14)), TimeUnit.DAYS.toMillis(90)); + } + /** A comma-delimited list of country codes that should not be told about SMS during onboarding. */ public static @NonNull String suggestSmsBlacklist() { return getString(SUGGEST_SMS_BLACKLIST, "");