mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 00:29:11 +01:00
Clean up old one-time prekeys.
This commit is contained in:
committed by
Cody Henthorne
parent
389b439e9a
commit
d6adfea9b1
@@ -49,10 +49,11 @@ public class PreKeyUtil {
|
||||
private static final int BATCH_SIZE = 100;
|
||||
private static final long ARCHIVE_AGE = TimeUnit.DAYS.toMillis(30);
|
||||
|
||||
public synchronized static @NonNull List<PreKeyRecord> generateAndStoreOneTimeEcPreKeys(@NonNull SignalProtocolStore protocolStore, @NonNull PreKeyMetadataStore metadataStore) {
|
||||
public synchronized static @NonNull List<PreKeyRecord> generateAndStoreOneTimeEcPreKeys(@NonNull SignalServiceAccountDataStore protocolStore, @NonNull PreKeyMetadataStore metadataStore) {
|
||||
int startingId = metadataStore.getNextEcOneTimePreKeyId();
|
||||
final List<PreKeyRecord> records = generateOneTimeEcPreKeys(startingId);
|
||||
|
||||
protocolStore.markAllOneTimeEcPreKeysStaleIfNecessary(System.currentTimeMillis());
|
||||
storeOneTimeEcPreKeys(protocolStore, metadataStore, records);
|
||||
|
||||
return records;
|
||||
@@ -92,10 +93,11 @@ public class PreKeyUtil {
|
||||
|
||||
}
|
||||
|
||||
public synchronized static @NonNull List<KyberPreKeyRecord> generateAndStoreOneTimeKyberPreKeys(@NonNull SignalProtocolStore protocolStore, @NonNull PreKeyMetadataStore metadataStore) {
|
||||
public synchronized static @NonNull List<KyberPreKeyRecord> generateAndStoreOneTimeKyberPreKeys(@NonNull SignalServiceAccountDataStore protocolStore, @NonNull PreKeyMetadataStore metadataStore) {
|
||||
int startingId = metadataStore.getNextKyberPreKeyId();
|
||||
List<KyberPreKeyRecord> records = generateOneTimeKyberPreKeyRecords(startingId, protocolStore.getIdentityKeyPair().getPrivateKey());
|
||||
|
||||
protocolStore.markAllOneTimeKyberPreKeysStaleIfNecessary(System.currentTimeMillis());
|
||||
storeOneTimeKyberPreKeys(protocolStore, metadataStore, records);
|
||||
|
||||
return records;
|
||||
@@ -264,4 +266,12 @@ public class PreKeyUtil {
|
||||
Log.w(TAG, e);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized static void cleanOneTimePreKeys(@NonNull SignalServiceAccountDataStore protocolStore) {
|
||||
long threshold = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(90);
|
||||
int minCount = 200;
|
||||
|
||||
protocolStore.deleteAllStaleOneTimeEcPreKeys(threshold, minCount);
|
||||
protocolStore.deleteAllStaleOneTimeKyberPreKeys(threshold, minCount);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,4 +67,16 @@ class SignalKyberPreKeyStore(private val selfServiceId: ServiceId) : SignalServi
|
||||
SignalDatabase.kyberPreKeys.delete(selfServiceId, kyberPreKeyId)
|
||||
}
|
||||
}
|
||||
|
||||
override fun markAllOneTimeKyberPreKeysStaleIfNecessary(staleTime: Long) {
|
||||
ReentrantSessionLock.INSTANCE.acquire().use {
|
||||
SignalDatabase.kyberPreKeys.markAllStaleIfNecessary(selfServiceId, staleTime)
|
||||
}
|
||||
}
|
||||
|
||||
override fun deleteAllStaleOneTimeKyberPreKeys(threshold: Long, minCount: Int) {
|
||||
ReentrantSessionLock.INSTANCE.acquire().use {
|
||||
SignalDatabase.kyberPreKeys.deleteAllStaleBefore(selfServiceId, threshold, minCount)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,6 +100,16 @@ public class SignalServiceAccountDataStoreImpl implements SignalServiceAccountDa
|
||||
preKeyStore.removePreKey(preKeyId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markAllOneTimeEcPreKeysStaleIfNecessary(long staleTime) {
|
||||
preKeyStore.markAllOneTimeEcPreKeysStaleIfNecessary(staleTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteAllStaleOneTimeEcPreKeys(long threshold, int minCount) {
|
||||
preKeyStore.deleteAllStaleOneTimeEcPreKeys(threshold, minCount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SessionRecord loadSession(SignalProtocolAddress axolotlAddress) {
|
||||
return sessionStore.loadSession(axolotlAddress);
|
||||
@@ -211,6 +221,16 @@ public class SignalServiceAccountDataStoreImpl implements SignalServiceAccountDa
|
||||
kyberPreKeyStore.removeKyberPreKey(kyberPreKeyId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markAllOneTimeKyberPreKeysStaleIfNecessary(long staleTime) {
|
||||
kyberPreKeyStore.markAllOneTimeKyberPreKeysStaleIfNecessary(staleTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteAllStaleOneTimeKyberPreKeys(long threshold, int minCount) {
|
||||
kyberPreKeyStore.deleteAllStaleOneTimeKyberPreKeys(threshold, minCount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void storeSenderKey(SignalProtocolAddress sender, UUID distributionId, SenderKeyRecord record) {
|
||||
senderKeyStore.storeSenderKey(sender, distributionId, record);
|
||||
@@ -251,5 +271,4 @@ public class SignalServiceAccountDataStoreImpl implements SignalServiceAccountDa
|
||||
public @NonNull SignalSenderKeyStore senderKeys() {
|
||||
return senderKeyStore;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,12 +10,13 @@ import org.signal.libsignal.protocol.state.SignedPreKeyRecord;
|
||||
import org.signal.libsignal.protocol.state.SignedPreKeyStore;
|
||||
import org.thoughtcrime.securesms.crypto.ReentrantSessionLock;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.whispersystems.signalservice.api.SignalServicePreKeyStore;
|
||||
import org.whispersystems.signalservice.api.SignalSessionLock;
|
||||
import org.whispersystems.signalservice.api.push.ServiceId;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class TextSecurePreKeyStore implements PreKeyStore, SignedPreKeyStore {
|
||||
public class TextSecurePreKeyStore implements SignalServicePreKeyStore, SignedPreKeyStore {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static final String TAG = Log.tag(TextSecurePreKeyStore.class);
|
||||
@@ -87,4 +88,14 @@ public class TextSecurePreKeyStore implements PreKeyStore, SignedPreKeyStore {
|
||||
public void removeSignedPreKey(int signedPreKeyId) {
|
||||
SignalDatabase.signedPreKeys().delete(accountId, signedPreKeyId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markAllOneTimeEcPreKeysStaleIfNecessary(long staleTime) {
|
||||
SignalDatabase.oneTimePreKeys().markAllStaleIfNecessary(accountId, staleTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteAllStaleOneTimeEcPreKeys(long threshold, int minCount) {
|
||||
SignalDatabase.oneTimePreKeys().deleteAllStaleBefore(accountId, threshold, minCount);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user