UNPKG

node-opcua-crypto

Version:

Crypto tools for Node-OPCUA

167 lines (162 loc) 5.23 kB
import { __dirname, convertPEMtoDER, generateKeyPair, identifyPemType, privateKeyToPEM, removeTrailingLF, toPem } from "./chunk-F5EAPW2U.mjs"; // source_nodejs/read.ts import assert from "assert"; import fs from "node:fs"; import path from "node:path"; import { createPrivateKey, createPublicKey } from "crypto"; import sshpk from "sshpk"; function _readPemFile(filename) { assert(typeof filename === "string"); return removeTrailingLF(fs.readFileSync(filename, "utf-8")); } function _readPemOrDerFileAsDER(filename) { if (filename.match(/.*\.der/)) { return fs.readFileSync(filename); } const raw_key = _readPemFile(filename); return convertPEMtoDER(raw_key); } function readCertificate(filename) { return _readPemOrDerFileAsDER(filename); } function readPublicKey(filename) { if (filename.match(/.*\.der/)) { const der = fs.readFileSync(filename); return createPublicKey(der); } else { const raw_key = _readPemFile(filename); return createPublicKey(raw_key); } } function myCreatePrivateKey(rawKey) { if (!createPrivateKey || process.env.NO_CREATE_PRIVATEKEY) { if (Buffer.isBuffer(rawKey)) { const pemKey = toPem(rawKey, "PRIVATE KEY"); assert(["RSA PRIVATE KEY", "PRIVATE KEY"].indexOf(identifyPemType(pemKey)) >= 0); return { hidden: pemKey }; } return { hidden: ensureTrailingLF(rawKey) }; } const backup = process.env.OPENSSL_CONF; process.env.OPENSSL_CONF = "/dev/null"; const retValue = createPrivateKey(rawKey); process.env.OPENSSL_CONF = backup; return { hidden: retValue }; } function ensureTrailingLF(str) { return str.match(/\n$/) ? str : str + "\n"; } function readPrivateKey(filename) { if (filename.match(/.*\.der/)) { const der = fs.readFileSync(filename); return myCreatePrivateKey(der); } else { const raw_key = _readPemFile(filename); return myCreatePrivateKey(raw_key); } } function readCertificatePEM(filename) { return _readPemFile(filename); } function readPublicKeyPEM(filename) { return _readPemFile(filename); } function readPrivateKeyPEM(filename) { return _readPemFile(filename); } var _g_certificate_store = ""; function setCertificateStore(store) { const old_store = _g_certificate_store; _g_certificate_store = store; return old_store; } function getCertificateStore() { if (!_g_certificate_store) { _g_certificate_store = path.join(__dirname, "../../certificates/"); } return _g_certificate_store; } function readPrivateRsaKey(filename) { if (!createPrivateKey) { throw new Error("createPrivateKey is not supported in this environment"); } if (filename.substring(0, 1) !== "." && !fs.existsSync(filename)) { filename = path.join(getCertificateStore(), filename); } const content = fs.readFileSync(filename, "utf8"); const sshKey = sshpk.parsePrivateKey(content, "auto"); const key = sshKey.toString("pkcs1"); const hidden = createPrivateKey({ format: "pem", type: "pkcs1", key }); return { hidden }; } function readPublicRsaKey(filename) { if (filename.substring(0, 1) !== "." && !fs.existsSync(filename)) { filename = path.join(getCertificateStore(), filename); } const content = fs.readFileSync(filename, "utf-8"); const sshKey = sshpk.parseKey(content, "ssh"); const key = sshKey.toString("pkcs1"); return createPublicKey({ format: "pem", type: "pkcs1", key }); } // source_nodejs/read_certificate_revocation_list.ts import fs2 from "node:fs"; async function readCertificateRevocationList(filename) { const crl = await fs2.promises.readFile(filename); if (crl[0] === 48 && crl[1] === 130) { return crl; } const raw_crl = crl.toString(); return convertPEMtoDER(raw_crl); } // source_nodejs/read_certificate_signing_request.ts import fs3 from "node:fs"; async function readCertificateSigningRequest(filename) { const csr = await fs3.promises.readFile(filename); if (csr[0] === 48 && csr[1] === 130) { return csr; } const raw_crl = csr.toString(); return convertPEMtoDER(raw_crl); } // source_nodejs/generate_private_key_filename.ts import fs4 from "node:fs"; import jsrsasign from "jsrsasign"; async function generatePrivateKeyFile(privateKeyFilename, modulusLength) { const keys = await generateKeyPair(modulusLength); const privateKeyPem = await privateKeyToPEM(keys.privateKey); await fs4.promises.writeFile(privateKeyFilename, privateKeyPem.privPem, "utf-8"); privateKeyPem.privPem = ""; privateKeyPem.privDer = new ArrayBuffer(0); } async function generatePrivateKeyFileAlternate(privateKeyFilename, modulusLength) { const kp = jsrsasign.KEYUTIL.generateKeypair("RSA", modulusLength); const prv = kp.prvKeyObj; const pub = kp.pubKeyObj; const prvpem = jsrsasign.KEYUTIL.getPEM(prv, "PKCS8PRV"); await fs4.promises.writeFile(privateKeyFilename, prvpem, "utf-8"); } export { readCertificate, readPublicKey, readPrivateKey, readCertificatePEM, readPublicKeyPEM, readPrivateKeyPEM, setCertificateStore, getCertificateStore, readPrivateRsaKey, readPublicRsaKey, readCertificateRevocationList, readCertificateSigningRequest, generatePrivateKeyFile, generatePrivateKeyFileAlternate }; //# sourceMappingURL=chunk-XPM4YIBT.mjs.map