@wordpress/sync
Version:
134 lines (132 loc) • 4.27 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/sync/src/providers/y-webrtc/crypto.js
var crypto_exports = {};
__export(crypto_exports, {
decrypt: () => decrypt,
decryptJson: () => decryptJson,
deriveKey: () => deriveKey,
encrypt: () => encrypt,
encryptJson: () => encryptJson
});
module.exports = __toCommonJS(crypto_exports);
var encoding = __toESM(require("lib0/encoding"));
var decoding = __toESM(require("lib0/decoding"));
var promise = __toESM(require("lib0/promise"));
var error = __toESM(require("lib0/error"));
var string = __toESM(require("lib0/string"));
var deriveKey = (secret, roomName) => {
const secretBuffer = string.encodeUtf8(secret).buffer;
const salt = string.encodeUtf8(roomName).buffer;
return crypto.subtle.importKey("raw", secretBuffer, "PBKDF2", false, ["deriveKey"]).then(
(keyMaterial) => crypto.subtle.deriveKey(
{
name: "PBKDF2",
salt,
iterations: 1e5,
hash: "SHA-256"
},
keyMaterial,
{
name: "AES-GCM",
length: 256
},
true,
["encrypt", "decrypt"]
)
);
};
var encrypt = (data, key) => {
if (!key) {
return (
/** @type {PromiseLike<Uint8Array>} */
promise.resolve(data)
);
}
const iv = crypto.getRandomValues(new Uint8Array(12));
return crypto.subtle.encrypt(
{
name: "AES-GCM",
iv
},
key,
data
).then((cipher) => {
const encryptedDataEncoder = encoding.createEncoder();
encoding.writeVarString(encryptedDataEncoder, "AES-GCM");
encoding.writeVarUint8Array(encryptedDataEncoder, iv);
encoding.writeVarUint8Array(
encryptedDataEncoder,
new Uint8Array(cipher)
);
return encoding.toUint8Array(encryptedDataEncoder);
});
};
var encryptJson = (data, key) => {
const dataEncoder = encoding.createEncoder();
encoding.writeAny(dataEncoder, data);
return encrypt(encoding.toUint8Array(dataEncoder), key);
};
var decrypt = (data, key) => {
if (!key) {
return (
/** @type {PromiseLike<Uint8Array>} */
promise.resolve(data)
);
}
const dataDecoder = decoding.createDecoder(data);
const algorithm = decoding.readVarString(dataDecoder);
if (algorithm !== "AES-GCM") {
promise.reject(error.create("Unknown encryption algorithm"));
}
const iv = decoding.readVarUint8Array(dataDecoder);
const cipher = decoding.readVarUint8Array(dataDecoder);
return crypto.subtle.decrypt(
{
name: "AES-GCM",
iv
},
key,
cipher
).then((data2) => new Uint8Array(data2));
};
var decryptJson = (data, key) => decrypt(data, key).then(
(decryptedValue) => decoding.readAny(
decoding.createDecoder(new Uint8Array(decryptedValue))
)
);
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
decrypt,
decryptJson,
deriveKey,
encrypt,
encryptJson
});
//# sourceMappingURL=crypto.js.map