This repository has been archived on 2023-04-04. You can view files and clone it, but cannot push or open issues or pull requests.
webcrypto/src/subtle.ts

117 lines
2.9 KiB
TypeScript
Raw Normal View History

2022-05-12 10:58:48 +00:00
import * as crypto from "crypto";
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,
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
const nodeMajorVersion = /^v(\d+)/.exec(process.version)?.[1];
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());
}
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
}
}