This commit is contained in:
Ryan X. Charles 2014-08-13 17:31:28 -04:00
parent a2e471ae9e
commit 8743c68ce6
3 changed files with 93 additions and 14 deletions

View File

@ -1,20 +1,27 @@
var privsec = module.exports; var privsec = module.exports;
privsec.address = require('./lib/address'); //main bitcoin library
privsec.base58 = require('./lib/base58'); privsec.Address = require('./lib/address');
privsec.base58check = require('./lib/base58check'); privsec.Base58 = require('./lib/base58');
privsec.bip32 = require('./lib/bip32'); privsec.Base58Check = require('./lib/base58check');
privsec.bn = require('./lib/bn'); privsec.BIP32 = require('./lib/bip32');
privsec.constants = require('./lib/constants'); privsec.BN = require('./lib/bn');
privsec.ecdsa = require('./lib/ecdsa'); privsec.Constants = require('./lib/constants');
privsec.hash = require('./lib/hash'); privsec.ECDSA = require('./lib/ecdsa');
privsec.key = require('./lib/key'); privsec.Hash = require('./lib/hash');
privsec.point = require('./lib/point'); privsec.KDF = require('./lib/kdf');
privsec.privkey = require('./lib/privkey'); privsec.Key = require('./lib/key');
privsec.pubkey = require('./lib/pubkey'); privsec.Point = require('./lib/point');
privsec.random = require('./lib/random'); privsec.Privkey = require('./lib/privkey');
privsec.signature = require('./lib/signature'); privsec.Pubkey = require('./lib/pubkey');
privsec.Random = require('./lib/random');
privsec.Signature = require('./lib/signature');
//experimental
//privsec.expmt = {};
//privsec.expmt.Stealth = require('./lib/expmt/stealth');
//dependencies
privsec.deps = {}; privsec.deps = {};
privsec.deps.bnjs = require('bn.js'); privsec.deps.bnjs = require('bn.js');
privsec.deps.bs58 = require('bs58'); privsec.deps.bs58 = require('bs58');

33
lib/kdf.js Normal file
View File

@ -0,0 +1,33 @@
var Bn = require('./bn');
var Privkey = require('./privkey');
var Point = require('./point');
var Pubkey = require('./pubkey');
var Key = require('./key');
var Hash = require('./hash');
function KDF() {
};
KDF.buf2key = function(buf) {
return KDF.sha256hmac2key(buf);
};
KDF.sha256hmac2key = function(buf) {
var privkey = KDF.sha256hmac2privkey(buf);
var key = new Key(privkey);
key.privkey2pubkey();
return key;
};
KDF.sha256hmac2privkey = function(buf) {
var bn;
var concat = new Buffer([]);
do {
var hash = Hash.sha256hmac(buf, concat);
var bn = Bn.fromBuffer(hash);
concat = Buffer.concat([concat, new Buffer(0)]);
} while(!bn.lt(Point.getN()));
return new Privkey(bn);
};
module.exports = KDF;

39
test/test.kdf.js Normal file
View File

@ -0,0 +1,39 @@
var should = require('chai').should();
var KDF = require('../lib/kdf');
var Hash = require('../lib/hash');
describe('kdf', function() {
describe('#buf2key', function() {
it('should compute these known values', function() {
var buf = Hash.sha256(new Buffer('test'));
var key = KDF.buf2key(buf);
key.privkey.toString().should.equal('KxxVszVMFLGzmxpxR7sMSaWDmqMKLVhKebX5vZbGHyuR8spreQ7V');
key.pubkey.toString().should.equal('03774f761ae89a0d2fda0d532bad62286ae8fcda9bc38c060036296085592a97c1');
});
});
describe('#sha256hmac2key', function() {
it('should compute these known values', function() {
var buf = Hash.sha256(new Buffer('test'));
var key = KDF.sha256hmac2key(buf);
key.privkey.toString().should.equal('KxxVszVMFLGzmxpxR7sMSaWDmqMKLVhKebX5vZbGHyuR8spreQ7V');
key.pubkey.toString().should.equal('03774f761ae89a0d2fda0d532bad62286ae8fcda9bc38c060036296085592a97c1');
});
});
describe('#sha256hmac2privkey', function() {
it('should compute this known privkey', function() {
var buf = Hash.sha256(new Buffer('test'));
var privkey = KDF.sha256hmac2privkey(buf);
privkey.toString().should.equal('KxxVszVMFLGzmxpxR7sMSaWDmqMKLVhKebX5vZbGHyuR8spreQ7V');
});
});
});