kdf
This commit is contained in:
parent
a2e471ae9e
commit
8743c68ce6
35
index.js
35
index.js
|
@ -1,20 +1,27 @@
|
|||
var privsec = module.exports;
|
||||
|
||||
privsec.address = require('./lib/address');
|
||||
privsec.base58 = require('./lib/base58');
|
||||
privsec.base58check = require('./lib/base58check');
|
||||
privsec.bip32 = require('./lib/bip32');
|
||||
privsec.bn = require('./lib/bn');
|
||||
privsec.constants = require('./lib/constants');
|
||||
privsec.ecdsa = require('./lib/ecdsa');
|
||||
privsec.hash = require('./lib/hash');
|
||||
privsec.key = require('./lib/key');
|
||||
privsec.point = require('./lib/point');
|
||||
privsec.privkey = require('./lib/privkey');
|
||||
privsec.pubkey = require('./lib/pubkey');
|
||||
privsec.random = require('./lib/random');
|
||||
privsec.signature = require('./lib/signature');
|
||||
//main bitcoin library
|
||||
privsec.Address = require('./lib/address');
|
||||
privsec.Base58 = require('./lib/base58');
|
||||
privsec.Base58Check = require('./lib/base58check');
|
||||
privsec.BIP32 = require('./lib/bip32');
|
||||
privsec.BN = require('./lib/bn');
|
||||
privsec.Constants = require('./lib/constants');
|
||||
privsec.ECDSA = require('./lib/ecdsa');
|
||||
privsec.Hash = require('./lib/hash');
|
||||
privsec.KDF = require('./lib/kdf');
|
||||
privsec.Key = require('./lib/key');
|
||||
privsec.Point = require('./lib/point');
|
||||
privsec.Privkey = require('./lib/privkey');
|
||||
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.bnjs = require('bn.js');
|
||||
privsec.deps.bs58 = require('bs58');
|
||||
|
|
|
@ -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;
|
|
@ -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');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
Loading…
Reference in New Issue