APIs

Show:
"use strict";
/**
 * @module opcua.miscellaneous
 */


const crypto_utils = require("node-opcua-crypto");
const fs = require("fs");
const assert = require("node-opcua-assert").assert;

function _load_certificate(certificate_file) {
    return crypto_utils.readCertificate(certificate_file);
}
function _load_private_key(private_key_file) {
    return crypto_utils.readKeyPem(private_key_file);
}

/**
 * an object that provides a certificate and a privateKey
 * @class OPCUASecureObject
 * @param options
 * @param options.certificateFile {string}
 * @param options.privateKeyFile {string}
 * @constructor
 */
function OPCUASecureObject(options) {

    assert(typeof options.certificateFile === "string");
    assert(typeof options.privateKeyFile === "string");

    this._certificate = null;
    this.certificateFile = options.certificateFile;

    this._private_key_pem = null;
    this.privateKeyFile = options.privateKeyFile;

}

const split_der = require("node-opcua-crypto").split_der;

/**
 * @method getCertificate
 * @return {Buffer}
 */
OPCUASecureObject.prototype.getCertificate = function () {

    if (!this._certificate) {
        const certChain    = this.getCertificateChain();
        this._certificate  = split_der(certChain)[0];
    }
    return this._certificate;
};

/**
 * @method getCertificateChain
 * @return {Buffer}
 */
OPCUASecureObject.prototype.getCertificateChain = function () {

    if (!this._certificateChain) {
        assert(fs.existsSync(this.certificateFile), "Certificate file must exist :" + this.certificateFile);
        this._certificateChain = _load_certificate(this.certificateFile);
    }
    return this._certificateChain;
};


/**
 * @method getPrivateKey
 * @return {Buffer}
 */
OPCUASecureObject.prototype.getPrivateKey = function () {

    if (!this._private_key_pem) {
        // create fake certificate
        //xx assert(fs.existsSync(this.privateKeyFile));
        this._private_key_pem = _load_private_key(this.privateKeyFile);
    }
    return this._private_key_pem;
};

exports.OPCUASecureObject = OPCUASecureObject;