4 changed files with 158 additions and 9 deletions
@ -0,0 +1,46 @@ |
|||
var Privkey = require('./privkey'); |
|||
var Pubkey = require('./pubkey'); |
|||
var Random = require('./random'); |
|||
var bn = require('./bn'); |
|||
var point = require('./point'); |
|||
|
|||
function Key(priv, pub) { |
|||
this.priv = priv; |
|||
this.pub = pub; |
|||
}; |
|||
|
|||
Key.prototype.fromRandom = function() { |
|||
do { |
|||
var privbuf = Random.getRandomBuffer(32); |
|||
this.priv = new Privkey(bn(privbuf)); |
|||
var condition = this.priv.n.lt(point.getN()); |
|||
} while (!condition); |
|||
this.priv2pub(); |
|||
}; |
|||
|
|||
Key.prototype.fromString = function(str) { |
|||
var obj = JSON.parse(str); |
|||
if (obj.priv) { |
|||
this.priv = new Privkey(); |
|||
this.priv.fromString(obj.priv); |
|||
} |
|||
if (obj.pub) { |
|||
this.pub = new Pubkey(); |
|||
this.pub.fromString(obj.pub); |
|||
} |
|||
}; |
|||
|
|||
Key.prototype.priv2pub = function() { |
|||
this.pub = new Pubkey(point.getG().mul(this.priv.n)); |
|||
}; |
|||
|
|||
Key.prototype.toString = function() { |
|||
var obj = {}; |
|||
if (this.priv) |
|||
obj.priv = this.priv.toString(); |
|||
if (this.pub) |
|||
obj.pub = this.pub.toString(); |
|||
return JSON.stringify(obj); |
|||
}; |
|||
|
|||
module.exports = Key; |
@ -0,0 +1,100 @@ |
|||
var should = require('chai').should(); |
|||
var bn = require('../lib/bn'); |
|||
var point = require('../lib/point'); |
|||
var privkey = require('../lib/privkey'); |
|||
var pubkey = require('../lib/pubkey'); |
|||
var Key = require('../lib/key'); |
|||
|
|||
describe('key', function() { |
|||
|
|||
it('should make a blank key', function() { |
|||
var key = new Key(); |
|||
should.exist(key); |
|||
}); |
|||
|
|||
it('should make a key with a priv and pub', function() { |
|||
var priv = new privkey(); |
|||
var pub = new pubkey(); |
|||
var key = new Key(priv, pub); |
|||
should.exist(key); |
|||
should.exist(key.priv); |
|||
should.exist(key.pub); |
|||
}); |
|||
|
|||
describe("#fromRandom", function() { |
|||
|
|||
it('should make a new priv and pub', function() { |
|||
var key = new Key(); |
|||
key.fromRandom(); |
|||
should.exist(key.priv); |
|||
should.exist(key.pub); |
|||
key.priv.n.gt(bn(0)).should.equal(true); |
|||
key.pub.p.getX().gt(bn(0)).should.equal(true); |
|||
key.pub.p.getY().gt(bn(0)).should.equal(true); |
|||
}); |
|||
|
|||
}); |
|||
|
|||
describe("#fromString()", function() { |
|||
|
|||
it('should recover a key creating with toString', function() { |
|||
var key = new Key(); |
|||
key.fromRandom(); |
|||
var priv = key.priv; |
|||
var pub = key.pub; |
|||
var str = key.toString(); |
|||
key.fromString(str); |
|||
should.exist(key.priv); |
|||
should.exist(key.pub); |
|||
key.priv.toString().should.equal(priv.toString()); |
|||
key.pub.toString().should.equal(pub.toString()); |
|||
}); |
|||
|
|||
it('should work with only privkey set', function() { |
|||
var key = new Key(); |
|||
key.fromRandom(); |
|||
key.pub = undefined; |
|||
var priv = key.priv; |
|||
var str = key.toString(); |
|||
key.fromString(str); |
|||
should.exist(key.priv); |
|||
key.priv.toString().should.equal(priv.toString()); |
|||
}); |
|||
|
|||
it('should work with only pubkey set', function() { |
|||
var key = new Key(); |
|||
key.fromRandom(); |
|||
key.priv = undefined; |
|||
var pub = key.pub; |
|||
var str = key.toString(); |
|||
key.fromString(str); |
|||
should.exist(key.pub); |
|||
key.pub.toString().should.equal(pub.toString()); |
|||
}); |
|||
|
|||
}); |
|||
|
|||
describe("#priv2pub", function() { |
|||
|
|||
it('should convert this known privkey to known pubkey', function() { |
|||
var privhex = '906977a061af29276e40bf377042ffbde414e496ae2260bbf1fa9d085637bfff'; |
|||
var pubhex = '02a1633cafcc01ebfb6d78e39f687a1f0995c62fc95f51ead10a02ee0be551b5dc'; |
|||
var key = new Key(); |
|||
key.priv = new privkey(bn(new Buffer(privhex, 'hex'))); |
|||
key.priv2pub(); |
|||
key.pub.toString().should.equal(pubhex); |
|||
}); |
|||
|
|||
}); |
|||
|
|||
describe("#toString()", function() { |
|||
|
|||
it('should exist', function() { |
|||
var key = new Key(); |
|||
key.fromRandom(); |
|||
should.exist(key.toString()); |
|||
}); |
|||
|
|||
}); |
|||
|
|||
}); |
Loading…
Reference in new issue