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
==============================
=================================
[![](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
# 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
```bash
$ npm install --save peer-id
> npm install --save peer-id
```
```javascript
var PeerId = require('peer-id')
const PeerId = require('peer-id')
```
### 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:
```JavaScript
var PeerId = window.PeerId
const PeerId = window.PeerId
```
#### Gotchas
@ -42,25 +46,25 @@ You will need to use Node.js `Buffer` API compatible, if you are running inside
### Creating a new Id
```
var PeerId = require('ipfs-peer')
const PeerId = require('ipfs-peer')
// Create a new Id
var id = PeerId.create()
const id = PeerId.create()
// Recreate an Id from Hex string
var id = PeerId.createFromHexString(str)
const id = PeerId.createFromHexString(str)
// Recreate an Id from a Buffer
var id = PeerId.createFromBytes(buf)
const id = PeerId.createFromBytes(buf)
// Recreate an B58 String
var id = PeerId.createFromB58String(str)
const id = PeerId.createFromB58String(str)
// Recreate from a Public Key
var id = PeerId.createFromPubKey(pubKey)
const id = PeerId.createFromPubKey(pubKey)
// Recreate from a Private Key
var id = PeerId.createFromPrivKey(privKey)
const id = PeerId.createFromPrivKey(privKey)
```
### 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) {
var path = require('path')
var node_modules_dir = path.join(__dirname, 'node_modules')
var deps = [
module.exports = (config) => {
const path = require('path')
const node_modules_dir = path.join(__dirname, 'node_modules')
const deps = [
'deps/forge.bundle.js'
]
config.set({
@ -19,7 +19,7 @@ module.exports = function (config) {
webpack: {
resolve: {
extensions: ['', '.js', '.json'],
alias: { 'node-forge': __dirname + '/deps/forge.bundle.js' }
alias: { 'node-forge': path.resolve(__dirname, 'deps/forge.bundle.js') }
},
externals: {
fs: '{}'
@ -50,8 +50,8 @@ module.exports = function (config) {
singleRun: true
})
deps.forEach(function (dep) {
var depPath = path.resolve(node_modules_dir, dep)
deps.forEach((dep) => {
const depPath = path.resolve(node_modules_dir, dep)
config.webpack.module.noParse.push(depPath)
})
}

View File

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

View File

@ -2,24 +2,25 @@
* Id is an object representation of a peer Id. a peer Id is a multihash
*/
var fs = require('fs')
var multihashing = require('multihashing')
var base58 = require('bs58')
var forge = require('node-forge')
var protobuf = require('protocol-buffers')
const fs = require('fs')
const multihashing = require('multihashing')
const base58 = require('bs58')
const forge = require('node-forge')
const protobuf = require('protocol-buffers')
const path = require('path')
var isNode = !global.window
const isNode = !global.window
// protobuf read from file
var messages = isNode ? protobuf(fs.readFileSync(__dirname + '/../pb/crypto.proto'))
: protobuf(require('buffer!./../pb/crypto.proto'))
const messages = isNode ? protobuf(fs.readFileSync(path.resolve(__dirname, 'pb/crypto.proto')))
: protobuf(require('buffer!./pb/crypto.proto'))
exports = module.exports = Id
exports.Buffer = Buffer
function Id (id, privKey, pubKey) {
var self = this
const self = this
if (!(self instanceof Id)) {
throw new Error('Id must be called with new')
@ -56,8 +57,7 @@ function Id (id, privKey, pubKey) {
// unwrap the private key protobuf
function unmarshal (key) {
var dpb = messages.PrivateKey.decode(key)
return dpb
return messages.PrivateKey.decode(key)
}
// 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
function formatKey (key, type) {
// 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
var fDerBuf = forge.util.createBuffer(der.data, 'binary')
const fDerBuf = forge.util.createBuffer(der.data, 'binary')
// 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
var marshalKey = marshal(nDerBuf, type)
const marshalKey = marshal(nDerBuf, type)
// encode the protobuf public key to base64 string
var b64 = marshalKey.toString('base64')
const b64 = marshalKey.toString('base64')
return b64
}
// generation
exports.create = function () {
// 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
var asnPub = forge.pki.publicKeyToAsn1(pair.publicKey)
var asnPriv = forge.pki.privateKeyToAsn1(pair.privateKey)
const asnPub = forge.pki.publicKeyToAsn1(pair.publicKey)
const asnPriv = forge.pki.privateKeyToAsn1(pair.privateKey)
// format the keys to protobuf base64 encoded string
var protoPublic64 = formatKey(asnPub, 'Public')
var protoPrivate64 = formatKey(asnPriv, 'Private')
const protoPublic64 = formatKey(asnPub, 'Public')
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)
}
@ -130,35 +130,35 @@ exports.createFromB58String = function (str) {
}
exports.createFromPubKey = function (pubKey) {
var buf = new Buffer(pubKey, 'base64')
var mhId = multihashing(buf, 'sha2-256')
const buf = new Buffer(pubKey, 'base64')
const mhId = multihashing(buf, 'sha2-256')
return new Id(mhId, null, pubKey)
}
exports.createFromPrivKey = function (privKey) {
// 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
var mpk = unmarshal(buf)
const mpk = unmarshal(buf)
// 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
var asnPriv = forge.asn1.fromDer(fbuf)
const asnPriv = forge.asn1.fromDer(fbuf)
// 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
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
var asnPub = forge.pki.publicKeyToAsn1(publicKey)
const asnPub = forge.pki.publicKeyToAsn1(publicKey)
// format the public key
var protoPublic64 = formatKey(asnPub, 'Public')
var mhId = multihashing(new Buffer(protoPublic64, 'base64'), 'sha2-256')
const protoPublic64 = formatKey(asnPub, 'Public')
const mhId = multihashing(new Buffer(protoPublic64, 'base64'), 'sha2-256')
return new Id(mhId, privKey, protoPublic64)
}

View File

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