mirror of
https://github.com/danbulant/jose
synced 2026-05-24 20:41:46 +00:00
feat: generateSync
This commit is contained in:
parent
bf72a5e52e
commit
9ab3016d76
8 changed files with 51 additions and 8 deletions
|
|
@ -1,12 +1,11 @@
|
|||
const { strict: assert } = require('assert')
|
||||
const { generateKeyPairSync } = require('crypto')
|
||||
|
||||
const KEYLENGTHS = require('../../help/key_lengths')
|
||||
const ECKey = require('../../jwk/key/ec')
|
||||
const derive = require('./derive')
|
||||
|
||||
const wrapKey = (key, payload, { alg, enc }) => {
|
||||
const epk = new ECKey(generateKeyPairSync('ec', { namedCurve: key.crv }).privateKey)
|
||||
const epk = ECKey.generateSync(key.crv)
|
||||
|
||||
const derivedKey = derive(enc, KEYLENGTHS[enc], epk, key)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
const { strict: assert } = require('assert')
|
||||
const { generateKeyPairSync } = require('crypto')
|
||||
|
||||
const ECKey = require('../../jwk/key/ec')
|
||||
const derive = require('./derive')
|
||||
|
||||
const wrapKey = (kw, derive, key, payload) => {
|
||||
const epk = new ECKey(generateKeyPairSync('ec', { namedCurve: key.crv }).privateKey)
|
||||
const epk = ECKey.generateSync(key.crv)
|
||||
|
||||
const derivedKey = derive(epk, key)
|
||||
|
||||
|
|
|
|||
|
|
@ -17,4 +17,20 @@ function generate (kty, ...args) {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports = generate
|
||||
function generateSync (kty, ...args) {
|
||||
switch (kty) {
|
||||
case 'rsa':
|
||||
case 'RSA':
|
||||
return RSAKey.generateSync(...args)
|
||||
case 'ec':
|
||||
case 'EC':
|
||||
return ECKey.generateSync(...args)
|
||||
case 'oct':
|
||||
return OctKey.generateSync(...args)
|
||||
default:
|
||||
throw new TypeError('invalid key type')
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.generate = generate
|
||||
module.exports.generateSync = generateSync
|
||||
|
|
|
|||
|
|
@ -1,2 +1,5 @@
|
|||
const { generate, generateSync } = require('./generate')
|
||||
|
||||
module.exports.importKey = require('./import')
|
||||
module.exports.generate = require('./generate')
|
||||
module.exports.generate = generate
|
||||
module.exports.generateSync = generateSync
|
||||
|
|
|
|||
|
|
@ -91,6 +91,8 @@ class Key {
|
|||
thumbprintMaterial () {
|
||||
throw new TODO('not implemented')
|
||||
}
|
||||
|
||||
// TODO: more must implement methods like thumbprintMaterial
|
||||
}
|
||||
|
||||
module.exports = Key
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
const { promisify } = require('util')
|
||||
const generateKeyPair = promisify(require('crypto').generateKeyPair)
|
||||
const { generateKeyPairSync, generateKeyPair: async } = require('crypto')
|
||||
|
||||
const generateKeyPair = promisify(async)
|
||||
|
||||
const Key = require('./base')
|
||||
|
||||
|
|
@ -82,6 +84,12 @@ class ECKey extends Key {
|
|||
|
||||
return new ECKey(privat ? privateKey : publicKey, opts)
|
||||
}
|
||||
|
||||
static generateSync (crv = 'P-256', opts, privat = true) {
|
||||
const { privateKey, publicKey } = generateKeyPairSync('ec', { namedCurve: crv })
|
||||
|
||||
return new ECKey(privat ? privateKey : publicKey, opts)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ECKey
|
||||
|
|
|
|||
|
|
@ -104,6 +104,10 @@ class OctKey extends Key {
|
|||
}
|
||||
|
||||
static async generate (len = 256, opts) {
|
||||
return this.generateSync(len, opts)
|
||||
}
|
||||
|
||||
static generateSync (len = 256, opts) {
|
||||
if (!Number.isSafeInteger(len) || !len || len % 8 !== 0) {
|
||||
throw new TypeError('invalid bit length')
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
const { promisify } = require('util')
|
||||
const generateKeyPair = promisify(require('crypto').generateKeyPair)
|
||||
const { generateKeyPairSync, generateKeyPair: async } = require('crypto')
|
||||
|
||||
const generateKeyPair = promisify(async)
|
||||
|
||||
const Key = require('./base')
|
||||
|
||||
|
|
@ -93,6 +95,16 @@ class RSAKey extends Key {
|
|||
|
||||
return new RSAKey(privat ? privateKey : publicKey, opts)
|
||||
}
|
||||
|
||||
static generateSync (len = 2048, opts, privat = true) {
|
||||
if (!Number.isSafeInteger(len) || len < 512 || len % 8 !== 0) {
|
||||
throw new TypeError('invalid bit length')
|
||||
}
|
||||
|
||||
const { privateKey, publicKey } = generateKeyPairSync('rsa', { modulusLength: len })
|
||||
|
||||
return new RSAKey(privat ? privateKey : publicKey, opts)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = RSAKey
|
||||
|
|
|
|||
Loading…
Reference in a new issue