Compare commits

..

3 Commits

Author SHA1 Message Date
4575a1589a chore: release version v0.8.3 2017-03-16 17:06:56 +00:00
1beebb65c1 chore: update contributors 2017-03-16 17:06:55 +00:00
3dbd9a718d chore: update aegir and fix lint 2017-03-16 17:06:13 +00:00
6 changed files with 53 additions and 148 deletions

View File

@ -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

View File

@ -9,6 +9,8 @@
![](https://img.shields.io/badge/npm-%3E%3D3.0.0-orange.svg?style=flat-square) ![](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) ![](https://img.shields.io/badge/Node.js-%3E%3D4.0.0-orange.svg?style=flat-square)
[![Sauce Test Status](https://saucelabs.com/browser-matrix/ipfs-js-peer-id.svg)](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

View File

@ -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

View File

@ -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>"
] ]

View File

@ -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')

View File

@ -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()
}) })
}) })