Compare commits

...

57 Commits

Author SHA1 Message Date
989b413a96 chore: release version v0.13.0 2019-07-11 18:26:18 +01:00
52ed9c58a5 chore: update contributors 2019-07-11 18:26:18 +01:00
c3463c7421 feat: async await (#87)
BREAKING CHANGE: API refactored to use async/await
2019-07-11 18:09:21 +01:00
bbabd7451e chore: add discourse badge (#93) 2019-04-18 19:32:14 +02:00
1624b0f70a chore: release version v0.12.2 2019-01-09 15:14:15 +00:00
ce8a6ff77e chore: update contributors 2019-01-09 15:14:15 +00:00
41ce1d4671 chore: fix lint 2019-01-09 15:03:49 +00:00
231e553a22 chore: fix lint 2019-01-09 15:03:49 +00:00
cd2099305e fix: clean repo and bundle size reduction 2019-01-09 15:03:49 +00:00
8e030b24d4 chore: release version v0.12.1 2019-01-03 17:10:26 +00:00
9f69e1ba74 chore: update contributors 2019-01-03 17:10:26 +00:00
cbc8c5e2ba Merge pull request #91 from libp2p/chore/update-deps-20190103
chore: update dependencies
2019-01-03 17:05:15 +00:00
77000dbd8b chore: update dependencies 2019-01-03 16:46:46 +00:00
eb062759c6 chore: release version v0.12.0 2018-10-18 11:00:01 +01:00
39e17c0c0b chore: update contributors 2018-10-18 11:00:01 +01:00
e03a4098df chore: update contributors 2018-10-18 10:57:19 +01:00
d7e633a90b Merge pull request #84 from libp2p/feat/add-class-is-module
feat: add class-is module
2018-10-18 10:50:45 +01:00
2e5e666140 fix: add peerIdWithIs to the API functions using the instance 2018-10-17 10:51:42 +01:00
b388257b69 Merge pull request #86 from libp2p/docs/readme-tweaks
docs: various readme tweaks
2018-10-12 19:58:47 +01:00
6ecd9a8cb0 docs: various readme tweaks 2018-10-12 18:01:55 +02:00
6513a02e1e feat: add class-is module 2018-10-04 11:29:31 +01:00
bd1dc9bda0 chore: release version v0.11.0 2018-07-02 19:28:04 +02:00
31cbb5d94c chore: update contributors 2018-07-02 19:28:03 +02:00
35556c3a37 chore: update deps 2018-07-02 19:26:36 +02:00
e8ab1b9281 feat: change toPrint output to match go implementation 2018-07-02 19:26:03 +02:00
a786018528 chore: remove pre-commit module 2018-06-04 09:48:30 +01:00
417fd330b9 docs: add lead maintainer 2018-06-04 09:48:30 +01:00
d74bdebcc8 chore: update deps 2018-06-04 09:48:30 +01:00
ffed046595 chore: release version v0.10.7 2018-04-05 16:41:39 +01:00
1727a135aa chore: update contributors 2018-04-05 16:41:39 +01:00
466b3a030d chore: update deps 2018-04-05 16:39:53 +01:00
464c92a53b chore: release version v0.10.6 2018-02-12 09:34:42 +00:00
8a608def32 chore: update contributors 2018-02-12 09:34:42 +00:00
19deeff432 chore: update deps 2018-02-12 09:33:14 +00:00
b18c0082ff chore: release version v0.10.5 2018-01-27 18:18:00 -08:00
2b050bcaa1 chore: update contributors 2018-01-27 18:17:59 -08:00
b19edf2ab2 chore: update deps 2018-01-27 18:15:52 -08:00
35b384ed15 chore: release version v0.10.4 2017-12-20 12:33:36 +00:00
655ceec29b chore: update contributors 2017-12-20 12:33:36 +00:00
8b9a134276 fix: update dependencies (#73) 2017-12-20 12:32:35 +00:00
a637297112 chore: release version v0.10.3 2017-12-01 08:51:43 +00:00
e666b7284f chore: update contributors 2017-12-01 08:51:43 +00:00
156911e162 fix: catch error when unmarshaling instead of crashing (#72) 2017-12-01 08:49:50 +00:00
f91f2b6506 chore: Updating CI files (#70)
* Updating CI files

This commit updates all CI scripts to the latest version

* Faster tests
2017-11-24 17:46:24 +00:00
8f6935499e chore: release version v0.10.2 2017-10-12 10:21:43 +02:00
80da1a54b2 chore: update contributors 2017-10-12 10:21:43 +02:00
300266ad51 chore: update deps 2017-10-12 10:20:43 +02:00
3abdcdabbb fix: Always add public key to constructor if possible, Fix for undefined pubKey in remote peers (#68)
* Always add public key to constructor if possible

* extending Non-default # of bits test time, travis took 59521ms

License: MIT
Signed-off-by: Yahya <ya7yaz@gmail.com>
2017-10-12 10:09:18 +02:00
7d3cb8e87c chore: release version v0.10.1 2017-09-07 14:51:57 +01:00
a57c0c6f14 chore: update contributors 2017-09-07 14:51:57 +01:00
d7088d6650 feat(deps): update aegir and libp2p-crypto (#67) 2017-09-07 14:50:44 +01:00
c945d6ad48 chore: release version v0.10.0 2017-09-03 11:51:33 +01:00
0eee1a2a69 chore: update contributors 2017-09-03 11:51:33 +01:00
63428faae9 feat: p2p addrs situation (#66)
* chore: update deps

* chore: update gitignore

* chore: update CI

* chore: update README badge
2017-09-03 11:49:56 +01:00
a38e3859d2 chore: release version v0.9.0 2017-07-22 13:38:56 -07:00
551fd710be chore: update contributors 2017-07-22 13:38:55 -07:00
442df13a11 feat: use next libp2p-crypto (#64)
* feat: use next libp2p-crypto

* chore: update deps
2017-07-22 13:37:01 -07:00
10 changed files with 657 additions and 432 deletions

20
.gitignore vendored
View File

@ -1,7 +1,15 @@
docs
**/node_modules/
**/*.log
test/repo-tests*
**/bundle.js
# Logs # Logs
logs logs
*.log *.log
coverage
# Runtime data # Runtime data
pids pids
*.pid *.pid
@ -19,11 +27,19 @@ coverage
# node-waf configuration # node-waf configuration
.lock-wscript .lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html) build
build/Release
# Dependency directory # Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules node_modules
docs
lib
dist dist
test/test-data/go-ipfs-repo/LOCK
test/test-data/go-ipfs-repo/LOG
test/test-data/go-ipfs-repo/LOG.old
# while testing npm5
package-lock.json
yarn.lock

View File

@ -1,28 +0,0 @@
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Optional npm cache directory
.npm
# Optional REPL history
.node_repl_history
test

View File

@ -1,37 +1,46 @@
sudo: false
language: node_js language: node_js
cache: npm
stages:
- check
- test
- cov
matrix: node_js:
- '10'
os:
- linux
- osx
script: npx nyc -s npm run test:node -- --bail
after_success: npx nyc report --reporter=text-lcov > coverage.lcov && npx codecov
jobs:
include: include:
- node_js: 4 - os: windows
env: CXX=g++-4.8 cache: false
- node_js: 6
env:
- CXX=g++-4.8
- node_js: stable
env: CXX=g++-4.8
# Make sure we have new NPM.
before_install:
- npm install -g npm@4
- stage: check
script: script:
- npx aegir commitlint --travis
- npx aegir dep-check
- npm run lint - npm run lint
- npm test
- npm run coverage
- make test
before_script:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
after_success:
- npm run coverage-publish
- stage: test
name: chrome
addons: addons:
firefox: 'latest' chrome: stable
apt: script:
sources: - npx aegir test -t browser
- ubuntu-toolchain-r-test - npx aegir test -t webworker
packages:
- g++-4.8 - stage: test
name: firefox
addons:
firefox: latest
script:
- npx aegir test -t browser -- --browsers FirefoxHeadless
- npx aegir test -t webworker -- --browsers FirefoxHeadless
notifications:
email: false

296
CHANGELOG.md Normal file
View File

@ -0,0 +1,296 @@
<a name="0.13.0"></a>
# [0.13.0](https://github.com/libp2p/js-peer-id/compare/v0.12.2...v0.13.0) (2019-07-11)
### Features
* async await ([#87](https://github.com/libp2p/js-peer-id/issues/87)) ([c3463c7](https://github.com/libp2p/js-peer-id/commit/c3463c7))
### BREAKING CHANGES
* API refactored to use async/await
<a name="0.12.2"></a>
## [0.12.2](https://github.com/libp2p/js-peer-id/compare/v0.12.1...v0.12.2) (2019-01-09)
### Bug Fixes
* clean repo and bundle size reduction ([cd20993](https://github.com/libp2p/js-peer-id/commit/cd20993))
<a name="0.12.1"></a>
## [0.12.1](https://github.com/libp2p/js-peer-id/compare/v0.12.0...v0.12.1) (2019-01-03)
<a name="0.12.0"></a>
# [0.12.0](https://github.com/libp2p/js-peer-id/compare/v0.11.0...v0.12.0) (2018-10-18)
### Bug Fixes
* add peerIdWithIs to the API functions using the instance ([2e5e666](https://github.com/libp2p/js-peer-id/commit/2e5e666))
### Features
* add class-is module ([6513a02](https://github.com/libp2p/js-peer-id/commit/6513a02))
<a name="0.11.0"></a>
# [0.11.0](https://github.com/libp2p/js-peer-id/compare/v0.10.7...v0.11.0) (2018-07-02)
### Features
* change toPrint output to match go implementation ([e8ab1b9](https://github.com/libp2p/js-peer-id/commit/e8ab1b9))
<a name="0.10.7"></a>
## [0.10.7](https://github.com/libp2p/js-peer-id/compare/v0.10.6...v0.10.7) (2018-04-05)
<a name="0.10.6"></a>
## [0.10.6](https://github.com/libp2p/js-peer-id/compare/v0.10.5...v0.10.6) (2018-02-12)
<a name="0.10.5"></a>
## [0.10.5](https://github.com/libp2p/js-peer-id/compare/v0.10.4...v0.10.5) (2018-01-28)
<a name="0.10.4"></a>
## [0.10.4](https://github.com/libp2p/js-peer-id/compare/v0.10.3...v0.10.4) (2017-12-20)
### Bug Fixes
* update dependencies ([#73](https://github.com/libp2p/js-peer-id/issues/73)) ([8b9a134](https://github.com/libp2p/js-peer-id/commit/8b9a134))
<a name="0.10.3"></a>
## [0.10.3](https://github.com/libp2p/js-peer-id/compare/v0.10.2...v0.10.3) (2017-12-01)
### Bug Fixes
* catch error when unmarshaling instead of crashing ([#72](https://github.com/libp2p/js-peer-id/issues/72)) ([156911e](https://github.com/libp2p/js-peer-id/commit/156911e))
<a name="0.10.2"></a>
## [0.10.2](https://github.com/libp2p/js-peer-id/compare/v0.10.1...v0.10.2) (2017-10-12)
### Bug Fixes
* Always add public key to constructor if possible, Fix for undefined pubKey in remote peers ([#68](https://github.com/libp2p/js-peer-id/issues/68)) ([3abdcda](https://github.com/libp2p/js-peer-id/commit/3abdcda))
<a name="0.10.1"></a>
## [0.10.1](https://github.com/libp2p/js-peer-id/compare/v0.10.0...v0.10.1) (2017-09-07)
### Features
* **deps:** update aegir and libp2p-crypto ([#67](https://github.com/libp2p/js-peer-id/issues/67)) ([d7088d6](https://github.com/libp2p/js-peer-id/commit/d7088d6))
<a name="0.10.0"></a>
# [0.10.0](https://github.com/libp2p/js-peer-id/compare/v0.9.0...v0.10.0) (2017-09-03)
### Features
* p2p addrs situation ([#66](https://github.com/libp2p/js-peer-id/issues/66)) ([63428fa](https://github.com/libp2p/js-peer-id/commit/63428fa))
<a name="0.9.0"></a>
# [0.9.0](https://github.com/libp2p/js-peer-id/compare/v0.8.8...v0.9.0) (2017-07-22)
### Features
* use next libp2p-crypto ([#64](https://github.com/libp2p/js-peer-id/issues/64)) ([442df13](https://github.com/libp2p/js-peer-id/commit/442df13))
<a name="0.8.8"></a>
## [0.8.8](https://github.com/libp2p/js-peer-id/compare/v0.8.7...v0.8.8) (2017-07-21)
<a name="0.8.7"></a>
## [0.8.7](https://github.com/libp2p/js-peer-id/compare/v0.8.6...v0.8.7) (2017-04-03)
### Features
* set privKey pubKey ([ac27907](https://github.com/libp2p/js-peer-id/commit/ac27907))
<a name="0.8.6"></a>
## [0.8.6](https://github.com/libp2p/js-peer-id/compare/v0.8.5...v0.8.6) (2017-03-30)
### Features
* isEqual ([3f4f670](https://github.com/libp2p/js-peer-id/commit/3f4f670))
<a name="0.8.5"></a>
## [0.8.5](https://github.com/libp2p/js-peer-id/compare/v0.8.4...v0.8.5) (2017-03-27)
### Bug Fixes
* avoid using constructor.name ([a3fe1a2](https://github.com/libp2p/js-peer-id/commit/a3fe1a2))
### Features
* isPeerId ([0acc572](https://github.com/libp2p/js-peer-id/commit/0acc572))
<a name="0.8.4"></a>
## [0.8.4](https://github.com/libp2p/js-peer-id/compare/v0.8.2...v0.8.4) (2017-03-16)
<a name="0.8.2"></a>
## [0.8.2](https://github.com/libp2p/js-peer-id/compare/v0.8.1...v0.8.2) (2017-02-09)
<a name="0.8.1"></a>
## [0.8.1](https://github.com/libp2p/js-peer-id/compare/v0.8.0...v0.8.1) (2016-12-18)
### Features
* cache b58 id ([bebb0a7](https://github.com/libp2p/js-peer-id/commit/bebb0a7))
* create b58 string on creation and throw on id mutation ([78d96d0](https://github.com/libp2p/js-peer-id/commit/78d96d0))
<a name="0.8.0"></a>
# [0.8.0](https://github.com/libp2p/js-peer-id/compare/v0.7.0...v0.8.0) (2016-11-03)
* Async Crypto Endeavour (#33) ([31701e2](https://github.com/libp2p/js-peer-id/commit/31701e2))
### BREAKING CHANGES
* This changes the interface of .create, .createFromPrivKey,
.createFromPubKey, .createFromJSON
<a name="0.7.0"></a>
# [0.7.0](https://github.com/libp2p/js-peer-id/compare/v0.6.7...v0.7.0) (2016-05-26)
### Bug Fixes
* code review and docs and go interop ([58f1933](https://github.com/libp2p/js-peer-id/commit/58f1933))
* use new version of libp2p-crypto ([ab55046](https://github.com/libp2p/js-peer-id/commit/ab55046))
<a name="0.6.7"></a>
## [0.6.7](https://github.com/libp2p/js-peer-id/compare/v0.6.6...v0.6.7) (2016-05-23)
<a name="0.6.6"></a>
## [0.6.6](https://github.com/libp2p/js-peer-id/compare/v0.6.5...v0.6.6) (2016-04-12)
<a name="0.6.5"></a>
## [0.6.5](https://github.com/libp2p/js-peer-id/compare/v0.6.1...v0.6.5) (2016-04-12)
<a name="0.6.1"></a>
## [0.6.1](https://github.com/libp2p/js-peer-id/compare/v0.6.0...v0.6.1) (2016-03-15)
<a name="0.6.0"></a>
# [0.6.0](https://github.com/libp2p/js-peer-id/compare/v0.5.3...v0.6.0) (2016-03-10)
<a name="0.5.3"></a>
## [0.5.3](https://github.com/libp2p/js-peer-id/compare/v0.5.1...v0.5.3) (2016-03-05)
<a name="0.5.1"></a>
## [0.5.1](https://github.com/libp2p/js-peer-id/compare/v0.5.0...v0.5.1) (2016-03-03)
<a name="0.5.0"></a>
# [0.5.0](https://github.com/libp2p/js-peer-id/compare/v0.4.0...v0.5.0) (2016-02-14)
<a name="0.4.0"></a>
# [0.4.0](https://github.com/libp2p/js-peer-id/compare/v0.3.4...v0.4.0) (2015-11-05)
<a name="0.3.4"></a>
## [0.3.4](https://github.com/libp2p/js-peer-id/compare/v0.3.3...v0.3.4) (2015-10-28)
<a name="0.3.3"></a>
## [0.3.3](https://github.com/libp2p/js-peer-id/compare/v0.3.2...v0.3.3) (2015-09-15)
<a name="0.3.2"></a>
## [0.3.2](https://github.com/libp2p/js-peer-id/compare/v0.3.1...v0.3.2) (2015-09-14)
<a name="0.3.1"></a>
## [0.3.1](https://github.com/libp2p/js-peer-id/compare/v0.3.0...v0.3.1) (2015-08-25)
<a name="0.3.0"></a>
# [0.3.0](https://github.com/libp2p/js-peer-id/compare/v0.2.0...v0.3.0) (2015-07-19)
<a name="0.2.0"></a>
# [0.2.0](https://github.com/libp2p/js-peer-id/compare/v0.1.0...v0.2.0) (2015-07-17)
<a name="0.1.0"></a>
# 0.1.0 (2015-07-08)

View File

@ -1,16 +1,22 @@
# peer-id # peer-id
[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai)
[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) [![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/)
[![Build Status](https://travis-ci.org/libp2p/js-peer-id.svg?style=flat-square)](https://travis-ci.org/libp2p/js-peer-id) [![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p)
[![Coverage Status](https://coveralls.io/repos/github/libp2p/js-peer-id/badge.svg?branch=master)](https://coveralls.io/github/libp2p/js-peer-id?branch=master) [![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io)
[![](https://img.shields.io/codecov/c/github/libp2p/js-peer-id.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-peer-id)
[![](https://img.shields.io/travis/libp2p/js-peer-id.svg?style=flat-square)](https://travis-ci.com/libp2p/js-peer-id)
[![Dependency Status](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id) [![Dependency Status](https://david-dm.org/libp2p/js-peer-id.svg?style=flat-square)](https://david-dm.org/libp2p/js-peer-id)
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard)
![](https://img.shields.io/badge/npm-%3E%3D3.0.0-orange.svg?style=flat-square)
![](https://img.shields.io/badge/Node.js-%3E%3D4.0.0-orange.svg?style=flat-square)
> [IPFS](https://github.com/ipfs/ipfs) Peer ID implementation in JavaScript. > [IPFS](https://github.com/ipfs/ipfs) Peer ID implementation in JavaScript.
## Lead Maintainer
[Pedro Teixeira](https://github.com/pgte)
## Table of Contents
- [Description](#description) - [Description](#description)
- [Example](#example) - [Example](#example)
- [Installation](#installation) - [Installation](#installation)
@ -22,7 +28,7 @@
- [API](#api) - [API](#api)
- [Create](#create) - [Create](#create)
- [`new PeerId(id[, privKey, pubKey])`](#new-peeridid-privkey-pubkey) - [`new PeerId(id[, privKey, pubKey])`](#new-peeridid-privkey-pubkey)
- [`create([opts], callback)`](#createopts-callback) - [`create([opts])`](#createopts)
- [Import](#import) - [Import](#import)
- [`createFromHexString(str)`](#createfromhexstringstr) - [`createFromHexString(str)`](#createfromhexstringstr)
- [`createFromBytes(buf)`](#createfrombytesbuf) - [`createFromBytes(buf)`](#createfrombytesbuf)
@ -51,11 +57,10 @@ The public key is a base64 encoded string of a protobuf containing an RSA DER bu
```JavaScript ```JavaScript
const PeerId = require('peer-id') const PeerId = require('peer-id')
PeerId.create({ bits: 1024 }, (err, id) => { const id = await PeerId.create({ bits: 1024 })
if (err) { throw err }
console.log(JSON.stringify(id.toJSON(), null, 2)) console.log(JSON.stringify(id.toJSON(), null, 2))
})
``` ```
```bash ```bash
{ {
"id": "Qma9T5YraSnpRDZqRR4krcSJabThc8nwZuJV3LercPHufi", "id": "Qma9T5YraSnpRDZqRR4krcSJabThc8nwZuJV3LercPHufi",
@ -118,14 +123,13 @@ const PeerId = require('peer-id')
The key format is detailed in [libp2p-crypto](https://github.com/libp2p/js-libp2p-crypto). 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. Generates a new Peer ID, complete with public/private keypair.
- `opts: Object`: Default: `{bits: 2048}` - `opts: Object`: Default: `{bits: 2048}`
- `callback: Function`
Calls back `callback` with `err, id`. Returns `Promise<PeerId>`.
## Import ## Import
@ -133,30 +137,43 @@ Calls back `callback` with `err, id`.
Creates a Peer ID from hex string representing the key's multihash. Creates a Peer ID from hex string representing the key's multihash.
Returns `PeerId.
### `createFromBytes(buf)` ### `createFromBytes(buf)`
Creates a Peer ID from a buffer representing the key's multihash. Creates a Peer ID from a buffer representing the key's multihash.
Returns `PeerId`.
### `createFromB58String(str)` ### `createFromB58String(str)`
Creates a Peer ID from a Base58 string representing the key's multihash. Creates a Peer ID from a Base58 string representing the key's multihash.
Returns `PeerId`.
### `createFromPubKey(pubKey)` ### `createFromPubKey(pubKey)`
- `publicKey: Buffer` - `publicKey: Buffer`
Creates a Peer ID from a buffer containing a public key. Creates a Peer ID from a buffer containing a public key.
Returns `Promise<PeerId>`.
### `createFromPrivKey(privKey)` ### `createFromPrivKey(privKey)`
- `privKey: Buffer` - `privKey: Buffer`
Creates a Peer ID from a buffer containing a private key. Creates a Peer ID from a buffer containing a private key.
Returns `Promise<PeerId>`.
### `createFromJSON(obj)` ### `createFromJSON(obj)`
- `obj.id: String` - The multihash encoded in `base58` - `obj.id: String` - The multihash encoded in `base58`
- `obj.pubKey: String` - The public key in protobuf format, encoded in 'base64' - `obj.pubKey: String` - The public key in protobuf format, encoded in `base64`
- `obj.privKey: String` - The private key in protobuf format, encoded in 'base 64' - `obj.privKey: String` - The private key in protobuf format, encoded in `base64`
Returns `Promise<PeerId>`.
## Export ## Export
@ -192,10 +209,11 @@ Returns an `obj` of the form
- `obj.pubKey: String` - The public key in protobuf format, encoded in 'base64' - `obj.pubKey: String` - The public key in protobuf format, encoded in 'base64'
- `obj.privKey: String` - The private key in protobuf format, encoded in 'base 64' - `obj.privKey: String` - The private key in protobuf format, encoded in 'base 64'
### `toPrint()` ### `toPrint()`
Alias for `.toJSON()`. Returns the Peer ID as a printable string without the `Qm` prefix.
Example: `<peer.ID xxxxxx>`
### `isEqual(id)` ### `isEqual(id)`

View File

@ -1,14 +0,0 @@
machine:
node:
version: stable
dependencies:
pre:
- google-chrome --version
- curl -L -o google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
- sudo dpkg -i google-chrome.deb || true
- sudo apt-get update
- sudo apt-get install -f
- sudo apt-get install --only-upgrade lsb-base
- sudo dpkg -i google-chrome.deb
- google-chrome --version

View File

@ -1,49 +1,48 @@
{ {
"name": "peer-id", "name": "peer-id",
"version": "0.8.8", "version": "0.13.0",
"description": "IPFS Peer Id implementation in Node.js", "description": "IPFS Peer Id implementation in Node.js",
"leadMaintainer": "Pedro Teixeira <i@pgte.me>",
"main": "src/index.js", "main": "src/index.js",
"bin": "src/bin.js", "bin": "src/bin.js",
"scripts": { "scripts": {
"lint": "aegir-lint", "lint": "aegir lint",
"build": "aegir-build", "build": "aegir build",
"test": "aegir-test", "test": "aegir test",
"test:node": "aegir-test node", "test:node": "aegir test -t node",
"test:browser": "aegir-test browser", "test:browser": "aegir test -t browser -t webworker",
"release": "aegir-release", "release": "aegir release",
"release-minor": "aegir-release --type minor", "release-minor": "aegir release --type minor",
"release-major": "aegir-release --type major", "release-major": "aegir release --type major",
"coverage": "aegir-coverage", "coverage": "aegir coverage",
"coverage-publish": "aegir-coverage publish" "size": "bundlesize -f dist/index.min.js -s 140kB"
}, },
"files": [
"src",
"dist"
],
"keywords": [ "keywords": [
"IPFS" "IPFS"
], ],
"author": "David Dias <daviddias@ipfs.io>",
"license": "MIT", "license": "MIT",
"pre-commit": [
"lint",
"test"
],
"engines": { "engines": {
"node": ">=4.0.0", "node": ">=10.0.0",
"npm": ">=3.0.0" "npm": ">=6.0.0"
}, },
"bugs": { "bugs": {
"url": "https://github.com/libp2p/js-peer-id/issues" "url": "https://github.com/libp2p/js-peer-id/issues"
}, },
"homepage": "https://github.com/libp2p/js-peer-id", "homepage": "https://github.com/libp2p/js-peer-id",
"devDependencies": { "devDependencies": {
"aegir": "^11.0.2", "aegir": "^19.0.5",
"chai": "^4.1.0", "bundlesize": "~0.18.0",
"dirty-chai": "^2.0.1", "chai": "^4.2.0",
"pre-commit": "^1.2.2" "dirty-chai": "^2.0.1"
}, },
"dependencies": { "dependencies": {
"async": "^2.5.0", "class-is": "^1.1.0",
"libp2p-crypto": "~0.8.8", "libp2p-crypto": "~0.17.0",
"lodash": "^4.17.4", "multihashes": "~0.4.14"
"multihashes": "~0.4.5"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -53,11 +52,21 @@
"David Dias <daviddias.p@gmail.com>", "David Dias <daviddias.p@gmail.com>",
"David Dias <mail@daviddias.me>", "David Dias <mail@daviddias.me>",
"Friedel Ziegelmayer <dignifiedquire@gmail.com>", "Friedel Ziegelmayer <dignifiedquire@gmail.com>",
"Henrique Dias <hacdias@gmail.com>",
"Hugo Dias <hugomrdias@gmail.com>",
"Maciej Krüger <mkg20001@gmail.com>",
"Michael Garvin <gar+gh@danger.computer>",
"Pedro Teixeira <i@pgte.me>",
"Prashanth Chandra <coolshanth94@gmail.com>", "Prashanth Chandra <coolshanth94@gmail.com>",
"Richard Littauer <richard.littauer@gmail.com>", "Richard Littauer <richard.littauer@gmail.com>",
"Richard Schneider <makaretu@gmail.com>",
"Stephen Whitmore <stephen.whitmore@gmail.com>", "Stephen Whitmore <stephen.whitmore@gmail.com>",
"Vasco Santos <vasco.santos@ua.pt>",
"Vasco Santos <vasco.santos@moxy.studio>",
"Yahya <ya7yaz@gmail.com>",
"greenkeeperio-bot <support@greenkeeper.io>", "greenkeeperio-bot <support@greenkeeper.io>",
"nginnever <ginneversource@gmail.com>", "nginnever <ginneversource@gmail.com>",
"npmcdn-to-unpkg-bot <npmcdn-to-unpkg-bot@users.noreply.github.com>" "npmcdn-to-unpkg-bot <npmcdn-to-unpkg-bot@users.noreply.github.com>",
"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ <victorbjelkholm@gmail.com>"
] ]
} }

View File

@ -4,10 +4,9 @@
const PeerId = require('./index.js') const PeerId = require('./index.js')
PeerId.create((err, id) => { async function main () {
if (err) { const id = await PeerId.create()
throw err console.log(JSON.stringify(id.toJSON(), null, 2)) // eslint-disable-line no-console
} }
console.log(JSON.stringify(id.toJSON(), null, 2)) main()
})

View File

@ -5,9 +5,9 @@
'use strict' 'use strict'
const mh = require('multihashes') const mh = require('multihashes')
const crypto = require('libp2p-crypto') const cryptoKeys = require('libp2p-crypto/src/keys')
const assert = require('assert') const assert = require('assert')
const waterfall = require('async/waterfall') const withIs = require('class-is')
class PeerId { class PeerId {
constructor (id, privKey, pubKey) { constructor (id, privKey, pubKey) {
@ -56,20 +56,30 @@ class PeerId {
// Return the protobuf version of the public key, matching go ipfs formatting // Return the protobuf version of the public key, matching go ipfs formatting
marshalPubKey () { marshalPubKey () {
if (this.pubKey) { if (this.pubKey) {
return crypto.marshalPublicKey(this.pubKey) return cryptoKeys.marshalPublicKey(this.pubKey)
} }
} }
// Return the protobuf version of the private key, matching go ipfs formatting // Return the protobuf version of the private key, matching go ipfs formatting
marshalPrivKey () { marshalPrivKey () {
if (this.privKey) { if (this.privKey) {
return crypto.marshalPrivateKey(this.privKey) return cryptoKeys.marshalPrivateKey(this.privKey)
} }
} }
// pretty print
toPrint () { toPrint () {
return this.toJSON() let pid = this.toB58String()
// All sha256 nodes start with Qm
// We can skip the Qm to make the peer.ID more useful
if (pid.startsWith('Qm')) {
pid = pid.slice(2)
}
let maxRunes = 6
if (pid.length < maxRunes) {
maxRunes = pid.length
}
return '<peer.ID ' + pid.substr(0, maxRunes) + '>'
} }
// return the jsonified version of the key, matching the formatting // return the jsonified version of the key, matching the formatting
@ -108,150 +118,111 @@ class PeerId {
/* /*
* Check if this PeerId instance is valid (privKey -> pubKey -> Id) * Check if this PeerId instance is valid (privKey -> pubKey -> Id)
*/ */
isValid (callback) { isValid () {
// TODO Needs better checking // TODO: needs better checking
if (this.privKey && return Boolean(this.privKey &&
this.privKey.public && this.privKey.public &&
this.privKey.public.bytes && this.privKey.public.bytes &&
Buffer.isBuffer(this.pubKey.bytes) && Buffer.isBuffer(this.pubKey.bytes) &&
this.privKey.public.bytes.equals(this.pubKey.bytes)) { this.privKey.public.bytes.equals(this.pubKey.bytes))
callback()
} else {
callback(new Error('Keys not match'))
}
} }
} }
exports = module.exports = PeerId const PeerIdWithIs = withIs(PeerId, {
className: 'PeerId',
symbolName: '@libp2p/js-peer-id/PeerId'
})
exports = module.exports = PeerIdWithIs
// generation // generation
exports.create = function (opts, callback) { exports.create = async (opts) => {
if (typeof opts === 'function') {
callback = opts
opts = {}
}
opts = opts || {} opts = opts || {}
opts.bits = opts.bits || 2048 opts.bits = opts.bits || 2048
waterfall([ const key = await cryptoKeys.generateKeyPair('RSA', opts.bits)
(cb) => crypto.generateKeyPair('RSA', opts.bits, cb), const digest = await key.public.hash()
(privKey, cb) => privKey.public.hash((err, digest) => {
cb(err, digest, privKey) return new PeerIdWithIs(digest, key)
})
], (err, digest, privKey) => {
if (err) {
return callback(err)
} }
callback(null, new PeerId(digest, privKey)) exports.createFromHexString = (str) => {
}) return new PeerIdWithIs(mh.fromHexString(str))
} }
exports.createFromHexString = function (str) { exports.createFromBytes = (buf) => {
return new PeerId(mh.fromHexString(str)) return new PeerIdWithIs(buf)
} }
exports.createFromBytes = function (buf) { exports.createFromB58String = (str) => {
return new PeerId(buf) return new PeerIdWithIs(mh.fromB58String(str))
}
exports.createFromB58String = function (str) {
return new PeerId(mh.fromB58String(str))
} }
// Public Key input will be a buffer // Public Key input will be a buffer
exports.createFromPubKey = function (key, callback) { exports.createFromPubKey = async (key) => {
if (typeof callback !== 'function') {
throw new Error('callback is required')
}
let buf = key let buf = key
if (typeof buf === 'string') { if (typeof buf === 'string') {
buf = new Buffer(key, 'base64') buf = Buffer.from(key, 'base64')
} }
const pubKey = crypto.unmarshalPublicKey(buf) if (!Buffer.isBuffer(buf)) {
throw new Error('Supplied key is neither a base64 string nor a buffer')
pubKey.hash((err, digest) => {
if (err) {
return callback(err)
} }
callback(null, new PeerId(digest, null, pubKey)) const pubKey = await cryptoKeys.unmarshalPublicKey(buf)
}) const digest = await pubKey.hash()
return new PeerIdWithIs(digest, null, pubKey)
} }
// Private key input will be a string // Private key input will be a string
exports.createFromPrivKey = function (key, callback) { exports.createFromPrivKey = async (key) => {
let buf = key let buf = key
if (typeof buf === 'string') { if (typeof buf === 'string') {
buf = new Buffer(key, 'base64') buf = Buffer.from(key, 'base64')
} }
if (typeof callback !== 'function') { if (!Buffer.isBuffer(buf)) {
throw new Error('callback is required') throw new Error('Supplied key is neither a base64 string nor a buffer')
} }
waterfall([ const privKey = await cryptoKeys.unmarshalPrivateKey(buf)
(cb) => crypto.unmarshalPrivateKey(buf, cb), const digest = await privKey.public.hash()
(privKey, cb) => privKey.public.hash((err, digest) => {
cb(err, digest, privKey) return new PeerIdWithIs(digest, privKey, privKey.public)
})
], (err, digest, privKey) => {
if (err) {
return callback(err)
} }
callback(null, new PeerId(digest, privKey)) 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 cryptoKeys.unmarshalPublicKey(rawPubKey)
if (!rawPrivKey) {
return new PeerIdWithIs(id, null, pub)
} }
exports.createFromJSON = function (obj, callback) { const privKey = await cryptoKeys.unmarshalPrivateKey(rawPrivKey)
if (typeof callback !== 'function') { const privDigest = await privKey.public.hash()
throw new Error('callback is required') let pubDigest
}
const id = mh.fromB58String(obj.id)
const rawPrivKey = obj.privKey && new Buffer(obj.privKey, 'base64')
const rawPubKey = obj.pubKey && new Buffer(obj.pubKey, 'base64')
const pub = rawPubKey && crypto.unmarshalPublicKey(rawPubKey)
if (rawPrivKey) {
waterfall([
(cb) => crypto.unmarshalPrivateKey(rawPrivKey, cb),
(priv, cb) => priv.public.hash((err, digest) => {
cb(err, digest, priv)
}),
(privDigest, priv, cb) => {
if (pub) { if (pub) {
pub.hash((err, pubDigest) => { pubDigest = await pub.hash()
cb(err, privDigest, priv, pubDigest)
})
} else {
cb(null, privDigest, priv)
}
}
], (err, privDigest, priv, pubDigest) => {
if (err) {
return callback(err)
} }
if (pub && !privDigest.equals(pubDigest)) { if (pub && !privDigest.equals(pubDigest)) {
return callback(new Error('Public and private key do not match')) throw new Error('Public and private key do not match')
} }
if (id && !privDigest.equals(id)) { if (id && !privDigest.equals(id)) {
return callback(new Error('Id and private key do not match')) throw new Error('Id and private key do not match')
} }
callback(null, new PeerId(id, priv, pub)) return new PeerIdWithIs(id, privKey, pub)
})
} else {
callback(null, new PeerId(id, null, pub))
}
} }
exports.isPeerId = function (peerId) { exports.isPeerId = (peerId) => {
return Boolean(typeof peerId === 'object' && return Boolean(typeof peerId === 'object' &&
peerId._id && peerId._id &&
peerId._idB58String) peerId._idB58String)

View File

@ -8,10 +8,11 @@ chai.use(dirtyChai)
const expect = chai.expect const expect = chai.expect
const crypto = require('libp2p-crypto') const crypto = require('libp2p-crypto')
const mh = require('multihashes') const mh = require('multihashes')
const parallel = require('async/parallel')
const PeerId = require('../src') const PeerId = require('../src')
const util = require('util')
const testId = require('./fixtures/sample-id') const testId = require('./fixtures/sample-id')
const testIdHex = testId.id const testIdHex = testId.id
const testIdBytes = mh.fromHexString(testId.id) const testIdBytes = mh.fromHexString(testId.id)
@ -19,38 +20,35 @@ const testIdB58String = mh.toB58String(testIdBytes)
const goId = require('./fixtures/go-private-key') const goId = require('./fixtures/go-private-key')
// Test options for making PeerId.create faster
// INSECURE, only use when testing
const testOpts = {
bits: 512
}
describe('PeerId', () => { describe('PeerId', () => {
it('create an id without \'new\'', () => { it('create an id without \'new\'', () => {
expect(PeerId).to.throw(Error) expect(PeerId).to.throw(Error)
}) })
it('create a new id', (done) => { it('create a new id', async () => {
PeerId.create((err, id) => { const id = await PeerId.create(testOpts)
expect(err).to.not.exist()
expect(id.toB58String().length).to.equal(46) expect(id.toB58String().length).to.equal(46)
done()
})
}) })
it('isPeerId', (done) => { it('isPeerId', async () => {
PeerId.create((err, id) => { const id = await PeerId.create(testOpts)
expect(err).to.not.exist()
expect(PeerId.isPeerId(id)).to.equal(true) expect(PeerId.isPeerId(id)).to.equal(true)
expect(PeerId.isPeerId('aaa')).to.equal(false) expect(PeerId.isPeerId('aaa')).to.equal(false)
expect(PeerId.isPeerId(new Buffer('batatas'))).to.equal(false) expect(PeerId.isPeerId(Buffer.from('batatas'))).to.equal(false)
done()
})
}) })
it('throws on changing the id', (done) => { it('throws on changing the id', async () => {
PeerId.create((err, id) => { const id = await PeerId.create(testOpts)
expect(err).to.not.exist()
expect(id.toB58String().length).to.equal(46) expect(id.toB58String().length).to.equal(46)
expect(() => { expect(() => {
id.id = new Buffer('hello') id.id = Buffer.from('hello')
}).to.throw(/immutable/) }).to.throw(/immutable/)
done()
})
}) })
it('recreate an Id from Hex string', () => { it('recreate an Id from Hex string', () => {
@ -68,60 +66,44 @@ describe('PeerId', () => {
expect(testIdB58String).to.equal(id.toB58String()) expect(testIdB58String).to.equal(id.toB58String())
}) })
it('Recreate from a Public Key', (done) => { it('Recreate from a Public Key', async () => {
PeerId.createFromPubKey(testId.pubKey, (err, id) => { const id = await PeerId.createFromPubKey(testId.pubKey)
expect(err).to.not.exist()
expect(testIdB58String).to.equal(id.toB58String()) expect(testIdB58String).to.equal(id.toB58String())
done()
})
}) })
it('Recreate from a Private Key', (done) => { it('Recreate from a Private Key', async () => {
PeerId.createFromPrivKey(testId.privKey, (err, id) => { const id = await PeerId.createFromPrivKey(testId.privKey)
expect(err).to.not.exist()
expect(testIdB58String).to.equal(id.toB58String()) expect(testIdB58String).to.equal(id.toB58String())
const encoded = Buffer.from(testId.privKey, 'base64')
const encoded = new Buffer(testId.privKey, 'base64') const id2 = await PeerId.createFromPrivKey(encoded)
PeerId.createFromPrivKey(encoded, (err, id2) => {
expect(err).to.not.exist()
expect(testIdB58String).to.equal(id2.toB58String()) expect(testIdB58String).to.equal(id2.toB58String())
done() expect(id.marshalPubKey()).to.deep.equal(id2.marshalPubKey())
})
})
}) })
it('Compare generated ID with one created from PubKey', (done) => { it('Compare generated ID with one created from PubKey', async () => {
PeerId.create((err, id1) => { const id1 = await PeerId.create(testOpts)
expect(err).to.not.exist() const id2 = await PeerId.createFromPubKey(id1.marshalPubKey())
PeerId.createFromPubKey(id1.marshalPubKey(), (err, id2) => {
expect(err).to.not.exist()
expect(id1.id).to.be.eql(id2.id) expect(id1.id).to.be.eql(id2.id)
done()
})
})
}) })
it('Non-default # of bits', (done) => { it('Works with default options', async function () {
PeerId.create({ bits: 1024 }, (err, shortId) => { this.timeout(10000)
expect(err).to.not.exist() const id = await PeerId.create()
PeerId.create({ bits: 4096 }, (err, longId) => { expect(id.toB58String().length).to.equal(46)
expect(err).to.not.exist() })
it('Non-default # of bits', async function () {
this.timeout(1000 * 60)
const shortId = await PeerId.create(testOpts)
const longId = await PeerId.create({ bits: 1024 })
expect(shortId.privKey.bytes.length).is.below(longId.privKey.bytes.length) expect(shortId.privKey.bytes.length).is.below(longId.privKey.bytes.length)
done()
})
})
}) })
it('Pretty printing', (done) => { it('Pretty printing', async () => {
PeerId.create((err, id1) => { const id1 = await PeerId.create(testOpts)
expect(err).to.not.exist() const id2 = await PeerId.createFromPrivKey((id1.toJSON()).privKey)
PeerId.createFromPrivKey(id1.toPrint().privKey, (err, id2) => {
expect(err).to.not.exist()
expect(id1.toPrint()).to.be.eql(id2.toPrint()) expect(id1.toPrint()).to.be.eql(id2.toPrint())
done() expect(id1.toPrint()).to.equal('<peer.ID ' + id1.toB58String().substr(2, 6) + '>')
})
})
}) })
it('toBytes', () => { it('toBytes', () => {
@ -129,110 +111,88 @@ describe('PeerId', () => {
expect(id.toBytes().toString('hex')).to.equal(testIdBytes.toString('hex')) expect(id.toBytes().toString('hex')).to.equal(testIdBytes.toString('hex'))
}) })
it('isEqual', (done) => { it('isEqual', async () => {
parallel([ const ids = await Promise.all([
(cb) => PeerId.create(cb), PeerId.create(testOpts),
(cb) => PeerId.create(cb) PeerId.create(testOpts)
], (err, ids) => { ])
expect(err).to.not.exist()
expect(ids[0].isEqual(ids[0])).to.equal(true) expect(ids[0].isEqual(ids[0])).to.equal(true)
expect(ids[0].isEqual(ids[1])).to.equal(false) expect(ids[0].isEqual(ids[1])).to.equal(false)
expect(ids[0].isEqual(ids[0].id)).to.equal(true) expect(ids[0].isEqual(ids[0].id)).to.equal(true)
expect(ids[0].isEqual(ids[1].id)).to.equal(false) expect(ids[0].isEqual(ids[1].id)).to.equal(false)
done()
})
}) })
describe('fromJSON', () => { describe('fromJSON', () => {
it('full node', (done) => { it('full node', async () => {
PeerId.create({ bits: 1024 }, (err, id) => { const id = await PeerId.create(testOpts)
expect(err).to.not.exist() const other = await PeerId.createFromJSON(id.toJSON())
PeerId.createFromJSON(id.toJSON(), (err, other) => {
expect(err).to.not.exist()
expect(id.toB58String()).to.equal(other.toB58String()) expect(id.toB58String()).to.equal(other.toB58String())
expect(id.privKey.bytes).to.eql(other.privKey.bytes) expect(id.privKey.bytes).to.eql(other.privKey.bytes)
expect(id.pubKey.bytes).to.eql(other.pubKey.bytes) expect(id.pubKey.bytes).to.eql(other.pubKey.bytes)
done()
})
})
}) })
it('only id', (done) => { it('only id', async () => {
crypto.generateKeyPair('RSA', 1024, (err, key) => { const key = await crypto.keys.generateKeyPair('RSA', 1024)
expect(err).to.not.exist() const digest = await key.public.hash()
key.public.hash((err, digest) => {
expect(err).to.not.exist()
const id = PeerId.createFromBytes(digest) const id = PeerId.createFromBytes(digest)
expect(id.privKey).to.not.exist() expect(id.privKey).to.not.exist()
expect(id.pubKey).to.not.exist() expect(id.pubKey).to.not.exist()
const other = await PeerId.createFromJSON(id.toJSON())
expect(id.toB58String()).to.equal(other.toB58String())
})
PeerId.createFromJSON(id.toJSON(), (err, other) => { it('go interop', async () => {
expect(err).to.not.exist() const id = await PeerId.createFromJSON(goId)
expect( const digest = await id.privKey.public.hash()
id.toB58String() expect(mh.toB58String(digest)).to.eql(goId.id)
).to.equal(
other.toB58String()
)
done()
})
})
}) })
}) })
it('go interop', (done) => { it('set privKey (valid)', async () => {
PeerId.createFromJSON(goId, (err, id) => { const peerId = await PeerId.create(testOpts)
expect(err).to.not.exist()
id.privKey.public.hash((err, digest) => {
expect(err).to.not.exist()
expect(
mh.toB58String(digest)
).to.be.eql(
goId.id
)
done()
})
})
})
})
it('set privKey (valid)', (done) => {
PeerId.create((err, peerId) => {
expect(err).to.not.exist()
peerId.privKey = peerId._privKey peerId.privKey = peerId._privKey
peerId.isValid(done) expect(peerId.isValid()).to.equal(true)
})
}) })
it('set pubKey (valid)', (done) => { it('set pubKey (valid)', async () => {
PeerId.create((err, peerId) => { const peerId = await PeerId.create(testOpts)
expect(err).to.not.exist()
peerId.pubKey = peerId._pubKey peerId.pubKey = peerId._pubKey
peerId.isValid(done) expect(peerId.isValid()).to.equal(true)
})
}) })
it('set privKey (invalid)', (done) => { it('set privKey (invalid)', async () => {
PeerId.create((err, peerId) => { const peerId = await PeerId.create(testOpts)
expect(err).to.not.exist() peerId.privKey = Buffer.from('bufff')
peerId.privKey = new Buffer('bufff') expect(peerId.isValid()).to.equal(false)
peerId.isValid((err) => {
expect(err).to.exist()
done()
})
})
}) })
it('set pubKey (invalid)', (done) => { it('set pubKey (invalid)', async () => {
PeerId.create((err, peerId) => { const peerId = await PeerId.create(testOpts)
expect(err).to.not.exist() peerId.pubKey = Buffer.from('bufff')
peerId.pubKey = new Buffer('buffff') expect(peerId.isValid()).to.equal(false)
peerId.isValid((err) => { })
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 fncs = ['createFromPubKey', 'createFromPrivKey', 'createFromJSON']
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(err).to.exist()
done() }
})
}) })
}
}
}) })
describe('throws on inconsistent data', () => { describe('throws on inconsistent data', () => {
@ -240,45 +200,34 @@ describe('PeerId', () => {
let k2 let k2
let k3 let k3
before((done) => { before(async () => {
parallel([ const keys = await Promise.all([
(cb) => crypto.generateKeyPair('RSA', 1024, cb), crypto.keys.generateKeyPair('RSA', 512),
(cb) => crypto.generateKeyPair('RSA', 1024, cb), crypto.keys.generateKeyPair('RSA', 512),
(cb) => crypto.generateKeyPair('RSA', 1024, cb) crypto.keys.generateKeyPair('RSA', 512)
], (err, keys) => { ])
expect(err).to.not.exist()
k1 = keys[0] k1 = keys[0]
k2 = keys[1] k2 = keys[1]
k3 = keys[2] k3 = keys[2]
done()
})
}) })
it('missmatch private - public key', (done) => { it('missmatch private - public key', async () => {
k1.public.hash((err, digest) => { const digest = await k1.public.hash()
expect(err).to.not.exist() expect(() => {
expect(() => new PeerId(digest, k1, k2.public)) new PeerId(digest, k1, k2.public) // eslint-disable-line no-new
.to.throw(/inconsistent arguments/) }).to.throw(/inconsistent arguments/)
done()
})
}) })
it('missmatch id - private - public key', (done) => { it('missmatch id - private - public key', async () => {
k1.public.hash((err, digest) => { const digest = await k1.public.hash()
expect(err).to.not.exist() expect(() => {
expect(() => new PeerId(digest, k1, k3.public)) new PeerId(digest, k1, k3.public) // eslint-disable-line no-new
.to.throw(/inconsistent arguments/) }).to.throw(/inconsistent arguments/)
done()
})
}) })
it('invalid id', () => { it('invalid id', () => {
expect( expect(() => new PeerId('hello world')).to.throw(/invalid id/)
() => new PeerId('hello world')
).to.throw(
/invalid id/
)
}) })
}) })
}) })