Add PrivateKey, Key classes. Update test to enc/dec private key test vectors.
This commit is contained in:
parent
c2f40f40ce
commit
bf1e16b0da
|
@ -0,0 +1,23 @@
|
||||||
|
require('classtool');
|
||||||
|
|
||||||
|
function ClassSpec(b) {
|
||||||
|
var superclass = b.superclass || require('./util/VersionedData').class();
|
||||||
|
|
||||||
|
function PrivateKey() {
|
||||||
|
PrivateKey.super(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
PrivateKey.superclass = superclass;
|
||||||
|
superclass.applyEncodingsTo(PrivateKey);
|
||||||
|
|
||||||
|
PrivateKey.prototype.validate = function() {
|
||||||
|
this.doAsBinary(function() {
|
||||||
|
PrivateKey.super(this, 'validate', arguments);
|
||||||
|
if (this.data.length < 32 || this.data.length > 33)
|
||||||
|
throw new Error('invalid data length');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return PrivateKey;
|
||||||
|
};
|
||||||
|
module.defineClass(ClassSpec);
|
|
@ -2,12 +2,32 @@ var assert = require('assert');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
|
|
||||||
var Address = require('../Address').class();
|
var Address = require('../Address').class();
|
||||||
|
var PrivateKey = require('../PrivateKey').class();
|
||||||
var networks = require('../networks');
|
var networks = require('../networks');
|
||||||
|
var KeyModule = require('../Key');
|
||||||
|
|
||||||
suite('basic');
|
suite('basic');
|
||||||
|
|
||||||
function test_encode_priv(b58, payload, isTestnet)
|
function test_encode_priv(b58, payload, isTestnet, isCompressed)
|
||||||
{
|
{
|
||||||
|
var network = isTestnet ? networks.testnet : networks.livenet;
|
||||||
|
var version = network.keySecret;
|
||||||
|
|
||||||
|
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 KeyModule.Key();
|
||||||
|
key.private = buf;
|
||||||
|
key.compressed = isCompressed;
|
||||||
|
|
||||||
|
var privkey = new PrivateKey(version, buf);
|
||||||
|
assert.equal(privkey.toString(), b58);
|
||||||
}
|
}
|
||||||
|
|
||||||
function test_encode_pub(b58, payload, isTestnet, addrType)
|
function test_encode_pub(b58, payload, isTestnet, addrType)
|
||||||
|
@ -20,8 +40,23 @@ function test_encode_pub(b58, payload, isTestnet, addrType)
|
||||||
assert.equal(addr.toString(), b58);
|
assert.equal(addr.toString(), b58);
|
||||||
}
|
}
|
||||||
|
|
||||||
function test_decode_priv(b58, payload, isTestnet)
|
function test_decode_priv(b58, payload, isTestnet, isCompressed)
|
||||||
{
|
{
|
||||||
|
var network = isTestnet ? networks.testnet : networks.livenet;
|
||||||
|
var version = network.keySecret;
|
||||||
|
|
||||||
|
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);
|
||||||
|
assert.equal(version, privkey.version());
|
||||||
|
assert.equal(buf.toString(), privkey.payload().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
function test_decode_pub(b58, payload, isTestnet, addrType)
|
function test_decode_pub(b58, payload, isTestnet, addrType)
|
||||||
|
@ -45,8 +80,9 @@ function is_valid(datum)
|
||||||
var isTestnet = obj['isTestnet'];
|
var isTestnet = obj['isTestnet'];
|
||||||
|
|
||||||
if (isPrivkey) {
|
if (isPrivkey) {
|
||||||
test_encode_priv(b58, payload, isTestnet);
|
var isCompressed = obj['isCompressed'];
|
||||||
test_decode_priv(b58, payload, isTestnet);
|
test_encode_priv(b58, payload, isTestnet, isCompressed);
|
||||||
|
test_decode_priv(b58, payload, isTestnet, isCompressed);
|
||||||
} else {
|
} else {
|
||||||
var addrType = obj['addrType'];
|
var addrType = obj['addrType'];
|
||||||
test_encode_pub(b58, payload, isTestnet, addrType);
|
test_encode_pub(b58, payload, isTestnet, addrType);
|
||||||
|
|
Loading…
Reference in New Issue