diff --git a/keyserver/src/creators/olm-session-creator.js b/keyserver/src/creators/olm-session-creator.js --- a/keyserver/src/creators/olm-session-creator.js +++ b/keyserver/src/creators/olm-session-creator.js @@ -6,7 +6,7 @@ import { dbQuery, SQL } from '../database/database.js'; import { fetchCallUpdateOlmAccount } from '../updaters/olm-account-updater.js'; -import { createPickledOlmSession } from '../utils/olm-utils.js'; +import { createPickledOlmSession } from '../utils/olm-objects.js'; async function createOlmSession( initialEncryptedMessage: string, diff --git a/keyserver/src/utils/olm-objects.js b/keyserver/src/utils/olm-objects.js --- a/keyserver/src/utils/olm-objects.js +++ b/keyserver/src/utils/olm-objects.js @@ -6,6 +6,7 @@ } from '@commapp/olm'; import uuid from 'uuid'; +import { olmEncryptedMessageTypes } from 'lib/types/crypto-types.js'; import { ServerError } from 'lib/utils/errors.js'; import { getMessageForException } from '../responders/utils.js'; @@ -93,8 +94,37 @@ }; } +async function createPickledOlmSession( + account: OlmAccount, + accountPicklingKey: string, + initialEncryptedMessage: string, + theirCurve25519Key?: string, +): Promise { + await olm.init(); + const session = new olm.Session(); + + if (theirCurve25519Key) { + session.create_inbound_from( + account, + theirCurve25519Key, + initialEncryptedMessage, + ); + } else { + session.create_inbound(account, initialEncryptedMessage); + } + + account.remove_one_time_keys(session); + session.decrypt(olmEncryptedMessageTypes.PREKEY, initialEncryptedMessage); + const pickledSession = session.pickle(accountPicklingKey); + + session.free(); + + return pickledSession; +} + export { unpickleAccountAndUseCallback, createPickledOlmAccount, unpickleSessionAndUseCallback, + createPickledOlmSession, }; diff --git a/keyserver/src/utils/olm-utils.js b/keyserver/src/utils/olm-utils.js --- a/keyserver/src/utils/olm-utils.js +++ b/keyserver/src/utils/olm-utils.js @@ -1,11 +1,9 @@ // @flow import type { Account as OlmAccount } from '@commapp/olm'; -import olm from '@commapp/olm'; import invariant from 'invariant'; import { getOneTimeKeyValuesFromBlob } from 'lib/shared/crypto-utils.js'; -import { olmEncryptedMessageTypes } from 'lib/types/crypto-types.js'; import type { IdentityNewDeviceKeyUpload } from 'lib/types/identity-service-types.js'; import { ServerError } from 'lib/utils/errors.js'; import { @@ -21,30 +19,6 @@ import { fetchCallUpdateOlmAccount } from '../updaters/olm-account-updater.js'; import { verifyUserLoggedIn } from '../user/login.js'; -async function createPickledOlmSession( - account: OlmAccount, - accountPicklingKey: string, - initialEncryptedMessage: string, - theirCurve25519Key?: string, -): Promise { - await olm.init(); - const session = new olm.Session(); - - if (theirCurve25519Key) { - session.create_inbound_from( - account, - theirCurve25519Key, - initialEncryptedMessage, - ); - } else { - session.create_inbound(account, initialEncryptedMessage); - } - - account.remove_one_time_keys(session); - session.decrypt(olmEncryptedMessageTypes.PREKEY, initialEncryptedMessage); - return session.pickle(accountPicklingKey); -} - async function markPrekeysAsPublished(): Promise { await Promise.all([ fetchCallUpdateOlmAccount('content', (contentAccount: OlmAccount) => { @@ -262,7 +236,6 @@ } export { - createPickledOlmSession, uploadNewOneTimeKeys, getContentSigningKey, validateAndUploadAccountPrekeys,