refactor: ecdh derive

This commit is contained in:
Filip Skokan 2019-02-08 22:35:33 +01:00
parent 5f6f3920a2
commit 91c7b5009d

View file

@ -1,4 +1,4 @@
const { createECDH, createHash } = require('crypto')
const { createECDH, createHash, constants: { POINT_CONVERSION_UNCOMPRESSED } } = require('crypto')
const base64url = require('../../help/base64url')
@ -13,16 +13,15 @@ const crvToCurve = (crv) => {
}
}
const UNCOMPRESSED = Buffer.alloc(1, 4)
const toPubBuffer = (x, y) => Buffer.concat([UNCOMPRESSED, base64url.decodeToBuffer(x), base64url.decodeToBuffer(y)])
const toPrivBuffer = d => base64url.decodeToBuffer(d)
const UNCOMPRESSED = Buffer.alloc(1, POINT_CONVERSION_UNCOMPRESSED)
const pubToBuffer = (x, y) => Buffer.concat([UNCOMPRESSED, base64url.decodeToBuffer(x), base64url.decodeToBuffer(y)])
const computeSecret = ({ crv, d }, { x, y }) => {
const curve = crvToCurve(crv)
const exchange = createECDH(curve)
exchange.setPrivateKey(toPrivBuffer(d))
let secret = exchange.computeSecret(toPubBuffer(x, y))
exchange.setPrivateKey(base64url.decodeToBuffer(d))
let secret = exchange.computeSecret(pubToBuffer(x, y))
return secret
}