diff --git a/src/index.js b/src/index.js index 7f9683d..b855374 100644 --- a/src/index.js +++ b/src/index.js @@ -12,8 +12,7 @@ const path = require('path') const isNode = !global.window // protobuf read from file -const messages = isNode ? protobuf(fs.readFileSync(path.resolve(__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 @@ -31,7 +30,6 @@ function Id (id, privKey, pubKey) { self.id = id // multihash - sha256 - buffer // pretty print - self.toPrint = function () { return { id: self.toB58String(), @@ -41,7 +39,6 @@ function Id (id, privKey, pubKey) { } // encode/decode functions - self.toHexString = function () { return self.id.toString('hex') } @@ -112,9 +109,13 @@ exports.create = function () { 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, protoPrivate64, protoPublic64) + return new Id(mhId, bufProtoPriv64, bufProtoPub64) } exports.createFromHexString = function (str) { @@ -129,12 +130,14 @@ exports.createFromB58String = function (str) { return new Id(new Buffer(base58.decode(str))) } +// Public Key input will be a buffer exports.createFromPubKey = function (pubKey) { const buf = new Buffer(pubKey, 'base64') const mhId = multihashing(buf, 'sha2-256') return new Id(mhId, null, pubKey) } +// 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') @@ -159,6 +162,9 @@ exports.createFromPrivKey = function (privKey) { // 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, protoPublic64) + return new Id(mhId, privKey, bufProtoPub64) } diff --git a/tests/test.js b/tests/test.js index 72922b7..73f4147 100644 --- a/tests/test.js +++ b/tests/test.js @@ -55,5 +55,12 @@ describe('id', function (done) { 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() + }) })