bitcore/test/test.basic.js

128 lines
3.3 KiB
JavaScript
Raw Normal View History

2014-02-05 12:00:08 -08:00
'use strict';
var chai = chai || require('chai');
var bitcore = bitcore || require('../bitcore');
2014-03-10 09:44:22 -07:00
var testdata = testdata || require('./testdata');
2014-02-21 11:48:27 -08:00
var should = chai.should();
var Address = bitcore.Address;
var PrivateKey = bitcore.PrivateKey;
2014-02-21 11:48:27 -08:00
var networks = bitcore.networks;
var Key = bitcore.Key;
2014-02-24 06:59:43 -08:00
2014-02-21 11:48:27 -08:00
function test_encode_priv(b58, payload, isTestnet, isCompressed) {
var network = isTestnet ? networks.testnet : networks.livenet;
2014-04-07 14:30:49 -07:00
var version = network.privKeyVersion;
var buf_pl = new Buffer(payload, 'hex');
var buf;
if (isCompressed) {
buf = new Buffer(buf_pl.length + 1);
buf_pl.copy(buf);
buf[buf_pl.length] = 1;
} else
buf = buf_pl;
var key = new Key();
key.private = buf;
key.compressed = isCompressed;
var privkey = new PrivateKey(version, buf);
2014-02-21 11:48:27 -08:00
privkey.toString().should.equal(b58);
}
2014-02-21 11:48:27 -08:00
function test_encode_pub(b58, payload, isTestnet, addrType) {
var isScript = (addrType === 'script');
var network = isTestnet ? networks.testnet : networks.livenet;
2014-04-07 14:30:49 -07:00
var version = isScript ? network.P2SHVersion : network.addressVersion;
var buf = new Buffer(payload, 'hex');
var addr = new Address(version, buf);
2014-02-21 11:48:27 -08:00
addr.toString().should.equal(b58);
}
2014-02-21 11:48:27 -08:00
function test_decode_priv(b58, payload, isTestnet, isCompressed) {
var network = isTestnet ? networks.testnet : networks.livenet;
2014-04-07 14:30:49 -07:00
var version = network.privKeyVersion;
var buf_pl = new Buffer(payload, 'hex');
var buf;
if (isCompressed) {
buf = new Buffer(buf_pl.length + 1);
buf_pl.copy(buf);
buf[buf_pl.length] = 1;
} else
buf = buf_pl;
var privkey = new PrivateKey(b58);
2014-02-21 11:48:27 -08:00
version.should.equal(privkey.version());
buf_pl.toString().should.equal(privkey.payload().toString());
}
2014-02-21 11:48:27 -08:00
function test_decode_pub(b58, payload, isTestnet, addrType) {
var isScript = (addrType === 'script');
var network = isTestnet ? networks.testnet : networks.livenet;
2014-04-07 14:30:49 -07:00
var version = isScript ? network.P2SHVersion : network.addressVersion;
var buf = new Buffer(payload, 'hex');
var addr = new Address(b58);
2014-02-21 11:48:27 -08:00
version.should.equal(addr.version());
buf.toString().should.equal(addr.payload().toString());
}
2014-02-21 11:48:27 -08:00
function is_valid(datum) {
var b58 = datum[0];
var payload = datum[1];
var obj = datum[2];
2014-02-21 11:48:27 -08:00
var isPrivkey = obj.isPrivkey;
var isTestnet = obj.isTestnet;
if (isPrivkey) {
2014-02-21 11:48:27 -08:00
var isCompressed = obj.isCompressed;
test_encode_priv(b58, payload, isTestnet, isCompressed);
test_decode_priv(b58, payload, isTestnet, isCompressed);
} else {
2014-02-21 11:48:27 -08:00
var addrType = obj.addrType;
test_encode_pub(b58, payload, isTestnet, addrType);
test_decode_pub(b58, payload, isTestnet, addrType);
}
}
2014-02-21 11:48:27 -08:00
function is_invalid(datum) {
if (datum.length < 1)
2014-02-21 11:48:27 -08:00
throw new Error('Bad test');
// ignore succeeding elements, as comments
var b58 = datum[0];
var privkey = new PrivateKey(b58);
var addr = new Address(b58);
var valid = true;
try {
privkey.validate();
addr.validate();
2014-02-21 11:48:27 -08:00
} catch (e) {
valid = false;
}
2014-02-21 11:48:27 -08:00
valid.should.equal(false);
}
2014-02-21 11:48:27 -08:00
describe('Valid base58 keys', function() {
2014-03-10 09:44:22 -07:00
testdata.dataValid.forEach(function(datum) {
2014-02-21 11:48:27 -08:00
it('valid ' + datum[0], function() {
is_valid(datum);
});
2013-12-18 16:02:54 -08:00
});
});
2014-02-21 11:48:27 -08:00
describe('Invalid base58 keys', function() {
2014-03-10 09:44:22 -07:00
testdata.dataInvalid.forEach(function(datum) {
2014-02-21 11:48:27 -08:00
it('invalid ' + datum, function() {
is_invalid(datum);
});
2013-12-18 16:02:54 -08:00
});
});