mirror of
https://github.com/fluencelabs/js-peer-id
synced 2025-04-25 14:12:29 +00:00
Merge pull request #60 from libp2p/feat/update-keys
feat: set privKey pubKey
This commit is contained in:
commit
733b40bb47
@ -40,7 +40,7 @@
|
|||||||
"pre-commit": "^1.2.2"
|
"pre-commit": "^1.2.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"async": "^2.2.0",
|
"async": "^2.3.0",
|
||||||
"libp2p-crypto": "~0.8.7",
|
"libp2p-crypto": "~0.8.7",
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"multihashes": "~0.4.5"
|
"multihashes": "~0.4.5"
|
||||||
|
43
src/index.js
43
src/index.js
@ -35,26 +35,32 @@ class PeerId {
|
|||||||
return this._privKey
|
return this._privKey
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set privKey (privKey) {
|
||||||
|
this._privKey = privKey
|
||||||
|
}
|
||||||
|
|
||||||
get pubKey () {
|
get pubKey () {
|
||||||
if (this._pubKey) {
|
if (this._pubKey) {
|
||||||
return this._pubKey
|
return this._pubKey
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.privKey) {
|
if (this._privKey) {
|
||||||
return this.privKey.public
|
return this._privKey.public
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the protobuf version of the public key,
|
set pubKey (pubKey) {
|
||||||
// matching go ipfs formatting
|
this._pubKey = pubKey
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the protobuf version of the public key, matching go ipfs formatting
|
||||||
marshalPubKey () {
|
marshalPubKey () {
|
||||||
if (this.pubKey) {
|
if (this.pubKey) {
|
||||||
return crypto.marshalPublicKey(this.pubKey)
|
return crypto.marshalPublicKey(this.pubKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the protobuf version of the private key,
|
// Return the protobuf version of the private key, matching go ipfs formatting
|
||||||
// matching go ipfs formatting
|
|
||||||
marshalPrivKey () {
|
marshalPrivKey () {
|
||||||
if (this.privKey) {
|
if (this.privKey) {
|
||||||
return crypto.marshalPrivateKey(this.privKey)
|
return crypto.marshalPrivateKey(this.privKey)
|
||||||
@ -98,6 +104,22 @@ class PeerId {
|
|||||||
throw new Error('not valid Id')
|
throw new Error('not valid Id')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if this PeerId instance is valid (privKey -> pubKey -> Id)
|
||||||
|
*/
|
||||||
|
isValid (callback) {
|
||||||
|
// TODO Needs better checking
|
||||||
|
if (this.privKey &&
|
||||||
|
this.privKey.public &&
|
||||||
|
this.privKey.public.bytes &&
|
||||||
|
Buffer.isBuffer(this.pubKey.bytes) &&
|
||||||
|
this.privKey.public.bytes.equals(this.pubKey.bytes)) {
|
||||||
|
callback()
|
||||||
|
} else {
|
||||||
|
callback(new Error('Keys not match'))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exports = module.exports = PeerId
|
exports = module.exports = PeerId
|
||||||
@ -139,16 +161,17 @@ exports.createFromB58String = function (str) {
|
|||||||
|
|
||||||
// Public Key input will be a buffer
|
// Public Key input will be a buffer
|
||||||
exports.createFromPubKey = function (key, callback) {
|
exports.createFromPubKey = function (key, callback) {
|
||||||
|
if (typeof callback !== 'function') {
|
||||||
|
throw new Error('callback is required')
|
||||||
|
}
|
||||||
|
|
||||||
let buf = key
|
let buf = key
|
||||||
if (typeof buf === 'string') {
|
if (typeof buf === 'string') {
|
||||||
buf = new Buffer(key, 'base64')
|
buf = new Buffer(key, 'base64')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof callback !== 'function') {
|
|
||||||
throw new Error('callback is required')
|
|
||||||
}
|
|
||||||
|
|
||||||
const pubKey = crypto.unmarshalPublicKey(buf)
|
const pubKey = crypto.unmarshalPublicKey(buf)
|
||||||
|
|
||||||
pubKey.hash((err, digest) => {
|
pubKey.hash((err, digest) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err)
|
return callback(err)
|
||||||
|
@ -197,17 +197,56 @@ describe('PeerId', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('set privKey (valid)', (done) => {
|
||||||
|
PeerId.create((err, peerId) => {
|
||||||
|
expect(err).to.not.exist()
|
||||||
|
peerId.privKey = peerId._privKey
|
||||||
|
peerId.isValid(done)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('set pubKey (valid)', (done) => {
|
||||||
|
PeerId.create((err, peerId) => {
|
||||||
|
expect(err).to.not.exist()
|
||||||
|
peerId.pubKey = peerId._pubKey
|
||||||
|
peerId.isValid(done)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('set privKey (invalid)', (done) => {
|
||||||
|
PeerId.create((err, peerId) => {
|
||||||
|
expect(err).to.not.exist()
|
||||||
|
peerId.privKey = new Buffer('bufff')
|
||||||
|
peerId.isValid((err) => {
|
||||||
|
expect(err).to.exist()
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('set pubKey (invalid)', (done) => {
|
||||||
|
PeerId.create((err, peerId) => {
|
||||||
|
expect(err).to.not.exist()
|
||||||
|
peerId.pubKey = new Buffer('buffff')
|
||||||
|
peerId.isValid((err) => {
|
||||||
|
expect(err).to.exist()
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe('throws on inconsistent data', () => {
|
describe('throws on inconsistent data', () => {
|
||||||
let k1, k2, k3
|
let k1
|
||||||
|
let k2
|
||||||
|
let k3
|
||||||
|
|
||||||
before((done) => {
|
before((done) => {
|
||||||
parallel([
|
parallel([
|
||||||
(cb) => crypto.generateKeyPair('RSA', 1024, cb),
|
(cb) => crypto.generateKeyPair('RSA', 1024, cb),
|
||||||
(cb) => crypto.generateKeyPair('RSA', 1024, cb),
|
(cb) => crypto.generateKeyPair('RSA', 1024, cb),
|
||||||
(cb) => crypto.generateKeyPair('RSA', 1024, cb)
|
(cb) => crypto.generateKeyPair('RSA', 1024, cb)
|
||||||
], (err, keys) => {
|
], (err, keys) => {
|
||||||
if (err) {
|
expect(err).to.not.exist()
|
||||||
return done(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
k1 = keys[0]
|
k1 = keys[0]
|
||||||
k2 = keys[1]
|
k2 = keys[1]
|
||||||
@ -219,11 +258,8 @@ describe('PeerId', () => {
|
|||||||
it('missmatch private - public key', (done) => {
|
it('missmatch private - public key', (done) => {
|
||||||
k1.public.hash((err, digest) => {
|
k1.public.hash((err, digest) => {
|
||||||
expect(err).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
expect(
|
expect(() => new PeerId(digest, k1, k2.public))
|
||||||
() => new PeerId(digest, k1, k2.public)
|
.to.throw(/inconsistent arguments/)
|
||||||
).to.throw(
|
|
||||||
/inconsistent arguments/
|
|
||||||
)
|
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -231,11 +267,8 @@ describe('PeerId', () => {
|
|||||||
it('missmatch id - private - public key', (done) => {
|
it('missmatch id - private - public key', (done) => {
|
||||||
k1.public.hash((err, digest) => {
|
k1.public.hash((err, digest) => {
|
||||||
expect(err).to.not.exist()
|
expect(err).to.not.exist()
|
||||||
expect(
|
expect(() => new PeerId(digest, k1, k3.public))
|
||||||
() => new PeerId(digest, k1, k3.public)
|
.to.throw(/inconsistent arguments/)
|
||||||
).to.throw(
|
|
||||||
/inconsistent arguments/
|
|
||||||
)
|
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
})
|
})
|
Loading…
x
Reference in New Issue
Block a user