mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2025-01-15 08:44:59 -05:00
1139a37338
Signed-off-by: si458 <simonsmith5521@gmail.com>
91 lines
3.0 KiB
JavaScript
91 lines
3.0 KiB
JavaScript
import { AESECBCipher, AESEAXCipher } from "./aes.js";
|
|
import { DESCBCCipher, DESECBCipher } from "./des.js";
|
|
import { RSACipher } from "./rsa.js";
|
|
import { DHCipher } from "./dh.js";
|
|
import { MD5 } from "./md5.js";
|
|
|
|
// A single interface for the cryptographic algorithms not supported by SubtleCrypto.
|
|
// Both synchronous and asynchronous implmentations are allowed.
|
|
class LegacyCrypto {
|
|
constructor() {
|
|
this._algorithms = {
|
|
"AES-ECB": AESECBCipher,
|
|
"AES-EAX": AESEAXCipher,
|
|
"DES-ECB": DESECBCipher,
|
|
"DES-CBC": DESCBCCipher,
|
|
"RSA-PKCS1-v1_5": RSACipher,
|
|
"DH": DHCipher,
|
|
"MD5": MD5,
|
|
};
|
|
}
|
|
|
|
encrypt(algorithm, key, data) {
|
|
if (key.algorithm.name !== algorithm.name) {
|
|
throw new Error("algorithm does not match");
|
|
}
|
|
if (typeof key.encrypt !== "function") {
|
|
throw new Error("key does not support encryption");
|
|
}
|
|
return key.encrypt(algorithm, data);
|
|
}
|
|
|
|
decrypt(algorithm, key, data) {
|
|
if (key.algorithm.name !== algorithm.name) {
|
|
throw new Error("algorithm does not match");
|
|
}
|
|
if (typeof key.decrypt !== "function") {
|
|
throw new Error("key does not support encryption");
|
|
}
|
|
return key.decrypt(algorithm, data);
|
|
}
|
|
|
|
importKey(format, keyData, algorithm, extractable, keyUsages) {
|
|
if (format !== "raw") {
|
|
throw new Error("key format is not supported");
|
|
}
|
|
const alg = this._algorithms[algorithm.name];
|
|
if (typeof alg === "undefined" || typeof alg.importKey !== "function") {
|
|
throw new Error("algorithm is not supported");
|
|
}
|
|
return alg.importKey(keyData, algorithm, extractable, keyUsages);
|
|
}
|
|
|
|
generateKey(algorithm, extractable, keyUsages) {
|
|
const alg = this._algorithms[algorithm.name];
|
|
if (typeof alg === "undefined" || typeof alg.generateKey !== "function") {
|
|
throw new Error("algorithm is not supported");
|
|
}
|
|
return alg.generateKey(algorithm, extractable, keyUsages);
|
|
}
|
|
|
|
exportKey(format, key) {
|
|
if (format !== "raw") {
|
|
throw new Error("key format is not supported");
|
|
}
|
|
if (typeof key.exportKey !== "function") {
|
|
throw new Error("key does not support exportKey");
|
|
}
|
|
return key.exportKey();
|
|
}
|
|
|
|
digest(algorithm, data) {
|
|
const alg = this._algorithms[algorithm];
|
|
if (typeof alg !== "function") {
|
|
throw new Error("algorithm is not supported");
|
|
}
|
|
return alg(data);
|
|
}
|
|
|
|
deriveBits(algorithm, key, length) {
|
|
if (key.algorithm.name !== algorithm.name) {
|
|
throw new Error("algorithm does not match");
|
|
}
|
|
if (typeof key.deriveBits !== "function") {
|
|
throw new Error("key does not support deriveBits");
|
|
}
|
|
return key.deriveBits(algorithm, length);
|
|
}
|
|
}
|
|
|
|
export default new LegacyCrypto;
|