Compare commits

...

14 Commits

Author SHA1 Message Date
7635cfcfda chore: release version v0.6.7 2016-05-23 15:32:57 +01:00
afbd96edda chore: update contributors 2016-05-23 15:32:57 +01:00
c1e18ee420 Merge pull request #24 from diasdavid/feat/marshal-unmarshal
Feat/marshal unmarshal
2016-05-23 15:31:38 +01:00
b358530dfb add toJSON and fromJSOn and cli to quickly generate 2016-05-23 15:25:30 +01:00
4afbedb525 update dependencies 2016-05-23 14:16:30 +01:00
e9b107fc55 Merge pull request #21 from diasdavid/aegir
refactor: use aegir
2016-04-15 14:13:57 +01:00
855a97956d refactor: use aegir 2016-04-15 13:20:05 +02:00
dee54d3dcc Merge pull request #20 from noffle/circle
circle-ci config
2016-04-14 00:01:25 +01:00
167b726dad Merge pull request #19 from noffle/readme-formatting
fixes README formatting
2016-04-14 00:01:05 +01:00
3b9f8af2e7 circle-ci config 2016-04-13 10:11:39 -07:00
771b994d7e fixes README formatting 2016-04-13 10:00:26 -07:00
524fc37877 chore: release version v0.6.6 2016-04-12 22:14:58 +01:00
3c55473a45 Merge pull request #18 from diasdavid/fix-jsnext
fix jsnext:main
2016-04-12 22:13:03 +01:00
8771627ce4 fix it 2016-04-12 22:06:12 +01:00
7 changed files with 105 additions and 47 deletions

View File

@ -1,11 +1,17 @@
sudo: false
language: node_js
node_js:
- 4
- 5
# Make sure we have new NPM.
before_install:
- npm i -g npm
# Workaround for a permissions issue with Travis virtual machine images
- npm install -g npm
script:
- npm run lint
- npm test
- npm run coverage
addons:
firefox: 'latest'
@ -14,6 +20,5 @@ before_script:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
script:
- npm run lint
- npm test
after_success:
- npm run coverage-publish

View File

@ -3,7 +3,7 @@
[![](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)
[![Build Status](https://travis-ci.org/diasdavid/js-peer-id.svg?style=flat-square)](https://travis-ci.org/diasdavid/js-peer-id)
![](https://img.shields.io/badge/coverage-100%25-brightgreen.svg?style=flat-square)
[![Coverage Status](https://coveralls.io/repos/github/diasdavid/js-peer-id/badge.svg?branch=master)](https://coveralls.io/github/diasdavid/js-peer-id?branch=master)
[![Dependency Status](https://david-dm.org/diasdavid/js-peer-id.svg?style=flat-square)](https://david-dm.org/diasdavid/js-peer-id)
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard)
@ -132,15 +132,16 @@ Returns an object with the ID's properties in hex format:
Returns the Peer ID's `id` as a hex string.
```js
1220d6243998f2fc56343ad7ed0342ab7886a4eb18d736f1b67d44b37fcc81e0f39f```
```
1220d6243998f2fc56343ad7ed0342ab7886a4eb18d736f1b67d44b37fcc81e0f39f
```
### id.toBytes()
Returns the Peer ID's `id` as a buffer.
```js
```
<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>
```
@ -148,7 +149,7 @@ Returns the Peer ID's `id` as a buffer.
Returns the Peer ID's `id` as a base58 string.
```js
```
QmckZzdVd72h9QUFuJJpQqhsZqGLwjhh81qSvZ9BhB2FQi
```

12
circle.yml Normal file
View File

@ -0,0 +1,12 @@
machine:
node:
version: stable
dependencies:
pre:
- google-chrome --version
- wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
- 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 --only-upgrade install google-chrome-stable
- google-chrome --version

View File

@ -1,17 +1,19 @@
{
"name": "peer-id",
"version": "0.6.5",
"version": "0.6.7",
"description": "IPFS Peer Id implementation in Node.js",
"main": "lib/index.js",
"jsnext": "src/index.js",
"bin": "src/bin.js",
"jsnext:main": "src/index.js",
"scripts": {
"lint": "dignified-lint",
"build": "dignified-build",
"test": "dignified-test",
"test:node": "dignified-test node",
"test:browser": "dignified-test browser",
"release": "dignified-release",
"coverage": "dignified-coverage"
"lint": "aegir-lint",
"build": "aegir-build",
"test": "aegir-test",
"test:node": "aegir-test node",
"test:browser": "aegir-test browser",
"release": "aegir-release",
"coverage": "aegir-coverage",
"coverage-publish": "aegir-coverage publish"
},
"keywords": [
"IPFS"
@ -30,11 +32,10 @@
},
"homepage": "https://github.com/diasdavid/js-peer-id",
"devDependencies": {
"aegir": "^3.0.4",
"buffer-loader": "0.0.1",
"chai": "^3.5.0",
"dignified.js": "^1.0.0",
"istanbul": "^0.4.2",
"pre-commit": "^1.1.1"
"pre-commit": "^1.1.2"
},
"dependencies": {
"bs58": "^3.0.0",
@ -46,7 +47,7 @@
"type": "git",
"url": "https://github.com/diasdavid/js-peer-id.git"
},
"dignified": {
"aegir": {
"webpack": {
"resolve": {
"alias": {
@ -54,5 +55,12 @@
}
}
}
}
}
},
"contributors": [
"David Dias <daviddias.p@gmail.com>",
"David Dias <mail@daviddias.me>",
"Stephen Whitmore <stephen.whitmore@gmail.com>",
"dignifiedquire <dignifiedquire@gmail.com>",
"nginnever <ginneversource@gmail.com>"
]
}

7
src/bin.js Executable file
View File

@ -0,0 +1,7 @@
#!/usr/local/bin/node
'use strict'
const PeerId = require('./index.js')
console.log(JSON.stringify(PeerId.create().toJSON(), null, ' '))

View File

@ -1,6 +1,7 @@
/*
* Id is an object representation of a peer Id. a peer Id is a multihash
*/
'use strict'
const fs = require('fs')
@ -10,17 +11,16 @@ const forge = require('node-forge')
const protobuf = require('protocol-buffers')
const path = require('path')
// protobuf read from file
const messages = protobuf(fs.readFileSync(path.resolve(__dirname, '../protos/crypto.proto')))
const pbCrypto = protobuf(fs.readFileSync(path.resolve(__dirname, '../protos/crypto.proto')))
exports = module.exports = Id
exports = module.exports = PeerId
exports.Buffer = Buffer
function Id (id, privKey, pubKey) {
function PeerId (id, privKey, pubKey) {
const self = this
if (!(self instanceof Id)) {
if (!(self instanceof PeerId)) {
throw new Error('Id must be called with new')
}
@ -37,6 +37,14 @@ function Id (id, privKey, pubKey) {
}
}
self.toJSON = function () {
return {
id: self.id.toString('hex'),
privKey: self.privKey.toString('hex'),
pubKey: self.pubKey.toString('hex')
}
}
// encode/decode functions
self.toHexString = function () {
return self.id.toString('hex')
@ -52,23 +60,25 @@ function Id (id, privKey, pubKey) {
}
// unwrap the private key protobuf
function unmarshal (key) {
return messages.PrivateKey.decode(key)
function keyUnmarshal (key) {
return pbCrypto.PrivateKey.decode(key)
}
// create a public key protobuf to be base64 string stored in config
function marshal (data, type) {
var epb
function keyMarshal (data, type) {
const RSA = 0
let epb
if (type === 'Public') {
epb = messages.PublicKey.encode({
Type: 0,
epb = pbCrypto.PublicKey.encode({
Type: RSA,
Data: data
})
}
if (type === 'Private') {
epb = messages.PrivateKey.encode({
Type: 0,
epb = pbCrypto.PrivateKey.encode({
Type: RSA,
Data: data
})
}
@ -88,10 +98,10 @@ function formatKey (key, type) {
const nDerBuf = new Buffer(fDerBuf.getBytes(), 'binary')
// protobuf the new DER bytes to the PublicKey Data: field
const marshalKey = marshal(nDerBuf, type)
const marsheledKey = keyMarshal(nDerBuf, type)
// encode the protobuf public key to base64 string
const b64 = marshalKey.toString('base64')
const b64 = marsheledKey.toString('base64')
return b64
}
@ -120,26 +130,26 @@ exports.create = function (opts) {
const mhId = multihashing(new Buffer(protoPublic64, 'base64'), 'sha2-256')
return new Id(mhId, bufProtoPriv64, bufProtoPub64)
return new PeerId(mhId, bufProtoPriv64, bufProtoPub64)
}
exports.createFromHexString = function (str) {
return new Id(new Buffer(str, 'hex'))
return new PeerId(new Buffer(str, 'hex'))
}
exports.createFromBytes = function (buf) {
return new Id(buf)
return new PeerId(buf)
}
exports.createFromB58String = function (str) {
return new Id(new Buffer(base58.decode(str)))
return new PeerId(new Buffer(base58.decode(str)))
}
// Public Key input will be a buffer
exports.createFromPubKey = function (pubKey) {
const buf = new Buffer(pubKey, 'base64')
const mhId = multihashing(buf, 'sha2-256')
return new Id(mhId, null, pubKey)
return new PeerId(mhId, null, pubKey)
}
// Private key input will be a string
@ -148,7 +158,7 @@ exports.createFromPrivKey = function (privKey) {
const buf = new Buffer(privKey, 'base64')
// get the private key data from the protobuf
const mpk = unmarshal(buf)
const mpk = keyUnmarshal(buf)
// create a forge buffer
const fbuf = forge.util.createBuffer(mpk.Data.toString('binary'))
@ -171,5 +181,12 @@ exports.createFromPrivKey = function (privKey) {
// buffer the public key for consistency before storing
const bufProtoPub64 = new Buffer(protoPublic64, 'base64')
const mhId = multihashing(new Buffer(protoPublic64, 'base64'), 'sha2-256')
return new Id(mhId, privKey, bufProtoPub64)
return new PeerId(mhId, privKey, bufProtoPub64)
}
exports.createFromJSON = function (obj) {
return new PeerId(
new Buffer(obj.id, 'hex'),
new Buffer(obj.privKey, 'hex'),
new Buffer(obj.pubKey, 'hex'))
}

View File

@ -93,4 +93,12 @@ describe('id', function (done) {
expect(id.toBytes().toString('hex')).to.equal(testIdBytes.toString('hex'))
done()
})
it('toJSON', (done) => {
const id = PeerId.create()
expect(id.toB58String()).to.equal(PeerId.createFromJSON(id.toJSON()).toB58String())
expect(id.privKey).to.deep.equal(PeerId.createFromJSON(id.toJSON()).privKey)
expect(id.pubKey).to.deep.equal(PeerId.createFromJSON(id.toJSON()).pubKey)
done()
})
})