Compare commits

...

69 Commits

Author SHA1 Message Date
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
bbf6bae073 chore: release version v0.6.5 2016-04-12 21:28:27 +01:00
e45a9f4083 Merge pull request #17 from diasdavid/jsnext-add
jsnext add
2016-04-12 21:24:11 +01:00
13f98c8913 jsnext add 2016-04-12 21:09:41 +01:00
f374ab4411 chore: release version v0.6.4 2016-04-12 17:31:47 +01:00
2f4cdd3725 Merge pull request #16 from noffle/docs-and-examples
readme <3
2016-04-12 17:28:37 +01:00
d2f90ff447 Merge pull request #15 from noffle/coverage
100% coverage
2016-04-12 17:27:29 +01:00
f2a75f1188 100% coverage badge 2016-04-12 09:07:59 -07:00
dab90bd3b6 other bundlers 2016-04-12 09:04:02 -07:00
e9fdc0a27e applies readme love 2016-04-11 15:23:34 -07:00
f0a17a9bd9 100% coverage 2016-04-11 14:43:50 -07:00
57ab8406c0 chore: release version v0.6.3 2016-04-07 19:47:53 -04:00
f16c08e7fd update the readme 2016-04-07 19:45:21 -04:00
be5d4f9b41 chore: release version v0.6.2 2016-04-07 19:41:09 -04:00
35a3ccca3d update coverage script 2016-04-07 19:38:43 -04:00
989c3fb7a5 add .npmignore 2016-04-07 19:30:19 -04:00
bbe67df1c8 Merge pull request #12 from dignifiedquire/dignified
Use dignified.js
2016-04-07 19:27:13 -04:00
8849d90d6a Use dignified.js 1.0.0 2016-04-07 21:22:53 +02:00
2552871bcc Update travis 2016-03-22 17:03:51 +01:00
ab76788771 Use dignified.js 2016-03-22 17:01:46 +01:00
f62023f8a7 Release v0.6.1. 2016-03-15 23:28:07 +00:00
95367871ac Merge pull request #11 from noffle/bits
exposes opts + bits
2016-03-15 23:22:41 +00:00
352a6cfa17 tests # of bits 2016-03-15 12:15:44 -07:00
727355c4f5 exposes opts + bits 2016-03-14 17:10:02 -07:00
bd185f8081 Release v0.6.0. 2016-03-10 19:43:32 +00:00
d4c3de1ecb codestyle 2016-03-10 19:43:23 +00:00
b692394116 chore: dist 2016-03-10 19:40:52 +00:00
a8e591525b update readme 2016-03-10 19:36:47 +00:00
6ad5d85f76 Merge pull request #10 from nginnever/master
buffer the public key for consistency
2016-03-10 19:31:47 +00:00
ca9cef6de7 comparing buffers 2016-03-10 11:25:59 -08:00
f55eebcef7 buffer the public key for consistency 2016-03-10 10:32:48 -08:00
6442bb4b59 Release v0.5.3. 2016-03-05 21:56:53 +00:00
33ff2aa608 Merge pull request #8 from diasdavid/update/git-repo
add git repo and fix codestyle issues
2016-03-05 21:56:36 +00:00
bbeb6fc0f6 add git repo and fix codestyle issues 2016-03-05 21:54:18 +00:00
f518ced776 add git repo to the package.json 2016-03-05 21:49:26 +00:00
73b42ff2aa dist file 2016-03-03 14:19:10 -08:00
b3e3dbe3c0 Release v0.5.1. 2016-03-03 17:45:53 +00:00
b2b90bfbb5 remove jshintrc and jshintignore 2016-03-03 17:43:30 +00:00
d9113d55e0 Merge pull request #6 from diasdavid/cleanup
came to fix a square bracket, ended up touch a bunch of other things :)
2016-03-03 17:39:14 +00:00
59b89039b6 came to fix a square bracket, ended up touch a bunch of other things :) 2016-03-03 17:31:33 +00:00
1cdbf19857 Release v0.5.0. 2016-02-14 07:37:10 +00:00
845bd088fe add coverage, fix codestyle 2016-02-14 07:32:09 +00:00
1f72aaf7b7 Merge pull request #4 from nginnever/master
public key derivation from private key stored in go-ipfs config file
2016-02-14 07:24:06 +00:00
effa21b892 removed node forge bundle comment 2016-02-13 13:46:33 -08:00
91bc56eb05 small grammar changes 2016-02-13 07:49:51 -08:00
3cc3cb31f0 removed uneeded dev deps 2016-02-12 20:09:42 -08:00
de572bd15f Merge branch 'master' of https://github.com/nginnever/js-peer-id 2016-02-12 19:56:37 -08:00
1a336f9289 cleanup changes 2016-02-12 19:55:44 -08:00
77790571aa Delete id-test.js 2016-02-12 19:50:55 -08:00
d9b9ca8812 Delete crypto.proto 2016-02-12 19:45:50 -08:00
67c26ec546 travis addons 2016-02-12 16:38:29 -08:00
58fe038e07 time out increased 2016-02-12 16:13:09 -08:00
61c0c663d6 new timeout set 2016-02-12 16:06:40 -08:00
8adbdd0d6e Merge https://github.com/diasdavid/js-peer-id 2016-02-12 15:29:26 -08:00
7ae9be8f71 new tests 2016-02-12 14:55:05 -08:00
16c77433f9 getting ready to rewrite tests 2016-02-10 13:55:59 -08:00
6ce01ab434 keys now generated and derived match with go client 2016-02-04 12:02:18 -08:00
5cb511c646 added create id from private key 2016-02-04 12:01:58 -08:00
370e5c55b1 Release v0.4.0. 2015-11-05 18:51:53 +00:00
e3cc273a14 Merge pull request #3 from diasdavid/update
tests, browser tests, move to RSA based key (instead of ECDH), conform with go-ipfs
2015-11-05 18:51:21 +00:00
2c1874a689 merge latest master 2015-11-05 18:48:13 +00:00
3c0c9a3b19 tests and browser tests setup 2015-11-05 18:46:02 +00:00
d7ab4bd8fb complement readme 2015-11-05 17:47:44 +00:00
9aee5bf670 abandon ECD for RSA, in order to conform with go impl 2015-11-05 17:35:23 +00:00
5e9bf9837d Release v0.3.4. 2015-10-28 22:06:37 +00:00
f82d0d6ac5 Merge pull request #1 from diasdavid/rn
update README and package.json
2015-10-28 22:05:12 +00:00
0b30a0964c update README and package.json 2015-10-28 22:04:55 +00:00
12 changed files with 29989 additions and 95 deletions

3
.gitignore vendored
View File

@ -25,3 +25,6 @@ build/Release
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
lib
dist

View File

@ -1 +0,0 @@
node_modules

View File

@ -1,10 +0,0 @@
{
"node": true,
"curly": true,
"latedef": true,
"quotmark": true,
"undef": true,
"unused": true,
"trailing": true
}

28
.npmignore Normal file
View File

@ -0,0 +1,28 @@
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Optional npm cache directory
.npm
# Optional REPL history
.node_repl_history
test

View File

@ -1,13 +1,19 @@
language: node_js
node_js:
- "4.0"
branches:
only:
- master
- 4
- 5
before_install:
- npm i -g npm
# Workaround for a permissions issue with Travis virtual machine images
addons:
firefox: 'latest'
before_script:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
script:
- npm run lint
- npm test

183
README.md
View File

@ -1,66 +1,157 @@
peer-id Node.js implementation
==============================
# peer-id
[![](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/node-peer-id.svg?style=flat-square)](https://travis-ci.org/diasdavid/node-peer-id) ![](https://img.shields.io/badge/coverage-%3F-yellow.svg?style=flat-square) [![Dependency Status](https://david-dm.org/diasdavid/node-peer-id.svg?style=flat-square)](https://david-dm.org/diasdavid/node-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-100%25-brightgreen.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 Node.js
> [IPFS](https://github.com/ipfs/ipfs) Peer ID implementation in JavaScript.
# Description
A IPFS Peer Id is based on a sha256 has of the peer public key, using [multihash](https://github.com/jbenet/multihash)
Generate, import, and export PeerIDs, for use with [IPFS](https://github.com/ipfs/ipfs).
# Usage
*A Peer ID is the SHA-256 [multihash](https://github.com/jbenet/multihash) of a
public key.*
### Installing
*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.*
```
$ npm install peer-id
# Example
```js
var PeerId = require('peer-id')
var bs58 = require('bs58')
var id = PeerId.create({ bits: 32 })
console.log('id ', id.toB58String())
console.log('priv key ', bs58.encode(id.privKey))
console.log('pub key ', bs58.encode(id.pubKey))
```
### Creating a new Id
```
var PeerId = require('ipfs-peer')
// Create a new Id
var id = new PeerId.create()
// Recreate an Id from Hex string
var id = new PeerId.createFromHexString(str)
// Recreate an Id from a Buffer
var id = new PeerId.createFromBytes(buf)
// Recreate an B58 String
var id = new PeerId.createFromB58String(str)
// Recreate from a Public Key
var id = new PeerId.createFromPubKey(pubKey)
// Recreate from a Private Key
var id = new PeerId.createFromPrivKey(privKey)
id QmeeLFb92nkZJGj3gXLqXrEMzCMYs6uBgQLVNbrcXEvYXk
priv key 6ibrcPAbevzvPpkq6EA6XmLyuhmUrJrEvUfgQDtEiSEPzGnGU8Ejwf6b11DVm6opnFGo
pub key 2BeBZVKJ9RQs4i4LbGv4ReEeuBA5dck2Gje3wt67e44XuyyPq5jE
```
### Exporting an Id
# Installation
```
// Print friendly format
id.toPrint() // returns an object with id, privKey and pubKey in hex format
## npm
// Export to an hex string
id.toHexString()
// Export to Buffer
id.toBytes() (same as id.id)
// Export to a B58 string
id.toB58String()
```sh
> npm i peer-id
```
### Id format
# Setup
## Node.js
```JavaScript
var PeerId = require('peer-id')
```
id.pubKey // Buffer containing the Public Key
id.privKey // Buffer containing the Private Key
id.id // Buffer containing the multihash
## Browser: Browserify, Webpack, other bundlers
The code published to npm that gets loaded on require is in fact a ES5
transpiled version with the right shims added. This means that you can require
it and use with your favourite bundler without having to adjust asset management
process.
```JavaScript
var PeerId = require('peer-id')
```
## Browser: `<script>` Tag
Loading this module through a script tag will make the `PeerId` obj available in
the global namespace.
```html
<script src="https://npmcdn.com/peer-id/dist/index.min.js"></script>
<!-- OR -->
<script src="https://npmcdn.com/peer-id/dist/index.js"></script>
```
# API
```js
const PeerId = require('peer-id')
```
## Create
### PeerId.create()
Generates a new Peer ID, complete with public/private keypair. A Peer ID has the
following properties:
- `pubKey` - Buffer containing the public key bytes
- `privKey` - Buffer containing the private key bytes
- `id` - Buffer containing the multihash bytes
## Import
### PeerId.createFromHexString(str)
Creates a Peer ID from hex string representing the key's multihash.
### PeerId.createFromBytes(buf)
Creates a Peer ID from a buffer representing the key's multihash.
### PeerId.createFromB58String(str)
Creates a Peer ID from a Base58 string representing the key's multihash.
### PeerId.createFromPubKey(pubKey)
Creates a Peer ID from a buffer containing a public key.
### PeerId.createFromPrivKey(privKey)
Creates a Peer ID from a buffer containing a private key.
## Export
### id.toPrint()
Returns an object with the ID's properties in hex format:
```js
{
id: 'QmckZzdVd72h9QUFuJJpQqhsZqGLwjhh81qSvZ9BhB2FQi',
privKey: '080012a609308204a20201000282010100a608889914da08959d3a3db0734cee812c96...',
pubKey: '080012a60230820122300d06092a864886f70d01010105000382010f003082010a0282010...'
}
```
### id.toHexString()
Returns the Peer ID's `id` as a hex string.
```js
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>
```
### id.toB58String()
Returns the Peer ID's `id` as a base58 string.
```js
QmckZzdVd72h9QUFuJJpQqhsZqGLwjhh81qSvZ9BhB2FQi
```
# License
MIT

View File

@ -1,14 +1,17 @@
{
"name": "peer-id",
"version": "0.3.3",
"version": "0.6.6",
"description": "IPFS Peer Id implementation in Node.js",
"main": "src/index.js",
"main": "lib/index.js",
"jsnext:main": "src/index.js",
"scripts": {
"test": "./node_modules/.bin/lab tests/*-test.js",
"coverage": "./node_modules/.bin/lab -t 100 tests/*-test.js",
"codestyle": "./node_modules/.bin/standard --format",
"lint": "jshint .",
"validate": "npm ls"
"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"
},
"keywords": [
"IPFS"
@ -16,24 +19,40 @@
"author": "David Dias <daviddias@ipfs.io>",
"license": "MIT",
"pre-commit": [
"codestyle",
"lint",
"test"
],
"engines": {
"node": "^4.0.0"
"node": "^4.3.0"
},
"bugs": {
"url": "https://github.com/diasdavid/node-peer-id/issues"
"url": "https://github.com/diasdavid/js-peer-id/issues"
},
"homepage": "https://github.com/diasdavid/node-peer-id",
"homepage": "https://github.com/diasdavid/js-peer-id",
"devDependencies": {
"code": "^1.4.1",
"lab": "^5.13.0",
"pre-commit": "^1.1.1",
"standard": "^4.5.2"
"buffer-loader": "0.0.1",
"chai": "^3.5.0",
"dignified.js": "^1.0.0",
"istanbul": "^0.4.2",
"pre-commit": "^1.1.1"
},
"dependencies": {
"bs58": "^2.0.1",
"multihashing": "^0.1.3"
"bs58": "^3.0.0",
"multihashing": "^0.2.0",
"node-forge": "^0.6.38",
"protocol-buffers": "^3.1.4"
},
"repository": {
"type": "git",
"url": "https://github.com/diasdavid/js-peer-id.git"
},
"dignified": {
"webpack": {
"resolve": {
"alias": {
"node-forge": "../vendor/forge.bundle.js"
}
}
}
}
}

13
protos/crypto.proto Normal file
View File

@ -0,0 +1,13 @@
enum KeyType {
RSA = 0;
}
message PublicKey {
required KeyType Type = 1;
required bytes Data = 2;
}
message PrivateKey {
required KeyType Type = 1;
required bytes Data = 2;
}

View File

@ -1,15 +1,24 @@
/*
* Id is an object representation of a peer Id. a peer Id is a multihash
*/
'use strict'
var multihashing = require('multihashing')
var base58 = require('bs58')
var crypto = require('crypto')
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')
// protobuf read from file
const messages = protobuf(fs.readFileSync(path.resolve(__dirname, '../protos/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')
@ -20,17 +29,15 @@ function Id (id, privKey, pubKey) {
self.id = id // multihash - sha256 - buffer
// pretty print
self.toPrint = function () {
return {
id: id.toHexString(),
id: self.toB58String(),
privKey: privKey.toString('hex'),
pubKey: pubKey.toString('hex')
}
}
// encode/decode functions
self.toHexString = function () {
return self.id.toString('hex')
}
@ -42,22 +49,82 @@ function Id (id, privKey, pubKey) {
self.toB58String = function () {
return base58.encode(self.id)
}
}
// unwrap the private key protobuf
function unmarshal (key) {
return messages.PrivateKey.decode(key)
}
// create a public key protobuf to be base64 string stored in config
function marshal (data, type) {
var epb
if (type === 'Public') {
epb = messages.PublicKey.encode({
Type: 0,
Data: data
})
}
if (type === 'Private') {
epb = messages.PrivateKey.encode({
Type: 0,
Data: data
})
}
return epb
}
// this returns a base64 encoded protobuf of the public key
function formatKey (key, type) {
// create der buffer of public key asn.1 object
const der = forge.asn1.toDer(key)
// create forge buffer of der public key buffer
const fDerBuf = forge.util.createBuffer(der.data, 'binary')
// convert forge buffer to node buffer public key
const nDerBuf = new Buffer(fDerBuf.getBytes(), 'binary')
// protobuf the new DER bytes to the PublicKey Data: field
const marshalKey = marshal(nDerBuf, type)
// encode the protobuf public key to base64 string
const b64 = marshalKey.toString('base64')
return b64
}
// generation
exports.create = function (opts) {
opts = opts || {}
opts.bits = opts.bits || 2048
exports.create = function () {
var ecdh = crypto.createECDH('secp256k1')
ecdh.generateKeys()
// generate keys
const pair = forge.rsa.generateKeyPair({
bits: opts.bits,
e: 0x10001
})
var mhId = multihashing(ecdh.getPublicKey(), 'sha2-256')
// return the RSA public/private key to asn1 object
const asnPub = forge.pki.publicKeyToAsn1(pair.publicKey)
const asnPriv = forge.pki.privateKeyToAsn1(pair.privateKey)
return new Id(mhId, ecdh.getPrivateKey(), ecdh.getPublicKey())
// format the keys to protobuf base64 encoded string
const protoPublic64 = formatKey(asnPub, 'Public')
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')
return new Id(mhId, bufProtoPriv64, bufProtoPub64)
}
exports.createFromHexString = function (str) {
return new Id(new Buffer(str), 'hex')
return new Id(new Buffer(str, 'hex'))
}
exports.createFromBytes = function (buf) {
@ -68,11 +135,41 @@ exports.createFromB58String = function (str) {
return new Id(new Buffer(base58.decode(str)))
}
// Public Key input will be a buffer
exports.createFromPubKey = function (pubKey) {
var mhId = multihashing(pubKey, 'sha2-256')
const buf = new Buffer(pubKey, 'base64')
const mhId = multihashing(buf, 'sha2-256')
return new Id(mhId, null, pubKey)
}
exports.createFromPrivKey = function () {
// TODO(daviddias) derive PubKey from priv
// Private key input will be a string
exports.createFromPrivKey = function (privKey) {
// create a buffer from the base64 encoded string
const buf = new Buffer(privKey, 'base64')
// get the private key data from the protobuf
const mpk = unmarshal(buf)
// create a forge buffer
const fbuf = forge.util.createBuffer(mpk.Data.toString('binary'))
// create an asn1 object from the private key bytes saved in the protobuf Data: field
const asnPriv = forge.asn1.fromDer(fbuf)
// get the RSA privatekey data from the asn1 object
const privateKey = forge.pki.privateKeyFromAsn1(asnPriv)
// set the RSA public key to the modulus and exponent of the private key
const publicKey = forge.pki.rsa.setPublicKey(privateKey.n, privateKey.e)
// return the RSA public key to asn1 object
const asnPub = forge.pki.publicKeyToAsn1(publicKey)
// format the public key
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')
return new Id(mhId, privKey, bufProtoPub64)
}

96
test/index.spec.js Normal file
View File

@ -0,0 +1,96 @@
/* eslint-env mocha */
'use strict'
const expect = require('chai').expect
const PeerId = require('../src')
const testId = {
id: '1220151ab1658d8294ab34b71d5582cfe20d06414212f440a69366f1bc31deb5c72d',
privKey: 'CAASpgkwggSiAgEAAoIBAQC2SKo/HMFZeBml1AF3XijzrxrfQXdJzjePBZAbdxqKR1Mc6juRHXij6HXYPjlAk01BhF1S3Ll4Lwi0cAHhggf457sMg55UWyeGKeUv0ucgvCpBwlR5cQ020i0MgzjPWOLWq1rtvSbNcAi2ZEVn6+Q2EcHo3wUvWRtLeKz+DZSZfw2PEDC+DGPJPl7f8g7zl56YymmmzH9liZLNrzg/qidokUv5u1pdGrcpLuPNeTODk0cqKB+OUbuKj9GShYECCEjaybJDl9276oalL9ghBtSeEv20kugatTvYy590wFlJkkvyl+nPxIH0EEYMKK9XRWlu9XYnoSfboiwcv8M3SlsjAgMBAAECggEAZtju/bcKvKFPz0mkHiaJcpycy9STKphorpCT83srBVQi59CdFU6Mj+aL/xt0kCPMVigJw8P3/YCEJ9J+rS8BsoWE+xWUEsJvtXoT7vzPHaAtM3ci1HZd302Mz1+GgS8Epdx+7F5p80XAFLDUnELzOzKftvWGZmWfSeDnslwVONkL/1VAzwKy7Ce6hk4SxRE7l2NE2OklSHOzCGU1f78ZzVYKSnS5Ag9YrGjOAmTOXDbKNKN/qIorAQ1bovzGoCwx3iGIatQKFOxyVCyO1PsJYT7JO+kZbhBWRRE+L7l+ppPER9bdLFxs1t5CrKc078h+wuUr05S1P1JjXk68pk3+kQKBgQDeK8AR11373Mzib6uzpjGzgNRMzdYNuExWjxyxAzz53NAR7zrPHvXvfIqjDScLJ4NcRO2TddhXAfZoOPVH5k4PJHKLBPKuXZpWlookCAyENY7+Pd55S8r+a+MusrMagYNljb5WbVTgN8cgdpim9lbbIFlpN6SZaVjLQL3J8TWH6wKBgQDSChzItkqWX11CNstJ9zJyUE20I7LrpyBJNgG1gtvz3ZMUQCn3PxxHtQzN9n1P0mSSYs+jBKPuoSyYLt1wwe10/lpgL4rkKWU3/m1Myt0tveJ9WcqHh6tzcAbb/fXpUFT/o4SWDimWkPkuCb+8j//2yiXk0a/T2f36zKMuZvujqQKBgC6B7BAQDG2H2B/ijofp12ejJU36nL98gAZyqOfpLJ+FeMz4TlBDQ+phIMhnHXA5UkdDapQ+zA3SrFk+6yGk9Vw4Hf46B+82SvOrSbmnMa+PYqKYIvUzR4gg34rL/7AhwnbEyD5hXq4dHwMNsIDq+l2elPjwm/U9V0gdAl2+r50HAoGALtsKqMvhv8HucAMBPrLikhXP/8um8mMKFMrzfqZ+otxfHzlhI0L08Bo3jQrb0Z7ByNY6M8epOmbCKADsbWcVre/AAY0ZkuSZK/CaOXNX/AhMKmKJh8qAOPRY02LIJRBCpfS4czEdnfUhYV/TYiFNnKRj57PPYZdTzUsxa/yVTmECgYBr7slQEjb5Onn5mZnGDh+72BxLNdgwBkhO0OCdpdISqk0F0Pxby22DFOKXZEpiyI9XYP1C8wPiJsShGm2yEwBPWXnrrZNWczaVuCbXHrZkWQogBDG3HGXNdU4MAWCyiYlyinIBpPpoAJZSzpGLmWbMWh28+RJS6AQX6KHrK1o2uw==',
pubKey: 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2SKo/HMFZeBml1AF3XijzrxrfQXdJzjePBZAbdxqKR1Mc6juRHXij6HXYPjlAk01BhF1S3Ll4Lwi0cAHhggf457sMg55UWyeGKeUv0ucgvCpBwlR5cQ020i0MgzjPWOLWq1rtvSbNcAi2ZEVn6+Q2EcHo3wUvWRtLeKz+DZSZfw2PEDC+DGPJPl7f8g7zl56YymmmzH9liZLNrzg/qidokUv5u1pdGrcpLuPNeTODk0cqKB+OUbuKj9GShYECCEjaybJDl9276oalL9ghBtSeEv20kugatTvYy590wFlJkkvyl+nPxIH0EEYMKK9XRWlu9XYnoSfboiwcv8M3SlsjAgMBAAE='
}
const testIdHex = '1220151ab1658d8294ab34b71d5582cfe20d06414212f440a69366f1bc31deb5c72d'
const testIdBytes = new Buffer('1220151ab1658d8294ab34b71d5582cfe20d06414212f440a69366f1bc31deb5c72d', 'hex')
const testIdB58String = 'QmQ2zigjQikYnyYUSXZydNXrDRhBut2mubwJBaLXobMt3A'
describe('id', function (done) {
this.timeout(30000)
it('create an id without \'new\'', (done) => {
expect(PeerId).to.throw(Error)
done()
})
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) => {
const id = PeerId.createFromHexString(testIdHex)
expect(testIdBytes).to.deep.equal(id.id)
done()
})
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) => {
const id = PeerId.createFromB58String(testIdB58String)
expect(testIdB58String).to.equal(id.toB58String())
done()
})
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) => {
const id = PeerId.createFromPrivKey(testId.privKey)
expect(testIdB58String).to.equal(id.toB58String())
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()
})
it('Pretty printing', (done) => {
const id = PeerId.createFromPrivKey(testId.privKey)
var out = id.toPrint()
var expected = {
id: 'QmQ2zigjQikYnyYUSXZydNXrDRhBut2mubwJBaLXobMt3A',
privKey: 'CAASpgkwggSiAgEAAoIBAQC2SKo/HMFZeBml1AF3XijzrxrfQXdJzjePBZAbdxqKR1Mc6juRHXij6HXYPjlAk01BhF1S3Ll4Lwi0cAHhggf457sMg55UWyeGKeUv0ucgvCpBwlR5cQ020i0MgzjPWOLWq1rtvSbNcAi2ZEVn6+Q2EcHo3wUvWRtLeKz+DZSZfw2PEDC+DGPJPl7f8g7zl56YymmmzH9liZLNrzg/qidokUv5u1pdGrcpLuPNeTODk0cqKB+OUbuKj9GShYECCEjaybJDl9276oalL9ghBtSeEv20kugatTvYy590wFlJkkvyl+nPxIH0EEYMKK9XRWlu9XYnoSfboiwcv8M3SlsjAgMBAAECggEAZtju/bcKvKFPz0mkHiaJcpycy9STKphorpCT83srBVQi59CdFU6Mj+aL/xt0kCPMVigJw8P3/YCEJ9J+rS8BsoWE+xWUEsJvtXoT7vzPHaAtM3ci1HZd302Mz1+GgS8Epdx+7F5p80XAFLDUnELzOzKftvWGZmWfSeDnslwVONkL/1VAzwKy7Ce6hk4SxRE7l2NE2OklSHOzCGU1f78ZzVYKSnS5Ag9YrGjOAmTOXDbKNKN/qIorAQ1bovzGoCwx3iGIatQKFOxyVCyO1PsJYT7JO+kZbhBWRRE+L7l+ppPER9bdLFxs1t5CrKc078h+wuUr05S1P1JjXk68pk3+kQKBgQDeK8AR11373Mzib6uzpjGzgNRMzdYNuExWjxyxAzz53NAR7zrPHvXvfIqjDScLJ4NcRO2TddhXAfZoOPVH5k4PJHKLBPKuXZpWlookCAyENY7+Pd55S8r+a+MusrMagYNljb5WbVTgN8cgdpim9lbbIFlpN6SZaVjLQL3J8TWH6wKBgQDSChzItkqWX11CNstJ9zJyUE20I7LrpyBJNgG1gtvz3ZMUQCn3PxxHtQzN9n1P0mSSYs+jBKPuoSyYLt1wwe10/lpgL4rkKWU3/m1Myt0tveJ9WcqHh6tzcAbb/fXpUFT/o4SWDimWkPkuCb+8j//2yiXk0a/T2f36zKMuZvujqQKBgC6B7BAQDG2H2B/ijofp12ejJU36nL98gAZyqOfpLJ+FeMz4TlBDQ+phIMhnHXA5UkdDapQ+zA3SrFk+6yGk9Vw4Hf46B+82SvOrSbmnMa+PYqKYIvUzR4gg34rL/7AhwnbEyD5hXq4dHwMNsIDq+l2elPjwm/U9V0gdAl2+r50HAoGALtsKqMvhv8HucAMBPrLikhXP/8um8mMKFMrzfqZ+otxfHzlhI0L08Bo3jQrb0Z7ByNY6M8epOmbCKADsbWcVre/AAY0ZkuSZK/CaOXNX/AhMKmKJh8qAOPRY02LIJRBCpfS4czEdnfUhYV/TYiFNnKRj57PPYZdTzUsxa/yVTmECgYBr7slQEjb5Onn5mZnGDh+72BxLNdgwBkhO0OCdpdISqk0F0Pxby22DFOKXZEpiyI9XYP1C8wPiJsShGm2yEwBPWXnrrZNWczaVuCbXHrZkWQogBDG3HGXNdU4MAWCyiYlyinIBpPpoAJZSzpGLmWbMWh28+RJS6AQX6KHrK1o2uw==',
pubKey: '080012a60230820122300d06092a864886f70d01010105000382010f003082010a0282010100b648aa3f1cc1597819a5d401775e28f3af1adf417749ce378f05901b771a8a47531cea3b911d78a3e875d83e3940934d41845d52dcb9782f08b47001e18207f8e7bb0c839e545b278629e52fd2e720bc2a41c25479710d36d22d0c8338cf58e2d6ab5aedbd26cd7008b6644567ebe43611c1e8df052f591b4b78acfe0d94997f0d8f1030be0c63c93e5edff20ef3979e98ca69a6cc7f658992cdaf383faa2768914bf9bb5a5d1ab7292ee3cd79338393472a281f8e51bb8a8fd1928581020848dac9b24397ddbbea86a52fd82106d49e12fdb492e81ab53bd8cb9f74c05949924bf297e9cfc481f410460c28af5745696ef57627a127dba22c1cbfc3374a5b230203010001'
}
expect(out.id).to.equal(expected.id)
expect(out.privKey).to.equal(expected.privKey)
expect(out.pubKey).to.equal(expected.pubKey)
done()
})
it('toBytes', (done) => {
const id = PeerId.createFromHexString(testIdHex)
expect(id.toBytes().toString('hex')).to.equal(testIdBytes.toString('hex'))
done()
})
})

View File

29552
vendor/forge.bundle.js vendored Normal file

File diff suppressed because it is too large Load Diff