25 lines
842 B
JavaScript
25 lines
842 B
JavaScript
const { sign: signOneShot, verify: verifyOneShot } = require('crypto')
|
|
|
|
const { KEYOBJECT } = require('../help/consts')
|
|
const { edDSASupported } = require('../help/runtime_support')
|
|
|
|
const sign = ({ [KEYOBJECT]: keyObject }, payload) => {
|
|
if (typeof payload === 'string') {
|
|
payload = Buffer.from(payload)
|
|
}
|
|
return signOneShot(undefined, payload, keyObject)
|
|
}
|
|
|
|
const verify = ({ [KEYOBJECT]: keyObject }, payload, signature) => {
|
|
return verifyOneShot(undefined, payload, keyObject, signature)
|
|
}
|
|
|
|
module.exports = (JWA, JWK) => {
|
|
if (edDSASupported) {
|
|
JWA.sign.set('EdDSA', sign)
|
|
JWA.verify.set('EdDSA', verify)
|
|
JWK.OKP.sign.EdDSA = key => key.private && JWK.OKP.verify.EdDSA(key)
|
|
JWK.OKP.verify.EdDSA = key => (key.use === 'sig' || key.use === undefined) && key.keyObject.asymmetricKeyType.startsWith('ed')
|
|
}
|
|
}
|