diff --git a/package.json b/package.json index a98733d4..fcab6ed5 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,8 @@ "dependencies": { "aes-js": "^3.1.2", "another-json": "^0.2.0", - "base-x": "^3.0.8", + "base64-arraybuffer": "^0.2.0", + "bs58": "^4.0.1", "olm": "https://packages.matrix.org/npm/olm/olm-3.1.4.tgz" } } diff --git a/scripts/post-install.mjs b/scripts/post-install.mjs index 77df95f3..703ab79f 100644 --- a/scripts/post-install.mjs +++ b/scripts/post-install.mjs @@ -75,11 +75,17 @@ async function populateLib() { path.join(modulesDir, 'another-json/another-json.js'), path.join(libDir, "another-json/index.js") ); - // transpile base-x to esm - await fs.mkdir(path.join(libDir, "base-x/")); + // transpile bs58 to esm + await fs.mkdir(path.join(libDir, "bs58/")); await commonjsToESM( - path.join(modulesDir, 'base-x/src/index.js'), - path.join(libDir, "base-x/index.js") + path.join(modulesDir, 'bs58/index.js'), + path.join(libDir, "bs58/index.js") + ); + // transpile base64-arraybuffer to esm + await fs.mkdir(path.join(libDir, "base64-arraybuffer/")); + await commonjsToESM( + path.join(modulesDir, 'base64-arraybuffer/lib/base64-arraybuffer.js'), + path.join(libDir, "base64-arraybuffer/index.js") ); // transpile aesjs to esm await fs.mkdir(path.join(libDir, "aes-js/")); @@ -87,7 +93,6 @@ async function populateLib() { path.join(modulesDir, 'aes-js/index.js'), path.join(libDir, "aes-js/index.js") ); - } populateLib(); diff --git a/src/matrix/e2ee/megolm/SessionBackup.js b/src/matrix/e2ee/megolm/SessionBackup.js index e7a94d7e..e6614601 100644 --- a/src/matrix/e2ee/megolm/SessionBackup.js +++ b/src/matrix/e2ee/megolm/SessionBackup.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {base64} from "../../utils/base-encoding.js"; +import base64 from "../../../../lib/base64-arraybuffer/index.js"; export class SessionBackup { constructor({backupInfo, decryption, hsApi}) { @@ -40,7 +40,7 @@ export class SessionBackup { static async fromSecretStorage({olm, secretStorage, hsApi, txn}) { const base64PrivateKey = await secretStorage.readSecret("m.megolm_backup.v1", txn); if (base64PrivateKey) { - const privateKey = base64.decode(base64PrivateKey); + const privateKey = new Uint8Array(base64.decode(base64PrivateKey)); const backupInfo = await hsApi.roomKeysVersion().response(); const expectedPubKey = backupInfo.auth_data.public_key; const decryption = new olm.PkDecryption(); diff --git a/src/matrix/ssss/SecretStorage.js b/src/matrix/ssss/SecretStorage.js index 6e7b3ae7..a94c2e19 100644 --- a/src/matrix/ssss/SecretStorage.js +++ b/src/matrix/ssss/SecretStorage.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {base64} from "../../utils/base-encoding.js"; +import base64 from "../../../lib/base64-arraybuffer/index.js"; export class SecretStorage { constructor({key, cryptoDriver}) { diff --git a/src/matrix/ssss/recoveryKey.js b/src/matrix/ssss/recoveryKey.js index 314c2ec6..5d2b1d7a 100644 --- a/src/matrix/ssss/recoveryKey.js +++ b/src/matrix/ssss/recoveryKey.js @@ -13,7 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import {base58} from "../../utils/base-encoding.js"; +import bs58 from "../../../lib/bs58/index.js"; import {Key} from "./common.js"; const OLM_RECOVERY_KEY_PREFIX = [0x8B, 0x01]; @@ -25,7 +25,7 @@ const OLM_RECOVERY_KEY_PREFIX = [0x8B, 0x01]; * @return {Key} */ export function keyFromRecoveryKey(olm, keyDescription, recoveryKey) { - const result = base58.decode(recoveryKey.replace(/ /g, '')); + const result = bs58.decode(recoveryKey.replace(/ /g, '')); let parity = 0; for (const b of result) { diff --git a/src/utils/base-encoding.js b/src/utils/base-encoding.js deleted file mode 100644 index 611ec043..00000000 --- a/src/utils/base-encoding.js +++ /dev/null @@ -1,25 +0,0 @@ -/* -Copyright 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import base from "../../lib/base-x/index.js"; - -// Dictionaries come from https://github.com/cryptocoinjs/base-x/, MIT licenced. -const BASE58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; -const BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - -export const base58 = base(BASE58); -export const base64 = base(BASE64); diff --git a/yarn.lock b/yarn.lock index 60e500c1..0d90c4ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -945,13 +945,18 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base-x@^3.0.8: +base-x@^3.0.2: version "3.0.8" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== dependencies: safe-buffer "^5.0.1" +base64-arraybuffer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz#4b944fac0191aa5907afe2d8c999ccc57ce80f45" + integrity sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ== + boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -975,6 +980,13 @@ browserslist@^4.12.0, browserslist@^4.8.5: escalade "^3.0.2" node-releases "^1.1.60" +bs58@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + builtin-modules@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484"