From f11ed4d20b3f18dd21f15d8454051bd7c88a918d Mon Sep 17 00:00:00 2001 From: "Ryan X. Charles" Date: Fri, 15 Aug 2014 15:09:28 -0400 Subject: [PATCH] bug: should mod bn addition when adding two private keys to get a new private key, you should mod the result with N so that it is always less than N. --- lib/expmt/stealth.js | 3 ++- test/test.stealth.js | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/expmt/stealth.js b/lib/expmt/stealth.js index 87d0431..20fe407 100644 --- a/lib/expmt/stealth.js +++ b/lib/expmt/stealth.js @@ -1,6 +1,7 @@ var Key = require('../key'); var Privkey = require('../privkey'); var Pubkey = require('../pubkey'); +var Point = require('../point'); var Hash = require('../hash'); var KDF = require('../kdf'); var base58check = require('../base58check'); @@ -76,7 +77,7 @@ Stealth.prototype.getReceivePubkeyAsSender = function(senderKey) { Stealth.prototype.getReceiveKey = function(senderPubkey) { var sharedKey = this.getSharedKeyAsReceiver(senderPubkey); - var privkey = Privkey(this.payloadKey.privkey.bn.add(sharedKey.privkey.bn)); + var privkey = Privkey(this.payloadKey.privkey.bn.add(sharedKey.privkey.bn).mod(Point.getN())); var key = Key(privkey); key.privkey2pubkey(); diff --git a/test/test.stealth.js b/test/test.stealth.js index 7ebbf7d..6bacacd 100644 --- a/test/test.stealth.js +++ b/test/test.stealth.js @@ -141,6 +141,11 @@ describe('Stealth', function() { key.pubkey.toString().should.equal(pubkey.toString()); }); + it('should return private key with length 32 or less', function() { + var key = stealth.getReceiveKey(senderKey.pubkey); + key.privkey.bn.toBuffer().length.should.be.below(33); + }); + }); describe('#isForMe', function() {