libp2p-crypto
Version:
Crypto primitives for libp2p
29 lines (22 loc) • 681 B
JavaScript
const crypto = require('crypto')
const validateCurveType = require('./validate-curve-type')
const curves = {
'P-256': 'prime256v1',
'P-384': 'secp384r1',
'P-521': 'secp521r1'
}
exports.generateEphmeralKeyPair = async function (curve) { // eslint-disable-line require-await
validateCurveType(Object.keys(curves), curve)
const ecdh = crypto.createECDH(curves[curve])
ecdh.generateKeys()
return {
key: ecdh.getPublicKey(),
async genSharedKey (theirPub, forcePrivate) { // eslint-disable-line require-await
if (forcePrivate) {
ecdh.setPrivateKey(forcePrivate.private)
}
return ecdh.computeSecret(theirPub)
}
}
}