Compare commits

...

207 Commits

Author SHA1 Message Date
Pedro Teixeira
1624b0f70a chore: release version v0.12.2 2019-01-09 15:14:15 +00:00
Pedro Teixeira
ce8a6ff77e chore: update contributors 2019-01-09 15:14:15 +00:00
Hugo Dias
41ce1d4671 chore: fix lint 2019-01-09 15:03:49 +00:00
Hugo Dias
231e553a22 chore: fix lint 2019-01-09 15:03:49 +00:00
Hugo Dias
cd2099305e fix: clean repo and bundle size reduction 2019-01-09 15:03:49 +00:00
Pedro Teixeira
8e030b24d4 chore: release version v0.12.1 2019-01-03 17:10:26 +00:00
Pedro Teixeira
9f69e1ba74 chore: update contributors 2019-01-03 17:10:26 +00:00
Pedro Teixeira
cbc8c5e2ba Merge pull request #91 from libp2p/chore/update-deps-20190103
chore: update dependencies
2019-01-03 17:05:15 +00:00
Vasco Santos
77000dbd8b chore: update dependencies 2019-01-03 16:46:46 +00:00
Pedro Teixeira
eb062759c6 chore: release version v0.12.0 2018-10-18 11:00:01 +01:00
Pedro Teixeira
39e17c0c0b chore: update contributors 2018-10-18 11:00:01 +01:00
Pedro Teixeira
e03a4098df chore: update contributors 2018-10-18 10:57:19 +01:00
Pedro Teixeira
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
Vasco Santos
2e5e666140 fix: add peerIdWithIs to the API functions using the instance 2018-10-17 10:51:42 +01:00
Pedro Teixeira
b388257b69 Merge pull request #86 from libp2p/docs/readme-tweaks
docs: various readme tweaks
2018-10-12 19:58:47 +01:00
Maciej Krüger
6ecd9a8cb0 docs: various readme tweaks 2018-10-12 18:01:55 +02:00
Vasco Santos
6513a02e1e feat: add class-is module 2018-10-04 11:29:31 +01:00
David Dias
bd1dc9bda0 chore: release version v0.11.0 2018-07-02 19:28:04 +02:00
David Dias
31cbb5d94c chore: update contributors 2018-07-02 19:28:03 +02:00
David Dias
35556c3a37 chore: update deps 2018-07-02 19:26:36 +02:00
Michael Garvin
e8ab1b9281 feat: change toPrint output to match go implementation 2018-07-02 19:26:03 +02:00
David Dias
a786018528 chore: remove pre-commit module 2018-06-04 09:48:30 +01:00
David Dias
417fd330b9 docs: add lead maintainer 2018-06-04 09:48:30 +01:00
David Dias
d74bdebcc8 chore: update deps 2018-06-04 09:48:30 +01:00
David Dias
ffed046595 chore: release version v0.10.7 2018-04-05 16:41:39 +01:00
David Dias
1727a135aa chore: update contributors 2018-04-05 16:41:39 +01:00
David Dias
466b3a030d chore: update deps 2018-04-05 16:39:53 +01:00
David Dias
464c92a53b chore: release version v0.10.6 2018-02-12 09:34:42 +00:00
David Dias
8a608def32 chore: update contributors 2018-02-12 09:34:42 +00:00
David Dias
19deeff432 chore: update deps 2018-02-12 09:33:14 +00:00
David Dias
b18c0082ff chore: release version v0.10.5 2018-01-27 18:18:00 -08:00
David Dias
2b050bcaa1 chore: update contributors 2018-01-27 18:17:59 -08:00
David Dias
b19edf2ab2 chore: update deps 2018-01-27 18:15:52 -08:00
David Dias
35b384ed15 chore: release version v0.10.4 2017-12-20 12:33:36 +00:00
David Dias
655ceec29b chore: update contributors 2017-12-20 12:33:36 +00:00
Richard Schneider
8b9a134276 fix: update dependencies (#73) 2017-12-20 12:32:35 +00:00
David Dias
a637297112 chore: release version v0.10.3 2017-12-01 08:51:43 +00:00
David Dias
e666b7284f chore: update contributors 2017-12-01 08:51:43 +00:00
Maciej Krüger
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
David Dias
8f6935499e chore: release version v0.10.2 2017-10-12 10:21:43 +02:00
David Dias
80da1a54b2 chore: update contributors 2017-10-12 10:21:43 +02:00
David Dias
300266ad51 chore: update deps 2017-10-12 10:20:43 +02:00
Yahya
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
David Dias
7d3cb8e87c chore: release version v0.10.1 2017-09-07 14:51:57 +01:00
David Dias
a57c0c6f14 chore: update contributors 2017-09-07 14:51:57 +01:00
Friedel Ziegelmayer
d7088d6650 feat(deps): update aegir and libp2p-crypto (#67) 2017-09-07 14:50:44 +01:00
David Dias
c945d6ad48 chore: release version v0.10.0 2017-09-03 11:51:33 +01:00
David Dias
0eee1a2a69 chore: update contributors 2017-09-03 11:51:33 +01:00
David Dias
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
David Dias
a38e3859d2 chore: release version v0.9.0 2017-07-22 13:38:56 -07:00
David Dias
551fd710be chore: update contributors 2017-07-22 13:38:55 -07:00
David Dias
442df13a11 feat: use next libp2p-crypto (#64)
* feat: use next libp2p-crypto

* chore: update deps
2017-07-22 13:37:01 -07:00
David Dias
156088db99 chore: release version v0.8.8 2017-07-21 09:30:10 -07:00
David Dias
9c0c648001 chore: update contributors 2017-07-21 09:30:10 -07:00
David Dias
a2934aa371 chore: update ci 2017-07-21 09:29:12 -07:00
David Dias
ac98b7582a chore: update deps 2017-07-21 09:29:06 -07:00
David Dias
0dc3c14f2b docs: update readme 2017-07-09 10:05:03 +01:00
David Dias
af6575d06c chore: release version v0.8.7 2017-04-03 08:29:40 -04:00
David Dias
ccf0b7875c chore: update contributors 2017-04-03 08:29:40 -04:00
David Dias
733b40bb47 Merge pull request #60 from libp2p/feat/update-keys
feat: set privKey pubKey
2017-04-03 08:11:33 -04:00
David Dias
ac27907241 feat: set privKey pubKey 2017-04-02 22:47:44 -04:00
David Dias
e206c46549 chore: release version v0.8.6 2017-03-30 10:06:09 +01:00
David Dias
41d3e5be5b chore: update contributors 2017-03-30 10:06:09 +01:00
David Dias
bc213dd818 Merge pull request #58 from libp2p/feat/isEqual
feat: isEqual
2017-03-30 10:02:36 +01:00
David Dias
3f4f670691 feat: isEqual 2017-03-30 09:47:11 +01:00
David Dias
d2894bfa32 chore: release version v0.8.5 2017-03-27 14:20:31 +01:00
David Dias
c3e3b70d09 chore: update contributors 2017-03-27 14:20:31 +01:00
David Dias
f08866047d Merge pull request #57 from libp2p/feat/isPeerId
isPeerId
2017-03-27 14:17:09 +01:00
David Dias
a3fe1a2f03 fix: avoid using constructor.name 2017-03-27 13:58:21 +01:00
David Dias
0acc572fd3 feat: isPeerId 2017-03-27 13:23:18 +01:00
David Dias
8c49610dff chore: update deps 2017-03-27 12:38:48 +01:00
David Dias
e1ffe9bba5 chore: release version v0.8.4 2017-03-16 17:08:03 +00:00
David Dias
e59010b439 chore: update contributors 2017-03-16 17:08:03 +00:00
David Dias
60b1c09665 chore: release version v0.8.3 2017-03-16 17:07:10 +00:00
David Dias
b28b8ef693 chore: update contributors 2017-03-16 17:07:10 +00:00
David Dias
961b218a53 chore: update aegir and fix lint 2017-03-16 17:07:10 +00:00
David Dias
0642070fdd Merge pull request #45 from libp2p/greenkeeper-aegir-10.0.0
Update aegir to version 10.0.0 🚀
2017-02-13 18:07:31 -08:00
David Dias
3da91b92fa chore: release version v0.8.2 2017-02-09 08:10:40 -08:00
David Dias
ad9a43b7c8 chore: update contributors 2017-02-09 08:10:40 -08:00
David Dias
c67bf150f2 chore: ^ to ~ 2017-02-09 08:08:43 -08:00
greenkeeperio-bot
a2afb2aeea chore(package): update aegir to version 10.0.0
https://greenkeeper.io/
2017-02-07 18:45:23 +01:00
David Dias
6624c27d8d chore: release version v0.8.1 2016-12-18 08:06:16 +00:00
David Dias
26ac06d21c chore: update contributors 2016-12-18 08:06:16 +00:00
David Dias
f0d72b7bfe Merge pull request #44 from libp2p/feat/cache
feat: cache b58 id
2016-12-18 08:05:41 +00:00
Friedel Ziegelmayer
78d96d0b14 feat: create b58 string on creation and throw on id mutation 2016-12-18 09:02:37 +01:00
Friedel Ziegelmayer
bebb0a7eae feat: cache b58 id 2016-12-14 09:05:07 +01:00
Greenkeeper
5d6a962b6c chore(package): update aegir to version 9.2.1 (#43)
https://greenkeeper.io/
2016-12-10 11:59:28 -08:00
Prashanth Chandra
531c9f1086 Fix typo in README example (#42) 2016-12-04 21:52:26 -08:00
Greenkeeper
06f93cd961 chore(package): update aegir to version 9.1.2 (#39)
https://greenkeeper.io/
2016-11-28 15:52:39 +00:00
Greenkeeper
1452f233c8 chore(package): update multihashes to version 0.3.0 (#40)
https://greenkeeper.io/
2016-11-28 15:34:50 +00:00
Greenkeeper
77900c7b45 chore(package): update aegir to version 9.1.0 (#38)
https://greenkeeper.io/
2016-11-03 17:59:54 +00:00
David Dias
564489b0ea chore: release version v0.8.0 2016-11-03 07:52:10 +00:00
David Dias
65c2ac8dca chore: update contributors 2016-11-03 07:52:10 +00:00
Friedel Ziegelmayer
31701e236d Async Crypto Endeavour (#33)
* refactor: make import and creation async - This allows the use of native key generation in the browser

BREAKING CHANGE:

This changes the interface of .create, .createFromPrivKey,
.createFromPubKey, .createFromJSON
2016-11-03 07:51:29 +00:00
David Dias
e08907ff94 Merge pull request #34 from RichardLitt/master
Update README URLs based on HTTP redirects
2016-10-02 15:06:15 +01:00
Richard Littauer
f6a42fef76 Update README URLs based on HTTP redirects 2016-10-02 10:03:56 -04:00
Friedel Ziegelmayer
ba8aa3ff34 Merge pull request #32 from libp2p/greenkeeper-libp2p-crypto-0.6.1
Update libp2p-crypto to version 0.6.1 🚀
2016-09-13 17:23:40 +02:00
greenkeeperio-bot
ae81e95927 chore(package): update libp2p-crypto to version 0.6.1
https://greenkeeper.io/
2016-09-13 12:35:32 +02:00
David Dias
d24500a042 Update README.md 2016-09-11 16:40:26 -04:00
David Dias
5fec44833e Update README.md 2016-09-11 16:40:09 -04:00
David Dias
2432c56ad5 Merge pull request #30 from npmcdn-to-unpkg-bot/npmcdn-to-unpkg
Replace npmcdn.com with unpkg.com
2016-09-11 13:03:07 -04:00
npmcdn-to-unpkg-bot
f0e380af58 Replace npmcdn.com with unpkg.com 2016-09-11 12:29:33 +01:00
Friedel Ziegelmayer
24cd31b2d1 Merge pull request #29 from libp2p/greenkeeper-aegir-8.0.0
Update aegir to version 8.0.0 🚀
2016-09-06 21:15:05 +02:00
greenkeeperio-bot
5f9136b3ca chore(package): update aegir to version 8.0.0
https://greenkeeper.io/
2016-09-06 15:11:37 +02:00
Friedel Ziegelmayer
4fe3e12b3c Merge pull request #26 from libp2p/greenkeeper-update-all
Update all dependencies 🌴
2016-08-04 20:43:19 +02:00
greenkeeperio-bot
49d454da7d chore(package): update dependencies
https://greenkeeper.io/
2016-08-04 19:11:03 +02:00
David Dias
7336b6ad80 chore: release version v0.7.0 2016-05-26 19:23:08 +01:00
David Dias
461d2ea287 chore: update contributors 2016-05-26 19:23:08 +01:00
David Dias
7c100f845a update aegir 2016-05-26 19:20:59 +01:00
David Dias
c3f50a2dfd Merge pull request #25 from diasdavid/crypto
refactor: use libp2p and standardized rsa keys
2016-05-24 13:24:54 +01:00
dignifiedquire
907ed1571d chore: add more release tasks 2016-05-24 14:15:00 +02:00
dignifiedquire
2aad1dce7b test: fix node-forge for the browser setup 2016-05-24 14:14:11 +02:00
dignifiedquire
58f1933980 fix: code review and docs and go interop 2016-05-24 14:03:31 +02:00
dignifiedquire
ab5504686a fix: use new version of libp2p-crypto 2016-05-24 12:39:36 +02:00
dignifiedquire
4beb1f8888 refactor: use libp2p and standardized rsa keys 2016-05-23 22:06:25 +02:00
David Dias
7635cfcfda chore: release version v0.6.7 2016-05-23 15:32:57 +01:00
David Dias
afbd96edda chore: update contributors 2016-05-23 15:32:57 +01:00
David Dias
c1e18ee420 Merge pull request #24 from diasdavid/feat/marshal-unmarshal
Feat/marshal unmarshal
2016-05-23 15:31:38 +01:00
David Dias
b358530dfb add toJSON and fromJSOn and cli to quickly generate 2016-05-23 15:25:30 +01:00
David Dias
4afbedb525 update dependencies 2016-05-23 14:16:30 +01:00
David Dias
e9b107fc55 Merge pull request #21 from diasdavid/aegir
refactor: use aegir
2016-04-15 14:13:57 +01:00
dignifiedquire
855a97956d refactor: use aegir 2016-04-15 13:20:05 +02:00
David Dias
dee54d3dcc Merge pull request #20 from noffle/circle
circle-ci config
2016-04-14 00:01:25 +01:00
David Dias
167b726dad Merge pull request #19 from noffle/readme-formatting
fixes README formatting
2016-04-14 00:01:05 +01:00
Stephen Whitmore
3b9f8af2e7 circle-ci config 2016-04-13 10:11:39 -07:00
Stephen Whitmore
771b994d7e fixes README formatting 2016-04-13 10:00:26 -07:00
David Dias
524fc37877 chore: release version v0.6.6 2016-04-12 22:14:58 +01:00
David Dias
3c55473a45 Merge pull request #18 from diasdavid/fix-jsnext
fix jsnext:main
2016-04-12 22:13:03 +01:00
David Dias
8771627ce4 fix it 2016-04-12 22:06:12 +01:00
David Dias
bbf6bae073 chore: release version v0.6.5 2016-04-12 21:28:27 +01:00
David Dias
e45a9f4083 Merge pull request #17 from diasdavid/jsnext-add
jsnext add
2016-04-12 21:24:11 +01:00
David Dias
13f98c8913 jsnext add 2016-04-12 21:09:41 +01:00
David Dias
f374ab4411 chore: release version v0.6.4 2016-04-12 17:31:47 +01:00
David Dias
2f4cdd3725 Merge pull request #16 from noffle/docs-and-examples
readme <3
2016-04-12 17:28:37 +01:00
David Dias
d2f90ff447 Merge pull request #15 from noffle/coverage
100% coverage
2016-04-12 17:27:29 +01:00
Stephen Whitmore
f2a75f1188 100% coverage badge 2016-04-12 09:07:59 -07:00
Stephen Whitmore
dab90bd3b6 other bundlers 2016-04-12 09:04:02 -07:00
Stephen Whitmore
e9fdc0a27e applies readme love 2016-04-11 15:23:34 -07:00
Stephen Whitmore
f0a17a9bd9 100% coverage 2016-04-11 14:43:50 -07:00
David Dias
57ab8406c0 chore: release version v0.6.3 2016-04-07 19:47:53 -04:00
David Dias
f16c08e7fd update the readme 2016-04-07 19:45:21 -04:00
David Dias
be5d4f9b41 chore: release version v0.6.2 2016-04-07 19:41:09 -04:00
David Dias
35a3ccca3d update coverage script 2016-04-07 19:38:43 -04:00
David Dias
989c3fb7a5 add .npmignore 2016-04-07 19:30:19 -04:00
David Dias
bbe67df1c8 Merge pull request #12 from dignifiedquire/dignified
Use dignified.js
2016-04-07 19:27:13 -04:00
dignifiedquire
8849d90d6a Use dignified.js 1.0.0 2016-04-07 21:22:53 +02:00
dignifiedquire
2552871bcc Update travis 2016-03-22 17:03:51 +01:00
dignifiedquire
ab76788771 Use dignified.js 2016-03-22 17:01:46 +01:00
David Dias
f62023f8a7 Release v0.6.1. 2016-03-15 23:28:07 +00:00
David Dias
95367871ac Merge pull request #11 from noffle/bits
exposes opts + bits
2016-03-15 23:22:41 +00:00
Stephen Whitmore
352a6cfa17 tests # of bits 2016-03-15 12:15:44 -07:00
Stephen Whitmore
727355c4f5 exposes opts + bits 2016-03-14 17:10:02 -07:00
David Dias
bd185f8081 Release v0.6.0. 2016-03-10 19:43:32 +00:00
David Dias
d4c3de1ecb codestyle 2016-03-10 19:43:23 +00:00
David Dias
b692394116 chore: dist 2016-03-10 19:40:52 +00:00
David Dias
a8e591525b update readme 2016-03-10 19:36:47 +00:00
David Dias
6ad5d85f76 Merge pull request #10 from nginnever/master
buffer the public key for consistency
2016-03-10 19:31:47 +00:00
nginnever
ca9cef6de7 comparing buffers 2016-03-10 11:25:59 -08:00
nginnever
f55eebcef7 buffer the public key for consistency 2016-03-10 10:32:48 -08:00
David Dias
6442bb4b59 Release v0.5.3. 2016-03-05 21:56:53 +00:00
David Dias
33ff2aa608 Merge pull request #8 from diasdavid/update/git-repo
add git repo and fix codestyle issues
2016-03-05 21:56:36 +00:00
David Dias
bbeb6fc0f6 add git repo and fix codestyle issues 2016-03-05 21:54:18 +00:00
David Dias
f518ced776 add git repo to the package.json 2016-03-05 21:49:26 +00:00
nginnever
73b42ff2aa dist file 2016-03-03 14:19:10 -08:00
David Dias
b3e3dbe3c0 Release v0.5.1. 2016-03-03 17:45:53 +00:00
David Dias
b2b90bfbb5 remove jshintrc and jshintignore 2016-03-03 17:43:30 +00:00
David Dias
d9113d55e0 Merge pull request #6 from diasdavid/cleanup
came to fix a square bracket, ended up touch a bunch of other things :)
2016-03-03 17:39:14 +00:00
David Dias
59b89039b6 came to fix a square bracket, ended up touch a bunch of other things :) 2016-03-03 17:31:33 +00:00
David Dias
1cdbf19857 Release v0.5.0. 2016-02-14 07:37:10 +00:00
David Dias
845bd088fe add coverage, fix codestyle 2016-02-14 07:32:09 +00:00
David Dias
1f72aaf7b7 Merge pull request #4 from nginnever/master
public key derivation from private key stored in go-ipfs config file
2016-02-14 07:24:06 +00:00
nginnever
effa21b892 removed node forge bundle comment 2016-02-13 13:46:33 -08:00
nginnever
91bc56eb05 small grammar changes 2016-02-13 07:49:51 -08:00
nginnever
3cc3cb31f0 removed uneeded dev deps 2016-02-12 20:09:42 -08:00
nginnever
de572bd15f Merge branch 'master' of https://github.com/nginnever/js-peer-id 2016-02-12 19:56:37 -08:00
nginnever
1a336f9289 cleanup changes 2016-02-12 19:55:44 -08:00
Nathan Ginnever
77790571aa Delete id-test.js 2016-02-12 19:50:55 -08:00
Nathan Ginnever
d9b9ca8812 Delete crypto.proto 2016-02-12 19:45:50 -08:00
nginnever
67c26ec546 travis addons 2016-02-12 16:38:29 -08:00
nginnever
58fe038e07 time out increased 2016-02-12 16:13:09 -08:00
nginnever
61c0c663d6 new timeout set 2016-02-12 16:06:40 -08:00
nginnever
8adbdd0d6e Merge https://github.com/diasdavid/js-peer-id 2016-02-12 15:29:26 -08:00
nginnever
7ae9be8f71 new tests 2016-02-12 14:55:05 -08:00
nginnever
16c77433f9 getting ready to rewrite tests 2016-02-10 13:55:59 -08:00
nginnever
6ce01ab434 keys now generated and derived match with go client 2016-02-04 12:02:18 -08:00
David Dias
5cb511c646 added create id from private key 2016-02-04 12:01:58 -08:00
David Dias
370e5c55b1 Release v0.4.0. 2015-11-05 18:51:53 +00:00
David Dias
e3cc273a14 Merge pull request #3 from diasdavid/update
tests, browser tests, move to RSA based key (instead of ECDH), conform with go-ipfs
2015-11-05 18:51:21 +00:00
David Dias
2c1874a689 merge latest master 2015-11-05 18:48:13 +00:00
David Dias
3c0c9a3b19 tests and browser tests setup 2015-11-05 18:46:02 +00:00
David Dias
d7ab4bd8fb complement readme 2015-11-05 17:47:44 +00:00
David Dias
9aee5bf670 abandon ECD for RSA, in order to conform with go impl 2015-11-05 17:35:23 +00:00
David Dias
5e9bf9837d Release v0.3.4. 2015-10-28 22:06:37 +00:00
David Dias
f82d0d6ac5 Merge pull request #1 from diasdavid/rn
update README and package.json
2015-10-28 22:05:12 +00:00
David Dias
0b30a0964c update README and package.json 2015-10-28 22:04:55 +00:00
David Dias
9b2cb012e9 Release v0.3.3. 2015-09-15 17:18:08 +01:00
David Dias
35102b4ad5 Release v0.3.2. 2015-09-15 17:17:59 +01:00
David Dias
192c65f09a update readme 2015-09-15 17:17:50 +01:00
David Dias
dda0204ec0 merge package.json conflict 2015-09-15 17:16:09 +01:00
David Dias
1096d15a16 Rename 2015-09-15 17:14:48 +01:00
David Dias
615a966d6a Release v0.3.2. 2015-09-14 11:58:41 +01:00
David Dias
171a561537 to v4! 2015-09-14 11:58:33 +01:00
David Dias
fa62838777 Release v0.3.1. 2015-08-25 10:39:44 +01:00
David Dias
bb2f23633d replace precommit 2015-08-25 10:39:15 +01:00
David Dias
d472664924 add badges and travis 2015-08-25 10:38:32 +01:00
David Dias
2cc1a8ac59 Release v0.3.0. 2015-07-19 14:21:56 -07:00
13 changed files with 1148 additions and 113 deletions

22
.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,9 +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
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 +0,0 @@
node_modules

View File

@@ -1,10 +0,0 @@
{
"node": true,
"curly": true,
"latedef": true,
"quotmark": true,
"undef": true,
"unused": true,
"trailing": true
}

281
CHANGELOG.md Normal file
View File

@@ -0,0 +1,281 @@
<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)

234
README.md
View File

@@ -1,66 +1,214 @@
ipfs-peer-id Node.js implementation # peer-id
===================================
[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io)
[![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)
[![Build Status](https://travis-ci.org/libp2p/js-peer-id.svg?style=flat-square)](https://travis-ci.org/libp2p/js-peer-id)
[![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)
[![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)
![](https://img.shields.io/badge/npm-%3E%3D3.0.0-orange.svg?style=flat-square)
![](https://img.shields.io/badge/Node.js-%3E%3D6.0.0-orange.svg?style=flat-square)
> IPFS Peer Id implementation in Node.js > [IPFS](https://github.com/ipfs/ipfs) Peer ID implementation in JavaScript.
## Lead Maintainer
[Pedro Teixeira](https://github.com/pgte)
## Table of Contents
- [Description](#description)
- [Example](#example)
- [Installation](#installation)
- [npm](#npm)
- [Setup](#setup)
- [Node.js](#nodejs)
- [Browser: Browserify, Webpack, other bundlers](#browser-browserify-webpack-other-bundlers)
- [Browser: `<script>` Tag](#browser-script-tag)
- [API](#api)
- [Create](#create)
- [`new PeerId(id[, privKey, pubKey])`](#new-peeridid-privkey-pubkey)
- [`create([opts], callback)`](#createopts-callback)
- [Import](#import)
- [`createFromHexString(str)`](#createfromhexstringstr)
- [`createFromBytes(buf)`](#createfrombytesbuf)
- [`createFromB58String(str)`](#createfromb58stringstr)
- [`createFromPubKey(pubKey)`](#createfrompubkeypubkey)
- [`createFromPrivKey(privKey)`](#createfromprivkeyprivkey)
- [`createFromJSON(obj)`](#createfromjsonobj)
- [Export](#export)
- [`toHexString()`](#tohexstring)
- [`toBytes()`](#tobytes)
- [`toB58String()`](#tob58string)
- [`toJSON()`](#tojson)
- [`toPrint()`](#toprint)
- [License](#license)
# Description # Description
A IPFS Peer Id is based on a sha256 has of the peer public key, using [multihash](https://github.com/jbenet/multihash) Generate, import, and export PeerIDs, for use with [IPFS](https://github.com/ipfs/ipfs).
# Usage A Peer ID is the SHA-256 [multihash](https://github.com/multiformats/multihash) of a public key.
### Installing The public key is a base64 encoded string of a protobuf containing an RSA DER buffer. This uses a node buffer to pass the base64 encoded public key protobuf to the multihash for ID generation.
# Example
```JavaScript
const PeerId = require('peer-id')
PeerId.create({ bits: 1024 }, (err, id) => {
if (err) { throw err }
console.log(JSON.stringify(id.toJSON(), null, 2))
})
``` ```
$ npm install ipfs-peer-id ```bash
{
"id": "Qma9T5YraSnpRDZqRR4krcSJabThc8nwZuJV3LercPHufi",
"privKey": "CAAS4AQwggJcAgEAAoGBAMBgbIqyOL26oV3nGPBYrdpbv..",
"pubKey": "CAASogEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMBgbIqyOL26oV3nGPBYrdpbvzCY..."
}
``` ```
### Creating a new Id # Installation
``` ## npm
var PeerId = require('ipfs-peer')
// Create a new Id ```sh
var id = new Id.create() > npm i peer-id
// Recreate an Id from Hex string
var id = new Id.createFromHexString(str)
// Recreate an Id from a Buffer
var id = new Id.createFromBytes(buf)
// Recreate an B58 String
var id = new Id.createFromB58String(str)
// Recreate from a Public Key
var id = new Id.createFromPubKey(pubKey)
// Recreate from a Private Key
var id = new Id.createFromPrivKey(privKey)
``` ```
### Exporting an Id # Setup
``` ## Node.js
// Print friendly format
id.toPrint() // returns an object with id, privKey and pubKey in hex format
// Export to an hex string ```js
id.toHexString() const PeerId = require('peer-id')
// Export to Buffer
id.toBytes() (same as id.id)
// Export to a B58 string
id.toB58String()
``` ```
### Id format ## Browser: Browserify, Webpack, other bundlers
The code published to npm that gets loaded on require is in fact a ES5
transpiled version with the right shims added. This means that you can require
it and use with your favourite bundler without having to adjust asset management
process.
```js
const PeerId = require('peer-id')
```
## Browser: `<script>` Tag
Loading this module through a script tag will make the `PeerId` obj available in
the global namespace.
```html
<script src="https://unpkg.com/peer-id/dist/index.min.js"></script>
<!-- OR -->
<script src="https://unpkg.com/peer-id/dist/index.js"></script>
```
# API
```js
const PeerId = require('peer-id')
```
## Create
### `new PeerId(id[, privKey, pubKey])`
- `id: Buffer` - The multihash of the publick key as `Buffer`
- `privKey: RsaPrivateKey` - The private key
- `pubKey: RsaPublicKey` - The public key
The key format is detailed in [libp2p-crypto](https://github.com/libp2p/js-libp2p-crypto).
### `create([opts], callback)`
Generates a new Peer ID, complete with public/private keypair.
- `opts: Object`: Default: `{bits: 2048}`
- `callback: Function`
Calls back `callback` with `err, id`.
## Import
### `createFromHexString(str)`
Creates a Peer ID from hex string representing the key's multihash.
### `createFromBytes(buf)`
Creates a Peer ID from a buffer representing the key's multihash.
### `createFromB58String(str)`
Creates a Peer ID from a Base58 string representing the key's multihash.
### `createFromPubKey(pubKey)`
- `publicKey: Buffer`
Creates a Peer ID from a buffer containing a public key.
### `createFromPrivKey(privKey)`
- `privKey: Buffer`
Creates a Peer ID from a buffer containing a private key.
### `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`
## Export
### `toHexString()`
Returns the Peer ID's `id` as a hex string.
``` ```
id.pubKey // Buffer containing the Public Key 1220d6243998f2fc56343ad7ed0342ab7886a4eb18d736f1b67d44b37fcc81e0f39f
id.privKey // Buffer containing the Private Key
id.id // Buffer containing the multihash
``` ```
### `toBytes()`
Returns the Peer ID's `id` as a buffer.
```
<Buffer 12 20 d6 24 39 98 f2 fc 56 34 3a d7 ed 03 42 ab 78 86 a4 eb 18 d7 36 f1 b6 7d 44 b3 7f cc 81 e0 f3 9f>
```
### `toB58String()`
Returns the Peer ID's `id` as a base58 string.
```
QmckZzdVd72h9QUFuJJpQqhsZqGLwjhh81qSvZ9BhB2FQi
```
### `toJSON()`
Returns an `obj` of the form
- `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 'base 64'
### `toPrint()`
Returns the Peer ID as a printable string without the `Qm` prefix.
Example: `<peer.ID xxxxxx>`
### `isEqual(id)`
- `id` can be a PeerId or a Buffer containing the id
# License
MIT

2
ci/Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,2 @@
// Warning: This file is automatically synced from https://github.com/ipfs/ci-sync so if you want to change it, please change it there and ask someone to sync all repositories.
javascript()

View File

@@ -1,34 +1,71 @@
{ {
"name": "ipfs-peer-id", "name": "peer-id",
"version": "0.2.0", "version": "0.12.2",
"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",
"scripts": { "scripts": {
"test": "./node_modules/.bin/lab tests/*-test.js", "lint": "aegir lint",
"coverage": "./node_modules/.bin/lab -t 100 tests/*-test.js", "build": "aegir build",
"codestyle": "./node_modules/.bin/standard --format" "test": "aegir test",
"test:node": "aegir test -t node",
"test:browser": "aegir test -t browser -t webworker",
"release": "aegir release",
"release-minor": "aegir release --type minor",
"release-major": "aegir release --type major",
"coverage": "aegir coverage",
"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": [ "engines": {
"codestyle", "node": ">=10.0.0",
"test" "npm": ">=6.0.0"
],
"bugs": {
"url": "https://github.com/diasdavid/node-ipfs-peer-id/issues"
}, },
"homepage": "https://github.com/diasdavid/node-ipfs-peer-id", "bugs": {
"url": "https://github.com/libp2p/js-peer-id/issues"
},
"homepage": "https://github.com/libp2p/js-peer-id",
"devDependencies": { "devDependencies": {
"code": "^1.4.1", "aegir": "^18.0.2",
"lab": "^5.13.0", "bundlesize": "~0.17.0",
"precommit-hook": "^3.0.0", "chai": "^4.2.0",
"standard": "^4.5.2" "dirty-chai": "^2.0.1"
}, },
"dependencies": { "dependencies": {
"bs58": "^2.0.1", "async": "^2.6.1",
"multihashing": "^0.1.3" "class-is": "^1.1.0",
} "libp2p-crypto": "~0.16.0",
"multihashes": "~0.4.13"
},
"repository": {
"type": "git",
"url": "https://github.com/libp2p/js-peer-id.git"
},
"contributors": [
"David Dias <daviddias.p@gmail.com>",
"David Dias <mail@daviddias.me>",
"Friedel Ziegelmayer <dignifiedquire@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>",
"Richard Littauer <richard.littauer@gmail.com>",
"Richard Schneider <makaretu@gmail.com>",
"Stephen Whitmore <stephen.whitmore@gmail.com>",
"Vasco Santos <vasco.santos@moxy.studio>",
"Yahya <ya7yaz@gmail.com>",
"greenkeeperio-bot <support@greenkeeper.io>",
"nginnever <ginneversource@gmail.com>",
"npmcdn-to-unpkg-bot <npmcdn-to-unpkg-bot@users.noreply.github.com>",
"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ <victorbjelkholm@gmail.com>"
]
} }

13
src/bin.js Executable file
View File

@@ -0,0 +1,13 @@
#!/usr/local/bin/node
'use strict'
const PeerId = require('./index.js')
PeerId.create((err, id) => {
if (err) {
throw err
}
console.log(JSON.stringify(id.toJSON(), null, 2))
})

View File

@@ -2,77 +2,300 @@
* Id is an object representation of a peer Id. a peer Id is a multihash * Id is an object representation of a peer Id. a peer Id is a multihash
*/ */
var multihashing = require('multihashing') 'use strict'
var base58 = require('bs58')
var crypto = require('crypto')
exports = module.exports = Id const mh = require('multihashes')
const cryptoKeys = require('libp2p-crypto/src/keys')
const assert = require('assert')
const waterfall = require('async/waterfall')
const withIs = require('class-is')
function Id (id, privKey, pubKey) { class PeerId {
var self = this constructor (id, privKey, pubKey) {
assert(Buffer.isBuffer(id), 'invalid id provided')
if (!(self instanceof Id)) { if (privKey && pubKey) {
throw new Error('Id must be called with new') assert(privKey.public.bytes.equals(pubKey.bytes), 'inconsistent arguments')
}
this._id = id
this._idB58String = mh.toB58String(this.id)
this._privKey = privKey
this._pubKey = pubKey
} }
self.privKey = privKey get id () {
self.pubKey = pubKey return this._id
self.id = id // multihash - sha256 - buffer }
// pretty print set id (val) {
throw new Error('Id is immutable')
}
self.toPrint = function () { get privKey () {
return this._privKey
}
set privKey (privKey) {
this._privKey = privKey
}
get pubKey () {
if (this._pubKey) {
return this._pubKey
}
if (this._privKey) {
return this._privKey.public
}
}
set pubKey (pubKey) {
this._pubKey = pubKey
}
// Return the protobuf version of the public key, matching go ipfs formatting
marshalPubKey () {
if (this.pubKey) {
return cryptoKeys.marshalPublicKey(this.pubKey)
}
}
// Return the protobuf version of the private key, matching go ipfs formatting
marshalPrivKey () {
if (this.privKey) {
return cryptoKeys.marshalPrivateKey(this.privKey)
}
}
toPrint () {
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
// of go-ipfs for its config file
toJSON () {
return { return {
id: id.toHexString(), id: this.toB58String(),
privKey: privKey.toString('hex'), privKey: toB64Opt(this.marshalPrivKey()),
pubKey: pubKey.toString('hex') pubKey: toB64Opt(this.marshalPubKey())
} }
} }
// encode/decode functions // encode/decode functions
toHexString () {
self.toHexString = function () { return mh.toHexString(this.id)
return self.id.toString('hex')
} }
self.toBytes = function () { toBytes () {
return self.id return this.id
} }
self.toB58String = function () { toB58String () {
return base58.encode(self.id) return this._idB58String
} }
isEqual (id) {
if (Buffer.isBuffer(id)) {
return this.id.equals(id)
} else if (id.id) {
return this.id.equals(id.id)
} else {
throw new Error('not valid Id')
}
}
/*
* Check if this PeerId instance is valid (privKey -> pubKey -> Id)
*/
isValid (callback) {
// 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()
} else {
callback(new Error('Keys not match'))
}
}
} }
const PeerIdWithIs = withIs(PeerId, { className: 'PeerId', symbolName: '@libp2p/js-peer-id/PeerId' })
exports = module.exports = PeerIdWithIs
// generation // generation
exports.create = function (opts, callback) {
if (typeof opts === 'function') {
callback = opts
opts = {}
}
opts = opts || {}
opts.bits = opts.bits || 2048
exports.create = function () { waterfall([
var ecdh = crypto.createECDH('secp256k1') (cb) => cryptoKeys.generateKeyPair('RSA', opts.bits, cb),
ecdh.generateKeys() (privKey, cb) => privKey.public.hash((err, digest) => {
cb(err, digest, privKey)
})
], (err, digest, privKey) => {
if (err) {
return callback(err)
}
var mhId = multihashing(ecdh.getPublicKey(), 'sha2-256') callback(null, new PeerIdWithIs(digest, privKey))
})
return new Id(mhId, ecdh.getPrivateKey(), ecdh.getPublicKey())
} }
exports.createFromHexString = function (str) { exports.createFromHexString = function (str) {
return new Id(new Buffer(str), 'hex') return new PeerIdWithIs(mh.fromHexString(str))
} }
exports.createFromBytes = function (buf) { exports.createFromBytes = function (buf) {
return new Id(buf) return new PeerIdWithIs(buf)
} }
exports.createFromB58String = function (str) { exports.createFromB58String = function (str) {
return new Id(new Buffer(base58.decode(str))) return new PeerIdWithIs(mh.fromB58String(str))
} }
exports.createFromPubKey = function (pubKey) { // Public Key input will be a buffer
var mhId = multihashing(pubKey, 'sha2-256') exports.createFromPubKey = function (key, callback) {
return new Id(mhId, null, pubKey) 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')
pubKey = cryptoKeys.unmarshalPublicKey(buf)
} catch (err) {
return callback(err)
}
pubKey.hash((err, digest) => {
if (err) {
return callback(err)
}
callback(null, new PeerIdWithIs(digest, null, pubKey))
})
} }
exports.createFromPrivKey = function () { // Private key input will be a string
// TODO(daviddias) derive PubKey from priv exports.createFromPrivKey = function (key, callback) {
if (typeof callback !== 'function') {
throw new Error('callback is required')
}
let buf = key
try {
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)
}
waterfall([
(cb) => cryptoKeys.unmarshalPrivateKey(buf, cb),
(privKey, cb) => privKey.public.hash((err, digest) => {
cb(err, digest, privKey)
})
], (err, digest, privKey) => {
if (err) {
return callback(err)
}
callback(null, new PeerIdWithIs(digest, privKey, privKey.public))
})
}
exports.createFromJSON = function (obj, callback) {
if (typeof callback !== 'function') {
throw new Error('callback is required')
}
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 && cryptoKeys.unmarshalPublicKey(rawPubKey)
} catch (err) {
return callback(err)
}
if (rawPrivKey) {
waterfall([
(cb) => cryptoKeys.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))
}
}
exports.isPeerId = function (peerId) {
return Boolean(typeof peerId === 'object' &&
peerId._id &&
peerId._idB58String)
}
function toB64Opt (val) {
if (val) {
return val.toString('base64')
}
} }

6
test/fixtures/go-private-key.js vendored Normal file
View File

@@ -0,0 +1,6 @@
'use strict'
module.exports = {
id: 'QmRLoXS3E73psYaUsma1VSbboTa2J8Z9kso1tpiGLk9WQ4',
privKey: 'CAASpwkwggSjAgEAAoIBAQDWBEbO8kc6a5kEks09CKPQargY3p0DCmCczoCT52/RYFqxvH9dI+s+u4ZAvF9aLWOBvFomL7jHZODPxKDrbiNCmyEbViNgZYK+PNbwh0V3ZGbB27X3q8yZtLvYA8dhcNkz/2SHBarSoC4QLA5MXUuSWtVaYMY3MzMnzBF57Jc9Ase7NvHOIUI90M7aN5izP7hxPXpZ+shiN+TyjM8mFxYONG7ZSsY3IxUhtrU5MRzFX+tp1o/gb/aa51mHf7AL3N02j5ABiYbCK97Rbwr03hsBcwgMxoDPJmP3WZ+D5yyPcOIIF1Vd7+4/f7FQJnIw3xr9/jvaFbPyDCVbBOhr9oyxAgMBAAECggEALlrgx2Q8v0+c5hux7p1XdgYXd/OHyKfPw0cLHH4NfylCm6q7X34vLvhJHO5wLMUV/3y/ffPqLu4Pr5DkVfoWExAsvJIMuY1jIzdkStbR2glaJHUlVc7VUxmNcj1nSxi5QwT3TjORC2v8bi5Mroeqnbmk6p15cW1akC0oP+NZ4rG48+WFHRqsBaBusdSOVfA+IiZUqSd1ILysJ1w7aVN3EC7jLjDG43i+P/2BcEHy8TVClGOknJL341bHe3UPdEpmeu6k6aHGlDI4blUMXahCIUh0IdZuj+Vi/TxQME9+3bKIOjQb8RCNm3U3j/uz5gs9SyTjBuYIib9Scj/jDbLh0QKBgQDfLr3go3Q/AR0jb12QjGALJz1lc9ZRX2RQJkqqmYkZwOlHHyl+YJgqOZiO80fUkN0sJ29CmKecXU4gXuHir913Fdceei1ScBSsvZpWtBLhEZXKrRJYq8U0atKUFQADDMGutyB/uGCNeNwR6VcJezHPICvHxQfmWlWHA5VIOEtRPQKBgQD1fID76SkIpF/EaJMnN2alXWWnzKhUBUPGpQtbpwgSfaCBiZ4vr3NQwKBntOOB5QwHmifNZMoqaFQLzC4B/uyTNUcQMQQ6arYav7WQXqXTmW6poTsjUSuSOPx1swsHlYX09SmUwWDfd94XF9UOU0KUfA2/c85ixzNlV5ejkFA4hQKBgEvP3uQN4hD82d8Nl2TgqkdfnvV1cdnWY4buWvK0kOPUqelk5n1tZoMBaZc1gLLuOpMjGiIvJNByyXUpheWxA7POEXLi4b5dIEjFZ0YIiVk21gEw5UiFoMl7d+ihcY2Xqbslrb507SdhZLAY6V3pITRQo06K2XIgQWlJiE4uATepAoGBALZ2vEiBnYZW5vfN4tKbUyhGq3B1pggNgbr8odyV4mIcDlk6OOGov0WeZ5ut0AyUesSLyFnaOIoc0ZuTP/8rxBwG1bMrO8FP39sx83pDX25P9PkQZixyALjGsp+pXOFeOhtAvo9azO5M4j638Bydtjc3neBX62dwOLtyx7tDYN0hAoGAVLmr3w7XMVHTfEuCSzKHyRrOaN2PAuSX31QAji1PwlwVKMylVrb8rRvBOpTicA/wXPX9Q5O/yjegqhqLT/LXAm9ziFzy5b9/9SzXPukKebXXbvc0FOmcsrcxtijlPyUzf9fKM1ShiwqqsgM9eNyZ9GWUJw2GFATCWW7pl7rtnWk='
}

7
test/fixtures/sample-id.js vendored Normal file
View File

@@ -0,0 +1,7 @@
'use strict'
module.exports = {
id: '122019318b6e5e0cf93a2314bf01269a2cc23cd3dcd452d742cdb9379d8646f6e4a9',
privKey: 'CAASpgkwggSiAgEAAoIBAQC2SKo/HMFZeBml1AF3XijzrxrfQXdJzjePBZAbdxqKR1Mc6juRHXij6HXYPjlAk01BhF1S3Ll4Lwi0cAHhggf457sMg55UWyeGKeUv0ucgvCpBwlR5cQ020i0MgzjPWOLWq1rtvSbNcAi2ZEVn6+Q2EcHo3wUvWRtLeKz+DZSZfw2PEDC+DGPJPl7f8g7zl56YymmmzH9liZLNrzg/qidokUv5u1pdGrcpLuPNeTODk0cqKB+OUbuKj9GShYECCEjaybJDl9276oalL9ghBtSeEv20kugatTvYy590wFlJkkvyl+nPxIH0EEYMKK9XRWlu9XYnoSfboiwcv8M3SlsjAgMBAAECggEAZtju/bcKvKFPz0mkHiaJcpycy9STKphorpCT83srBVQi59CdFU6Mj+aL/xt0kCPMVigJw8P3/YCEJ9J+rS8BsoWE+xWUEsJvtXoT7vzPHaAtM3ci1HZd302Mz1+GgS8Epdx+7F5p80XAFLDUnELzOzKftvWGZmWfSeDnslwVONkL/1VAzwKy7Ce6hk4SxRE7l2NE2OklSHOzCGU1f78ZzVYKSnS5Ag9YrGjOAmTOXDbKNKN/qIorAQ1bovzGoCwx3iGIatQKFOxyVCyO1PsJYT7JO+kZbhBWRRE+L7l+ppPER9bdLFxs1t5CrKc078h+wuUr05S1P1JjXk68pk3+kQKBgQDeK8AR11373Mzib6uzpjGzgNRMzdYNuExWjxyxAzz53NAR7zrPHvXvfIqjDScLJ4NcRO2TddhXAfZoOPVH5k4PJHKLBPKuXZpWlookCAyENY7+Pd55S8r+a+MusrMagYNljb5WbVTgN8cgdpim9lbbIFlpN6SZaVjLQL3J8TWH6wKBgQDSChzItkqWX11CNstJ9zJyUE20I7LrpyBJNgG1gtvz3ZMUQCn3PxxHtQzN9n1P0mSSYs+jBKPuoSyYLt1wwe10/lpgL4rkKWU3/m1Myt0tveJ9WcqHh6tzcAbb/fXpUFT/o4SWDimWkPkuCb+8j//2yiXk0a/T2f36zKMuZvujqQKBgC6B7BAQDG2H2B/ijofp12ejJU36nL98gAZyqOfpLJ+FeMz4TlBDQ+phIMhnHXA5UkdDapQ+zA3SrFk+6yGk9Vw4Hf46B+82SvOrSbmnMa+PYqKYIvUzR4gg34rL/7AhwnbEyD5hXq4dHwMNsIDq+l2elPjwm/U9V0gdAl2+r50HAoGALtsKqMvhv8HucAMBPrLikhXP/8um8mMKFMrzfqZ+otxfHzlhI0L08Bo3jQrb0Z7ByNY6M8epOmbCKADsbWcVre/AAY0ZkuSZK/CaOXNX/AhMKmKJh8qAOPRY02LIJRBCpfS4czEdnfUhYV/TYiFNnKRj57PPYZdTzUsxa/yVTmECgYBr7slQEjb5Onn5mZnGDh+72BxLNdgwBkhO0OCdpdISqk0F0Pxby22DFOKXZEpiyI9XYP1C8wPiJsShGm2yEwBPWXnrrZNWczaVuCbXHrZkWQogBDG3HGXNdU4MAWCyiYlyinIBpPpoAJZSzpGLmWbMWh28+RJS6AQX6KHrK1o2uw==',
pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2SKo/HMFZeBml1AF3XijzrxrfQXdJzjePBZAbdxqKR1Mc6juRHXij6HXYPjlAk01BhF1S3Ll4Lwi0cAHhggf457sMg55UWyeGKeUv0ucgvCpBwlR5cQ020i0MgzjPWOLWq1rtvSbNcAi2ZEVn6+Q2EcHo3wUvWRtLeKz+DZSZfw2PEDC+DGPJPl7f8g7zl56YymmmzH9liZLNrzg/qidokUv5u1pdGrcpLuPNeTODk0cqKB+OUbuKj9GShYECCEjaybJDl9276oalL9ghBtSeEv20kugatTvYy590wFlJkkvyl+nPxIH0EEYMKK9XRWlu9XYnoSfboiwcv8M3SlsjAgMBAAE='
}

311
test/peer-id.spec.js Normal file
View File

@@ -0,0 +1,311 @@
/* eslint max-nested-callbacks: ["error", 8] */
/* eslint-env mocha */
'use strict'
const chai = require('chai')
const dirtyChai = require('dirty-chai')
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')
const util = require('util')
const testId = require('./fixtures/sample-id')
const testIdHex = testId.id
const testIdBytes = mh.fromHexString(testId.id)
const testIdB58String = mh.toB58String(testIdBytes)
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', () => {
it('create an id without \'new\'', () => {
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('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('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('recreate an Id from Hex string', () => {
const id = PeerId.createFromHexString(testIdHex)
expect(testIdBytes).to.deep.equal(id.id)
})
it('Recreate an Id from a Buffer', () => {
const id = PeerId.createFromBytes(testIdBytes)
expect(testId.id).to.equal(id.toHexString())
})
it('Recreate a B58 String', () => {
const id = 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 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('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('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('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('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('<peer.ID ' + id1.toB58String().substr(2, 6) + '>')
done()
})
})
})
it('toBytes', () => {
const id = 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()
})
})
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('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('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('set privKey (valid)', (done) => {
PeerId.create(testOpts, (err, peerId) => {
expect(err).to.not.exist()
peerId.privKey = peerId._privKey
peerId.isValid(done)
})
})
it('set pubKey (valid)', (done) => {
PeerId.create(testOpts, (err, peerId) => {
expect(err).to.not.exist()
peerId.pubKey = peerId._pubKey
peerId.isValid(done)
})
})
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 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()
})
})
})
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']
garbage.forEach(garbage => {
fncs.forEach(fnc => {
it(fnc + '(' + util.inspect(garbage) + ')', cb => {
PeerId[fnc](garbage, (err, res) => {
expect(err).to.exist()
expect(res).to.not.exist()
cb()
})
})
})
})
})
describe('throws on inconsistent data', () => {
let k1
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()
})
})
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 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('invalid id', () => {
expect(() => new PeerId('hello world')).to.throw(/invalid id/)
})
})
})

View File