kdf
This commit is contained in:
parent
a2e471ae9e
commit
8743c68ce6
35
index.js
35
index.js
|
@ -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');
|
||||||
|
|
|
@ -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