"Keypair" is a more explanatory name, and also should be less confused with other kinds of keys (particularly "cipher keys", which are the keys used in symmetric block ciphers, especially AES).
152 lines
4.7 KiB
JavaScript
152 lines
4.7 KiB
JavaScript
var should = require('chai').should();
|
|
var bn = require('../lib/bn');
|
|
var point = require('../lib/point');
|
|
var Address = require('../lib/address');
|
|
var Privkey = require('../lib/privkey');
|
|
var Pubkey = require('../lib/pubkey');
|
|
var Keypair = require('../lib/keypair');
|
|
|
|
describe('Keypair', function() {
|
|
|
|
it('should make a blank key', function() {
|
|
var key = new Keypair();
|
|
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 Keypair({privkey: priv, pubkey: pub});
|
|
should.exist(key);
|
|
should.exist(key.privkey);
|
|
should.exist(key.pubkey);
|
|
});
|
|
|
|
describe("#set", function() {
|
|
|
|
it('should make a new priv and pub', function() {
|
|
should.exist(Keypair().set({privkey: Privkey()}).privkey);
|
|
});
|
|
|
|
});
|
|
|
|
describe("#fromPrivkey", function() {
|
|
|
|
it('should make a new key from a privkey', function() {
|
|
should.exist(Keypair().fromPrivkey(Privkey().fromRandom()).pubkey);
|
|
});
|
|
|
|
});
|
|
|
|
describe("#fromRandom", function() {
|
|
|
|
it('should make a new priv and pub, should be compressed, mainnet', function() {
|
|
var key = new Keypair();
|
|
key.fromRandom();
|
|
should.exist(key.privkey);
|
|
should.exist(key.pubkey);
|
|
key.privkey.bn.gt(bn(0)).should.equal(true);
|
|
key.pubkey.point.getX().gt(bn(0)).should.equal(true);
|
|
key.pubkey.point.getY().gt(bn(0)).should.equal(true);
|
|
key.privkey.compressed.should.equal(true);
|
|
key.privkey.networkstr.should.equal('mainnet');
|
|
key.pubkey.compressed.should.equal(true);
|
|
});
|
|
|
|
});
|
|
|
|
describe("#fromString()", function() {
|
|
|
|
it('should recover a key creating with toString', function() {
|
|
var key = new Keypair();
|
|
key.fromRandom();
|
|
var priv = key.privkey;
|
|
var pub = key.pubkey;
|
|
var str = key.toString();
|
|
key.fromString(str);
|
|
should.exist(key.privkey);
|
|
should.exist(key.pubkey);
|
|
key.privkey.toString().should.equal(priv.toString());
|
|
key.pubkey.toString().should.equal(pub.toString());
|
|
});
|
|
|
|
it('should work with only Privkey set', function() {
|
|
var key = new Keypair();
|
|
key.fromRandom();
|
|
key.pubkey = undefined;
|
|
var priv = key.privkey;
|
|
var str = key.toString();
|
|
key.fromString(str);
|
|
should.exist(key.privkey);
|
|
key.privkey.toString().should.equal(priv.toString());
|
|
});
|
|
|
|
it('should work with only Pubkey set', function() {
|
|
var key = new Keypair();
|
|
key.fromRandom();
|
|
key.privkey = undefined;
|
|
var pub = key.pubkey;
|
|
var str = key.toString();
|
|
key.fromString(str);
|
|
should.exist(key.pubkey);
|
|
key.pubkey.toString().should.equal(pub.toString());
|
|
});
|
|
|
|
});
|
|
|
|
describe('#getAddress', function() {
|
|
|
|
it('should return an address', function() {
|
|
var privhex = '906977a061af29276e40bf377042ffbde414e496ae2260bbf1fa9d085637bfff';
|
|
var pubhex = '02a1633cafcc01ebfb6d78e39f687a1f0995c62fc95f51ead10a02ee0be551b5dc';
|
|
var key = new Keypair();
|
|
key.privkey = new Privkey({bn: bn(new Buffer(privhex, 'hex'))});
|
|
key.privkey2pubkey();
|
|
key.getAddress().toString().should.equal((new Address()).fromPubkey(key.pubkey).toString());
|
|
});
|
|
|
|
});
|
|
|
|
describe("#privkey2pubkey", function() {
|
|
|
|
it('should convert this known Privkey to known Pubkey', function() {
|
|
var privhex = '906977a061af29276e40bf377042ffbde414e496ae2260bbf1fa9d085637bfff';
|
|
var pubhex = '02a1633cafcc01ebfb6d78e39f687a1f0995c62fc95f51ead10a02ee0be551b5dc';
|
|
var key = new Keypair();
|
|
key.privkey = new Privkey({bn: bn(new Buffer(privhex, 'hex'))});
|
|
key.privkey2pubkey();
|
|
key.pubkey.toString().should.equal(pubhex);
|
|
});
|
|
|
|
it('should convert this known Privkey to known Pubkey and preserve compressed=true', function() {
|
|
var privhex = '906977a061af29276e40bf377042ffbde414e496ae2260bbf1fa9d085637bfff';
|
|
var key = new Keypair();
|
|
key.privkey = new Privkey({bn: bn(new Buffer(privhex, 'hex'))});
|
|
key.privkey.compressed = true;
|
|
key.privkey2pubkey();
|
|
key.pubkey.compressed.should.equal(true);
|
|
});
|
|
|
|
it('should convert this known Privkey to known Pubkey and preserve compressed=true', function() {
|
|
var privhex = '906977a061af29276e40bf377042ffbde414e496ae2260bbf1fa9d085637bfff';
|
|
var key = new Keypair();
|
|
key.privkey = new Privkey({bn: bn(new Buffer(privhex, 'hex'))});
|
|
key.privkey.compressed = false;
|
|
key.privkey2pubkey();
|
|
key.pubkey.compressed.should.equal(false);
|
|
});
|
|
|
|
});
|
|
|
|
describe("#toString()", function() {
|
|
|
|
it('should exist', function() {
|
|
var key = new Keypair();
|
|
key.fromRandom();
|
|
should.exist(key.toString());
|
|
});
|
|
|
|
});
|
|
|
|
});
|