1 | const errors = require('../errors')
|
2 |
|
3 | const importKey = require('./import')
|
4 |
|
5 | const RSAKey = require('./key/rsa')
|
6 | const ECKey = require('./key/ec')
|
7 | const OKPKey = require('./key/okp')
|
8 | const OctKey = require('./key/oct')
|
9 |
|
10 | const generate = async (kty, crvOrSize, params, generatePrivate = true) => {
|
11 | switch (kty) {
|
12 | case 'RSA':
|
13 | return importKey(
|
14 | await RSAKey.generate(crvOrSize, generatePrivate),
|
15 | params
|
16 | )
|
17 | case 'EC':
|
18 | return importKey(
|
19 | await ECKey.generate(crvOrSize, generatePrivate),
|
20 | params
|
21 | )
|
22 | case 'OKP':
|
23 | return importKey(
|
24 | await OKPKey.generate(crvOrSize, generatePrivate),
|
25 | params
|
26 | )
|
27 | case 'oct':
|
28 | return importKey(
|
29 | await OctKey.generate(crvOrSize, generatePrivate),
|
30 | params
|
31 | )
|
32 | default:
|
33 | throw new errors.JOSENotSupported(`unsupported key type: ${kty}`)
|
34 | }
|
35 | }
|
36 |
|
37 | const generateSync = (kty, crvOrSize, params, generatePrivate = true) => {
|
38 | switch (kty) {
|
39 | case 'RSA':
|
40 | return importKey(RSAKey.generateSync(crvOrSize, generatePrivate), params)
|
41 | case 'EC':
|
42 | return importKey(ECKey.generateSync(crvOrSize, generatePrivate), params)
|
43 | case 'OKP':
|
44 | return importKey(OKPKey.generateSync(crvOrSize, generatePrivate), params)
|
45 | case 'oct':
|
46 | return importKey(OctKey.generateSync(crvOrSize, generatePrivate), params)
|
47 | default:
|
48 | throw new errors.JOSENotSupported(`unsupported key type: ${kty}`)
|
49 | }
|
50 | }
|
51 |
|
52 | module.exports.generate = generate
|
53 | module.exports.generateSync = generateSync
|