That fuck shit the fascists are using
at master 101 lines 3.8 kB view raw
1package org.tm.archive.migrations; 2 3import androidx.annotation.NonNull; 4import androidx.annotation.Nullable; 5 6import org.signal.core.util.logging.Log; 7import org.signal.libsignal.protocol.state.PreKeyRecord; 8import org.signal.libsignal.protocol.state.SignedPreKeyRecord; 9import org.tm.archive.crypto.PreKeyUtil; 10import org.tm.archive.crypto.storage.PreKeyMetadataStore; 11import org.tm.archive.dependencies.ApplicationDependencies; 12import org.tm.archive.jobmanager.Job; 13import org.tm.archive.jobmanager.impl.NetworkConstraint; 14import org.tm.archive.keyvalue.SignalStore; 15import org.tm.archive.recipients.Recipient; 16import org.whispersystems.signalservice.api.SignalServiceAccountDataStore; 17import org.whispersystems.signalservice.api.SignalServiceAccountManager; 18import org.whispersystems.signalservice.api.account.PreKeyUpload; 19import org.whispersystems.signalservice.api.push.ServiceId.PNI; 20import org.whispersystems.signalservice.api.push.ServiceIdType; 21 22import java.io.IOException; 23import java.util.List; 24 25/** 26 * Initializes various aspects of the PNI identity. Notably: 27 * - Creates an identity key 28 * - Creates and uploads one-time prekeys 29 * - Creates and uploads signed prekeys 30 */ 31public class PniAccountInitializationMigrationJob extends MigrationJob { 32 33 private static final String TAG = Log.tag(PniAccountInitializationMigrationJob.class); 34 35 public static final String KEY = "PniAccountInitializationMigrationJob"; 36 37 PniAccountInitializationMigrationJob() { 38 this(new Parameters.Builder() 39 .addConstraint(NetworkConstraint.KEY) 40 .build()); 41 } 42 43 private PniAccountInitializationMigrationJob(@NonNull Parameters parameters) { 44 super(parameters); 45 } 46 47 @Override 48 public boolean isUiBlocking() { 49 return false; 50 } 51 52 @Override 53 public @NonNull String getFactoryKey() { 54 return KEY; 55 } 56 57 @Override 58 public void performMigration() throws IOException { 59 PNI pni = SignalStore.account().getPni(); 60 61 if (pni == null || SignalStore.account().getAci() == null || !Recipient.self().isRegistered()) { 62 Log.w(TAG, "Not yet registered! No need to perform this migration."); 63 return; 64 } 65 66 if (!SignalStore.account().hasPniIdentityKey()) { 67 Log.i(TAG, "Generating PNI identity."); 68 SignalStore.account().generatePniIdentityKeyIfNecessary(); 69 } else { 70 Log.w(TAG, "Already generated the PNI identity. Skipping this step."); 71 } 72 73 SignalServiceAccountManager accountManager = ApplicationDependencies.getSignalServiceAccountManager(); 74 SignalServiceAccountDataStore protocolStore = ApplicationDependencies.getProtocolStore().pni(); 75 PreKeyMetadataStore metadataStore = SignalStore.account().pniPreKeys(); 76 77 if (!metadataStore.isSignedPreKeyRegistered()) { 78 Log.i(TAG, "Uploading signed prekey for PNI."); 79 SignedPreKeyRecord signedPreKey = PreKeyUtil.generateAndStoreSignedPreKey(protocolStore, metadataStore); 80 List<PreKeyRecord> oneTimePreKeys = PreKeyUtil.generateAndStoreOneTimeEcPreKeys(protocolStore, metadataStore); 81 82 accountManager.setPreKeys(new PreKeyUpload(ServiceIdType.PNI, signedPreKey, oneTimePreKeys, null, null)); 83 metadataStore.setActiveSignedPreKeyId(signedPreKey.getId()); 84 metadataStore.setSignedPreKeyRegistered(true); 85 } else { 86 Log.w(TAG, "Already uploaded signed prekey for PNI. Skipping this step."); 87 } 88 } 89 90 @Override 91 boolean shouldRetry(@NonNull Exception e) { 92 return e instanceof IOException; 93 } 94 95 public static class Factory implements Job.Factory<PniAccountInitializationMigrationJob> { 96 @Override 97 public @NonNull PniAccountInitializationMigrationJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { 98 return new PniAccountInitializationMigrationJob(parameters); 99 } 100 } 101}