summaryrefslogtreecommitdiff
path: root/includes/external/matrix/node_modules/matrix-js-sdk/lib/crypto/aes.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/external/matrix/node_modules/matrix-js-sdk/lib/crypto/aes.js')
-rw-r--r--includes/external/matrix/node_modules/matrix-js-sdk/lib/crypto/aes.js128
1 files changed, 0 insertions, 128 deletions
diff --git a/includes/external/matrix/node_modules/matrix-js-sdk/lib/crypto/aes.js b/includes/external/matrix/node_modules/matrix-js-sdk/lib/crypto/aes.js
deleted file mode 100644
index 97181df..0000000
--- a/includes/external/matrix/node_modules/matrix-js-sdk/lib/crypto/aes.js
+++ /dev/null
@@ -1,128 +0,0 @@
-"use strict";
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.calculateKeyCheck = calculateKeyCheck;
-exports.decryptAES = decryptAES;
-exports.encryptAES = encryptAES;
-var _olmlib = require("./olmlib");
-var _crypto = require("./crypto");
-/*
-Copyright 2020 - 2021 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.
-*/
-
-// salt for HKDF, with 8 bytes of zeros
-const zeroSalt = new Uint8Array(8);
-/**
- * encrypt a string
- *
- * @param data - the plaintext to encrypt
- * @param key - the encryption key to use
- * @param name - the name of the secret
- * @param ivStr - the initialization vector to use
- */
-async function encryptAES(data, key, name, ivStr) {
- let iv;
- if (ivStr) {
- iv = (0, _olmlib.decodeBase64)(ivStr);
- } else {
- iv = new Uint8Array(16);
- _crypto.crypto.getRandomValues(iv);
-
- // clear bit 63 of the IV to stop us hitting the 64-bit counter boundary
- // (which would mean we wouldn't be able to decrypt on Android). The loss
- // of a single bit of iv is a price we have to pay.
- iv[8] &= 0x7f;
- }
- const [aesKey, hmacKey] = await deriveKeys(key, name);
- const encodedData = new _crypto.TextEncoder().encode(data);
- const ciphertext = await _crypto.subtleCrypto.encrypt({
- name: "AES-CTR",
- counter: iv,
- length: 64
- }, aesKey, encodedData);
- const hmac = await _crypto.subtleCrypto.sign({
- name: "HMAC"
- }, hmacKey, ciphertext);
- return {
- iv: (0, _olmlib.encodeBase64)(iv),
- ciphertext: (0, _olmlib.encodeBase64)(ciphertext),
- mac: (0, _olmlib.encodeBase64)(hmac)
- };
-}
-
-/**
- * decrypt a string
- *
- * @param data - the encrypted data
- * @param key - the encryption key to use
- * @param name - the name of the secret
- */
-async function decryptAES(data, key, name) {
- const [aesKey, hmacKey] = await deriveKeys(key, name);
- const ciphertext = (0, _olmlib.decodeBase64)(data.ciphertext);
- if (!(await _crypto.subtleCrypto.verify({
- name: "HMAC"
- }, hmacKey, (0, _olmlib.decodeBase64)(data.mac), ciphertext))) {
- throw new Error(`Error decrypting secret ${name}: bad MAC`);
- }
- const plaintext = await _crypto.subtleCrypto.decrypt({
- name: "AES-CTR",
- counter: (0, _olmlib.decodeBase64)(data.iv),
- length: 64
- }, aesKey, ciphertext);
- return new TextDecoder().decode(new Uint8Array(plaintext));
-}
-async function deriveKeys(key, name) {
- const hkdfkey = await _crypto.subtleCrypto.importKey("raw", key, {
- name: "HKDF"
- }, false, ["deriveBits"]);
- const keybits = await _crypto.subtleCrypto.deriveBits({
- name: "HKDF",
- salt: zeroSalt,
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore: https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/879
- info: new _crypto.TextEncoder().encode(name),
- hash: "SHA-256"
- }, hkdfkey, 512);
- const aesKey = keybits.slice(0, 32);
- const hmacKey = keybits.slice(32);
- const aesProm = _crypto.subtleCrypto.importKey("raw", aesKey, {
- name: "AES-CTR"
- }, false, ["encrypt", "decrypt"]);
- const hmacProm = _crypto.subtleCrypto.importKey("raw", hmacKey, {
- name: "HMAC",
- hash: {
- name: "SHA-256"
- }
- }, false, ["sign", "verify"]);
- return Promise.all([aesProm, hmacProm]);
-}
-
-// string of zeroes, for calculating the key check
-const ZERO_STR = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
-
-/** Calculate the MAC for checking the key.
- *
- * @param key - the key to use
- * @param iv - The initialization vector as a base64-encoded string.
- * If omitted, a random initialization vector will be created.
- * @returns An object that contains, `mac` and `iv` properties.
- */
-function calculateKeyCheck(key, iv) {
- return encryptAES(ZERO_STR, key, "", iv);
-}
-//# sourceMappingURL=aes.js.map \ No newline at end of file