diff --git a/README.md b/README.md index ad972ef..e2643e1 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,8 @@ 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)) +console.log('priv key ', bs58.encode(id.privKey.bytes)) +console.log('pub key ', bs58.encode(id.pubKey.bytes)) ``` ``` @@ -51,7 +51,7 @@ pub key 2BeBZVKJ9RQs4i4LbGv4ReEeuBA5dck2Gje3wt67e44XuyyPq5jE ## Node.js -```JavaScript +```js var PeerId = require('peer-id') ``` @@ -62,7 +62,7 @@ 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 +```js var PeerId = require('peer-id') ``` @@ -85,50 +85,51 @@ const PeerId = require('peer-id') ## Create -### PeerId.create() +### `new PeerId(id[, privKey, pubKey])` -Generates a new Peer ID, complete with public/private keypair. A Peer ID has the -following properties: +- `id: Buffer` - The multihash of the publick key as `Buffer` +- `privKey: RsaPrivateKey` - The private key +- `pubKey: RsaPublicKey` - The public key -- `pubKey` - Buffer containing the public key bytes -- `privKey` - Buffer containing the private key bytes -- `id` - Buffer containing the multihash bytes +The key format is detailed in [libp2p-crypto](https://github.com/ipfs/js-libp2p-crypto). + +### `create([opts])` + +Generates a new Peer ID, complete with public/private keypair. + +- `opts: Object`: Default: `{bits: 2048}` ## Import -### PeerId.createFromHexString(str) +### `createFromHexString(str)` Creates a Peer ID from hex string representing the key's multihash. -### PeerId.createFromBytes(buf) +### `createFromBytes(buf)` Creates a Peer ID from a buffer representing the key's multihash. -### PeerId.createFromB58String(str) +### `createFromB58String(str)` Creates a Peer ID from a Base58 string representing the key's multihash. -### PeerId.createFromPubKey(pubKey) +### `createFromPubKey(pubKey)` Creates a Peer ID from a buffer containing a public key. -### PeerId.createFromPrivKey(privKey) +### `createFromPrivKey(privKey)` Creates a Peer ID from a buffer containing a private key. +### `createFromJSON(obj)` + +- `obj.id: String` - The multihash encoded in `base58` +- `obj.pubKey: String` - The public key in protobuf format, encoded in 'base64' +- `obj.privKey: String` - The private key in protobuf format, encoded in 'base 64' + + ## Export -### id.toPrint() - -Returns an object with the ID's properties in hex format: -```js -{ - id: 'QmckZzdVd72h9QUFuJJpQqhsZqGLwjhh81qSvZ9BhB2FQi', - privKey: '080012a609308204a20201000282010100a608889914da08959d3a3db0734cee812c96...', - pubKey: '080012a60230820122300d06092a864886f70d01010105000382010f003082010a0282010...' -} -``` - -### id.toHexString() +### `toHexString()` Returns the Peer ID's `id` as a hex string. @@ -136,16 +137,15 @@ Returns the Peer ID's `id` as a hex string. 1220d6243998f2fc56343ad7ed0342ab7886a4eb18d736f1b67d44b37fcc81e0f39f ``` -### id.toBytes() +### `toBytes()` Returns the Peer ID's `id` as a buffer. - ``` ``` -### id.toB58String() +### `toB58String()` Returns the Peer ID's `id` as a base58 string. @@ -153,6 +153,20 @@ Returns the Peer ID's `id` as a base58 string. QmckZzdVd72h9QUFuJJpQqhsZqGLwjhh81qSvZ9BhB2FQi ``` +### `toJSON()` + +Returns an `obj` of the form + +- `obj.id: String` - The multihash encoded in `base58` +- `obj.pubKey: String` - The public key in protobuf format, encoded in 'base64' +- `obj.privKey: String` - The private key in protobuf format, encoded in 'base 64' + + +### `toPrint()` + +Alias for `.toJSON()`. + + # License MIT diff --git a/package.json b/package.json index dbebe5a..144ee5c 100644 --- a/package.json +++ b/package.json @@ -32,9 +32,9 @@ }, "homepage": "https://github.com/diasdavid/js-peer-id", "devDependencies": { - "aegir": "^3.0.4", + "aegir": "^3.0.5", "chai": "^3.5.0", - "pre-commit": "^1.1.2" + "pre-commit": "^1.1.3" }, "dependencies": { "libp2p-crypto": "^0.5.0", diff --git a/src/index.js b/src/index.js index 96d17b3..7c58b4a 100644 --- a/src/index.js +++ b/src/index.js @@ -10,24 +10,21 @@ const assert = require('assert') class PeerId { constructor (id, privKey, pubKey) { - if (Buffer.isBuffer(id)) { - this.id = id - } else { - throw new Error('invalid id provided') - } + assert(Buffer.isBuffer(id), 'invalid id provided') if (pubKey) { - assert(this.id.equals(pubKey.hash()), 'inconsistent arguments') + assert(id.equals(pubKey.hash()), 'inconsistent arguments') } if (privKey) { - assert(this.id.equals(privKey.public.hash()), 'inconsistent arguments') + assert(id.equals(privKey.public.hash()), 'inconsistent arguments') } if (privKey && pubKey) { assert(privKey.public.bytes.equals(pubKey.bytes), 'inconsistent arguments') } + this.id = id this.privKey = privKey this._pubKey = pubKey } @@ -42,12 +39,16 @@ class PeerId { } } + // Return the protobuf version of the public key, + // matching go ipfs formatting marshalPubKey () { if (this.pubKey) { return crypto.marshalPublicKey(this.pubKey) } } + // Return the protobuf version of the private key, + // matching go ipfs formatting marshalPrivKey () { if (this.privKey) { return crypto.marshalPrivateKey(this.privKey) @@ -56,18 +57,16 @@ class PeerId { // pretty print toPrint () { - return { - id: mh.toB58String(this.id), - privKey: toHexOpt(this.marshalPrivKey()), - pubKey: toHexOpt(this.marshalPubKey()) - } + return this.toJSON() } + // return the jsonified version of the key, matching the formatting + // of go-ipfs for its config file toJSON () { return { - id: mh.toHexString(this.id), - privKey: toHexOpt(this.marshalPrivKey()), - pubKey: toHexOpt(this.marshalPubKey()) + id: mh.toB58String(this.id), + privKey: toB64Opt(this.marshalPrivKey()), + pubKey: toB64Opt(this.marshalPubKey()) } } @@ -136,18 +135,18 @@ exports.createFromJSON = function (obj) { let pub if (obj.privKey) { - priv = crypto.unmarshalPrivateKey(new Buffer(obj.privKey, 'hex')) + priv = crypto.unmarshalPrivateKey(new Buffer(obj.privKey, 'base64')) } if (obj.pubKey) { - pub = crypto.unmarshalPublicKey(new Buffer(obj.pubKey, 'hex')) + pub = crypto.unmarshalPublicKey(new Buffer(obj.pubKey, 'base64')) } - return new PeerId(mh.fromHexString(obj.id), priv, pub) + return new PeerId(mh.fromB58String(obj.id), priv, pub) } -function toHexOpt (val) { +function toB64Opt (val) { if (val) { - return val.toString('hex') + return val.toString('base64') } } diff --git a/test/fixtures/go-private-key.js b/test/fixtures/go-private-key.js new file mode 100644 index 0000000..775423d --- /dev/null +++ b/test/fixtures/go-private-key.js @@ -0,0 +1,6 @@ +'use strict' + +module.exports = { + id: 'QmRLoXS3E73psYaUsma1VSbboTa2J8Z9kso1tpiGLk9WQ4', + privKey: 'CAASpwkwggSjAgEAAoIBAQDWBEbO8kc6a5kEks09CKPQargY3p0DCmCczoCT52/RYFqxvH9dI+s+u4ZAvF9aLWOBvFomL7jHZODPxKDrbiNCmyEbViNgZYK+PNbwh0V3ZGbB27X3q8yZtLvYA8dhcNkz/2SHBarSoC4QLA5MXUuSWtVaYMY3MzMnzBF57Jc9Ase7NvHOIUI90M7aN5izP7hxPXpZ+shiN+TyjM8mFxYONG7ZSsY3IxUhtrU5MRzFX+tp1o/gb/aa51mHf7AL3N02j5ABiYbCK97Rbwr03hsBcwgMxoDPJmP3WZ+D5yyPcOIIF1Vd7+4/f7FQJnIw3xr9/jvaFbPyDCVbBOhr9oyxAgMBAAECggEALlrgx2Q8v0+c5hux7p1XdgYXd/OHyKfPw0cLHH4NfylCm6q7X34vLvhJHO5wLMUV/3y/ffPqLu4Pr5DkVfoWExAsvJIMuY1jIzdkStbR2glaJHUlVc7VUxmNcj1nSxi5QwT3TjORC2v8bi5Mroeqnbmk6p15cW1akC0oP+NZ4rG48+WFHRqsBaBusdSOVfA+IiZUqSd1ILysJ1w7aVN3EC7jLjDG43i+P/2BcEHy8TVClGOknJL341bHe3UPdEpmeu6k6aHGlDI4blUMXahCIUh0IdZuj+Vi/TxQME9+3bKIOjQb8RCNm3U3j/uz5gs9SyTjBuYIib9Scj/jDbLh0QKBgQDfLr3go3Q/AR0jb12QjGALJz1lc9ZRX2RQJkqqmYkZwOlHHyl+YJgqOZiO80fUkN0sJ29CmKecXU4gXuHir913Fdceei1ScBSsvZpWtBLhEZXKrRJYq8U0atKUFQADDMGutyB/uGCNeNwR6VcJezHPICvHxQfmWlWHA5VIOEtRPQKBgQD1fID76SkIpF/EaJMnN2alXWWnzKhUBUPGpQtbpwgSfaCBiZ4vr3NQwKBntOOB5QwHmifNZMoqaFQLzC4B/uyTNUcQMQQ6arYav7WQXqXTmW6poTsjUSuSOPx1swsHlYX09SmUwWDfd94XF9UOU0KUfA2/c85ixzNlV5ejkFA4hQKBgEvP3uQN4hD82d8Nl2TgqkdfnvV1cdnWY4buWvK0kOPUqelk5n1tZoMBaZc1gLLuOpMjGiIvJNByyXUpheWxA7POEXLi4b5dIEjFZ0YIiVk21gEw5UiFoMl7d+ihcY2Xqbslrb507SdhZLAY6V3pITRQo06K2XIgQWlJiE4uATepAoGBALZ2vEiBnYZW5vfN4tKbUyhGq3B1pggNgbr8odyV4mIcDlk6OOGov0WeZ5ut0AyUesSLyFnaOIoc0ZuTP/8rxBwG1bMrO8FP39sx83pDX25P9PkQZixyALjGsp+pXOFeOhtAvo9azO5M4j638Bydtjc3neBX62dwOLtyx7tDYN0hAoGAVLmr3w7XMVHTfEuCSzKHyRrOaN2PAuSX31QAji1PwlwVKMylVrb8rRvBOpTicA/wXPX9Q5O/yjegqhqLT/LXAm9ziFzy5b9/9SzXPukKebXXbvc0FOmcsrcxtijlPyUzf9fKM1ShiwqqsgM9eNyZ9GWUJw2GFATCWW7pl7rtnWk=' +} diff --git a/test/fixtures/sample-id.js b/test/fixtures/sample-id.js new file mode 100644 index 0000000..490389d --- /dev/null +++ b/test/fixtures/sample-id.js @@ -0,0 +1,7 @@ +'use strict' + +module.exports = { + id: '122019318b6e5e0cf93a2314bf01269a2cc23cd3dcd452d742cdb9379d8646f6e4a9', + 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=' +} diff --git a/test/index.spec.js b/test/index.spec.js index 704d277..233a5ed 100644 --- a/test/index.spec.js +++ b/test/index.spec.js @@ -3,20 +3,16 @@ const expect = require('chai').expect const crypto = require('libp2p-crypto') +const mh = require('multihashes') 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 testId = require('./fixtures/sample-id') +const testIdHex = testId.id +const testIdBytes = mh.fromHexString(testId.id) +const testIdB58String = mh.toB58String(testIdBytes) -const testIdHex = '1220151ab1658d8294ab34b71d5582cfe20d06414212f440a69366f1bc31deb5c72d' - -const testIdBytes = new Buffer('1220151ab1658d8294ab34b71d5582cfe20d06414212f440a69366f1bc31deb5c72d', 'hex') - -const testIdB58String = 'QmQ2zigjQikYnyYUSXZydNXrDRhBut2mubwJBaLXobMt3A' +const goId = require('./fixtures/go-private-key') describe('PeerId', () => { it('create an id without \'new\'', () => { @@ -71,14 +67,10 @@ describe('PeerId', () => { it('Pretty printing', () => { const id = PeerId.createFromPrivKey(testId.privKey) const out = id.toPrint() - const expected = { - id: 'QmQ2zigjQikYnyYUSXZydNXrDRhBut2mubwJBaLXobMt3A', - privKey: '080012a609308204a20201000282010100b648aa3f1cc1597819a5d401775e28f3af1adf417749ce378f05901b771a8a47531cea3b911d78a3e875d83e3940934d41845d52dcb9782f08b47001e18207f8e7bb0c839e545b278629e52fd2e720bc2a41c25479710d36d22d0c8338cf58e2d6ab5aedbd26cd7008b6644567ebe43611c1e8df052f591b4b78acfe0d94997f0d8f1030be0c63c93e5edff20ef3979e98ca69a6cc7f658992cdaf383faa2768914bf9bb5a5d1ab7292ee3cd79338393472a281f8e51bb8a8fd1928581020848dac9b24397ddbbea86a52fd82106d49e12fdb492e81ab53bd8cb9f74c05949924bf297e9cfc481f410460c28af5745696ef57627a127dba22c1cbfc3374a5b2302030100010282010066d8eefdb70abca14fcf49a41e2689729c9ccbd4932a9868ae9093f37b2b055422e7d09d154e8c8fe68bff1b749023cc562809c3c3f7fd808427d27ead2f01b28584fb159412c26fb57a13eefccf1da02d337722d4765ddf4d8ccf5f86812f04a5dc7eec5e69f345c014b0d49c42f33b329fb6f58666659f49e0e7b25c1538d90bff5540cf02b2ec27ba864e12c5113b976344d8e9254873b30865357fbf19cd560a4a74b9020f58ac68ce0264ce5c36ca34a37fa88a2b010d5ba2fcc6a02c31de21886ad40a14ec72542c8ed4fb09613ec93be9196e105645113e2fb97ea693c447d6dd2c5c6cd6de42aca734efc87ec2e52bd394b53f52635e4ebca64dfe9102818100de2bc011d75dfbdccce26fabb3a631b380d44ccdd60db84c568f1cb1033cf9dcd011ef3acf1ef5ef7c8aa30d270b27835c44ed9375d85701f66838f547e64e0f24728b04f2ae5d9a56968a24080c84358efe3dde794bcafe6be32eb2b31a8183658dbe566d54e037c7207698a6f656db20596937a4996958cb40bdc9f13587eb02818100d20a1cc8b64a965f5d4236cb49f73272504db423b2eba720493601b582dbf3dd93144029f73f1c47b50ccdf67d4fd2649262cfa304a3eea12c982edd70c1ed74fe5a602f8ae4296537fe6d4ccadd2dbde27d59ca8787ab737006dbfdf5e95054ffa384960e299690f92e09bfbc8ffff6ca25e4d1afd3d9fdfacca32e66fba3a90281802e81ec10100c6d87d81fe28e87e9d767a3254dfa9cbf7c800672a8e7e92c9f8578ccf84e504343ea6120c8671d70395247436a943ecc0dd2ac593eeb21a4f55c381dfe3a07ef364af3ab49b9a731af8f62a29822f533478820df8acbffb021c276c4c83e615eae1d1f030db080eafa5d9e94f8f09bf53d57481d025dbeaf9d070281802edb0aa8cbe1bfc1ee7003013eb2e29215cfffcba6f2630a14caf37ea67ea2dc5f1f39612342f4f01a378d0adbd19ec1c8d63a33c7a93a66c22800ec6d6715adefc0018d1992e4992bf09a397357fc084c2a628987ca8038f458d362c8251042a5f4b873311d9df521615fd362214d9ca463e7b3cf619753cd4b316bfc954e610281806beec9501236f93a79f99999c60e1fbbd81c4b35d83006484ed0e09da5d212aa4d05d0fc5bcb6d8314e297644a62c88f5760fd42f303e226c4a11a6db213004f5979ebad9356733695b826d71eb664590a200431b71c65cd754e0c0160b28989728a7201a4fa68009652ce918b9966cc5a1dbcf91252e80417e8a1eb2b5a36bb', - pubKey: '080012a60230820122300d06092a864886f70d01010105000382010f003082010a0282010100b648aa3f1cc1597819a5d401775e28f3af1adf417749ce378f05901b771a8a47531cea3b911d78a3e875d83e3940934d41845d52dcb9782f08b47001e18207f8e7bb0c839e545b278629e52fd2e720bc2a41c25479710d36d22d0c8338cf58e2d6ab5aedbd26cd7008b6644567ebe43611c1e8df052f591b4b78acfe0d94997f0d8f1030be0c63c93e5edff20ef3979e98ca69a6cc7f658992cdaf383faa2768914bf9bb5a5d1ab7292ee3cd79338393472a281f8e51bb8a8fd1928581020848dac9b24397ddbbea86a52fd82106d49e12fdb492e81ab53bd8cb9f74c05949924bf297e9cfc481f410460c28af5745696ef57627a127dba22c1cbfc3374a5b230203010001' - } - expect(out.id).to.equal(expected.id) - expect(out.privKey).to.equal(expected.privKey) - expect(out.pubKey).to.equal(expected.pubKey) + + expect(out.id).to.equal(testIdB58String) + expect(out.privKey).to.equal(testId.privKey) + expect(out.pubKey).to.equal(testId.pubKey) }) it('toBytes', () => { @@ -118,6 +110,16 @@ describe('PeerId', () => { expect(id.privKey).to.not.exist expect(id.pubKey).to.not.exist }) + + it('go interop', () => { + const id = PeerId.createFromJSON(goId) + + expect( + mh.toB58String(id.privKey.public.hash()) + ).to.be.eql( + goId.id + ) + }) }) describe('throws on inconsistent data', () => {