1 | const { sign: signOneShot, verify: verifyOneShot } = require('crypto')
|
2 |
|
3 | const { KEYOBJECT } = require('../help/consts')
|
4 | const { edDSASupported } = require('../help/runtime_support')
|
5 |
|
6 | const sign = ({ [KEYOBJECT]: keyObject }, payload) => {
|
7 | if (typeof payload === 'string') {
|
8 | payload = Buffer.from(payload)
|
9 | }
|
10 | return signOneShot(undefined, payload, keyObject)
|
11 | }
|
12 |
|
13 | const verify = ({ [KEYOBJECT]: keyObject }, payload, signature) => {
|
14 | return verifyOneShot(undefined, payload, keyObject, signature)
|
15 | }
|
16 |
|
17 | module.exports = (JWA, JWK) => {
|
18 | if (edDSASupported) {
|
19 | JWA.sign.set('EdDSA', sign)
|
20 | JWA.verify.set('EdDSA', verify)
|
21 | JWK.OKP.sign.EdDSA = key => key.private && JWK.OKP.verify.EdDSA(key)
|
22 | JWK.OKP.verify.EdDSA = key => (key.use === 'sig' || key.use === undefined) && key.keyObject.asymmetricKeyType.startsWith('ed')
|
23 | }
|
24 | }
|