mirror of
https://github.com/danbulant/jose
synced 2026-05-23 06:18:58 +00:00
30 lines
799 B
JavaScript
30 lines
799 B
JavaScript
const keyto = require('@trust/keyto')
|
|
|
|
const errors = require('../errors')
|
|
|
|
const EC_CURVES = new Set(['P-256', 'P-384', 'P-521'])
|
|
|
|
module.exports.keyObjectToJWK = (keyObject) => {
|
|
const type = keyObject.type === 'private' ? 'pkcs8' : 'spki'
|
|
const format = 'pem'
|
|
|
|
let pem = keyObject.export({ type, format })
|
|
|
|
return keyto.from(pem, 'pem').toJwk(keyObject.type)
|
|
}
|
|
|
|
module.exports.jwkToPem = (jwk) => {
|
|
switch (jwk.kty) {
|
|
case 'EC':
|
|
if (!EC_CURVES.has(jwk.crv)) {
|
|
throw new errors.JOSENotSupported(`unsupported EC key curve: ${jwk.crv}`)
|
|
}
|
|
break
|
|
case 'RSA':
|
|
break
|
|
default:
|
|
throw new errors.JOSENotSupported(`unsupported key type: ${jwk.kty}`)
|
|
}
|
|
|
|
return keyto.from(jwk, 'jwk').toString('pem', jwk.d ? 'private_pkcs8' : 'public_pkcs8')
|
|
}
|