Skip to content

Commit 6955800

Browse files
committed
Fix keypair derivation #410
1 parent 1d27497 commit 6955800

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

src/keygen.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ int main(int argc, char** argv)
7676
unsigned char salt[crypto_pwhash_argon2i_SALTBYTES] = \
7777
{'w','i','f','i','b','r','o','a','d','c','a','s','t','k','e','y'};
7878

79-
unsigned char seed[crypto_box_SEEDBYTES];
79+
unsigned char seed[crypto_box_SEEDBYTES * 2];
8080
if (crypto_pwhash_argon2i
8181
(seed, sizeof(seed), password, strlen(password), salt,
8282
crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE, // Low CPU usage
@@ -87,7 +87,7 @@ int main(int argc, char** argv)
8787
return 1;
8888
}
8989
if (crypto_box_seed_keypair(drone_publickey, drone_secretkey, seed) !=0 ||
90-
crypto_box_seed_keypair(gs_publickey, gs_secretkey, seed) != 0)
90+
crypto_box_seed_keypair(gs_publickey, gs_secretkey, seed + crypto_box_SEEDBYTES) != 0)
9191
{
9292
fprintf(stderr, "Unable to derive keys\n");
9393
return 1;

wfb_ng/tests/test_txrx.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,13 @@ def _got_response(data):
147147

148148

149149
class TXRXTestCase(unittest.TestCase):
150+
def setup_keys(self, bindir):
151+
return call_and_check_rc(os.path.join(bindir, 'wfb_keygen'))
152+
150153
@defer.inlineCallbacks
151154
def setUp(self):
152155
bindir = os.path.join(os.path.dirname(__file__), '../..')
153-
yield call_and_check_rc(os.path.join(bindir, 'wfb_keygen'))
156+
yield self.setup_keys(bindir)
154157

155158
self.rxp = UDP_TXRX(('127.0.0.1', 10001))
156159
self.txp = UDP_TXRX(('127.0.0.1', 10003))
@@ -188,6 +191,10 @@ def tearDown(self):
188191
# Wait for tx/rx processes to die
189192
yield df_sleep(0.1)
190193

194+
def test_keys(self):
195+
keys = [open(k, 'rb').read() for k in ('gs.key', 'drone.key')]
196+
self.assertEqual(len(keys), 2)
197+
self.assertNotEqual(keys[0], keys[1])
191198

192199
@defer.inlineCallbacks
193200
def test_txrx(self):
@@ -363,15 +370,13 @@ def test_cmd_radio_invalid_args(self):
363370
self.assertEqual([b'm%d' % (i + 1,) for i in range(7)], self.rxp.rxq)
364371

365372

366-
class KeyDerivationTestCase(unittest.TestCase):
367-
@defer.inlineCallbacks
368-
def setUp(self):
369-
bindir = os.path.join(os.path.dirname(__file__), '../..')
370-
yield call_and_check_rc(os.path.join(bindir, 'wfb_keygen'), 'secret password')
371-
373+
class KeyDerivationTestCase(TXRXTestCase):
374+
def setup_keys(self, bindir):
375+
return call_and_check_rc(os.path.join(bindir, 'wfb_keygen'), 'secret password')
372376

373377
def test_keys(self):
374378
keys = [open(k, 'rb').read() for k in ('gs.key', 'drone.key')]
375379
self.assertEqual(len(keys), 2)
376-
self.assertEqual(keys[0], keys[1])
377-
self.assertEqual(hashlib.sha1(keys[0]).hexdigest(), '07d6f6998486d99db626b755e026f80ef17f6e77')
380+
self.assertNotEqual(keys[0], keys[1])
381+
self.assertEqual(hashlib.sha1(keys[0]).hexdigest(), 'cb8d52ca7602928f67daba6ba1f308f4cfc88aa7')
382+
self.assertEqual(hashlib.sha1(keys[1]).hexdigest(), '7a6ffb44cebc53b4538d20bdcaba8d70c9cf4095')

0 commit comments

Comments
 (0)