From 97ed4ac11ccf2ffe479b94ba2359ef8bb077f7f5 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 30 Oct 2018 00:22:39 +0000 Subject: [PATCH] feat: async await License: MIT Signed-off-by: Henrique Dias --- .travis.yml | 4 +- README.md | 26 +++- appveyor.yml | 2 +- package.json | 11 +- src/bin.js | 11 +- src/index.js | 174 +++++++--------------- test/peer-id.spec.js | 342 +++++++++++++++++-------------------------- 7 files changed, 223 insertions(+), 347 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5102ee5..b6370b2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,10 +4,10 @@ language: node_js matrix: include: - - node_js: 6 - env: CXX=g++-4.8 - node_js: 8 env: CXX=g++-4.8 + - node_js: 10 + env: CXX=g++-4.8 # - node_js: stable # env: CXX=g++-4.8 diff --git a/README.md b/README.md index 5aecb4b..972f2a5 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ - [API](#api) - [Create](#create) - [`new PeerId(id[, privKey, pubKey])`](#new-peeridid-privkey-pubkey) - - [`create([opts], callback)`](#createopts-callback) + - [`create([opts])`](#createopts) - [Import](#import) - [`createFromHexString(str)`](#createfromhexstringstr) - [`createFromBytes(buf)`](#createfrombytesbuf) @@ -57,11 +57,10 @@ The public key is a base64 encoded string of a protobuf containing an RSA DER bu ```JavaScript const PeerId = require('peer-id') -PeerId.create({ bits: 1024 }, (err, id) => { - if (err) { throw err } - console.log(JSON.stringify(id.toJSON(), null, 2)) -}) +const id = await PeerId.create({ bits: 1024 }) +console.log(JSON.stringify(id.toJSON(), null, 2)) ``` + ```bash { "id": "Qma9T5YraSnpRDZqRR4krcSJabThc8nwZuJV3LercPHufi", @@ -124,14 +123,13 @@ const PeerId = require('peer-id') The key format is detailed in [libp2p-crypto](https://github.com/libp2p/js-libp2p-crypto). -### `create([opts], callback)` +### `create([opts])` Generates a new Peer ID, complete with public/private keypair. - `opts: Object`: Default: `{bits: 2048}` -- `callback: Function` -Calls back `callback` with `err, id`. +Returns `Promise`. ## Import @@ -139,32 +137,44 @@ Calls back `callback` with `err, id`. Creates a Peer ID from hex string representing the key's multihash. +Returns `Promise`. + ### `createFromBytes(buf)` Creates a Peer ID from a buffer representing the key's multihash. +Returns `Promise`. + ### `createFromB58String(str)` Creates a Peer ID from a Base58 string representing the key's multihash. +Returns `Promise`. + ### `createFromPubKey(pubKey)` - `publicKey: Buffer` Creates a Peer ID from a buffer containing a public key. +Returns `Promise`. + ### `createFromPrivKey(privKey)` - `privKey: Buffer` Creates a Peer ID from a buffer containing a private key. +Returns `Promise`. + ### `createFromJSON(obj)` - `obj.id: String` - The multihash encoded in `base58` - `obj.pubKey: String` - The public key in protobuf format, encoded in `base64` - `obj.privKey: String` - The private key in protobuf format, encoded in `base64` +Returns `Promise`. + ## Export ### `toHexString()` diff --git a/appveyor.yml b/appveyor.yml index 046bf91..8ab0d6c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,8 +3,8 @@ version: "{build}" environment: matrix: - - nodejs_version: "6" - nodejs_version: "8" + - nodejs_version: "10" matrix: fast_finish: true diff --git a/package.json b/package.json index 8e5af5c..0ebfc52 100644 --- a/package.json +++ b/package.json @@ -33,16 +33,15 @@ }, "homepage": "https://github.com/libp2p/js-peer-id", "devDependencies": { - "aegir": "^14.0.0", - "chai": "^4.1.2", + "aegir": "^17.0.0", + "chai": "^4.2.0", "dirty-chai": "^2.0.1" }, "dependencies": { - "async": "^2.6.1", "class-is": "^1.1.0", - "libp2p-crypto": "~0.13.0", - "lodash": "^4.17.10", - "multihashes": "~0.4.13" + "libp2p-crypto": "libp2p/js-libp2p-crypto#371bd05", + "lodash": "^4.17.11", + "multihashes": "~0.4.14" }, "repository": { "type": "git", diff --git a/src/bin.js b/src/bin.js index 9388e68..11e9b87 100755 --- a/src/bin.js +++ b/src/bin.js @@ -4,10 +4,9 @@ const PeerId = require('./index.js') -PeerId.create((err, id) => { - if (err) { - throw err - } +async function main () { + const id = await PeerId.create() + console.log(JSON.stringify(id.toJSON(), null, 1)) +} - console.log(JSON.stringify(id.toJSON(), null, 2)) -}) +main() diff --git a/src/index.js b/src/index.js index 5197c6b..8be37a1 100644 --- a/src/index.js +++ b/src/index.js @@ -7,7 +7,6 @@ const mh = require('multihashes') const crypto = require('libp2p-crypto') const assert = require('assert') -const waterfall = require('async/waterfall') const withIs = require('class-is') class PeerId { @@ -119,176 +118,115 @@ class PeerId { /* * Check if this PeerId instance is valid (privKey -> pubKey -> Id) */ - isValid (callback) { + isValid () { // TODO Needs better checking if (this.privKey && this.privKey.public && this.privKey.public.bytes && Buffer.isBuffer(this.pubKey.bytes) && this.privKey.public.bytes.equals(this.pubKey.bytes)) { - callback() + return true } else { - callback(new Error('Keys not match')) + throw new Error('Keys not match') } } } -const PeerIdWithIs = withIs(PeerId, { className: 'PeerId', symbolName: '@libp2p/js-peer-id/PeerId' }) +const PeerIdWithIs = withIs(PeerId, { + className: 'PeerId', + symbolName: '@libp2p/js-peer-id/PeerId' +}) exports = module.exports = PeerIdWithIs // generation -exports.create = function (opts, callback) { - if (typeof opts === 'function') { - callback = opts - opts = {} - } +exports.create = async (opts) => { opts = opts || {} opts.bits = opts.bits || 2048 - waterfall([ - (cb) => crypto.keys.generateKeyPair('RSA', opts.bits, cb), - (privKey, cb) => privKey.public.hash((err, digest) => { - cb(err, digest, privKey) - }) - ], (err, digest, privKey) => { - if (err) { - return callback(err) - } + const key = await crypto.keys.generateKeyPair('RSA', opts.bits) + const digest = await key.public.hash() - callback(null, new PeerIdWithIs(digest, privKey)) - }) + return new PeerIdWithIs(digest, key) } -exports.createFromHexString = function (str) { +exports.createFromHexString = async (str) => { return new PeerIdWithIs(mh.fromHexString(str)) } -exports.createFromBytes = function (buf) { +exports.createFromBytes = async (buf) => { return new PeerIdWithIs(buf) } -exports.createFromB58String = function (str) { +exports.createFromB58String = async (str) => { return new PeerIdWithIs(mh.fromB58String(str)) } // Public Key input will be a buffer -exports.createFromPubKey = function (key, callback) { - if (typeof callback !== 'function') { - throw new Error('callback is required') - } - - let pubKey - - try { - let buf = key - if (typeof buf === 'string') { - buf = Buffer.from(key, 'base64') - } - - if (!Buffer.isBuffer(buf)) throw new Error('Supplied key is neither a base64 string nor a buffer') +exports.createFromPubKey = async (key) => { + let buf = key - pubKey = crypto.keys.unmarshalPublicKey(buf) - } catch (err) { - return callback(err) + if (typeof buf === 'string') { + buf = Buffer.from(key, 'base64') } - pubKey.hash((err, digest) => { - if (err) { - return callback(err) - } + if (!Buffer.isBuffer(buf)) { + throw new Error('Supplied key is neither a base64 string nor a buffer') + } - callback(null, new PeerIdWithIs(digest, null, pubKey)) - }) + const pubKey = await crypto.keys.unmarshalPublicKey(buf) + const digest = await pubKey.hash() + return new PeerIdWithIs(digest, null, pubKey) } // Private key input will be a string -exports.createFromPrivKey = function (key, callback) { - if (typeof callback !== 'function') { - throw new Error('callback is required') - } - +exports.createFromPrivKey = async (key) => { let buf = key - try { - if (typeof buf === 'string') { - buf = Buffer.from(key, 'base64') - } + if (typeof buf === 'string') { + buf = Buffer.from(key, 'base64') + } - if (!Buffer.isBuffer(buf)) throw new Error('Supplied key is neither a base64 string nor a buffer') - } catch (err) { - return callback(err) + if (!Buffer.isBuffer(buf)) { + throw new Error('Supplied key is neither a base64 string nor a buffer') } - waterfall([ - (cb) => crypto.keys.unmarshalPrivateKey(buf, cb), - (privKey, cb) => privKey.public.hash((err, digest) => { - cb(err, digest, privKey) - }) - ], (err, digest, privKey) => { - if (err) { - return callback(err) - } + const privKey = await crypto.keys.unmarshalPrivateKey(buf) + const digest = await privKey.public.hash() - callback(null, new PeerIdWithIs(digest, privKey, privKey.public)) - }) + return new PeerIdWithIs(digest, privKey, privKey.public) } -exports.createFromJSON = function (obj, callback) { - if (typeof callback !== 'function') { - throw new Error('callback is required') +exports.createFromJSON = async (obj) => { + let id = mh.fromB58String(obj.id) + let rawPrivKey = obj.privKey && Buffer.from(obj.privKey, 'base64') + let rawPubKey = obj.pubKey && Buffer.from(obj.pubKey, 'base64') + let pub = rawPubKey && await crypto.keys.unmarshalPublicKey(rawPubKey) + + if (!rawPrivKey) { + return new PeerIdWithIs(id, null, pub) } - let id - let rawPrivKey - let rawPubKey - let pub - - try { - id = mh.fromB58String(obj.id) - rawPrivKey = obj.privKey && Buffer.from(obj.privKey, 'base64') - rawPubKey = obj.pubKey && Buffer.from(obj.pubKey, 'base64') - pub = rawPubKey && crypto.keys.unmarshalPublicKey(rawPubKey) - } catch (err) { - return callback(err) + const privKey = await crypto.keys.unmarshalPrivateKey(rawPrivKey) + const privDigest = await privKey.public.hash() + let pubDigest + + if (pub) { + pubDigest = await pub.hash() } - if (rawPrivKey) { - waterfall([ - (cb) => crypto.keys.unmarshalPrivateKey(rawPrivKey, cb), - (priv, cb) => priv.public.hash((err, digest) => { - cb(err, digest, priv) - }), - (privDigest, priv, cb) => { - if (pub) { - pub.hash((err, pubDigest) => { - cb(err, privDigest, priv, pubDigest) - }) - } else { - cb(null, privDigest, priv) - } - } - ], (err, privDigest, priv, pubDigest) => { - if (err) { - return callback(err) - } - - if (pub && !privDigest.equals(pubDigest)) { - return callback(new Error('Public and private key do not match')) - } - - if (id && !privDigest.equals(id)) { - return callback(new Error('Id and private key do not match')) - } - - callback(null, new PeerIdWithIs(id, priv, pub)) - }) - } else { - callback(null, new PeerIdWithIs(id, null, pub)) + if (pub && !privDigest.equals(pubDigest)) { + throw new Error('Public and private key do not match') } + + if (id && !privDigest.equals(id)) { + throw new Error('Id and private key do not match') + } + + return new PeerIdWithIs(id, privKey, pub) } -exports.isPeerId = function (peerId) { +exports.isPeerId = (peerId) => { return Boolean(typeof peerId === 'object' && peerId._id && peerId._idB58String) diff --git a/test/peer-id.spec.js b/test/peer-id.spec.js index 5d04c92..349908b 100644 --- a/test/peer-id.spec.js +++ b/test/peer-id.spec.js @@ -8,7 +8,6 @@ chai.use(dirtyChai) const expect = chai.expect const crypto = require('libp2p-crypto') const mh = require('multihashes') -const parallel = require('async/parallel') const PeerId = require('../src') @@ -32,238 +31,176 @@ describe('PeerId', () => { expect(PeerId).to.throw(Error) }) - it('create a new id', (done) => { - PeerId.create(testOpts, (err, id) => { - expect(err).to.not.exist() - expect(id.toB58String().length).to.equal(46) - done() - }) + it('create a new id', async () => { + const id = await PeerId.create(testOpts) + expect(id.toB58String().length).to.equal(46) }) - it('isPeerId', (done) => { - PeerId.create(testOpts, (err, id) => { - expect(err).to.not.exist() - expect(PeerId.isPeerId(id)).to.equal(true) - expect(PeerId.isPeerId('aaa')).to.equal(false) - expect(PeerId.isPeerId(Buffer.from('batatas'))).to.equal(false) - done() - }) + it('isPeerId', async () => { + const id = await PeerId.create(testOpts) + expect(PeerId.isPeerId(id)).to.equal(true) + expect(PeerId.isPeerId('aaa')).to.equal(false) + expect(PeerId.isPeerId(Buffer.from('batatas'))).to.equal(false) }) - it('throws on changing the id', function (done) { - this.timeout(10000) - PeerId.create(testOpts, (err, id) => { - expect(err).to.not.exist() - expect(id.toB58String().length).to.equal(46) - expect(() => { - id.id = Buffer.from('hello') - }).to.throw(/immutable/) - done() - }) + it('throws on changing the id', async () => { + const id = await PeerId.create(testOpts) + expect(id.toB58String().length).to.equal(46) + expect(() => { + id.id = Buffer.from('hello') + }).to.throw(/immutable/) }) - it('recreate an Id from Hex string', () => { - const id = PeerId.createFromHexString(testIdHex) + it('recreate an Id from Hex string', async () => { + const id = await PeerId.createFromHexString(testIdHex) expect(testIdBytes).to.deep.equal(id.id) }) - it('Recreate an Id from a Buffer', () => { - const id = PeerId.createFromBytes(testIdBytes) + it('Recreate an Id from a Buffer', async () => { + const id = await PeerId.createFromBytes(testIdBytes) expect(testId.id).to.equal(id.toHexString()) }) - it('Recreate a B58 String', () => { - const id = PeerId.createFromB58String(testIdB58String) + it('Recreate a B58 String', async () => { + const id = await PeerId.createFromB58String(testIdB58String) expect(testIdB58String).to.equal(id.toB58String()) }) - it('Recreate from a Public Key', (done) => { - PeerId.createFromPubKey(testId.pubKey, (err, id) => { - expect(err).to.not.exist() - expect(testIdB58String).to.equal(id.toB58String()) - done() - }) + it('Recreate from a Public Key', async () => { + const id = await PeerId.createFromPubKey(testId.pubKey) + expect(testIdB58String).to.equal(id.toB58String()) }) - it('Recreate from a Private Key', (done) => { - PeerId.createFromPrivKey(testId.privKey, (err, id) => { - expect(err).to.not.exist() - expect(testIdB58String).to.equal(id.toB58String()) - - const encoded = Buffer.from(testId.privKey, 'base64') - PeerId.createFromPrivKey(encoded, (err, id2) => { - expect(err).to.not.exist() - expect(testIdB58String).to.equal(id2.toB58String()) - expect(id.marshalPubKey()).to.deep.equal(id2.marshalPubKey()) - done() - }) - }) + it('Recreate from a Private Key', async () => { + const id = await PeerId.createFromPrivKey(testId.privKey) + expect(testIdB58String).to.equal(id.toB58String()) + const encoded = Buffer.from(testId.privKey, 'base64') + const id2 = await PeerId.createFromPrivKey(encoded) + expect(testIdB58String).to.equal(id2.toB58String()) + expect(id.marshalPubKey()).to.deep.equal(id2.marshalPubKey()) }) - it('Compare generated ID with one created from PubKey', (done) => { - PeerId.create(testOpts, (err, id1) => { - expect(err).to.not.exist() - - PeerId.createFromPubKey(id1.marshalPubKey(), (err, id2) => { - expect(err).to.not.exist() - expect(id1.id).to.be.eql(id2.id) - done() - }) - }) + it('Compare generated ID with one created from PubKey', async () => { + const id1 = await PeerId.create(testOpts) + const id2 = await PeerId.createFromPubKey(id1.marshalPubKey()) + expect(id1.id).to.be.eql(id2.id) }) - it('Works with default options', function (done) { - this.timeout(10000) - PeerId.create((err, id) => { - expect(err).to.not.exist() - expect(id.toB58String().length).to.equal(46) - done() - }) + it('Works with default options', async () => { + const id = await PeerId.create() + expect(id.toB58String().length).to.equal(46) }) - it('Non-default # of bits', function (done) { - this.timeout(1000 * 60) - PeerId.create(testOpts, (err, shortId) => { - expect(err).to.not.exist() - PeerId.create({ bits: 1024 }, (err, longId) => { - expect(err).to.not.exist() - expect(shortId.privKey.bytes.length).is.below(longId.privKey.bytes.length) - done() - }) - }) + it('Non-default # of bits', async () => { + const shortId = await PeerId.create(testOpts) + const longId = await PeerId.create({ bits: 1024 }) + expect(shortId.privKey.bytes.length).is.below(longId.privKey.bytes.length) }) - it('Pretty printing', (done) => { - PeerId.create(testOpts, (err, id1) => { - expect(err).to.not.exist() - PeerId.createFromPrivKey(id1.toJSON().privKey, (err, id2) => { - expect(err).to.not.exist() - expect(id1.toPrint()).to.be.eql(id2.toPrint()) - expect(id1.toPrint()).to.equal('') - done() - }) - }) + it('Pretty printing', async () => { + const id1 = await PeerId.create(testOpts) + const id2 = await PeerId.createFromPrivKey((id1.toJSON()).privKey) + expect(id1.toPrint()).to.be.eql(id2.toPrint()) + expect(id1.toPrint()).to.equal('') }) - it('toBytes', () => { - const id = PeerId.createFromHexString(testIdHex) + it('toBytes', async () => { + const id = await PeerId.createFromHexString(testIdHex) expect(id.toBytes().toString('hex')).to.equal(testIdBytes.toString('hex')) }) - it('isEqual', (done) => { - parallel([ - (cb) => PeerId.create(testOpts, cb), - (cb) => PeerId.create(testOpts, cb) - ], (err, ids) => { - expect(err).to.not.exist() - expect(ids[0].isEqual(ids[0])).to.equal(true) - expect(ids[0].isEqual(ids[1])).to.equal(false) - expect(ids[0].isEqual(ids[0].id)).to.equal(true) - expect(ids[0].isEqual(ids[1].id)).to.equal(false) - done() - }) + it('isEqual', async () => { + const ids = await Promise.all([ + PeerId.create(testOpts), + PeerId.create(testOpts) + ]) + + expect(ids[0].isEqual(ids[0])).to.equal(true) + expect(ids[0].isEqual(ids[1])).to.equal(false) + expect(ids[0].isEqual(ids[0].id)).to.equal(true) + expect(ids[0].isEqual(ids[1].id)).to.equal(false) }) describe('fromJSON', () => { - it('full node', (done) => { - PeerId.create(testOpts, (err, id) => { - expect(err).to.not.exist() - - PeerId.createFromJSON(id.toJSON(), (err, other) => { - expect(err).to.not.exist() - expect(id.toB58String()).to.equal(other.toB58String()) - expect(id.privKey.bytes).to.eql(other.privKey.bytes) - expect(id.pubKey.bytes).to.eql(other.pubKey.bytes) - done() - }) - }) + it('full node', async () => { + const id = await PeerId.create(testOpts) + const other = await PeerId.createFromJSON(id.toJSON()) + expect(id.toB58String()).to.equal(other.toB58String()) + expect(id.privKey.bytes).to.eql(other.privKey.bytes) + expect(id.pubKey.bytes).to.eql(other.pubKey.bytes) }) - it('only id', (done) => { - crypto.keys.generateKeyPair('RSA', 1024, (err, key) => { - expect(err).to.not.exist() - key.public.hash((err, digest) => { - expect(err).to.not.exist() - - const id = PeerId.createFromBytes(digest) - expect(id.privKey).to.not.exist() - expect(id.pubKey).to.not.exist() - - PeerId.createFromJSON(id.toJSON(), (err, other) => { - expect(err).to.not.exist() - expect(id.toB58String()).to.equal(other.toB58String()) - done() - }) - }) - }) + it('only id', async () => { + const key = await crypto.keys.generateKeyPair('RSA', 1024) + const digest = await key.public.hash() + const id = await PeerId.createFromBytes(digest) + expect(id.privKey).to.not.exist() + expect(id.pubKey).to.not.exist() + const other = await PeerId.createFromJSON(id.toJSON()) + expect(id.toB58String()).to.equal(other.toB58String()) }) - it('go interop', (done) => { - PeerId.createFromJSON(goId, (err, id) => { - expect(err).to.not.exist() - id.privKey.public.hash((err, digest) => { - expect(err).to.not.exist() - expect(mh.toB58String(digest)).to.eql(goId.id) - done() - }) - }) + it('go interop', async () => { + const id = await PeerId.createFromJSON(goId) + const digest = await id.privKey.public.hash() + expect(mh.toB58String(digest)).to.eql(goId.id) }) }) - it('set privKey (valid)', (done) => { - PeerId.create(testOpts, (err, peerId) => { - expect(err).to.not.exist() - peerId.privKey = peerId._privKey - peerId.isValid(done) - }) + it('set privKey (valid)', async () => { + const peerId = await PeerId.create(testOpts) + peerId.privKey = peerId._privKey + expect(peerId.isValid()).to.equal(true) }) - it('set pubKey (valid)', (done) => { - PeerId.create(testOpts, (err, peerId) => { - expect(err).to.not.exist() - peerId.pubKey = peerId._pubKey - peerId.isValid(done) - }) + it('set pubKey (valid)', async () => { + const peerId = await PeerId.create(testOpts) + peerId.pubKey = peerId._pubKey + expect(peerId.isValid()).to.equal(true) }) - it('set privKey (invalid)', (done) => { - PeerId.create(testOpts, (err, peerId) => { - expect(err).to.not.exist() - peerId.privKey = Buffer.from('bufff') - peerId.isValid((err) => { - expect(err).to.exist() - done() - }) - }) + it('set privKey (invalid)', async () => { + const peerId = await PeerId.create(testOpts) + peerId.privKey = Buffer.from('bufff') + + try { + peerId.isValid() + } catch (err) { + expect(err).to.exist() + } }) - it('set pubKey (invalid)', (done) => { - PeerId.create(testOpts, (err, peerId) => { - expect(err).to.not.exist() - peerId.pubKey = Buffer.from('buffff') - peerId.isValid((err) => { - expect(err).to.exist() - done() - }) - }) + it('set pubKey (invalid)', async () => { + const peerId = await PeerId.create(testOpts) + peerId.pubKey = Buffer.from('bufff') + + try { + peerId.isValid() + } catch (err) { + expect(err).to.exist() + } }) describe('returns error via cb instead of crashing', () => { - const garbage = [Buffer.from('00010203040506070809', 'hex'), {}, null, false, undefined, true, 1, 0, Buffer.from(''), 'aGVsbG93b3JsZA==', 'helloworld', ''] + const garbage = [ + Buffer.from('00010203040506070809', 'hex'), + {}, null, false, undefined, true, 1, 0, + Buffer.from(''), 'aGVsbG93b3JsZA==', 'helloworld', '' + ] const fncs = ['createFromPubKey', 'createFromPrivKey', 'createFromJSON'] - garbage.forEach(garbage => { - fncs.forEach(fnc => { - it(fnc + '(' + util.inspect(garbage) + ')', cb => { - PeerId[fnc](garbage, (err, res) => { + for (const gb of garbage) { + for (const fn of fncs) { + it(`${fn} (${util.inspect(gb)})`, async () => { + try { + await PeerId[fn](gb) + } catch (err) { expect(err).to.exist() - expect(res).to.not.exist() - cb() - }) + } }) - }) - }) + } + } }) describe('throws on inconsistent data', () => { @@ -271,37 +208,30 @@ describe('PeerId', () => { let k2 let k3 - before((done) => { - parallel([ - (cb) => crypto.keys.generateKeyPair('RSA', 512, cb), - (cb) => crypto.keys.generateKeyPair('RSA', 512, cb), - (cb) => crypto.keys.generateKeyPair('RSA', 512, cb) - ], (err, keys) => { - expect(err).to.not.exist() - - k1 = keys[0] - k2 = keys[1] - k3 = keys[2] - done() - }) + before(async () => { + const keys = await Promise.all([ + crypto.keys.generateKeyPair('RSA', 512), + crypto.keys.generateKeyPair('RSA', 512), + crypto.keys.generateKeyPair('RSA', 512) + ]) + + k1 = keys[0] + k2 = keys[1] + k3 = keys[2] }) - it('missmatch private - public key', (done) => { - k1.public.hash((err, digest) => { - expect(err).to.not.exist() - expect(() => new PeerId(digest, k1, k2.public)) - .to.throw(/inconsistent arguments/) - done() - }) + it('missmatch private - public key', async () => { + const digest = await k1.public.hash() + expect(() => { + new PeerId(digest, k1, k2.public) // eslint-disable-line no-new + }).to.throw(/inconsistent arguments/) }) - it('missmatch id - private - public key', (done) => { - k1.public.hash((err, digest) => { - expect(err).to.not.exist() - expect(() => new PeerId(digest, k1, k3.public)) - .to.throw(/inconsistent arguments/) - done() - }) + it('missmatch id - private - public key', async () => { + const digest = await k1.public.hash() + expect(() => { + new PeerId(digest, k1, k3.public) // eslint-disable-line no-new + }).to.throw(/inconsistent arguments/) }) it('invalid id', () => {