chiark / gitweb /
t/: Add a test suite.
[catacomb-python] / t / t-share.py
CommitLineData
553d59fe
MW
1### -*-python-*-
2###
3### Testing (some) passsword management functionality
4###
5### (c) 2019 Straylight/Edgeware
6###
7
8###----- Licensing notice ---------------------------------------------------
9###
10### This file is part of the Python interface to Catacomb.
11###
12### Catacomb/Python is free software: you can redistribute it and/or
13### modify it under the terms of the GNU General Public License as
14### published by the Free Software Foundation; either version 2 of the
15### License, or (at your option) any later version.
16###
17### Catacomb/Python is distributed in the hope that it will be useful, but
18### WITHOUT ANY WARRANTY; without even the implied warranty of
19### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20### General Public License for more details.
21###
22### You should have received a copy of the GNU General Public License
23### along with Catacomb/Python. If not, write to the Free Software
24### Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
25### USA.
26
27###--------------------------------------------------------------------------
28### Imported modules.
29
30import catacomb as C
31import unittest as U
32import testutils as T
33
34###--------------------------------------------------------------------------
35class TestShare (U.TestCase):
36
37 def check_share(me, splitcls, splitargs, joincls, joinargs, secret):
38
39 split = splitcls(3, secret, *splitargs)
40 me.assertEqual(split.threshold, 3)
41 shares = [split.get(i) for i in T.range(5)]
42
43 join = joincls(3, *joinargs)
44 me.assertEqual(join.threshold, 3)
45 me.assertFalse(join.addedp(1))
46 me.assertEqual(join.remain, 3)
47 join.add(1, shares[1])
48 me.assertTrue(join.addedp(1))
49 me.assertEqual(join.remain, 2)
50 me.assertRaises(ValueError, join.combine)
51 join.add(0, shares[0])
52 join.add(3, shares[3])
53 me.assertEqual(join.remain, 0)
54 me.assertEqual(join.combine(), secret)
55
56 def test_share(me):
57 rng = T.detrand("share")
58 p = C.MP(2)**127 - 1
59 me.check_share(C.ShareSplit, [p, rng], C.ShareJoin, [p], rng.range(p))
60
61 def test_gfshare(me):
62 rng = T.detrand("gfshare")
63 me.check_share(C.GFShareSplit, [rng], C.GFShareJoin, [123],
64 rng.block(123))
65
66###----- That's all, folks --------------------------------------------------
67
68if __name__ == "__main__": U.main()