public static List<PreKeyRecord> generatePreKeys(Context context, MasterSecret masterSecret) { PreKeyStore preKeyStore = new TextSecurePreKeyStore(context, masterSecret); List<PreKeyRecord> records = new LinkedList<>(); int preKeyIdOffset = getNextPreKeyId(context); for (int i = 0; i < BATCH_SIZE; i++) { int preKeyId = (preKeyIdOffset + i) % Medium.MAX_VALUE; ECKeyPair keyPair = Curve.generateKeyPair(); PreKeyRecord record = new PreKeyRecord(preKeyId, keyPair); preKeyStore.storePreKey(preKeyId, record); records.add(record); } setNextPreKeyId(context, (preKeyIdOffset + BATCH_SIZE + 1) % Medium.MAX_VALUE); return records; }
public static PreKeyRecord generateLastResortKey(Context context, MasterSecret masterSecret) { PreKeyStore preKeyStore = new TextSecurePreKeyStore(context, masterSecret); if (preKeyStore.containsPreKey(Medium.MAX_VALUE)) { try { return preKeyStore.loadPreKey(Medium.MAX_VALUE); } catch (InvalidKeyIdException e) { Log.w("PreKeyUtil", e); preKeyStore.removePreKey(Medium.MAX_VALUE); } } ECKeyPair keyPair = Curve.generateKeyPair(); PreKeyRecord record = new PreKeyRecord(Medium.MAX_VALUE, keyPair); preKeyStore.storePreKey(Medium.MAX_VALUE, record); return record; }