/*! * rsa-compat * Copyright(c) 2016 AJ ONeal https://daplie.com * Apache-2.0 OR MIT (and hence also MPL 2.0) */ 'use strict'; var RSA = {}; var NOBJ = {}; function create(deps) { var crypto = require('crypto'); deps = deps || {}; deps.NOBJ = {}; deps.RSA = RSA; RSA.utils = require('./lib/key-utils.js'); RSA.utils._bytesToBuffer = function (bytes) { var forge = require("node-forge"); return new Buffer(forge.util.bytesToHex(bytes), "hex"); }; RSA._internal = require('./lib/node');//.create(deps); RSA.thumbprint = function (jwk) { jwk = jwk.privateKeyJwk || jwk.publicKeyJwk || jwk; if (!jwk.e || !jwk.n) { throw new Error("You must provide an RSA jwk with 'e' and 'n' (the public components)"); } var input = RSA.utils._bytesToBuffer('{"e":"'+ jwk.e + '","kty":"RSA","n":"'+ jwk.n +'"}'); return RSA.util.b64enc(crypto.createHash('sha256').update(input).digest()); }; RSA.generateKeypair = function (length, exponent, options, cb) { var keypair = { privateKeyPem: undefined , publicKeyPem: undefined , privateKeyJwk: undefined , publicKeyJwk: undefined , _ursa: undefined , _forge: undefined }; options = options || NOBJ; RSA._internal.generateKeypair(length, exponent, options, function (keys) { if (false !== options.jwk || options.thumbprint) { keypair.privateKeyJwk = RSA._internal.exportPrivateJwk(keys); if (options.public) { keypair.publicKeyJwk = RSA._internal.exportPublicJwk(keys); /* return { kty: keypair.privateKeyJwk.kty , n: keypair.privateKeyJwk.n , e: keypair.privateKeyJwk.e }; */ } } if (options.pem) { keypair.privateKeyPem = RSA._internal.exportPrivatePem(keys); if (options.public) { keypair.publicKeyPem = RSA._internal.exportPublicPem(keys); } } if (options.thumprint) { keypair.thumbprint = RSA.thumbprint(keypair.privateKeyJwk /*|| keypair.publicKeyJwk*/); } if (options.internal) { //keypair._ursa = undefined; //keypair._forge = undefined; keypair._ursa = keys._ursa; keypair._forge = keys._forge; } cb(null, keypair); return; }); }; return RSA; } module.exports.RSA = create(/*require('./lib/node')*/); //module.exports.RSA.create = create;