121 lines
2.7 KiB
JavaScript
121 lines
2.7 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var ursa = require('ursa');
|
||
|
|
||
|
function notToJson() {
|
||
|
return undefined;
|
||
|
}
|
||
|
|
||
|
var ursac = {
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// to components
|
||
|
//
|
||
|
_privateJwkToComponents: function (jwk) {
|
||
|
var components = [];
|
||
|
|
||
|
[ 'n', 'e', 'p', 'q', 'dp', 'dq', 'qi', 'd' ].forEach(function (key) {
|
||
|
components.push(new Buffer(jwk[key], 'base64'));
|
||
|
});
|
||
|
|
||
|
return components;
|
||
|
}
|
||
|
, _publicJwkToComponents: function (jwk) {
|
||
|
var components = [];
|
||
|
[ 'n', 'e' ].forEach(function (key) {
|
||
|
components.push(new Buffer(jwk[key], 'base64'));
|
||
|
});
|
||
|
|
||
|
return components;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Generate New Keypair
|
||
|
//
|
||
|
, generateKeypair: function (bitlen, exp, options, cb) {
|
||
|
var keypair = ursa.generatePrivateKey(bitlen || 2048, exp || 6553);
|
||
|
|
||
|
keypair.toJSON = notToJson;
|
||
|
|
||
|
cb(null, {
|
||
|
_ursa: keypair
|
||
|
});
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Export Public / Private PEMs
|
||
|
//
|
||
|
, exportPrivateKeyPem: function (keypair) {
|
||
|
if (keypair.privateKeyPem) {
|
||
|
return keypair.privateKeyPem;
|
||
|
}
|
||
|
|
||
|
if (keypair._ursa) {
|
||
|
return keypair._ursa.toPrivatePem().toString('ascii');
|
||
|
}
|
||
|
|
||
|
if (keypair.privateKeyJwk) {
|
||
|
keypair._ursa = ursa.createPrivateKeyFromComponents.apply(
|
||
|
ursa
|
||
|
, ursac._privateJwkToComponents(keypair.privateKeyJwk)
|
||
|
);
|
||
|
keypair._ursa.toJSON = notToJson;
|
||
|
|
||
|
return keypair._ursa.toPrivatePem().toString('ascii');
|
||
|
}
|
||
|
|
||
|
throw new Error("None of privateKeyPem, _ursa, or privateKeyJwk found. No way to export private key PEM");
|
||
|
}
|
||
|
, exportPublicKeyPem: function (keypair) {
|
||
|
if (keypair.publicKeyPem) {
|
||
|
return keypair.publicKeyPem;
|
||
|
}
|
||
|
|
||
|
if (keypair._ursa || keypair._ursaPublic) {
|
||
|
return (keypair._ursa || keypair._ursaPublic).toPublicPem().toString('ascii');
|
||
|
}
|
||
|
|
||
|
if (keypair.publicKeyJwk) {
|
||
|
keypair._ursaPublic = ursa.createPublicKeyFromComponents.apply(
|
||
|
ursa
|
||
|
, ursac._publicJwkToComponents(keypair.publicKeyJwk)
|
||
|
);
|
||
|
keypair._ursaPublic.toJSON = notToJson;
|
||
|
|
||
|
return keypair._ursa.toPublicPem().toString('ascii');
|
||
|
}
|
||
|
|
||
|
if (keypair.privateKeyJwk) {
|
||
|
keypair._ursa = ursa.createPrivateKeyFromComponents.apply(
|
||
|
ursa
|
||
|
, ursac._privateJwkToComponents(keypair.privateKeyJwk)
|
||
|
);
|
||
|
keypair._ursa.toJSON = notToJson;
|
||
|
|
||
|
return keypair._ursa.toPublicPem().toString('ascii');
|
||
|
}
|
||
|
|
||
|
if (keypair.privateKeyPem) {
|
||
|
keypair._ursa = ursa.createPrivateKey(keypair.privateKeyPem);
|
||
|
keypair._ursa.toJSON = notToJson;
|
||
|
|
||
|
return keypair._ursa.toPublicPem().toString('ascii');
|
||
|
}
|
||
|
|
||
|
throw new Error("None of publicKeyPem, _ursa, publicKeyJwk, privateKeyPem, or privateKeyJwk found. No way to export public key PEM");
|
||
|
}
|
||
|
//, exportPrivateKeyJwk: NOT IMPLEMENTED HERE
|
||
|
//, exportPublicKeyJwk: NOT IMPLEMENTED HERE
|
||
|
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
return ursac;
|