cleanup
This commit is contained in:
parent
5bddc62731
commit
c80e07ee7d
39
lib/pem.js
39
lib/pem.js
|
@ -3,43 +3,24 @@
|
|||
var PEM = module.exports;
|
||||
var Enc = require('./encoding.js');
|
||||
|
||||
PEM.RSA_OBJID = '06 09 2A864886F70D010101'
|
||||
.replace(/\s+/g, '').toLowerCase();
|
||||
|
||||
PEM.parseBlock = function pemToDer(pem) {
|
||||
var typ;
|
||||
var pub;
|
||||
var hex;
|
||||
var der = Enc.base64ToBuf(pem.split(/\n/).filter(function (line, i) {
|
||||
if (0 === i) {
|
||||
if (/ PUBLIC /.test(line)) {
|
||||
pub = true;
|
||||
} else if (/ PRIVATE /.test(line)) {
|
||||
pub = false;
|
||||
}
|
||||
if (/ RSA /.test(line)) {
|
||||
typ = 'RSA';
|
||||
}
|
||||
}
|
||||
return !/---/.test(line);
|
||||
}).join(''));
|
||||
var lines = pem.trim().split(/\n/);
|
||||
var end = lines.length - 1;
|
||||
var head = lines[0].match(/-----BEGIN (.*)-----/);
|
||||
var foot = lines[end].match(/-----END (.*)-----/);
|
||||
|
||||
if (!typ) {
|
||||
hex = Enc.bufToHex(der);
|
||||
if (-1 !== hex.indexOf(PEM.RSA_OBJID)) {
|
||||
typ = 'RSA';
|
||||
if (head) {
|
||||
lines = lines.slice(1, end);
|
||||
head = head[1];
|
||||
if (head !== foot[1]) {
|
||||
throw new Error("headers and footers do not match");
|
||||
}
|
||||
}
|
||||
if (!typ) {
|
||||
console.warn("Definitely not an RSA PKCS#8 because there's no RSA Object ID in the DER body.");
|
||||
console.warn("Probably not an RSA PKCS#1 because 'RSA' wasn't in the PEM type string.");
|
||||
}
|
||||
|
||||
return { kty: typ, pub: pub, der: der };
|
||||
return { type: head, bytes: Enc.base64ToBuf(lines.join('')) };
|
||||
};
|
||||
|
||||
PEM.packBlock = function (opts) {
|
||||
// TODO allow for headers?
|
||||
return '-----BEGIN ' + opts.type + '-----\n'
|
||||
+ Enc.bufToBase64(opts.bytes).match(/.{1,64}/g).join('\n') + '\n'
|
||||
+ '-----END ' + opts.type + '-----'
|
||||
|
|
|
@ -90,14 +90,14 @@ RSA.importSync = function (opts) {
|
|||
var pem = opts.pem;
|
||||
var block = PEM.parseBlock(pem);
|
||||
//var hex = toHex(u8);
|
||||
var asn1 = ASN1.parse(block.der);
|
||||
var asn1 = ASN1.parse(block.bytes);
|
||||
|
||||
var meta = x509.guess(block.der, asn1);
|
||||
var meta = x509.guess(block.bytes, asn1);
|
||||
|
||||
if ('pkcs1' === meta.format) {
|
||||
jwk = x509.parsePkcs1(block.der, asn1, jwk);
|
||||
jwk = x509.parsePkcs1(block.bytes, asn1, jwk);
|
||||
} else {
|
||||
jwk = x509.parsePkcs8(block.der, asn1, jwk);
|
||||
jwk = x509.parsePkcs8(block.bytes, asn1, jwk);
|
||||
}
|
||||
|
||||
if (opts.public) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
'use strict';
|
||||
|
||||
// TODO fun idea: create a template from an existing file
|
||||
|
||||
var x509 = module.exports;
|
||||
var ASN1 = require('./asn1.js');
|
||||
var Enc = require('./encoding.js');
|
||||
|
|
Loading…
Reference in New Issue