pem-jwk
Advanced tools
Comparing version 1.2.0 to 1.2.1
64
index.js
var asn = require('asn1.js') | ||
var base64url = require('base64url') | ||
var factor = require('./factor') | ||
var one = new asn.bignum(1) | ||
@@ -150,3 +152,36 @@ function fromPEM(data) { | ||
function jwk2pem(jwk) { | ||
function recomputePrimes(jwk) { | ||
var pq = factor(jwk.e, jwk.d, jwk.n) | ||
var p = pq.p | ||
var q = pq.q | ||
var dp = jwk.d.mod(p.sub(one)) | ||
var dq = jwk.d.mod(q.sub(one)) | ||
var qi = q.invm(p) | ||
return { | ||
n: jwk.n, | ||
e: jwk.e, | ||
d: jwk.d, | ||
p: p, | ||
q: q, | ||
dp: dp, | ||
dq: dq, | ||
qi: qi | ||
} | ||
} | ||
function parse(jwk) { | ||
return { | ||
n: string2bn(jwk.n), | ||
e: string2bn(jwk.e), | ||
d: jwk.d && string2bn(jwk.d), | ||
p: jwk.p && string2bn(jwk.p), | ||
q: jwk.q && string2bn(jwk.q), | ||
dp: jwk.dp && string2bn(jwk.dp), | ||
dq: jwk.dq && string2bn(jwk.dq), | ||
qi: jwk.qi && string2bn(jwk.qi) | ||
} | ||
} | ||
function jwk2pem(json) { | ||
var jwk = parse(json) | ||
var isPrivate = !!(jwk.d) | ||
@@ -156,18 +191,13 @@ var t = isPrivate ? 'PRIVATE' : 'PUBLIC' | ||
var footer = '\n-----END RSA ' + t + ' KEY-----\n' | ||
var data = isPrivate ? | ||
RSAPrivateKey.encode({ | ||
version: 'two-prime', | ||
n: string2bn(jwk.n), | ||
e: string2bn(jwk.e), | ||
d: string2bn(jwk.d), | ||
p: string2bn(jwk.p), | ||
q: string2bn(jwk.q), | ||
dp: string2bn(jwk.dp), | ||
dq: string2bn(jwk.dq), | ||
qi: string2bn(jwk.qi) | ||
}, 'der') : | ||
RSAPublicKey.encode({ | ||
n: string2bn(jwk.n), | ||
e: string2bn(jwk.e) | ||
}, 'der') | ||
var data = Buffer(0) | ||
if (isPrivate) { | ||
if (!jwk.p) { | ||
jwk = recomputePrimes(jwk) | ||
} | ||
jwk.version = 'two-prime' | ||
data = RSAPrivateKey.encode(jwk, 'der') | ||
} | ||
else { | ||
data = RSAPublicKey.encode(jwk, 'der') | ||
} | ||
var body = data.toString('base64').match(/.{1,64}/g).join('\n') | ||
@@ -174,0 +204,0 @@ return header + body + footer |
{ | ||
"name": "pem-jwk", | ||
"version": "1.2.0", | ||
"version": "1.2.1", | ||
"main": "index.js", | ||
"scripts": { | ||
"test": "node test/test.js" | ||
"test": "tap test" | ||
}, | ||
@@ -13,2 +13,5 @@ "license": "MPL 2.0", | ||
}, | ||
"devDependencies": { | ||
"tap": "0.7.1" | ||
}, | ||
"directories": { | ||
@@ -15,0 +18,0 @@ "test": "test" |
@@ -28,3 +28,1 @@ var assert = require('assert') | ||
assert.equal(p3, zp) | ||
console.log('ok') |
11289
9
277
1