mirror of
https://github.com/fluencelabs/js-peer-id
synced 2025-07-05 18:41:46 +00:00
Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
f62023f8a7 | |||
95367871ac | |||
352a6cfa17 | |||
727355c4f5 | |||
bd185f8081 | |||
d4c3de1ecb | |||
b692394116 | |||
a8e591525b | |||
6ad5d85f76 | |||
ca9cef6de7 | |||
f55eebcef7 |
@ -28,9 +28,13 @@ The public key is a base64 encoded string of a protobuf containing an RSA DER bu
|
|||||||
const PeerId = require('peer-id')
|
const PeerId = require('peer-id')
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### In the Browser through Webpack
|
||||||
|
|
||||||
|
Follow our [webpack config](/webpack.config.js) example.
|
||||||
|
|
||||||
### In the Browser through browserify
|
### In the Browser through browserify
|
||||||
|
|
||||||
TODO: Figure out how to get this working with browserify and webpack. Browserify can't bundle our replacement of ```fs.readFileSync``` with ```require('buffer!./file')```.
|
> **WIP** Doesn't work out yet
|
||||||
|
|
||||||
### In the Browser through `<script>` tag
|
### In the Browser through `<script>` tag
|
||||||
|
|
||||||
|
21635
dist/peer-id.js
vendored
21635
dist/peer-id.js
vendored
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "peer-id",
|
"name": "peer-id",
|
||||||
"version": "0.5.3",
|
"version": "0.6.1",
|
||||||
"description": "IPFS Peer Id implementation in Node.js",
|
"description": "IPFS Peer Id implementation in Node.js",
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@ -9,7 +9,7 @@
|
|||||||
"test:node": "mocha tests/test.js",
|
"test:node": "mocha tests/test.js",
|
||||||
"test:browser": "karma start karma.conf.js",
|
"test:browser": "karma start karma.conf.js",
|
||||||
"coverage": "istanbul cover --print both -- _mocha tests/test.js",
|
"coverage": "istanbul cover --print both -- _mocha tests/test.js",
|
||||||
"build": "webpack"
|
"dist": "webpack"
|
||||||
},
|
},
|
||||||
"standard": {
|
"standard": {
|
||||||
"ignore": [
|
"ignore": [
|
||||||
|
28
src/index.js
28
src/index.js
@ -12,8 +12,7 @@ const path = require('path')
|
|||||||
const isNode = !global.window
|
const isNode = !global.window
|
||||||
|
|
||||||
// protobuf read from file
|
// protobuf read from file
|
||||||
const messages = isNode ? protobuf(fs.readFileSync(path.resolve(__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
|
||||||
|
|
||||||
@ -31,7 +30,6 @@ function Id (id, privKey, pubKey) {
|
|||||||
self.id = id // multihash - sha256 - buffer
|
self.id = id // multihash - sha256 - buffer
|
||||||
|
|
||||||
// pretty print
|
// pretty print
|
||||||
|
|
||||||
self.toPrint = function () {
|
self.toPrint = function () {
|
||||||
return {
|
return {
|
||||||
id: self.toB58String(),
|
id: self.toB58String(),
|
||||||
@ -41,7 +39,6 @@ function Id (id, privKey, pubKey) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// encode/decode functions
|
// encode/decode functions
|
||||||
|
|
||||||
self.toHexString = function () {
|
self.toHexString = function () {
|
||||||
return self.id.toString('hex')
|
return self.id.toString('hex')
|
||||||
}
|
}
|
||||||
@ -100,9 +97,15 @@ function formatKey (key, type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// generation
|
// generation
|
||||||
exports.create = function () {
|
exports.create = function (opts) {
|
||||||
|
opts = opts || {}
|
||||||
|
opts.bits = opts.bits || 2048
|
||||||
|
|
||||||
// generate keys
|
// generate keys
|
||||||
const pair = forge.rsa.generateKeyPair({ bits: 2048, e: 0x10001 })
|
const pair = forge.rsa.generateKeyPair({
|
||||||
|
bits: opts.bits,
|
||||||
|
e: 0x10001
|
||||||
|
})
|
||||||
|
|
||||||
// return the RSA public/private key to asn1 object
|
// return the RSA public/private key to asn1 object
|
||||||
const asnPub = forge.pki.publicKeyToAsn1(pair.publicKey)
|
const asnPub = forge.pki.publicKeyToAsn1(pair.publicKey)
|
||||||
@ -112,9 +115,13 @@ exports.create = function () {
|
|||||||
const protoPublic64 = formatKey(asnPub, 'Public')
|
const protoPublic64 = formatKey(asnPub, 'Public')
|
||||||
const protoPrivate64 = formatKey(asnPriv, 'Private')
|
const protoPrivate64 = formatKey(asnPriv, 'Private')
|
||||||
|
|
||||||
|
// store the keys as a buffer
|
||||||
|
const bufProtoPub64 = new Buffer(protoPublic64, 'base64')
|
||||||
|
const bufProtoPriv64 = new Buffer(protoPrivate64, 'base64')
|
||||||
|
|
||||||
const 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, bufProtoPriv64, bufProtoPub64)
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.createFromHexString = function (str) {
|
exports.createFromHexString = function (str) {
|
||||||
@ -129,12 +136,14 @@ exports.createFromB58String = function (str) {
|
|||||||
return new Id(new Buffer(base58.decode(str)))
|
return new Id(new Buffer(base58.decode(str)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Public Key input will be a buffer
|
||||||
exports.createFromPubKey = function (pubKey) {
|
exports.createFromPubKey = function (pubKey) {
|
||||||
const buf = new Buffer(pubKey, 'base64')
|
const buf = new Buffer(pubKey, 'base64')
|
||||||
const mhId = multihashing(buf, 'sha2-256')
|
const mhId = multihashing(buf, 'sha2-256')
|
||||||
return new Id(mhId, null, pubKey)
|
return new Id(mhId, null, pubKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Private key input will be a string
|
||||||
exports.createFromPrivKey = function (privKey) {
|
exports.createFromPrivKey = function (privKey) {
|
||||||
// create a buffer from the base64 encoded string
|
// create a buffer from the base64 encoded string
|
||||||
const buf = new Buffer(privKey, 'base64')
|
const buf = new Buffer(privKey, 'base64')
|
||||||
@ -159,6 +168,9 @@ exports.createFromPrivKey = function (privKey) {
|
|||||||
|
|
||||||
// format the public key
|
// format the public key
|
||||||
const protoPublic64 = formatKey(asnPub, 'Public')
|
const protoPublic64 = formatKey(asnPub, 'Public')
|
||||||
|
|
||||||
|
// buffer the public key for consistency before storing
|
||||||
|
const bufProtoPub64 = new Buffer(protoPublic64, 'base64')
|
||||||
const 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, bufProtoPub64)
|
||||||
}
|
}
|
||||||
|
@ -55,5 +55,19 @@ describe('id', function (done) {
|
|||||||
expect(testIdB58String).to.equal(id.toB58String())
|
expect(testIdB58String).to.equal(id.toB58String())
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Compare generated ID with one created from PubKey', (done) => {
|
||||||
|
const id1 = PeerId.create()
|
||||||
|
const id2 = PeerId.createFromPubKey(id1.pubKey)
|
||||||
|
expect(id2.id).to.deep.equal(id1.id)
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Non-default # of bits', (done) => {
|
||||||
|
const shortId = PeerId.create({ bits: 128 })
|
||||||
|
const longId = PeerId.create({ bits: 256 })
|
||||||
|
expect(shortId.privKey.length).is.below(longId.privKey.length)
|
||||||
|
done()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user