| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- 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;
|