+ private PreKeyCollection generatePreKeysForType(ServiceIdType serviceIdType) {
+ final var accountData = account.getAccountData(serviceIdType);
+ final var keyPair = accountData.getIdentityKeyPair();
+ final var preKeyMetadata = accountData.getPreKeyMetadata();
+
+ final var preKeyIdOffset = preKeyMetadata.getPreKeyIdOffset();
+ final var oneTimeEcPreKeys = KeyUtils.generatePreKeyRecords(preKeyIdOffset);
+ final var nextSignedPreKeyId = preKeyMetadata.getNextSignedPreKeyId();
+ final var signedPreKey = KeyUtils.generateSignedPreKeyRecord(nextSignedPreKeyId, keyPair);
+
+ final var privateKey = keyPair.getPrivateKey();
+ final var kyberPreKeyIdOffset = preKeyMetadata.getKyberPreKeyIdOffset();
+ final var oneTimeKyberPreKeys = KeyUtils.generateKyberPreKeyRecords(kyberPreKeyIdOffset, privateKey);
+ final var lastResortKyberPreKeyId = (kyberPreKeyIdOffset + oneTimeKyberPreKeys.size()) % PREKEY_MAXIMUM_ID;
+ final var lastResortKyberPreKey = KeyUtils.generateKyberPreKeyRecord(lastResortKyberPreKeyId, privateKey);
+
+ return new PreKeyCollection(keyPair,
+ nextSignedPreKeyId,
+ preKeyIdOffset,
+ lastResortKyberPreKeyId,
+ kyberPreKeyIdOffset,
+ serviceIdType,
+ keyPair.getPublicKey(),
+ signedPreKey,
+ oneTimeEcPreKeys,
+ lastResortKyberPreKey,
+ oneTimeKyberPreKeys);
+ }
+