From c80e07ee7d8bfa5572b7ee3a481f43795d6789fa Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Sat, 1 Dec 2018 16:28:44 -0700 Subject: [PATCH] cleanup --- lib/pem.js | 39 ++++++++++----------------------------- lib/rasha.js | 8 ++++---- lib/x509.js | 2 -- 3 files changed, 14 insertions(+), 35 deletions(-) diff --git a/lib/pem.js b/lib/pem.js index 581f3a6..76aec96 100644 --- a/lib/pem.js +++ b/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 + '-----' diff --git a/lib/rasha.js b/lib/rasha.js index e6dbd96..67d1d0b 100644 --- a/lib/rasha.js +++ b/lib/rasha.js @@ -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) { diff --git a/lib/x509.js b/lib/x509.js index 4df5610..fb193e1 100644 --- a/lib/x509.js +++ b/lib/x509.js @@ -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');