Socket
Socket
Sign inDemoInstall

pem-jwk

Package Overview
Dependencies
22
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.2.0 to 1.2.1

factor.js

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')
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc