came to fix a square bracket, ended up touch a bunch of other things :)

This commit is contained in:
David Dias 2016-03-03 17:31:33 +00:00
parent 1cdbf19857
commit 59b89039b6
8 changed files with 70 additions and 24302 deletions

View File

@ -1,7 +1,11 @@
peer-id JavaScript implementation peer-id JavaScript implementation
============================== =================================
[![](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-95%25-yellow.svg?style=flat-square) [![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) [![](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-95%25-yellow.svg?style=flat-square)
[![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)
> IPFS Peer Id implementation in JavaScript > IPFS Peer Id implementation in JavaScript
# Description # Description
@ -16,11 +20,11 @@ The public key is a base64 encoded string of a protobuf containing an RSA DER bu
### In Node.js through npm ### In Node.js through npm
```bash ```bash
$ npm install --save peer-id > npm install --save peer-id
``` ```
```javascript ```javascript
var PeerId = require('peer-id') const PeerId = require('peer-id')
``` ```
### In the Browser through browserify ### In the Browser through browserify
@ -32,7 +36,7 @@ Same as in Node.js, you just have to [browserify](https://github.com/substack/no
Make the [peer-id.min.js](/dist/peer-id.min.js) available through your server and load it using a normal `<script>` tag, this will export the `peerId` constructor on the `window` object, such that: Make the [peer-id.min.js](/dist/peer-id.min.js) available through your server and load it using a normal `<script>` tag, this will export the `peerId` constructor on the `window` object, such that:
```JavaScript ```JavaScript
var PeerId = window.PeerId const PeerId = window.PeerId
``` ```
#### Gotchas #### Gotchas
@ -42,25 +46,25 @@ You will need to use Node.js `Buffer` API compatible, if you are running inside
### Creating a new Id ### Creating a new Id
``` ```
var PeerId = require('ipfs-peer') const PeerId = require('ipfs-peer')
// Create a new Id // Create a new Id
var id = PeerId.create() const id = PeerId.create()
// Recreate an Id from Hex string // Recreate an Id from Hex string
var id = PeerId.createFromHexString(str) const id = PeerId.createFromHexString(str)
// Recreate an Id from a Buffer // Recreate an Id from a Buffer
var id = PeerId.createFromBytes(buf) const id = PeerId.createFromBytes(buf)
// Recreate an B58 String // Recreate an B58 String
var id = PeerId.createFromB58String(str) const id = PeerId.createFromB58String(str)
// Recreate from a Public Key // Recreate from a Public Key
var id = PeerId.createFromPubKey(pubKey) const id = PeerId.createFromPubKey(pubKey)
// Recreate from a Private Key // Recreate from a Private Key
var id = PeerId.createFromPrivKey(privKey) const id = PeerId.createFromPrivKey(privKey)
``` ```
### Exporting an Id ### Exporting an Id

24225
dist/peer-id.js vendored

File diff suppressed because it is too large Load Diff

11
dist/peer-id.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
module.exports = function (config) { module.exports = (config) => {
var path = require('path') const path = require('path')
var node_modules_dir = path.join(__dirname, 'node_modules') const node_modules_dir = path.join(__dirname, 'node_modules')
var deps = [ const deps = [
'deps/forge.bundle.js' 'deps/forge.bundle.js'
] ]
config.set({ config.set({
@ -19,7 +19,7 @@ module.exports = function (config) {
webpack: { webpack: {
resolve: { resolve: {
extensions: ['', '.js', '.json'], extensions: ['', '.js', '.json'],
alias: { 'node-forge': __dirname + '/deps/forge.bundle.js' } alias: { 'node-forge': path.resolve(__dirname, 'deps/forge.bundle.js') }
}, },
externals: { externals: {
fs: '{}' fs: '{}'
@ -50,8 +50,8 @@ module.exports = function (config) {
singleRun: true singleRun: true
}) })
deps.forEach(function (dep) { deps.forEach((dep) => {
var depPath = path.resolve(node_modules_dir, dep) const depPath = path.resolve(node_modules_dir, dep)
config.webpack.module.noParse.push(depPath) config.webpack.module.noParse.push(depPath)
}) })
} }

View File

@ -26,7 +26,7 @@
] ]
}, },
"engines": { "engines": {
"node": "^4.2.0" "node": "^4.3.0"
}, },
"bugs": { "bugs": {
"url": "https://github.com/diasdavid/js-peer-id/issues" "url": "https://github.com/diasdavid/js-peer-id/issues"
@ -46,7 +46,7 @@
"karma-webpack": "^1.7.0", "karma-webpack": "^1.7.0",
"mocha": "^2.4.5", "mocha": "^2.4.5",
"pre-commit": "^1.1.1", "pre-commit": "^1.1.1",
"standard": "^5.3.1", "standard": "^6.0.7",
"webpack": "^1.12.13" "webpack": "^1.12.13"
}, },
"dependencies": { "dependencies": {

View File

@ -2,24 +2,25 @@
* 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 fs = require('fs') const fs = require('fs')
var multihashing = require('multihashing') const multihashing = require('multihashing')
var base58 = require('bs58') const base58 = require('bs58')
var forge = require('node-forge') const forge = require('node-forge')
var protobuf = require('protocol-buffers') const protobuf = require('protocol-buffers')
const path = require('path')
var isNode = !global.window const isNode = !global.window
// protobuf read from file // protobuf read from file
var messages = isNode ? protobuf(fs.readFileSync(__dirname + '/../pb/crypto.proto')) const messages = isNode ? protobuf(fs.readFileSync(path.resolve(__dirname, 'pb/crypto.proto')))
: protobuf(require('buffer!./../pb/crypto.proto')) : protobuf(require('buffer!./pb/crypto.proto'))
exports = module.exports = Id exports = module.exports = Id
exports.Buffer = Buffer exports.Buffer = Buffer
function Id (id, privKey, pubKey) { function Id (id, privKey, pubKey) {
var self = this const self = this
if (!(self instanceof Id)) { if (!(self instanceof Id)) {
throw new Error('Id must be called with new') throw new Error('Id must be called with new')
@ -56,8 +57,7 @@ function Id (id, privKey, pubKey) {
// unwrap the private key protobuf // unwrap the private key protobuf
function unmarshal (key) { function unmarshal (key) {
var dpb = messages.PrivateKey.decode(key) return messages.PrivateKey.decode(key)
return dpb
} }
// create a public key protobuf to be base64 string stored in config // create a public key protobuf to be base64 string stored in config
@ -83,36 +83,36 @@ function marshal (data, type) {
// this returns a base64 encoded protobuf of the public key // this returns a base64 encoded protobuf of the public key
function formatKey (key, type) { function formatKey (key, type) {
// create der buffer of public key asn.1 object // create der buffer of public key asn.1 object
var der = forge.asn1.toDer(key) const der = forge.asn1.toDer(key)
// create forge buffer of der public key buffer // create forge buffer of der public key buffer
var fDerBuf = forge.util.createBuffer(der.data, 'binary') const fDerBuf = forge.util.createBuffer(der.data, 'binary')
// convert forge buffer to node buffer public key // convert forge buffer to node buffer public key
var nDerBuf = new Buffer(fDerBuf.getBytes(), 'binary') const nDerBuf = new Buffer(fDerBuf.getBytes(), 'binary')
// protobuf the new DER bytes to the PublicKey Data: field // protobuf the new DER bytes to the PublicKey Data: field
var marshalKey = marshal(nDerBuf, type) const marshalKey = marshal(nDerBuf, type)
// encode the protobuf public key to base64 string // encode the protobuf public key to base64 string
var b64 = marshalKey.toString('base64') const b64 = marshalKey.toString('base64')
return b64 return b64
} }
// generation // generation
exports.create = function () { exports.create = function () {
// generate keys // generate keys
var pair = forge.rsa.generateKeyPair({ bits: 2048, e: 0x10001 }) const pair = forge.rsa.generateKeyPair({ bits: 2048, e: 0x10001 })
// return the RSA public/private key to asn1 object // return the RSA public/private key to asn1 object
var asnPub = forge.pki.publicKeyToAsn1(pair.publicKey) const asnPub = forge.pki.publicKeyToAsn1(pair.publicKey)
var asnPriv = forge.pki.privateKeyToAsn1(pair.privateKey) const asnPriv = forge.pki.privateKeyToAsn1(pair.privateKey)
// format the keys to protobuf base64 encoded string // format the keys to protobuf base64 encoded string
var protoPublic64 = formatKey(asnPub, 'Public') const protoPublic64 = formatKey(asnPub, 'Public')
var protoPrivate64 = formatKey(asnPriv, 'Private') const protoPrivate64 = formatKey(asnPriv, 'Private')
var mhId = multihashing(new Buffer(protoPublic64, 'base64'), 'sha2-256') const mhId = multihashing(new Buffer(protoPublic64, 'base64'), 'sha2-256')
return new Id(mhId, protoPrivate64, protoPublic64) return new Id(mhId, protoPrivate64, protoPublic64)
} }
@ -130,35 +130,35 @@ exports.createFromB58String = function (str) {
} }
exports.createFromPubKey = function (pubKey) { exports.createFromPubKey = function (pubKey) {
var buf = new Buffer(pubKey, 'base64') const buf = new Buffer(pubKey, 'base64')
var mhId = multihashing(buf, 'sha2-256') const mhId = multihashing(buf, 'sha2-256')
return new Id(mhId, null, pubKey) return new Id(mhId, null, pubKey)
} }
exports.createFromPrivKey = function (privKey) { exports.createFromPrivKey = function (privKey) {
// create a buffer from the base64 encoded string // create a buffer from the base64 encoded string
var buf = new Buffer(privKey, 'base64') const buf = new Buffer(privKey, 'base64')
// get the private key data from the protobuf // get the private key data from the protobuf
var mpk = unmarshal(buf) const mpk = unmarshal(buf)
// create a forge buffer // create a forge buffer
var fbuf = forge.util.createBuffer(mpk.Data.toString('binary')) const fbuf = forge.util.createBuffer(mpk.Data.toString('binary'))
// create an asn1 object from the private key bytes saved in the protobuf Data: field // create an asn1 object from the private key bytes saved in the protobuf Data: field
var asnPriv = forge.asn1.fromDer(fbuf) const asnPriv = forge.asn1.fromDer(fbuf)
// get the RSA privatekey data from the asn1 object // get the RSA privatekey data from the asn1 object
var privateKey = forge.pki.privateKeyFromAsn1(asnPriv) const privateKey = forge.pki.privateKeyFromAsn1(asnPriv)
// set the RSA public key to the modulus and exponent of the private key // set the RSA public key to the modulus and exponent of the private key
var publicKey = forge.pki.rsa.setPublicKey(privateKey.n, privateKey.e) const publicKey = forge.pki.rsa.setPublicKey(privateKey.n, privateKey.e)
// return the RSA public key to asn1 object // return the RSA public key to asn1 object
var asnPub = forge.pki.publicKeyToAsn1(publicKey) const asnPub = forge.pki.publicKeyToAsn1(publicKey)
// format the public key // format the public key
var protoPublic64 = formatKey(asnPub, 'Public') const protoPublic64 = formatKey(asnPub, 'Public')
var mhId = multihashing(new Buffer(protoPublic64, 'base64'), 'sha2-256') const mhId = multihashing(new Buffer(protoPublic64, 'base64'), 'sha2-256')
return new Id(mhId, privKey, protoPublic64) return new Id(mhId, privKey, protoPublic64)
} }

View File

@ -20,38 +20,38 @@ const testIdB58String = 'QmQ2zigjQikYnyYUSXZydNXrDRhBut2mubwJBaLXobMt3A'
describe('id', function (done) { describe('id', function (done) {
this.timeout(30000) this.timeout(30000)
it('create a new id', done => { it('create a new id', (done) => {
var id = PeerId.create() const id = PeerId.create()
expect(id.toB58String().length).to.equal(46) expect(id.toB58String().length).to.equal(46)
done() done()
}) })
it('recreate an Id from Hex string', done => { it('recreate an Id from Hex string', (done) => {
var id = PeerId.createFromHexString(testIdHex) const id = PeerId.createFromHexString(testIdHex)
expect(testIdBytes).to.deep.equal(id.id) expect(testIdBytes).to.deep.equal(id.id)
done() done()
}) })
it('Recreate an Id from a Buffer', done => { it('Recreate an Id from a Buffer', (done) => {
var id = PeerId.createFromBytes(testIdBytes) const id = PeerId.createFromBytes(testIdBytes)
expect(testId.id).to.equal(id.toHexString()) expect(testId.id).to.equal(id.toHexString())
done() done()
}) })
it('Recreate a B58 String', done => { it('Recreate a B58 String', (done) => {
var id = PeerId.createFromB58String(testIdB58String) const id = PeerId.createFromB58String(testIdB58String)
expect(testIdB58String).to.equal(id.toB58String()) expect(testIdB58String).to.equal(id.toB58String())
done() done()
}) })
it('Recreate from a Public Key', done => { it('Recreate from a Public Key', (done) => {
var id = PeerId.createFromPubKey(testId.pubKey) const id = PeerId.createFromPubKey(testId.pubKey)
expect(testIdB58String).to.equal(id.toB58String()) expect(testIdB58String).to.equal(id.toB58String())
done() done()
}) })
it('Recreate from a Private Key', done => { it('Recreate from a Private Key', (done) => {
var id = PeerId.createFromPrivKey(testId.privKey) const id = PeerId.createFromPrivKey(testId.privKey)
expect(testIdB58String).to.equal(id.toB58String()) expect(testIdB58String).to.equal(id.toB58String())
done() done()
}) })