mirror of
https://github.com/fluencelabs/js-peer-id
synced 2025-07-05 10:31:56 +00:00
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
4575a1589a | |||
1beebb65c1 | |||
3dbd9a718d |
@ -7,19 +7,19 @@ matrix:
|
|||||||
env: CXX=g++-4.8
|
env: CXX=g++-4.8
|
||||||
- node_js: 6
|
- node_js: 6
|
||||||
env:
|
env:
|
||||||
|
- SAUCE=true
|
||||||
- CXX=g++-4.8
|
- CXX=g++-4.8
|
||||||
- node_js: stable
|
- node_js: stable
|
||||||
env: CXX=g++-4.8
|
env: CXX=g++-4.8
|
||||||
|
|
||||||
# Make sure we have new NPM.
|
# Make sure we have new NPM.
|
||||||
before_install:
|
before_install:
|
||||||
- npm install -g npm@4
|
- npm install -g npm
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- npm run lint
|
- npm run lint
|
||||||
- npm test
|
- npm test
|
||||||
- npm run coverage
|
- npm run coverage
|
||||||
- make test
|
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- export DISPLAY=:99.0
|
- export DISPLAY=:99.0
|
||||||
@ -29,7 +29,7 @@ after_success:
|
|||||||
- npm run coverage-publish
|
- npm run coverage-publish
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
firefox: 'latest'
|
firefox: latest
|
||||||
apt:
|
apt:
|
||||||
sources:
|
sources:
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
25
README.md
25
README.md
@ -9,6 +9,8 @@
|
|||||||

|

|
||||||

|

|
||||||
|
|
||||||
|
[](https://saucelabs.com/u/ipfs-js-peer-id)
|
||||||
|
|
||||||
> [IPFS](https://github.com/ipfs/ipfs) Peer ID implementation in JavaScript.
|
> [IPFS](https://github.com/ipfs/ipfs) Peer ID implementation in JavaScript.
|
||||||
|
|
||||||
- [Description](#description)
|
- [Description](#description)
|
||||||
@ -42,21 +44,25 @@
|
|||||||
|
|
||||||
Generate, import, and export PeerIDs, for use with [IPFS](https://github.com/ipfs/ipfs).
|
Generate, import, and export PeerIDs, for use with [IPFS](https://github.com/ipfs/ipfs).
|
||||||
|
|
||||||
A Peer ID is the SHA-256 [multihash](https://github.com/multiformats/multihash) of a public key.
|
*A Peer ID is the SHA-256 [multihash](https://github.com/multiformats/multihash) of a
|
||||||
|
public key.*
|
||||||
|
|
||||||
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.
|
*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
|
# Example
|
||||||
|
|
||||||
```JavaScript
|
```js
|
||||||
const PeerId = require('peer-id')
|
var PeerId = require('peer-id')
|
||||||
|
var bs58 = require('bs58')
|
||||||
|
|
||||||
PeerId.create({ bits: 1024 }, (err, id) => {
|
PeerId.create({ bits: 1024 }, (err, id) => {
|
||||||
if (err) { throw err }
|
|
||||||
console.log(JSON.stringify(id.toJSON(), null, 2))
|
console.log(JSON.stringify(id.toJSON(), null, 2))
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
```bash
|
|
||||||
|
```
|
||||||
{
|
{
|
||||||
"id": "Qma9T5YraSnpRDZqRR4krcSJabThc8nwZuJV3LercPHufi",
|
"id": "Qma9T5YraSnpRDZqRR4krcSJabThc8nwZuJV3LercPHufi",
|
||||||
"privKey": "CAAS4AQwggJcAgEAAoGBAMBgbIqyOL26oV3nGPBYrdpbv..",
|
"privKey": "CAAS4AQwggJcAgEAAoGBAMBgbIqyOL26oV3nGPBYrdpbv..",
|
||||||
@ -77,7 +83,7 @@ PeerId.create({ bits: 1024 }, (err, id) => {
|
|||||||
## Node.js
|
## Node.js
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const PeerId = require('peer-id')
|
var PeerId = require('peer-id')
|
||||||
```
|
```
|
||||||
|
|
||||||
## Browser: Browserify, Webpack, other bundlers
|
## Browser: Browserify, Webpack, other bundlers
|
||||||
@ -88,7 +94,7 @@ it and use with your favourite bundler without having to adjust asset management
|
|||||||
process.
|
process.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const PeerId = require('peer-id')
|
var PeerId = require('peer-id')
|
||||||
```
|
```
|
||||||
|
|
||||||
## Browser: `<script>` Tag
|
## Browser: `<script>` Tag
|
||||||
@ -197,9 +203,6 @@ Returns an `obj` of the form
|
|||||||
|
|
||||||
Alias for `.toJSON()`.
|
Alias for `.toJSON()`.
|
||||||
|
|
||||||
### `isEqual(id)`
|
|
||||||
|
|
||||||
- `id` can be a PeerId or a Buffer containing the id
|
|
||||||
|
|
||||||
# License
|
# License
|
||||||
|
|
||||||
|
@ -5,10 +5,8 @@ machine:
|
|||||||
dependencies:
|
dependencies:
|
||||||
pre:
|
pre:
|
||||||
- google-chrome --version
|
- google-chrome --version
|
||||||
- curl -L -o google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
|
- wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
|
||||||
- sudo dpkg -i google-chrome.deb || true
|
- sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
|
||||||
- sudo apt-get update
|
- sudo apt-get update
|
||||||
- sudo apt-get install -f
|
- sudo apt-get --only-upgrade install google-chrome-stable
|
||||||
- sudo apt-get install --only-upgrade lsb-base
|
|
||||||
- sudo dpkg -i google-chrome.deb
|
|
||||||
- google-chrome --version
|
- google-chrome --version
|
||||||
|
17
package.json
17
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "peer-id",
|
"name": "peer-id",
|
||||||
"version": "0.8.8",
|
"version": "0.8.3",
|
||||||
"description": "IPFS Peer Id implementation in Node.js",
|
"description": "IPFS Peer Id implementation in Node.js",
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"bin": "src/bin.js",
|
"bin": "src/bin.js",
|
||||||
@ -34,16 +34,15 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/libp2p/js-peer-id",
|
"homepage": "https://github.com/libp2p/js-peer-id",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"aegir": "^11.0.2",
|
"aegir": "^11.0.0",
|
||||||
"chai": "^4.1.0",
|
"chai": "^3.5.0",
|
||||||
"dirty-chai": "^2.0.1",
|
"dirty-chai": "^1.2.2",
|
||||||
"pre-commit": "^1.2.2"
|
"pre-commit": "^1.2.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"async": "^2.5.0",
|
"libp2p-crypto": "~0.8.6",
|
||||||
"libp2p-crypto": "~0.8.8",
|
"multihashes": "~0.4.4",
|
||||||
"lodash": "^4.17.4",
|
"async": "^2.1.5"
|
||||||
"multihashes": "~0.4.5"
|
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -53,10 +52,10 @@
|
|||||||
"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>",
|
||||||
|
"Greenkeeper <support@greenkeeper.io>",
|
||||||
"Prashanth Chandra <coolshanth94@gmail.com>",
|
"Prashanth Chandra <coolshanth94@gmail.com>",
|
||||||
"Richard Littauer <richard.littauer@gmail.com>",
|
"Richard Littauer <richard.littauer@gmail.com>",
|
||||||
"Stephen Whitmore <stephen.whitmore@gmail.com>",
|
"Stephen Whitmore <stephen.whitmore@gmail.com>",
|
||||||
"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>"
|
||||||
]
|
]
|
||||||
|
60
src/index.js
60
src/index.js
@ -35,32 +35,26 @@ class PeerId {
|
|||||||
return this._privKey
|
return this._privKey
|
||||||
}
|
}
|
||||||
|
|
||||||
set privKey (privKey) {
|
|
||||||
this._privKey = privKey
|
|
||||||
}
|
|
||||||
|
|
||||||
get pubKey () {
|
get pubKey () {
|
||||||
if (this._pubKey) {
|
if (this._pubKey) {
|
||||||
return this._pubKey
|
return this._pubKey
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._privKey) {
|
if (this.privKey) {
|
||||||
return this._privKey.public
|
return this.privKey.public
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set pubKey (pubKey) {
|
// Return the protobuf version of the public key,
|
||||||
this._pubKey = pubKey
|
// 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 crypto.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 crypto.marshalPrivateKey(this.privKey)
|
||||||
@ -94,35 +88,10 @@ class PeerId {
|
|||||||
toB58String () {
|
toB58String () {
|
||||||
return this._idB58String
|
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'))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exports = module.exports = PeerId
|
exports = module.exports = PeerId
|
||||||
|
exports.Buffer = Buffer
|
||||||
|
|
||||||
// generation
|
// generation
|
||||||
exports.create = function (opts, callback) {
|
exports.create = function (opts, callback) {
|
||||||
@ -161,17 +130,16 @@ exports.createFromB58String = function (str) {
|
|||||||
|
|
||||||
// Public Key input will be a buffer
|
// Public Key input will be a buffer
|
||||||
exports.createFromPubKey = function (key, callback) {
|
exports.createFromPubKey = function (key, callback) {
|
||||||
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 = new Buffer(key, 'base64')
|
||||||
}
|
}
|
||||||
|
|
||||||
const pubKey = crypto.unmarshalPublicKey(buf)
|
if (typeof callback !== 'function') {
|
||||||
|
throw new Error('callback is required')
|
||||||
|
}
|
||||||
|
|
||||||
|
const pubKey = crypto.unmarshalPublicKey(buf)
|
||||||
pubKey.hash((err, digest) => {
|
pubKey.hash((err, digest) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err)
|
return callback(err)
|
||||||
@ -251,12 +219,6 @@ exports.createFromJSON = function (obj, callback) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.isPeerId = function (peerId) {
|
|
||||||
return Boolean(typeof peerId === 'object' &&
|
|
||||||
peerId._id &&
|
|
||||||
peerId._idB58String)
|
|
||||||
}
|
|
||||||
|
|
||||||
function toB64Opt (val) {
|
function toB64Opt (val) {
|
||||||
if (val) {
|
if (val) {
|
||||||
return val.toString('base64')
|
return val.toString('base64')
|
||||||
|
@ -32,16 +32,6 @@ describe('PeerId', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it('isPeerId', (done) => {
|
|
||||||
PeerId.create((err, id) => {
|
|
||||||
expect(err).to.not.exist()
|
|
||||||
expect(PeerId.isPeerId(id)).to.equal(true)
|
|
||||||
expect(PeerId.isPeerId('aaa')).to.equal(false)
|
|
||||||
expect(PeerId.isPeerId(new Buffer('batatas'))).to.equal(false)
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('throws on changing the id', (done) => {
|
it('throws on changing the id', (done) => {
|
||||||
PeerId.create((err, id) => {
|
PeerId.create((err, id) => {
|
||||||
expect(err).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
@ -129,20 +119,6 @@ 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) => {
|
|
||||||
parallel([
|
|
||||||
(cb) => PeerId.create(cb),
|
|
||||||
(cb) => PeerId.create(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', () => {
|
describe('fromJSON', () => {
|
||||||
it('full node', (done) => {
|
it('full node', (done) => {
|
||||||
PeerId.create({ bits: 1024 }, (err, id) => {
|
PeerId.create({ bits: 1024 }, (err, id) => {
|
||||||
@ -197,56 +173,17 @@ describe('PeerId', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it('set privKey (valid)', (done) => {
|
|
||||||
PeerId.create((err, peerId) => {
|
|
||||||
expect(err).to.not.exist()
|
|
||||||
peerId.privKey = peerId._privKey
|
|
||||||
peerId.isValid(done)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('set pubKey (valid)', (done) => {
|
|
||||||
PeerId.create((err, peerId) => {
|
|
||||||
expect(err).to.not.exist()
|
|
||||||
peerId.pubKey = peerId._pubKey
|
|
||||||
peerId.isValid(done)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('set privKey (invalid)', (done) => {
|
|
||||||
PeerId.create((err, peerId) => {
|
|
||||||
expect(err).to.not.exist()
|
|
||||||
peerId.privKey = new Buffer('bufff')
|
|
||||||
peerId.isValid((err) => {
|
|
||||||
expect(err).to.exist()
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('set pubKey (invalid)', (done) => {
|
|
||||||
PeerId.create((err, peerId) => {
|
|
||||||
expect(err).to.not.exist()
|
|
||||||
peerId.pubKey = new Buffer('buffff')
|
|
||||||
peerId.isValid((err) => {
|
|
||||||
expect(err).to.exist()
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('throws on inconsistent data', () => {
|
describe('throws on inconsistent data', () => {
|
||||||
let k1
|
let k1, k2, k3
|
||||||
let k2
|
|
||||||
let k3
|
|
||||||
|
|
||||||
before((done) => {
|
before((done) => {
|
||||||
parallel([
|
parallel([
|
||||||
(cb) => crypto.generateKeyPair('RSA', 1024, cb),
|
(cb) => crypto.generateKeyPair('RSA', 1024, cb),
|
||||||
(cb) => crypto.generateKeyPair('RSA', 1024, cb),
|
(cb) => crypto.generateKeyPair('RSA', 1024, cb),
|
||||||
(cb) => crypto.generateKeyPair('RSA', 1024, cb)
|
(cb) => crypto.generateKeyPair('RSA', 1024, cb)
|
||||||
], (err, keys) => {
|
], (err, keys) => {
|
||||||
expect(err).to.not.exist()
|
if (err) {
|
||||||
|
return done(err)
|
||||||
|
}
|
||||||
|
|
||||||
k1 = keys[0]
|
k1 = keys[0]
|
||||||
k2 = keys[1]
|
k2 = keys[1]
|
||||||
@ -258,8 +195,11 @@ describe('PeerId', () => {
|
|||||||
it('missmatch private - public key', (done) => {
|
it('missmatch private - public key', (done) => {
|
||||||
k1.public.hash((err, digest) => {
|
k1.public.hash((err, digest) => {
|
||||||
expect(err).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
expect(() => new PeerId(digest, k1, k2.public))
|
expect(
|
||||||
.to.throw(/inconsistent arguments/)
|
() => new PeerId(digest, k1, k2.public)
|
||||||
|
).to.throw(
|
||||||
|
/inconsistent arguments/
|
||||||
|
)
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -267,8 +207,11 @@ describe('PeerId', () => {
|
|||||||
it('missmatch id - private - public key', (done) => {
|
it('missmatch id - private - public key', (done) => {
|
||||||
k1.public.hash((err, digest) => {
|
k1.public.hash((err, digest) => {
|
||||||
expect(err).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
expect(() => new PeerId(digest, k1, k3.public))
|
expect(
|
||||||
.to.throw(/inconsistent arguments/)
|
() => new PeerId(digest, k1, k3.public)
|
||||||
|
).to.throw(
|
||||||
|
/inconsistent arguments/
|
||||||
|
)
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
})
|
})
|
Reference in New Issue
Block a user