2022-05-12 10:58:48 +00:00
|
|
|
import * as crypto from "crypto";
|
2021-02-04 19:51:19 +00:00
|
|
|
import * as process from "process";
|
2019-01-25 10:43:13 +00:00
|
|
|
import * as core from "webcrypto-core";
|
|
|
|
import {
|
2023-04-04 10:20:37 +00:00
|
|
|
AesCbcProvider,
|
|
|
|
AesCmacProvider,
|
|
|
|
AesCtrProvider,
|
|
|
|
AesEcbProvider,
|
|
|
|
AesGcmProvider,
|
|
|
|
AesKwProvider,
|
2019-10-12 07:33:10 +00:00
|
|
|
DesCbcProvider,
|
2023-04-04 10:20:37 +00:00
|
|
|
DesEde3CbcProvider,
|
|
|
|
EcdhProvider,
|
|
|
|
EcdsaProvider,
|
|
|
|
HkdfProvider,
|
2021-02-04 19:51:19 +00:00
|
|
|
EdDsaProvider,
|
|
|
|
EcdhEsProvider,
|
2019-08-20 09:21:56 +00:00
|
|
|
HmacProvider,
|
2019-03-02 20:57:59 +00:00
|
|
|
Pbkdf2Provider,
|
2023-04-04 10:20:37 +00:00
|
|
|
RsaEsProvider,
|
|
|
|
RsaOaepProvider,
|
|
|
|
RsaPssProvider,
|
|
|
|
RsaSsaProvider,
|
|
|
|
Sha1Provider,
|
|
|
|
Sha256Provider,
|
|
|
|
Sha384Provider,
|
|
|
|
Sha512Provider,
|
|
|
|
Shake128Provider,
|
|
|
|
Shake256Provider,
|
|
|
|
Sha3256Provider,
|
|
|
|
Sha3384Provider,
|
|
|
|
Sha3512Provider,
|
2019-01-25 10:43:13 +00:00
|
|
|
} from "./mechs";
|
|
|
|
|
|
|
|
export class SubtleCrypto extends core.SubtleCrypto {
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
|
|
|
|
//#region AES
|
|
|
|
this.providers.set(new AesCbcProvider());
|
|
|
|
this.providers.set(new AesCtrProvider());
|
|
|
|
this.providers.set(new AesGcmProvider());
|
2019-08-20 09:21:56 +00:00
|
|
|
this.providers.set(new AesCmacProvider());
|
2019-03-02 04:40:35 +00:00
|
|
|
this.providers.set(new AesKwProvider());
|
2019-10-12 07:33:10 +00:00
|
|
|
this.providers.set(new AesEcbProvider());
|
2019-01-25 10:43:13 +00:00
|
|
|
//#endregion
|
|
|
|
|
|
|
|
//#region DES
|
2023-03-21 19:04:52 +00:00
|
|
|
const ciphers = crypto.getCiphers();
|
|
|
|
if (ciphers.includes("des-cbc")) {
|
|
|
|
this.providers.set(new DesCbcProvider());
|
|
|
|
}
|
2019-01-25 10:43:13 +00:00
|
|
|
this.providers.set(new DesEde3CbcProvider());
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
//#region RSA
|
|
|
|
this.providers.set(new RsaSsaProvider());
|
|
|
|
this.providers.set(new RsaPssProvider());
|
2019-05-22 18:26:25 +00:00
|
|
|
this.providers.set(new RsaOaepProvider());
|
2019-08-26 20:41:57 +00:00
|
|
|
this.providers.set(new RsaEsProvider());
|
2019-01-25 10:43:13 +00:00
|
|
|
//#endregion
|
|
|
|
|
|
|
|
//#region EC
|
|
|
|
this.providers.set(new EcdsaProvider());
|
|
|
|
this.providers.set(new EcdhProvider());
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
//#region SHA
|
|
|
|
this.providers.set(new Sha1Provider());
|
|
|
|
this.providers.set(new Sha256Provider());
|
|
|
|
this.providers.set(new Sha384Provider());
|
|
|
|
this.providers.set(new Sha512Provider());
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
//#region PBKDF
|
|
|
|
this.providers.set(new Pbkdf2Provider());
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
//#region HMAC
|
|
|
|
this.providers.set(new HmacProvider());
|
|
|
|
//#endregion
|
2019-03-02 20:06:33 +00:00
|
|
|
|
|
|
|
//#region HKDF
|
|
|
|
this.providers.set(new HkdfProvider());
|
|
|
|
//#endregion
|
2021-02-04 19:51:19 +00:00
|
|
|
|
|
|
|
const nodeMajorVersion = /^v(\d+)/.exec(process.version)?.[1];
|
2022-02-24 20:37:40 +00:00
|
|
|
if (nodeMajorVersion && parseInt(nodeMajorVersion, 10) >= 12) {
|
|
|
|
//#region SHAKE
|
|
|
|
this.providers.set(new Shake128Provider());
|
|
|
|
this.providers.set(new Shake256Provider());
|
|
|
|
//#endregion
|
|
|
|
}
|
|
|
|
|
2022-05-12 10:58:48 +00:00
|
|
|
const hashes = crypto.getHashes();
|
|
|
|
if (hashes.includes("sha3-256")) {
|
|
|
|
this.providers.set(new Sha3256Provider());
|
|
|
|
}
|
|
|
|
if (hashes.includes("sha3-384")) {
|
|
|
|
this.providers.set(new Sha3384Provider());
|
|
|
|
}
|
|
|
|
if (hashes.includes("sha3-512")) {
|
|
|
|
this.providers.set(new Sha3512Provider());
|
|
|
|
}
|
|
|
|
|
2021-02-04 19:51:19 +00:00
|
|
|
if (nodeMajorVersion && parseInt(nodeMajorVersion, 10) >= 14) {
|
|
|
|
//#region EdDSA
|
|
|
|
this.providers.set(new EdDsaProvider());
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
//#region ECDH-ES
|
|
|
|
this.providers.set(new EcdhEsProvider());
|
|
|
|
//#endregion
|
|
|
|
}
|
2019-01-25 10:43:13 +00:00
|
|
|
}
|
|
|
|
}
|