node-opcua/node-opcua-crypto

View on GitHub
packages/node-opcua-crypto/source/x509/_crypto.ts

Summary

Maintainability
B
4 hrs
Test Coverage
import * as x509 from "@peculiar/x509";

import { Crypto as PeculiarWebCrypto } from "@peculiar/webcrypto";
import nativeCrypto from "crypto";

let _crypto: PeculiarWebCrypto | undefined;

declare const crypto: any;
declare const window: any;

const ignoreCrypto = process.env.IGNORE_SUBTLE_FROM_CRYPTO;

if (typeof window === "undefined") {
    _crypto = nativeCrypto as any;
    
    if (!_crypto?.subtle || ignoreCrypto) {
        _crypto = new PeculiarWebCrypto();
        console.warn("using @peculiar/webcrypto");
    } else {
        console.warn("using nodejs crypto (native)");
    }
    x509.cryptoProvider.set(_crypto);
} else {
    // using browser crypto
    console.warn("using browser crypto (native)");
    _crypto = crypto;
    x509.cryptoProvider.set(crypto);
}

interface CryptoInterface {}
export function getCrypto(): PeculiarWebCrypto {
    return _crypto || crypto || require("crypto");
}
export * as x509 from "@peculiar/x509";